Name: series-workflow9vs2x Phase: Failed StartedAt: 2026-09-11 12:25:17 +0000 UTC FinishedAt: 2026-09-11 12:47:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vs2x[0] Phase: Succeeded StartedAt: 2026-09-11 12:25:17 +0000 UTC FinishedAt: 2026-09-11 12:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vs2x[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 12:25:17 +0000 UTC FinishedAt: 2026-09-11 12:47:20 +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+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvbGliL21tLywgdG9vbHMvbW0vLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBkb2N1bWVudGF0aW9uIChEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCksIE1BSU5UQUlORVJTLCBhbmQgS2NvbmZpZyBoZWxwIHRleHQgKG1tL0tjb25maWcpLiBObyBjb21waWxlZCBrZXJuZWwgQyBsb2dpYyBpcyBhZmZlY3RlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MTMwZDc1MjcxZDc0M2EyYjIxZGJjYjRhNmIzNjViYTA0Zjc0MGQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTI6NDY6NTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuaW5kZXggYzE2Y2ExNjNiNTVlMy4uZTBhY2VkYmQxZDQ4NiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuQEAgLTIyNiwxNSAmIzQzOzIyNiw2IEBAIHdpbGwgYmUgcGlubmVkIGxvbmd0ZXJtLCBhbmQgd2hvc2UgZGF0YSB3aWxsIGJlIGFjY2Vzc2VkLlxuIFxuIFVuaXQgdGVzdGluZ1xuID09PT09PT09PT09PVxuLVRoaXMgZmlsZTo6XG4tXG4tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbi1cbi1oYXMgdGhlIGZvbGxvd2luZyBuZXcgY2FsbHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBwaW4qKCkgd3JhcHBlciBmdW5jdGlvbnM6XG4tXG4tKiBQSU5fRkFTVF9CRU5DSE1BUksgKC4vZ3VwX3Rlc3QgLWEpXG4tKiBQSU5fQkFTSUNfVEVTVCAoLi9ndXBfdGVzdCAtYilcbi1cbiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkXG4gc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCB2aWEgdHdvIG5ldyAvcHJvYy92bXN0YXQgZW50cmllczogOjpcbiBcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAzNTI2MmFhM2U2N2VmLi5jNDdlNjU1YzQxMTEyIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTcxODcsOCAmIzQzOzE3MTg3LDkgQEAgVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbVxuIEY6XHRtbS9ndXAuY1xuIEY6XHRtbS9ndXBfdGVzdC5jXG4gRjpcdG1tL2d1cF90ZXN0LmhcbiYjNDM7RjpcdHRvb2xzL21tL2d1cF9iZW5jaC5jXG4mIzQzO0Y6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuLUY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKVxuIE06XHRBbmRyZXcgTW9ydG9uIFx1MDAzY2FrcG1AbGludXgtZm91bmRhdGlvbi5vcmdcdTAwM2VcbkBAIC0xNzI5NSw2ICYjNDM7MTcyOTYsNyBAQCBGOlx0bW0vbWVtb3J5LXRpZXJzLmNcbiBGOlx0bW0vcGFnZV9pZGxlLmNcbiBGOlx0bW0vcGdhbGxvYy10cmFjay5oXG4gRjpcdG1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmNcbiYjNDM7RjpcdHRvb2xzL2xpYi9tbS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT05cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggYzE4MGQ0MGNkNjcxMi4uNjFhYjFiOGEyZWJkZiAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWdcbkBAIC0xMjkxLDI0ICYjNDM7MTI5MSwxOSBAQCBjb25maWcgUEVSQ1BVX1NUQVRTXG4gXHQgIGJlIHVzZWQgdG8gaGVscCB1bmRlcnN0YW5kIHBlcmNwdSBtZW1vcnkgdXNhZ2UuXG4gXG4gY29uZmlnIEdVUF9URVNUXG4tXHRib29sIFwmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHNcJiMzNDtcbiYjNDM7XHRib29sIFwmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHMgYW5kIGJlbmNobWFya3NcJiMzNDtcbiBcdGRlcGVuZHMgb24gREVCVUdfRlNcbiBcdGhlbHBcbiBcdCAgUHJvdmlkZXMgL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYSB3YXlcbi1cdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yXG4tXHQgIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWx5IG9mIEFQSSBjYWxscy5cbiYjNDM7XHQgIHRvIG1ha2UgaW9jdGwgY2FsbHMgdGhhdCBjYW4gbGF1bmNoIGtlcm5lbC1iYXNlZCB1bml0IHRlc3RzIGFuZFxuJiM0MztcdCAgYmVuY2htYXJrcyBmb3IgdGhlIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSBmYW1pbGllc1xuJiM0MztcdCAgb2YgQVBJIGNhbGxzLlxuIFxuLVx0ICBUaGVzZSB0ZXN0cyBpbmNsdWRlIGJlbmNobWFyayB0ZXN0aW5nIG9mIHRoZSBfZmFzdCB2YXJpYW50cyBvZlxuLVx0ICBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCksIGFzIHdlbGwgYXMgc21va2UgdGVzdHMgb2ZcbiYjNDM7XHQgIFRoZXNlIGluY2x1ZGUgYmVuY2htYXJrIHRlc3Rpbmcgb2YgdGhlIF9mYXN0IHZhcmlhbnRzIG9mXG4mIzQzO1x0ICBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCksIGFzIHdlbGwgYXMgdGVzdHMgb2ZcbiBcdCAgdGhlIG5vbi1fZmFzdCB2YXJpYW50cy5cbiBcbi1cdCAgVGhlcmUgaXMgYWxzbyBhIHN1Yi10ZXN0IHRoYXQgYWxsb3dzIHJ1bm5pbmcgZHVtcF9wYWdlKCkgb24gYW55XG4tXHQgIG9mIHVwIHRvIGVpZ2h0IHBhZ2VzIChzZWxlY3RlZCBieSBjb21tYW5kIGxpbmUgYXJncykgd2l0aGluIHRoZVxuLVx0ICByYW5nZSBvZiB1c2VyLXNwYWNlIGFkZHJlc3Nlcy4gVGhlc2UgcGFnZXMgYXJlIGVpdGhlciBwaW5uZWQgdmlhXG4tXHQgIHBpbl91c2VyX3BhZ2VzKigpLCBvciBwaW5uZWQgdmlhIGdldF91c2VyX3BhZ2VzKigpLCBhcyBzcGVjaWZpZWRcbi1cdCAgYnkgb3RoZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cbi1cbi1cdCAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiYjNDM7XHQgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYyBhbmQgdG9vbHMvbW0vZ3VwX2JlbmNoLmMuXG4gXG4gY29tbWVudCBcJiMzNDtHVVBfVEVTVCBuZWVkcyB0byBoYXZlIERFQlVHX0ZTIGVuYWJsZWRcJiMzNDtcbiBcdGRlcGVuZHMgb24gIUdVUF9URVNUIFx1MDAyNlx1MDAyNiAhREVCVUdfRlNcbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5jIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjliMjIzN2U5ODIzZTlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbkBAIC0wLDAgJiM0MzsxLDEwNiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZmlsZV91dGlscy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcdHNzaXplX3QgbnVtcmVhZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAoZmQgPT0gLTEpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbiYjNDM7XHRpZiAobnVtcmVhZCBcdTAwM2MgMSkge1xuJiM0MztcdFx0ZXJyID0gbnVtcmVhZCA/IGVycm5vIDogRU5PREFUQTtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdHJldHVybiAtZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnVmW251bXJlYWRdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xuJiM0MztcdHNzaXplX3QgbnVtd3JpdHRlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJ1ZmxlbiBcdTAwM2MgMilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xuJiM0MztcdGlmIChmZCA9PSAtMSlcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbiYjNDM7XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLXNhdmVkX2Vycm5vO1xuJiM0MztcbiYjNDM7XHRpZiAobnVtd3JpdHRlbiAhPSAoc3NpemVfdCkoYnVmbGVuIC0gMSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNoYXIgYnVmWzIxXTtcbiYjNDM7XHRjaGFyICplbmQ7XG4mIzQzO1xuJiM0MztcdGlmICghbnVtKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogUmVqZWN0IHNpZ25zIGFuZCBsZWFkaW5nIHdoaXRlc3BhY2UgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgc3RydG91bCgpICovXG4mIzQzO1x0aWYgKGJ1ZlswXSBcdTAwM2MgJiMzOTswJiMzOTsgfHwgYnVmWzBdIFx1MDAzZSAmIzM5OzkmIzM5OylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRlcnJubyA9IDA7XG4mIzQzO1x0dmFsID0gc3RydG91bChidWYsIFx1MDAyNmVuZCwgMTApO1xuJiM0MztcdGlmIChlcnJubylcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgYWxsb3cgYSBuZXdsaW5lIGFmdGVyIHRoZSBudW1iZXIgKi9cbiYjNDM7XHRpZiAoKmVuZCA9PSAmIzM5O1xcbiYjMzk7KVxuJiM0MztcdFx0ZW5kJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0aWYgKCplbmQgIT0gJiMzOTtcXDAmIzM5OylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQqbnVtID0gdmFsO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMjFdO1xuJiM0MztcbiYjNDM7XHRzcHJpbnRmKGJ1ZiwgXCYjMzQ7JWx1XCYjMzQ7LCBudW0pO1xuJiM0MztcdHJldHVybiB3cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgJiM0MzsgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHdyaXRlX251bShwYXRoLCBudW0pO1xuJiM0MztcdHJldHVybiByZXQgPT0gLUVJTlZBTCA/IDAgOiByZXQ7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUwZGFhODJjMmIyYjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmhcbkBAIC0wLDAgJiM0MzsxLDEzIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX19NTV9GSUxFX1VUSUxTX0hfX1xuJiM0MzsjZGVmaW5lIF9fTU1fRklMRV9VVElMU19IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGRlZi5oXHUwMDNlXG4mIzQzO1xuJiM0MztpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4mIzQzO2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4mIzQzO2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pO1xuJiM0MztpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcbiYjNDM7aW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuc2ltaWxhcml0eSBpbmRleCA4NyVcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbnJlbmFtZSB0byB0b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuaW5kZXggZDc5MTdkY2UzYWJhYy4uYWJkOWY3MTgyZjg4ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5AQCAtOCwxMiAmIzQzOzgsMTggQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtmaWxlX3V0aWxzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBUSFBfU1lTRlMgXCYjMzQ7L3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvXCYjMzQ7XG4gI2RlZmluZSBNQVhfU0VUVElOR1NfREVQVEggNFxuJiM0MztcbiYjNDM7I2lmbmRlZiBBUlJBWV9TSVpFXG4mIzQzOyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5nc19zdGFja1tNQVhfU0VUVElOR1NfREVQVEhdO1xuIHN0YXRpYyBpbnQgc2V0dGluZ3NfaW5kZXg7XG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2F2ZWRfc2V0dGluZ3M7XG5AQCAtNDgsNiAmIzQzOzU0LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2htZW1fZW5hYmxlZF9zdHJpbmdzW10gPSB7XG4gXHROVUxMXG4gfTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoY29uc3QgY2hhciAqcGF0aCwgaW50IHJldClcbiYjNDM7e1xuJiM0MztcdHByaW50ZihcJiMzNDsjICVzOiAlcyAoJWQpXFxuXCYjMzQ7LCBwYXRoLCBzdHJlcnJvcigtcmV0KSwgLXJldCk7XG4mIzQzO31cbiYjNDM7XG4gaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG5AQCAtNjEsOCAmIzQzOzcyLDkgQEAgaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4gXG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkge1xuLVx0XHRwZXJyb3IocGF0aCk7XG4mIzQzO1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbiBcbkBAIC0xMDMsMTIgJiM0MzsxMTUsMTcgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbClcbiBcdFx0cHJpbnRmKFwmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHR3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgJiM0MzsgMSk7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICYjNDM7IDEpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0fVxuIH1cbiBcbiB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBudW07XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFRIUF9TWVNGUyBcJiMzNDslc1wmIzM0OywgbmFtZSk7XG5AQCAtMTE2LDcgJiM0MzsxMzMsMTMgQEAgdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcbiBcdFx0cHJpbnRmKFwmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XG4mIzQzO1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnVtKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG51bTtcbiB9XG4gXG4gdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKVxuQEAgLTEyOSw3ICYjNDM7MTUyLDExIEBAIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcbiBcdFx0cHJpbnRmKFwmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHR3cml0ZV9udW0ocGF0aCwgbnVtKTtcbiYjNDM7XHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiB9XG4gXG4gdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbkBAIC0xNTcsOCAmIzQzOzE4NCwxNSBAQCB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuIFx0XHQubWF4X3B0ZXNfc2hhcmVkID0gdGhwX3JlYWRfbnVtKFwmIzM0O2todWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXCYjMzQ7KSxcbiBcdFx0LnBhZ2VzX3RvX3NjYW4gPSB0aHBfcmVhZF9udW0oXCYjMzQ7a2h1Z2VwYWdlZC9wYWdlc190b19zY2FuXCYjMzQ7KSxcbiBcdH07XG4tXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSlcbi1cdFx0c2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYiA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgpO1xuJiM0MztcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XG4mIzQzO1x0XHRpbnQgcmV0ID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcbiYjNDM7XHRcdFx0XHQgICBcdTAwMjZzZXR0aW5ncy1cdTAwM2VyZWFkX2FoZWFkX2tiKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHJldCk7XG4mIzQzO1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9PUkRFUlM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICghKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgb3JkZXJzKSkge1xuQEAgLTIwOCw4ICYjNDM7MjQyLDE1IEBAIHZvaWQgdGhwX3dyaXRlX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuIFx0dGhwX3dyaXRlX251bShcJiMzNDtraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFwmIzM0Oywga2h1Z2VwYWdlZC1cdTAwM2VtYXhfcHRlc19zaGFyZWQpO1xuIFx0dGhwX3dyaXRlX251bShcJiMzNDtraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cJiMzNDssIGtodWdlcGFnZWQtXHUwMDNlcGFnZXNfdG9fc2Nhbik7XG4gXG4tXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSlcbi1cdFx0d3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuJiM0MztcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XG4mIzQzO1x0XHRpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG4mIzQzO1x0XHRcdFx0ICAgIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTtcbiYjNDM7XHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX09SREVSUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNiBvcmRlcnMpKVxuQEAgLTMwNyw4ICYjNDM7MzQ4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX3N1cHBvcnRlZF9vcmRlcnMoYm9vbCBpc19zaG1lbSlcbiBcdFx0fVxuIFxuIFx0XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0aWYgKHJldCAhPSAtRU5PRU5UKSB7XG4mIzQzO1x0XHRcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiYjNDM7XHRcdFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbiBcdH1cbiBcbiBcdHJldHVybiBvcmRlcnM7XG5AQCAtMzgyLDggJiM0Mzs0MzAsNyBAQCBpbnQgZGV0ZWN0X2h1Z2V0bGJfcGFnZV9zaXplcyh1bnNpZ25lZCBsb25nIHNpemVzW10sIGludCBtYXgpXG4gXHRcdGlmIChzc2NhbmYoZW50cnktXHUwMDNlZF9uYW1lLCBcJiMzNDtodWdlcGFnZXMtJXp1a0JcJiMzNDssIFx1MDAyNmtiKSAhPSAxKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRzaXplc1tjb3VudCYjNDM7JiM0MztdID0ga2IgKiAxMDI0O1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcXG5cJiMzNDssXG4tXHRcdFx0ICAgICAgIGtiKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjIFtJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcblwmIzM0Oywga2IpO1xuIFx0fVxuIFx0Y2xvc2VkaXIoZGlyKTtcbiBcdHJldHVybiBjb3VudDtcbkBAIC00MjUsMjggJiM0Mzs0NzIsNDkgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl9zeXNmc19wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbixcbiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXCYjMzQ7bnJfaHVnZXBhZ2VzXCYjMzQ7KTtcbiBcbi1cdHJldHVybiByZWFkX251bShwYXRoKTtcbiYjNDM7XHRyZXQgPSByZWFkX251bShwYXRoLCBcdTAwMjZucik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBucjtcbiB9XG4gXG4gdm9pZCBodWdldGxiX3NldF9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXCYjMzQ7bnJfaHVnZXBhZ2VzXCYjMzQ7KTtcbiBcbi1cdHdyaXRlX251bV9pZ25vcmVfZWludmFsKHBhdGgsIG5yKTtcbiYjNDM7XHRyZXQgPSB3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnI7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwmIzM0O2ZyZWVfaHVnZXBhZ2VzXCYjMzQ7KTtcbiBcbi1cdHJldHVybiByZWFkX251bShwYXRoKTtcbiYjNDM7XHRyZXQgPSByZWFkX251bShwYXRoLCBcdTAwMjZucik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBucjtcbiB9XG4gXG4gc3RhdGljIGJvb2wgX19odWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcbkBAIC01MDIsNyAmIzQzOzU3MCw4IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHNpemVzW10sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKG5yX2VuYWJsZWQgXHUwMDNlIG1heCkge1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxuXCYjMzQ7LCBucl9lbmFibGVkLCBtYXgpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0OyMgZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBucl9lbmFibGVkLCBtYXgpO1xuIFx0XHRucl9lbmFibGVkID0gbWF4O1xuIFx0fVxuIFxuQEAgLTU3NCw4ICYjNDM7NjQzLDEwIEBAIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0KHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19zaWdoYW5kbGVyKGludCBzaWcpXG4ge1xuJiM0MztcdCh2b2lkKXNpZztcbiYjNDM7XG4gXHQvKiBleGl0KCkgd2lsbCBpbnZva2UgdGhlIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0IGhhbmRsZXIuICovXG4tXHRleGl0KEtTRlRfRkFJTCk7XG4mIzQzO1x0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIH1cbiBcbiB2b2lkIGh1Z2VwYWdlX3NhdmVfc2V0dGluZ3MoYm9vbCB0aHAsIGJvb2wgaHVnZXRsYilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbnNpbWlsYXJpdHkgaW5kZXggMTAwJVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbmluZGV4IDE0NDZhNjU5ZTU0MDguLjE1NGQ3NDBiZTAyZTggMTAwNjQ0XG4tLS0gYS90b29scy9tbS8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS8uZ2l0aWdub3JlXG5AQCAtMywzICYjNDM7Myw0IEBAIHNsYWJpbmZvXG4gcGFnZS10eXBlc1xuIHBhZ2Vfb3duZXJfc29ydFxuIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4mIzQzO2d1cF9iZW5jaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcbmluZGV4IDg1ODE4NmE2ZWVmZGIuLmYyMGEzMmQ4Y2MyMmUgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vTWFrZWZpbGVcbkBAIC0zLDEzICYjNDM7MywxNSBAQFxuICNcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxuIFxuLUJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiYjNDM7QlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlclxuJiM0MztCVUlMRF9UQVJHRVRTICYjNDM7PSB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2hcbiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHNcbiBcbiBMSUJfRElSID0gLi4vbGliL2FwaVxuIExJQlMgPSAkKExJQl9ESVIpL2xpYmFwaS5hXG4mIzQzO0dVUF9CRU5DSF9PQkpTID0gZ3VwX2JlbmNoLmMgLi4vbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgLi4vbGliL21tL2ZpbGVfdXRpbHMuY1xuIFxuLUNGTEFHUyAmIzQzOz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWRcbiYjNDM7Q0ZMQUdTICYjNDM7PSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtSS4uLy4uIC1wdGhyZWFkXG4gTERGTEFHUyAmIzQzOz0gJChMSUJTKSAtcHRocmVhZFxuIFxuIGFsbDogJChCVUlMRF9UQVJHRVRTKVxuQEAgLTIyLDggJiM0MzsyNCwxMSBAQCAkKExJQlMpOlxuICU6ICUuY1xuIFx0JChDQykgJChDRkxBR1MpIC1vICRAICRcdTAwM2MgJChMREZMQUdTKVxuIFxuJiM0MztndXBfYmVuY2g6ICQoR1VQX0JFTkNIX09CSlMpICQoTElCUylcbiYjNDM7XHQkKENDKSAkKENGTEFHUykgLW8gJEAgJChHVVBfQkVOQ0hfT0JKUykgJChMREZMQUdTKVxuJiM0MztcbiBjbGVhbjpcbi1cdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4mIzQzO1x0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXG4gXHRtYWtlIC1DICQoTElCX0RJUikgY2xlYW5cbiBcbiBzYmluZGlyID89IC91c3Ivc2JpblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMgYi90b29scy9tbS9ndXBfYmVuY2guY1xuc2ltaWxhcml0eSBpbmRleCA1MCVcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbnJlbmFtZSB0byB0b29scy9tbS9ndXBfYmVuY2guY1xuaW5kZXggM2Y4NDFhOTZmODcwNi4uZmY2ZTQ2NjU0NjgxMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jXG5AQCAtMTAsMTEgJiM0MzsxMCwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY21tL2d1cF90ZXN0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNkZWZpbmUgTUIgKDFVTCBcdTAwM2NcdTAwM2MgMjApXG4gXG5AQCAtMzgsMTIgJiM0MzszNyw2IEBAIHN0YXRpYyBjaGFyICpjbWRfdG9fc3RyKHVuc2lnbmVkIGxvbmcgY21kKVxuIFx0XHRyZXR1cm4gXCYjMzQ7UElOX0ZBU1RfQkVOQ0hNQVJLXCYjMzQ7O1xuIFx0Y2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOlxuIFx0XHRyZXR1cm4gXCYjMzQ7UElOX0xPTkdURVJNX0JFTkNITUFSS1wmIzM0Oztcbi1cdGNhc2UgR1VQX0JBU0lDX1RFU1Q6XG4tXHRcdHJldHVybiBcJiMzNDtHVVBfQkFTSUNfVEVTVFwmIzM0Oztcbi1cdGNhc2UgUElOX0JBU0lDX1RFU1Q6XG4tXHRcdHJldHVybiBcJiMzNDtQSU5fQkFTSUNfVEVTVFwmIzM0Oztcbi1cdGNhc2UgRFVNUF9VU0VSX1BBR0VTX1RFU1Q6XG4tXHRcdHJldHVybiBcJiMzNDtEVU1QX1VTRVJfUEFHRVNfVEVTVFwmIzM0OztcbiBcdH1cbiBcdHJldHVybiBcJiMzNDtVbmtub3duIGNvbW1hbmRcJiMzNDs7XG4gfVxuQEAgLTUzLDM5ICYjNDM7NDYsMjkgQEAgdm9pZCAqZ3VwX3RocmVhZCh2b2lkICpkYXRhKVxuIFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTtcbiBcdGludCBpLCBzdGF0dXM7XG4gXG4tXHQvKiBPbmx5IHJlcG9ydCB0aW1pbmcgaW5mb3JtYXRpb24gb24gdGhlICpfQkVOQ0hNQVJLIGNvbW1hbmRzOiAqL1xuLVx0aWYgKChjbWQgPT0gUElOX0ZBU1RfQkVOQ0hNQVJLKSB8fCAoY21kID09IEdVUF9GQVNUX0JFTkNITUFSSykgfHxcbi1cdCAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXBlYXRzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGd1cC5zaXplID0gc2l6ZTtcbi1cdFx0XHRzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgXHUwMDI2Z3VwKTtcbi1cdFx0XHRpZiAoc3RhdHVzKVxuLVx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVwZWF0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGd1cC5zaXplID0gc2l6ZTtcbiYjNDM7XHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuJiM0MztcdFx0aWYgKHN0YXR1cykge1xuJiM0MztcdFx0XHRpbnQgZXJyID0gZXJybm87XG4gXG4gXHRcdFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbi1cdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDslczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcJiMzNDssXG4tXHRcdFx0XHQgICAgICAgY21kX3RvX3N0cihjbWQpLCBndXAuZ2V0X2RlbHRhX3VzZWMsXG4tXHRcdFx0XHQgICAgICAgZ3VwLnB1dF9kZWx0YV91c2VjKTtcbi1cdFx0XHRpZiAoZ3VwLnNpemUgIT0gc2l6ZSlcbi1cdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0OywgdHJ1bmNhdGVkIChzaXplOiAlbGxkKVwmIzM0OywgZ3VwLnNpemUpO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDslcyBpb2N0bCBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBjbWRfdG9fc3RyKGNtZCksXG4mIzQzO1x0XHRcdFx0c3RyZXJyb3IoZXJyKSk7XG4gXHRcdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuJiM0MztcdFx0XHRyZXR1cm4gZGF0YTtcbiBcdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0Z3VwLnNpemUgPSBzaXplO1xuLVx0XHRzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgXHUwMDI2Z3VwKTtcbi1cdFx0aWYgKHN0YXR1cylcbi1cdFx0XHRnb3RvIHJldHVybl87XG4gXG4gXHRcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0OyVzOiBkb25lXFxuXCYjMzQ7LCBjbWRfdG9fc3RyKGNtZCkpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0OyVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1wmIzM0OyxcbiYjNDM7XHRcdFx0Y21kX3RvX3N0cihjbWQpLCBndXAuZ2V0X2RlbHRhX3VzZWMsXG4mIzQzO1x0XHRcdGd1cC5wdXRfZGVsdGFfdXNlYyk7XG4gXHRcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1RydW5jYXRlZCAoc2l6ZTogJWxsZClcXG5cJiMzNDssIGd1cC5zaXplKTtcbiYjNDM7XHRcdFx0cHJpbnRmKFwmIzM0OywgdHJ1bmNhdGVkIChzaXplOiAlbGxkKVwmIzM0OywgZ3VwLnNpemUpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O1xcblwmIzM0Oyk7XG4gXHRcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbiBcdH1cbiBcbi1yZXR1cm5fOlxuLVx0a3NmdF90ZXN0X3Jlc3VsdCghc3RhdHVzLCBcJiMzNDtpb2N0bCBzdGF0dXMgJWRcXG5cJiMzNDssIHN0YXR1cyk7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG5AQCAtOTMsMzggJiM0Mzs3NiwyMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4ge1xuIFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuIFx0aW50IGZpbGVkLCBpLCBvcHQsIG5yX3BhZ2VzID0gMSwgdGhwID0gLTEsIHdyaXRlID0gMSwgbnRocmVhZHMgPSAxLCByZXQ7XG4tXHRpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURTtcbiYjNDM7XHRpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURSwgc3RhcnRlZF90aHJlYWRzID0gMCwgZXhpdF9zdGF0dXMgPSAxO1xuIFx0Y2hhciAqZmlsZSA9IFwmIzM0Oy9kZXYvemVyb1wmIzM0Oztcbi1cdGJvb2wgaHVnZXRsYiA9IGZhbHNlO1xuJiM0MztcdGJvb2wgaHVnZXRsYiA9IGZhbHNlLCB0aHJlYWRfZXJyb3IgPSBmYWxzZTtcbiYjNDM7XHR2b2lkICp0aHJlYWRfcmVzdWx0O1xuIFx0cHRocmVhZF90ICp0aWQ7XG4gXHRjaGFyICpwO1xuIFxuLVx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCYjMzQ7bTpyOm46RjpmOmFiY2o6dFRMVXV3V1NIcHpcJiMzNDspKSAhPSAtMSkge1xuJiM0MztcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O206cjpuOkY6Zjphajp0VEx1d1dTSFwmIzM0OykpICE9IC0xKSB7XG4gXHRcdHN3aXRjaCAob3B0KSB7XG4gXHRcdGNhc2UgJiMzOTthJiMzOTs6XG4gXHRcdFx0Y21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7YiYjMzk7OlxuLVx0XHRcdGNtZCA9IFBJTl9CQVNJQ19URVNUO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7TCYjMzk7OlxuIFx0XHRcdGNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTtjJiMzOTs6XG4tXHRcdFx0Y21kID0gRFVNUF9VU0VSX1BBR0VTX1RFU1Q7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBEdW1wIHBhZ2UgMCAoaW5kZXggMSkuIE1heSBiZSBvdmVycmlkZGVuIGxhdGVyLCBieVxuLVx0XHRcdCAqIHVzZXImIzM5O3Mgbm9uLW9wdGlvbiBhcmd1bWVudHMuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAud2hpY2hfcGFnZXMgaXMgemVyby1iYXNlZCwgc28gdGhhdCB6ZXJvIGNhbiBtZWFuIFwmIzM0O2RvXG4tXHRcdFx0ICogbm90aGluZ1wmIzM0Oy5cbi1cdFx0XHQgKi9cbi1cdFx0XHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7cCYjMzk7OlxuLVx0XHRcdC8qIHdvcmtzIG9ubHkgd2l0aCBEVU1QX1VTRVJfUEFHRVNfVEVTVCAqL1xuLVx0XHRcdGd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7RiYjMzk7OlxuIFx0XHRcdC8qIHN0cnRvbCwgc28geW91IGNhbiBwYXNzIGZsYWdzIGluIGhleCBmb3JtICovXG4gXHRcdFx0Z3VwLmd1cF9mbGFncyA9IHN0cnRvbChvcHRhcmcsIDAsIDApO1xuQEAgLTE0MSw3ICYjNDM7MTA3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICYjMzk7biYjMzk7OlxuIFx0XHRcdG5yX3BhZ2VzID0gYXRvaShvcHRhcmcpO1xuIFx0XHRcdGlmIChucl9wYWdlcyBcdTAwM2MgMClcbi1cdFx0XHRcdG5yX3BhZ2VzID0gc2l6ZSAvIHBzaXplKCk7XG4mIzQzO1x0XHRcdFx0bnJfcGFnZXMgPSBzaXplIC8gZ2V0cGFnZXNpemUoKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O3QmIzM5OzpcbiBcdFx0XHR0aHAgPSAxO1xuQEAgLTE0OSw5ICYjNDM7MTE1LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICYjMzk7VCYjMzk7OlxuIFx0XHRcdHRocCA9IDA7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTtVJiMzOTs6XG4tXHRcdFx0Y21kID0gR1VQX0JBU0lDX1RFU1Q7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJiMzOTt1JiMzOTs6XG4gXHRcdFx0Y21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTE3Myw1MiAmIzQzOzEzNiw0MSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0aHVnZXRsYiA9IHRydWU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1dyb25nIGFyZ3VtZW50XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1dyb25nIGFyZ3VtZW50XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZXhpdCgxKTtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKG9wdGluZCBcdTAwM2MgYXJnYykge1xuLVx0XHRpbnQgZXh0cmFfYXJnX2NvdW50ID0gMDtcbi1cdFx0Lypcbi1cdFx0ICogRm9yIGV4YW1wbGU6XG4tXHRcdCAqXG4tXHRcdCAqICAgLi9ndXBfdGVzdCAtYyAwIDEgMHgxMDAxXG4tXHRcdCAqXG4tXHRcdCAqIC4uLnRvIGR1bXAgcGFnZXMgMCwgMSwgYW5kIDQwOTdcbi1cdFx0ICovXG4tXG4tXHRcdHdoaWxlICgob3B0aW5kIFx1MDAzYyBhcmdjKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICAgIChleHRyYV9hcmdfY291bnQgXHUwMDNjIEdVUF9URVNUX01BWF9QQUdFU19UT19EVU1QKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW5cbi1cdFx0XHQgKiB1c2Ugbm9ybWFsIDAtYmFzZWQgaW5kZXhpbmcgb24gdGhlIGNvbW1hbmQgbGluZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSAmIzQzOyAxO1xuLVxuLVx0XHRcdGd1cC53aGljaF9wYWdlc1tleHRyYV9hcmdfY291bnRdID0gcGFnZV9pbmRleDtcbi1cdFx0XHRleHRyYV9hcmdfY291bnQmIzQzOyYjNDM7O1xuLVx0XHRcdG9wdGluZCYjNDM7JiM0Mzs7XG4tXHRcdH1cbiYjNDM7XHRpZiAob3B0aW5kICE9IGFyZ2MpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtVbmV4cGVjdGVkIGFyZ3VtZW50ICYjMzk7JXMmIzM5O1xcblwmIzM0OywgYXJndltvcHRpbmRdKTtcbiYjNDM7XHRcdGV4aXQoMSk7XG4gXHR9XG4gXG4tXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuJiM0MztcdGlmIChnZXRldWlkKCkpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGV4aXQoMSk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGh1Z2V0bGIpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xuIFxuLVx0XHRpZiAoIWhwX3NpemUpXG4tXHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7SHVnZVRMQiBpcyB1bmF2YWlsYWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIWhwX3NpemUpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0NvdWxkIG5vdCBkZXRlcm1pbmUgaHVnZSBwYWdlIHNpemVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0c2l6ZSA9IChzaXplICYjNDM7IGhwX3NpemUgLSAxKSBcdTAwMjYgfihocF9zaXplIC0gMSk7XG4tXHRcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSlcbi1cdFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbi1cdGtzZnRfc2V0X3BsYW4obnRocmVhZHMpO1xuLVxuIFx0ZmlsZWQgPSBvcGVuKGZpbGUsIE9fUkRXUnxPX0NSRUFULCAwNjY0KTtcbi1cdGlmIChmaWxlZCBcdTAwM2MgMClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1VuYWJsZSB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRpZiAoZmlsZWQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cJiMzNDssIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4gXG4gXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlcztcbiBcdGlmICh3cml0ZSlcbkBAIC0yMjcsMjYgJiM0MzsxNzksMjQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuIFx0aWYgKGd1cF9mZCA9PSAtMSkge1xuIFx0XHRzd2l0Y2ggKGVycm5vKSB7XG4tXHRcdGNhc2UgRUFDQ0VTOlxuLVx0XHRcdGlmIChnZXR1aWQoKSlcbi1cdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cJiMzNDspO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEVOT0VOVDpcbiBcdFx0XHRpZiAob3BlbmRpcihcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Z1wmIzM0OykgPT0gTlVMTClcbi1cdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O21vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cJiMzNDspO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2NoZWNrIGlmIENPTkZJR19HVVBfVEVTVCBpcyBlbmFibGVkIGluIGtlcm5lbCBjb25maWdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDttb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2NoZWNrIGlmIENPTkZJR19HVVBfVEVTVCBpcyBlbmFibGVkIGluIGtlcm5lbCBjb25maWdcXG5cJiMzNDspO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2ZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2ZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgR1VQX1RFU1RfRklMRSxcbiYjNDM7XHRcdFx0XHRzdHJlcnJvcihlcnJubykpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCYjMzQ7KTtcbi1cdFx0a3NmdF9leGl0X3Bhc3MoKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2Nsb3NlX2ZpbGVkO1xuIFx0fVxuIFxuIFx0cCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIGZpbGVkLCAwKTtcbi1cdGlmIChwID09IE1BUF9GQUlMRUQpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDttbWFwOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRpZiAocCA9PSBNQVBfRkFJTEVEKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7bW1hcDogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0XHRnb3RvIGVycl9jbG9zZV9ndXBfZmQ7XG4mIzQzO1x0fVxuIFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylwO1xuIFxuIFx0aWYgKHRocCA9PSAxKVxuQEAgLTI1NSwyMSAmIzQzOzIwNSw0MyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcbiBcdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xuLVx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IHBzaXplKCkpXG4mIzQzO1x0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IGdldHBhZ2VzaXplKCkpXG4gXHRcdHBbMF0gPSAwO1xuIFxuIFx0dGlkID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocmVhZHMpO1xuLVx0YXNzZXJ0KHRpZCk7XG4mIzQzO1x0aWYgKCF0aWQpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgJWQgdGhyZWFkczogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdG50aHJlYWRzLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0Z290byBlcnJfdW5tYXA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG50aHJlYWRzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsIFx1MDAyNmd1cCk7XG4tXHRcdGFzc2VydChyZXQgPT0gMCk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihyZXQpKTtcbiYjNDM7XHRcdFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzdGFydGVkX3RocmVhZHMmIzQzOyYjNDM7O1xuIFx0fVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpO1xuLVx0XHRhc3NlcnQocmV0ID09IDApO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YXJ0ZWRfdGhyZWFkczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIFx1MDAyNnRocmVhZF9yZXN1bHQpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7cHRocmVhZF9qb2luIGZhaWxlZDogJXNcXG5cJiMzNDssIHN0cmVycm9yKHJldCkpO1xuJiM0MztcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuJiM0MztcdFx0fSBlbHNlIGlmICh0aHJlYWRfcmVzdWx0KVxuJiM0MztcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuIFx0fVxuIFxuIFx0ZnJlZSh0aWQpO1xuLVxuLVx0a3NmdF9leGl0X3Bhc3MoKTtcbiYjNDM7XHRpZiAoIXRocmVhZF9lcnJvcilcbiYjNDM7XHRcdGV4aXRfc3RhdHVzID0gMDtcbiYjNDM7XG4mIzQzO2Vycl91bm1hcDpcbiYjNDM7XHRtdW5tYXAoKHZvaWQgKilndXAuYWRkciwgc2l6ZSk7XG4mIzQzO2Vycl9jbG9zZV9ndXBfZmQ6XG4mIzQzO1x0Y2xvc2UoZ3VwX2ZkKTtcbiYjNDM7ZXJyX2Nsb3NlX2ZpbGVkOlxuJiM0MztcdGNsb3NlKGZpbGVkKTtcbiYjNDM7XHRyZXR1cm4gZXhpdF9zdGF0dXM7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IDJkNTM2NjE5NmUzMDkuLjljMDM2MjRmZDI5MzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbkBAIC0zNyw3ICYjNDM7MzcsOCBAQCBlbmRpZlxuICMgTERMSUJTLlxuIE1BS0VGTEFHUyAmIzQzOz0gLS1uby1idWlsdGluLXJ1bGVzXG4gXG4tQ0ZMQUdTID0gLVdhbGwgLU8yIC1JICQodG9wX3NyY2RpcikgJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUylcbiYjNDM7Q0ZMQUdTID0gLVdhbGwgLU8yIC1JICQodG9wX3NyY2RpcikgLUkgJCh0b3Bfc3JjZGlyKS90b29scy9saWJcbiYjNDM7Q0ZMQUdTICYjNDM7PSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxuIENGTEFHUyAmIzQzOz0gLVd1bnJlYWNoYWJsZS1jb2RlXG4gTERMSUJTID0gLWxydCAtbHB0aHJlYWQgLWxtXG4gXG5AQCAtNTcsOCAmIzQzOzU4LDggQEAgZW5kaWZcbiBcbiBURVNUX0dFTl9GSUxFUyA9IGNvd1xuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBjb21wYWN0aW9uX3Rlc3RcbiYjNDM7VEVTVF9HRU5fRklMRVMgJiM0Mzs9IGd1cFxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXBfbG9uZ3Rlcm1cbi1URVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VwX3Rlc3RcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaG1tLXRlc3RzXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGItbWFkdmlzZVxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiLW1tYXBcbkBAIC0xODcsOCAmIzQzOzE4OCwxMCBAQCBURVNUX0ZJTEVTICYjNDM7PSB3cml0ZV9odWdldGxiX21lbW9yeS5zaFxuIFxuIGluY2x1ZGUgLi4vbGliLm1rXG4gXG4tJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jXG4tJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jXG4mIzQzOyQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcXFxuJiM0MztcdFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG4mIzQzOyQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcXFxuJiM0MztcdFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG4gXG4gJChPVVRQVVQpL3VmZmQtc3RyZXNzOiB1ZmZkLWNvbW1vbi5jXG4gJChPVVRQVVQpL3VmZmQtdW5pdC10ZXN0czogdWZmZC1jb21tb24uY1xuQEAgLTIxNyw3ICYjNDM7MjIwLDcgQEAgJChCSU5BUklFU18zMik6IENGTEFHUyAmIzQzOz0gLW0zMiAtbXhzYXZlXG4gJChCSU5BUklFU18zMik6IExETElCUyAmIzQzOz0gLWxydCAtbGRsIC1sbVxuICQoQklOQVJJRVNfMzIpOiAkKE9VVFBVVCkvJV8zMjogJS5jXG4gXHQkKGNhbGwgbXNnLENDLCwkQClcbi1cdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEBcbiYjNDM7XHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtMzIsJCh0KSkpKVxuIGVuZGlmXG4gXG5AQCAtMjI2LDcgJiM0MzsyMjksNyBAQCAkKEJJTkFSSUVTXzY0KTogQ0ZMQUdTICYjNDM7PSAtbTY0IC1teHNhdmVcbiAkKEJJTkFSSUVTXzY0KTogTERMSUJTICYjNDM7PSAtbHJ0IC1sZGxcbiAkKEJJTkFSSUVTXzY0KTogJChPVVRQVVQpLyVfNjQ6ICUuY1xuIFx0JChjYWxsIG1zZyxDQywsJEApXG4tXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXG4mIzQzO1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRAXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTY0LCQodCkpKSlcbiBlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcbmluZGV4IDMwZDRhY2U3MTU1YWUuLmIzZjUzNzcxMTljYjggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcbkBAIC0xNSw5ICYjNDM7MTUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIE1BUF9TSVpFX01CXHQxMDBcbiAjZGVmaW5lIE1BUF9TSVpFXHQoTUFQX1NJWkVfTUIgKiAxMDI0ICogMTAyNClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5pbmRleCA4YWE1MjQ5ZDliZWY2Li4zMjY0YTgyODU3NWJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5AQCAtMjksNyAmIzQzOzI5LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xuaW5kZXggMTk2MDYzNWE5NTNlYi4uZTQ2NjBiZjg5YjYyNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xuQEAgLTI1LDcgJiM0MzsyNSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiB1aW50NjRfdCBwYWdlX3NpemU7XG4gdWludDY0X3QgcG1kX3BhZ2VzaXplO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuaW5kZXggNWM4ZWMzY2E3NWQ3ZC4uYWY1Y2Q5YjMwMzM5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5AQCAtMjEsNyAmIzQzOzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcJiMzNDsuLi9waWRmZC9waWRmZC5oXCYjMzQ7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjMxYWUzOGUwOTEzNmRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG5AQCAtMCwwICYjNDM7MSwyNjMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvaW9jdGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2d1cF90ZXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUIgKDFVTCBcdTAwM2NcdTAwM2MgMjApXG4mIzQzO1xuJiM0MzsvKiBKdXN0IHRoZSBmbGFncyB3ZSBuZWVkLCBjb3BpZWQgZnJvbSB0aGUga2VybmVsIGludGVybmFscy4gKi9cbiYjNDM7I2RlZmluZSBGT0xMX1dSSVRFXHQweDAxXHQvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi9cbiYjNDM7XG4mIzQzOy8qIFBhZ2UgY291bnRzIGV4ZXJjaXNpbmcgc2luZ2xlLCBUSFAtYmF0Y2gsIHBhcnRpYWwsIGFuZCBmdWxsLW1hcHBpbmcgR1VQLiAqL1xuJiM0MztzdGF0aWMgY29uc3QgaW50IG5yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEdVUF9URVNUX0ZJTEUgXCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3RcJiMzNDtcbiYjNDM7I2RlZmluZSBOUl9IVUdFX1BBR0VTIDJcbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGhwX3NpemU7XG4mIzQzO1xuJiM0MztGSVhUVVJFKGd1cF90ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGd1cF9mZDtcbiYjNDM7XHRjaGFyICphZGRyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVChndXBfdGVzdClcbiYjNDM7e1xuJiM0MztcdGJvb2wgdGhwO1xuJiM0MztcdGJvb2wgaHVnZXRsYjtcbiYjNDM7XHRib29sIHdyaXRlO1xuJiM0MztcdGJvb2wgc2hhcmVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZSlcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IHRydWUsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV90aHApXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gdHJ1ZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IHRydWUsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX3RocClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSB0cnVlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV9odWdldGxiKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gdHJ1ZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF9odWdldGxiKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gdHJ1ZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGUpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWQpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV90aHApXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gdHJ1ZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IHRydWUsXG4mIzQzO1x0LnNoYXJlZCA9IHRydWUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF90aHApXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gdHJ1ZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX2h1Z2V0bGIpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSB0cnVlLFxuJiM0MztcdC53cml0ZSA9IHRydWUsXG4mIzQzO1x0LnNoYXJlZCA9IHRydWUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF9odWdldGxiKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gdHJ1ZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAoZ3VwX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUztcbiYjNDM7XHRjaGFyICpwO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZXNpemUgPSAxMjggKiBNQjtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhcmlhbnQtXHUwMDNlaHVnZXRsYikge1xuJiM0MztcdFx0aWYgKCFocF9zaXplKVxuJiM0MztcdFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7SHVnZVRMQiBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSBcdTAwM2MgTlJfSFVHRV9QQUdFUylcbiYjNDM7XHRcdFx0U0tJUChyZXR1cm4sIFwmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0c2VsZi1cdTAwM2VzaXplID0gTlJfSFVHRV9QQUdFUyAqIGhwX3NpemU7XG4mIzQzO1x0XHRtbWFwX2ZsYWdzIHw9IE1BUF9IVUdFVExCO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZhcmlhbnQtXHUwMDNlc2hhcmVkKVxuJiM0MztcdFx0bW1hcF9mbGFncyA9IChtbWFwX2ZsYWdzIFx1MDAyNiB+TUFQX1BSSVZBVEUpIHwgTUFQX1NIQVJFRDtcbiYjNDM7XG4mIzQzO1x0LyogZ3VwX2ZkIGhhcyB0byBiZSBcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cbiYjNDM7XHRzZWxmLVx1MDAzZWd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbiYjNDM7XHRBU1NFUlRfR0Uoc2VsZi1cdTAwM2VndXBfZmQsIDApO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZWFkZHIgPSBtbWFwKE5VTEwsIHNlbGYtXHUwMDNlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdFx0ICBtbWFwX2ZsYWdzLCAtMSwgMCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9ORShzZWxmLVx1MDAzZWFkZHIsIE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGludCBlcnIgPSBlcnJubztcbiYjNDM7XG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZWd1cF9mZCk7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bW1hcCBmYWlsZWQ6ICVzXCYjMzQ7LCBzdHJlcnJvcihlcnIpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZXRocClcbiYjNDM7XHRcdG1hZHZpc2Uoc2VsZi1cdTAwM2VhZGRyLCBzZWxmLVx1MDAzZXNpemUsIE1BRFZfSFVHRVBBR0UpO1xuJiM0MztcdGVsc2UgaWYgKCF2YXJpYW50LVx1MDAzZWh1Z2V0bGIpXG4mIzQzO1x0XHRtYWR2aXNlKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplLCBNQURWX05PSFVHRVBBR0UpO1xuJiM0MztcbiYjNDM7XHRmb3IgKHAgPSBzZWxmLVx1MDAzZWFkZHI7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkclxuJiM0MztcdFx0XHQmIzQzOyBzZWxmLVx1MDAzZXNpemU7IHAgJiM0Mzs9IHBzaXplKCkpXG4mIzQzO1x0XHRwWzBdID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihndXBfdGVzdClcbiYjNDM7e1xuJiM0MztcdG11bm1hcChzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSk7XG4mIzQzO1x0Y2xvc2Uoc2VsZi1cdTAwM2VndXBfZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydW5fZ3VwX2NtZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4mIzQzO1x0XHRcdCBGSVhUVVJFX0RBVEEoZ3VwX3Rlc3QpICpzZWxmLFxuJiM0MztcdFx0XHQgY29uc3QgRklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KSAqdmFyaWFudCxcbiYjNDM7XHRcdFx0IHVuc2lnbmVkIGxvbmcgY29tbWFuZClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0ge1xuJiM0MztcdFx0XHQuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkcixcbiYjNDM7XHRcdFx0LnNpemUgPSBzZWxmLVx1MDAzZXNpemUsXG4mIzQzO1x0XHRcdC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gXHUwMDNjIDAgP1xuJiM0MztcdFx0XHRcdHNlbGYtXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldLFxuJiM0MztcdFx0XHQuZ3VwX2ZsYWdzID0gdmFyaWFudC1cdTAwM2V3cml0ZSA/IEZPTExfV1JJVEUgOiAwLFxuJiM0MztcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXVcJiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIGNvbW1hbmQsIFx1MDAyNmd1cCksIDApO1xuJiM0MztcdFx0QVNTRVJUX0VRKGd1cC5zaXplLCBzZWxmLVx1MDAzZXNpemUpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0JBU0lDX1RFU1QpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fQkFTSUNfVEVTVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdClcbiYjNDM7e1xuJiM0MztcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0ZBU1RfQkVOQ0hNQVJLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19mYXN0KVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fRkFTVF9CRU5DSE1BUkspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbiYjNDM7XHRpZiAoZmQgPT0gLTEpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRUFDQ0VTKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFTk9FTlQpIHtcbiYjNDM7XHRcdFx0RElSICpkZWJ1Z2ZzID0gb3BlbmRpcihcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Z1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIWRlYnVnZnMpXG4mIzQzO1x0XHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7TW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGNsb3NlZGlyKGRlYnVnZnMpO1xuJiM0MztcdFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtDaGVjayBDT05GSUdfR1VQX1RFU1QgaW4ga2VybmVsIGNvbmZpZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4mIzQzO1x0aWYgKGhwX3NpemUpXG4mIzQzO1x0XHRodWdldGxiX3NldHVwX2RlZmF1bHQoTlJfSFVHRV9QQUdFUyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0ZXN0X2hhcm5lc3NfcnVuKGFyZ2MsIGFyZ3YpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuaW5kZXggNTEwZGU5M2JlNjgxNC4uYzlkOGI0NDkxMjYzOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuQEAgLTI5LDcgJiM0MzsyOSw2IEBAXG4gI2luY2x1ZGUgXCYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XG4gc3RhdGljIGludCBucl9odWdldGxic2l6ZXM7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuaW5kZXggZTI2NDJlY2EwZDAyYi4uZmExYTY1MTk2M2ZkMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuQEAgLTEwLDkgJiM0MzsxMCw2IEBAXG4gICogYnVncy5cbiAgKi9cbiBcbi0jaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuLVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuQEAgLTMzLDYgJiM0MzszMCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL2V2ZW50ZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuIFxuIC8qXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbiYjMzk7dCBleHBvcnRlZFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbmluZGV4IDU1NWI0YjNkMTQzMDcuLjU3Y2Y3OTBjYTQ3OGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbkBAIC0xNCw3ICYjNDM7MTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIE1JTl9GUkVFX1BBR0VTXHQyMFxuICNkZWZpbmUgTlJfSFVHRV9QQUdFU1x0MTBcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuaW5kZXggMGYyYWFkMWI3ZGJkNi4uYTQ1OGJlY2Y1ODMyNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuQEAgLTE4LDcgJiM0MzsxOCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtZmQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXG4gI2RlZmluZSBQUk9URUNUSU9OIChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG5pbmRleCBlZDNkOTJlODYyZDg3Li45YjcyNGFmNjZlOTM4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuQEAgLTI2LDcgJiM0MzsyNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBERUZBVUxUX0xFTkdUSF9NQiAxMFVMXG4gI2RlZmluZSBNQl9UT19CWVRFUyh4KSAoeCAqIDEwMjQgKiAxMDI0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXG5pbmRleCAzZmY3ZjA2MmI3ZWI0Li5mNDUxNGRhNDllMWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuQEAgLTI5LDcgJiM0MzsyOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG5pbmRleCA0YWY5ZDNkYjdiNWI2Li5kOTU2NTIxOTM3OGFhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xuQEAgLTIyLDEwICYjNDM7MjIsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXRmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNpZm5kZWYgTUFEVl9TT0ZUX09GRkxJTkVcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxuQEAgLTg1LDggJiM0Mzs4NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9yaWdfZW5hYmxlX3NvZnRfb2ZmbGluZSA9IC0xVUw7XG4gXG4gLypcbiAgKiBSdW5zIGZyb20gYW4gYXRleGl0IGhhbmRsZXIsIHNvIGl0IG11c3Qgbm90IGNhbGwgYW55dGhpbmcgdGhhdFxuLSAqIGV4aXRzIG9uIGZhaWx1cmU6IHdyaXRlX251bSgpIHdvdWxkIHJlLWVudGVyIGV4aXQoKSB0aHJvdWdoXG4tICoga3NmdF9leGl0X2ZhaWxfbXNnKCkuXG4mIzQzOyAqIGV4aXRzIG9uIGZhaWx1cmUuXG4gICovXG4gc3RhdGljIHZvaWQgcmVzdG9yZV9lbmFibGVfc29mdF9vZmZsaW5lKHZvaWQpXG4ge1xuQEAgLTE1Miw3ICYjNDM7MTUxLDEwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29mdF9vZmZsaW5lX2NvbW1vbihpbnQgZW5hYmxlX3NvZnRfb2ZmbGluZSlcbiBcdGh1Z2VwYWdlc2l6ZV9rYiA9IGZpbGVfc3RhdC5mX2JzaXplIC8gMTAyNDtcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0h1Z2VwYWdlc2l6ZSBpcyAlbGRrQlxcblwmIzM0OywgaHVnZXBhZ2VzaXplX2tiKTtcbiBcbi1cdHdyaXRlX251bShFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIGVuYWJsZV9zb2Z0X29mZmxpbmUpO1xuJiM0MztcdHJldCA9IHdyaXRlX251bShFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIGVuYWJsZV9zb2Z0X29mZmxpbmUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHdyaXRlIHRvICVzOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIHN0cmVycm9yKC1yZXQpKTtcbiBcbiBcdG5yX2h1Z2VwYWdlc19iZWZvcmUgPSBodWdldGxiX25yX2RlZmF1bHRfcGFnZXMoKTtcbiBcbkBAIC0xODksNiAmIzQzOzE5MSw4IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29mdF9vZmZsaW5lX2NvbW1vbihpbnQgZW5hYmxlX3NvZnRfb2ZmbGluZSlcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4ge1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuIFx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiBcbiBcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KDgpKVxuQEAgLTE5Niw3ICYjNDM7MjAwLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcbiBcdGtzZnRfc2V0X3BsYW4oMik7XG4gXG4tXHRvcmlnX2VuYWJsZV9zb2Z0X29mZmxpbmUgPSByZWFkX251bShFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgpO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKEVOQUJMRV9TT0ZUX09GRkxJTkVfUEFUSCwgXHUwMDI2b3JpZ19lbmFibGVfc29mdF9vZmZsaW5lKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O0ZhaWxlZCB0byByZWFkICVzOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIHN0cmVycm9yKC1yZXQpKTtcbiYjNDM7XG4gXHRhdGV4aXQocmVzdG9yZV9lbmFibGVfc29mdF9vZmZsaW5lKTtcbiBcbiBcdHRlc3Rfc29mdF9vZmZsaW5lX2NvbW1vbigxKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuaW5kZXggZmI0NjAwNTcwZTEzMS4uOTQ5NTk3NGVjY2JlYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcbkBAIC0yMCw3ICYjNDM7MjAsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaWZuZGVmIFNUQVRYX0RJT0FMSUdOXG4gI2RlZmluZSBTVEFUWF9ESU9BTElHTlx0XHQweDAwMDAyMDAwVVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbmluZGV4IDJkYzE1ODA1NGY2NjYuLjU2YzVhODUzM2U5ZDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbkBAIC0xMCw3ICYjNDM7MTAsNiBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcbkBAIC0yNSw3ICYjNDM7MjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCBmODI2NzNmNWY2YjQ3Li41MjUxMDhjYWNlNTRhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbkBAIC0yMiw3ICYjNDM7MjIsNiBAQFxuICNpbmNsdWRlIFwmIzM0O2xpbnV4L21hZ2ljLmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuQEAgLTEyMiw2ICYjNDM7MTIxLDcgQEAgc3RhdGljIHZvaWQgZ2V0X2ZpbmZvKGNvbnN0IGNoYXIgKmRpcilcbiBcdGNoYXIgYnVmWzEgXHUwMDNjXHUwMDNjIDEwXTtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4gXHRjaGFyICpzdHIsICplbmQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGZpbmZvLmRpciA9IGRpcjtcbiBcdGlmIChzdGF0KGZpbmZvLmRpciwgXHUwMDI2cGF0aF9zdGF0KSlcbkBAIC0xNDIsOCAmIzQzOzE0Miw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRcdCAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKVxuIFx0ICAgIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3JlYWRfZmlsZSh1ZXZlbnQpXCYjMzQ7KTtcbiYjNDM7XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkX2ZpbGUoJXMpOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoLXJldCkpO1xuIFx0aWYgKHN0cnN0cihidWYsIFwmIzM0O0RFVlRZUEU9ZGlza1wmIzM0OykpIHtcbiBcdFx0LyogRm91bmQgaXQgKi9cbiBcdFx0aWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG5AQCAtMzI0LDcgJiM0MzszMjUsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIHtcbiBcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XG4gXHRjb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7XG4tXHRpbnQgZmQ7XG4mIzQzO1x0aW50IGZkLCByZXQ7XG4gXHR2b2lkICpwO1xuIFx0dW5zaWduZWQgbG9uZyBzaXplO1xuIFxuQEAgLTM2Miw3ICYjNDM7MzYzLDExIEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttbWFwKClcJiMzNDspO1xuIFxuIFx0LyogRHJvcCBwYWdlIGNhY2hlICovXG4tXHR3cml0ZV9maWxlKFwmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1wmIzM0OywgXCYjMzQ7M1wmIzM0OywgMik7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShcJiMzNDsvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNcJiMzNDssIFwmIzM0OzNcJiMzNDssIDIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7d3JpdGVfZmlsZShkcm9wX2NhY2hlcyk6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiYjNDM7XG4gXHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdHJldHVybiBwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li42NzExZjRjNjEzNzExIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5AQCAtMTUsNyAmIzQzOzE1LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFx1MDAzY2luY2x1ZGUvdmRzby90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIEtTTV9TWVNGU19QQVRIIFwmIzM0Oy9zeXMva2VybmVsL21tL2tzbS9cJiMzNDtcbiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5pbmRleCBmMTlkNTNjNjk1NzY0Li5hMzVlMmI1N2UwNWIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5AQCAtNSw3ICYjNDM7NSw2IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuQEAgLTE2LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFRXT01FR1x0XHQoMlx1MDAzY1x1MDAzYzIwKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggZDlhNGZiNzgyZWNmZS4uMDM4OThiNGY2Y2RhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5AQCAtMjQsNyAmIzQzOzI0LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFBBR0VNQVBfQklUU19BTExcdFx0KFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHxcdFxcXG4gXHRcdFx0XHRcdCBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuaW5kZXggODJjNmU5NmVhNmViMy4uZjllYzE0MDhhNmUzMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbkBAIC0xNCw3ICYjNDM7MTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuIFxuICNpZm5kZWYgUFJfVEhQX0RJU0FCTEVfRVhDRVBUX0FEVklTRURcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5pbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5AQCAtNDUsOCAmIzQzOzQ1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7cGtleS1oZWxwZXJzLmhcJiMzNDtcbiBcbiB1NjQgc2hhZG93X3BrZXlfcmVnO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IGQwOWY5ZjZhMzg0ZWUuLmFlMGFiNWVmYWJhZTYgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0xMzAsMzAgJiM0MzsxMzAsNiBAQCB0ZXN0X3NlbGVjdGVkKCkge1xuIFx0ZmlcbiB9XG4gXG4tcnVuX2d1cF9tYXRyaXgoKSB7XG4tICAgICMgLXQ6IHRocD1vbiwgLVQ6IHRocD1vZmYsIC1IOiBodWdldGxiPW9uXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XG4tXG4tICAgIGZvciBodWdlIGluIC10IC1UIFwmIzM0Oy1IIC1tICRodWdldGxiX21iXCYjMzQ7OyBkb1xuLSAgICAgICAgIyAtdTogZ3VwLWZhc3QsIC1VOiBndXAtYmFzaWMsIC1hOiBwaW4tZmFzdCwgLWI6IHBpbi1iYXNpYywgLUw6IHBpbi1sb25ndGVybVxuLSAgICAgICAgZm9yIHRlc3RfY21kIGluIC11IC1VIC1hIC1iIC1MOyBkb1xuLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wXG4tICAgICAgICAgICAgZm9yIHdyaXRlIGluIC13IC1XOyBkb1xuLSAgICAgICAgICAgICAgICAjIC1TOiBzaGFyZWRcbi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TIFwmIzM0OyBcJiMzNDs7IGRvXG4tICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsXG4tICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaXQmIzM5O3MgZGVmYXVsdCB0aHAgc2l6ZSAob3IgMk0gb24geDg2KSwgMTIzIHRvXG4tICAgICAgICAgICAgICAgICAgICAjIGp1c3QgdGVzdCBwYXJ0aWFsIGd1cCB3aGVuIGhpdCBhIGh1Z2UgaW4gd2hhdGV2ZXIgZm9ybVxuLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiBcJiMzNDstbiAxXCYjMzQ7IFwmIzM0Oy1uIDUxMlwmIzM0OyBcJiMzNDstbiAxMjNcJiMzNDsgXCYjMzQ7LW4gLTFcJiMzNDs7IGRvXG4tICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCBcXFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGh1Z2UgJHRlc3RfY21kICR3cml0ZSAkc2hhcmUgJG51bVxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgZG9uZVxuLSAgICBkb25lXG4tfVxuLVxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcbiBBUkNINjRTVFI9XCYjMzQ7YXJtNjQgbWlwczY0IHBhcmlzYzY0IHBwYzY0IHBwYzY0bGUgcmlzY3Y2NCBzMzkweCBzcGFyYzY0IHg4Nl82NFwmIzM0O1xuIGlmIFsgLXogXCYjMzQ7JEFSQ0hcJiMzNDsgXTsgdGhlblxuQEAgLTI3NSwxOCAmIzQzOzI1MSw3IEBAIGZpXG4gXG4gQ0FURUdPUlk9XCYjMzQ7bW1hcFwmIzM0OyBydW5fdGVzdCAuL21hcF9maXhlZF9ub3JlcGxhY2VcbiBcbi1pZiAkUlVOX0FMTDsgdGhlblxuLSAgICBydW5fZ3VwX21hdHJpeFxuLWVsc2Vcbi0gICAgIyBnZXRfdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXG4tICAgIENBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxuLSAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIC0xXG4tICAgICMgcGluX3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFya1xuLSAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIDFcbi0gICAgQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAtMVxuLWZpXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XG4tQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtY3QgLUYgMHgxIDAgMTkgMHgxMDAwXG4mIzQzO0NBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwXG4gQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfbG9uZ3Rlcm1cbiBcbiBDQVRFR09SWT1cJiMzNDt1c2VyZmF1bHRmZFwmIzM0OyBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0c1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggNWYyNzg5MTNjNGQ3NS4uN2Y2NDliNjczMzU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtOSw3ICYjNDM7OSw2IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCBcJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXBcJiMzNDtcbiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCBjMDFkMjI3ZDdmZDZkLi42OGY1MDhjOWEzNTVmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTIxLDcgJiM0MzsyMSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gdWludDY0X3QgcGFnZXNpemU7XG4gdW5zaWduZWQgaW50IHBhZ2VzaGlmdDtcbkBAIC0xNDUsNyAmIzQzOzE0NCwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0aWYgKHJldCBcdTAwM2U9IElOUFVUX01BWClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXG4tXHR3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgJiM0MzsgMSk7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7d3JpdGVfZmlsZSglcyk6ICVzXFxuXCYjMzQ7LCBTUExJVF9ERUJVR0ZTLFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiB9XG4gXG4gc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuQEAgLTE0LDcgJiM0MzsxNCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaWYgIWRlZmluZWQoTUFQX0hVR0VUTEIpXG4gI2RlZmluZSBNQVBfSFVHRVRMQlx0MHg0MDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuaW5kZXggOGViMGM1NjMwZTdlMy4uOTZmNzI4OThlYmUwYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5AQCAtMTcsNyAmIzQzOzE3LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gaW50IGJhY2tpbmdfZmQgPSAtMTtcbiBpbnQgbW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcbmluZGV4IDkyYTIxYjk3Zjc0NWEuLjA3MjM4NDNhNzYyNmIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5AQCAtMzcsNyAmIzQzOzM3LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFVGRkRfRkxBR1NcdChPX0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSlcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuaW5kZXggNTcyYzI1MTZlODc0ZC4uYzQ4ZWFhYjhlNzVjZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbkBAIC03LDggJiM0Mzs3LDggQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc3NlcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3VmZmQtY29tbW9uLmhcJiMzNDtcbiBcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG5pbmRleCBlMjRkN2JhMDBiNDQxLi41YTM1NGE2NjRkMWY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcbkBAIC0xMSw3ICYjNDM7MTEsNiBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIC8qXG4gICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3Nlc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggODBiYzlmNTk3YjUyMS4uNDc1MWRiNzk4YzNhYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtODg5LDExMSAmIzQzOzg4OSw1NCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0cmV0dXJuIHJldCBcdTAwM2UgMCA/IDAgOiAtZXJybm87XG4gfVxuIFxuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdGludCBmZDtcbi1cdHNzaXplX3QgbnVtcmVhZDtcbi1cbi1cdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XG4tXHRpZiAoZmQgPT0gLTEpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4tXHRpZiAobnVtcmVhZCBcdTAwM2MgMSkge1xuLVx0XHRjbG9zZShmZCk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0YnVmW251bXJlYWRdID0gJiMzOTtcXDAmIzM5Oztcbi1cdGNsb3NlKGZkKTtcbi1cbi1cdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0aW50IGZkLCBzYXZlZF9lcnJubztcbi1cdHNzaXplX3QgbnVtd3JpdHRlbjtcbi1cbi1cdGlmIChidWZsZW4gXHUwMDNjIDIpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtJbmNvcnJlY3QgYnVmZmVyIGxlbjogJXp1XFxuXCYjMzQ7LCBidWZsZW4pO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIG9wZW4gZmFpbGVkOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbi1cbi1cdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdHNhdmVkX2Vycm5vID0gZXJybm87XG4tXHRjbG9zZShmZCk7XG4tXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuLVx0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApIHtcbi1cdFx0aWYgKGlnbm9yZV9laW52YWwgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTClcbi1cdFx0XHRyZXR1cm47XG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBwYXRoLCAoaW50KShidWZsZW4gLSAxKSxcbi1cdFx0XHRcdGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdH1cbi1cdGlmIChudW13cml0dGVuICE9IGJ1ZmxlbiAtIDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcblwmIzM0Oyxcbi1cdFx0XHRcdHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLCBidWYsIGJ1ZmxlbiAtIDEsIG51bXdyaXR0ZW4pO1xuLX1cbi1cbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIGJ1ZmxlbiwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTtcbi19XG4tXG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKVxuLXtcbi1cdGNoYXIgYnVmWzIxXTtcbi1cbi1cdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7cmVhZF9maWxlKClcJiMzNDspO1xuLVxuLVx0cmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0Y2hhciBidWZbMjFdO1xuLVxuLVx0c3ByaW50ZihidWYsIFwmIzM0OyVsdVwmIzM0OywgbnVtKTtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEsIGlnbm9yZV9laW52YWwpO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbi17XG4tXHRyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuLXtcbi1cdHJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyB0cnVlKTtcbi19XG4tXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htYWxsLCBzaG1tYXg7XG4gXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKVxuIHtcbi1cdGlmIChzaG1tYXgpXG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heFwmIzM0Oywgc2htbWF4KTtcbi1cdGlmIChzaG1hbGwpXG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0Oywgc2htYWxsKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc2htbWF4KSB7XG4mIzQzO1x0XHRyZXQgPSB3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIHNobW1heCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgc2htbWF4OiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHNobWFsbCkge1xuJiM0MztcdFx0cmV0ID0gd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBzaG1hbGwpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O0ZhaWxlZCB0byByZXN0b3JlIHNobWFsbDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4mIzQzO1x0fVxuIH1cbiBcbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7LCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiBcbi1cdHZhbCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7KTtcbiBcdGlmICh2YWwgXHUwMDNjIGxlbmd0aCkge1xuLVx0XHR3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIGxlbmd0aCk7XG4mIzQzO1x0XHRyZXQgPSB3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIGxlbmd0aCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobW1heDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBsZW5ndGgsIHN0cmVycm9yKC1yZXQpKTtcbiBcdFx0c2htbWF4ID0gdmFsO1xuIFx0fVxuIFxuLVx0dmFsID0gcmVhZF9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcJiMzNDspO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiBcdGlmICh2YWwgXHUwMDNjIG5yKSB7XG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0OywgbnIpO1xuJiM0MztcdFx0cmV0ID0gd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBucik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBuciwgc3RyZXJyb3IoLXJldCkpO1xuIFx0XHRzaG1hbGwgPSB2YWw7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuaW5kZXggOWE0OWFmODg3MDJlNC4uNjRhODZlOGEwYzQxYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5AQCAtOCw2ICYjNDM7OCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2UgLyogX1NDX1BBR0VTSVpFICovXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2ZpbGVfdXRpbHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCBcdTAwM2NcdTAwM2MgKG5yKSlcbiAjZGVmaW5lIFBNX1NPRlRfRElSVFkgICAgICAgICAgICAgICAgIEJJVF9VTEwoNTUpXG5AQCAtMTY2LDEyICYjNDM7MTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVx0KCgoZW50KSBcdTAwMjYgKDF1bGwgXHUwMDNjXHUwMDNjIDYzKSkgIT0gMClcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcdCgoZW50KSBcdTAwMjYgKCgxdWxsIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSlcbiBcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpO1xuIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvbGliL21tLywgdG9vbHMvbW0vLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBkb2N1bWVudGF0aW9uIChEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCksIE1BSU5UQUlORVJTLCBhbmQgS2NvbmZpZyBoZWxwIHRleHQgKG1tL0tjb25maWcpLiBObyBjb21waWxlZCBrZXJuZWwgQyBsb2dpYyBpcyBhZmZlY3RlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MTMwZDc1MjcxZDc0M2EyYjIxZGJjYjRhNmIzNjViYTA0Zjc0MGQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTI6NDY6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CmluZGV4IGMxNmNhMTYzYjU1ZTMuLmUwYWNlZGJkMWQ0ODYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CkBAIC0yMjYsMTUgJiM0MzsyMjYsNiBAQCB3aWxsIGJlIHBpbm5lZCBsb25ndGVybSwgYW5kIHdob3NlIGRhdGEgd2lsbCBiZSBhY2Nlc3NlZC4KIAogVW5pdCB0ZXN0aW5nCiA9PT09PT09PT09PT0KLVRoaXMgZmlsZTo6Ci0KLSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jCi0KLWhhcyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFwcGVyIGZ1bmN0aW9uczoKLQotKiBQSU5fRkFTVF9CRU5DSE1BUksgKC4vZ3VwX3Rlc3QgLWEpCi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKQotCiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkCiBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIHZpYSB0d28gbmV3IC9wcm9jL3Ztc3RhdCBlbnRyaWVzOiA6OgogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDM1MjYyYWEzZTY3ZWYuLmM0N2U2NTVjNDExMTIgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xNzE4Nyw4ICYjNDM7MTcxODcsOSBAQCBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW0KIEY6CW1tL2d1cC5jCiBGOgltbS9ndXBfdGVzdC5jCiBGOgltbS9ndXBfdGVzdC5oCiYjNDM7RjoJdG9vbHMvbW0vZ3VwX2JlbmNoLmMKJiM0MztGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMKLUY6CXRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKIAogTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKQogTToJQW5kcmV3IE1vcnRvbiAmbHQ7YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZyZndDsKQEAgLTE3Mjk1LDYgJiM0MzsxNzI5Niw3IEBAIEY6CW1tL21lbW9yeS10aWVycy5jCiBGOgltbS9wYWdlX2lkbGUuYwogRjoJbW0vcGdhbGxvYy10cmFjay5oCiBGOgltbS9wcm9jZXNzX3ZtX2FjY2Vzcy5jCiYjNDM7RjoJdG9vbHMvbGliL21tLwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vCiAKIE1FTU9SWSBNQU5BR0VNRU5UIC0gTlVNQSBNRU1CTE9DS1MgQU5EIE5VTUEgRU1VTEFUSU9OCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCBjMTgwZDQwY2Q2NzEyLi42MWFiMWI4YTJlYmRmIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWcKQEAgLTEyOTEsMjQgJiM0MzsxMjkxLDE5IEBAIGNvbmZpZyBQRVJDUFVfU1RBVFMKIAkgIGJlIHVzZWQgdG8gaGVscCB1bmRlcnN0YW5kIHBlcmNwdSBtZW1vcnkgdXNhZ2UuCiAKIGNvbmZpZyBHVVBfVEVTVAotCWJvb2wgJiMzNDtFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzJiMzNDsKJiM0MzsJYm9vbCAmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHMgYW5kIGJlbmNobWFya3MmIzM0OwogCWRlcGVuZHMgb24gREVCVUdfRlMKIAloZWxwCiAJICBQcm92aWRlcyAvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdCwgd2hpY2ggaW4gdHVybiBwcm92aWRlcyBhIHdheQotCSAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yCi0JICB0aGUgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpIGZhbWlseSBvZiBBUEkgY2FsbHMuCiYjNDM7CSAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgYW5kCiYjNDM7CSAgYmVuY2htYXJrcyBmb3IgdGhlIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSBmYW1pbGllcwomIzQzOwkgIG9mIEFQSSBjYWxscy4KIAotCSAgVGhlc2UgdGVzdHMgaW5jbHVkZSBiZW5jaG1hcmsgdGVzdGluZyBvZiB0aGUgX2Zhc3QgdmFyaWFudHMgb2YKLQkgIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSwgYXMgd2VsbCBhcyBzbW9rZSB0ZXN0cyBvZgomIzQzOwkgIFRoZXNlIGluY2x1ZGUgYmVuY2htYXJrIHRlc3Rpbmcgb2YgdGhlIF9mYXN0IHZhcmlhbnRzIG9mCiYjNDM7CSAgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpLCBhcyB3ZWxsIGFzIHRlc3RzIG9mCiAJICB0aGUgbm9uLV9mYXN0IHZhcmlhbnRzLgogCi0JICBUaGVyZSBpcyBhbHNvIGEgc3ViLXRlc3QgdGhhdCBhbGxvd3MgcnVubmluZyBkdW1wX3BhZ2UoKSBvbiBhbnkKLQkgIG9mIHVwIHRvIGVpZ2h0IHBhZ2VzIChzZWxlY3RlZCBieSBjb21tYW5kIGxpbmUgYXJncykgd2l0aGluIHRoZQotCSAgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlIHBhZ2VzIGFyZSBlaXRoZXIgcGlubmVkIHZpYQotCSAgcGluX3VzZXJfcGFnZXMqKCksIG9yIHBpbm5lZCB2aWEgZ2V0X3VzZXJfcGFnZXMqKCksIGFzIHNwZWNpZmllZAotCSAgYnkgb3RoZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLQotCSAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKJiM0MzsJICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYW5kIHRvb2xzL21tL2d1cF9iZW5jaC5jLgogCiBjb21tZW50ICYjMzQ7R1VQX1RFU1QgbmVlZHMgdG8gaGF2ZSBERUJVR19GUyBlbmFibGVkJiMzNDsKIAlkZXBlbmRzIG9uICFHVVBfVEVTVCAmYW1wOyZhbXA7ICFERUJVR19GUwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOWIyMjM3ZTk4MjNlOQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMKQEAgLTAsMCAmIzQzOzEsMTA2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2ZpbGVfdXRpbHMuaCYjMzQ7CiYjNDM7CiYjNDM7aW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVycjsKJiM0MzsJc3NpemVfdCBudW1yZWFkOwomIzQzOwomIzQzOwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgPT0gLTEpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwludW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTsKJiM0MzsJaWYgKG51bXJlYWQgJmx0OyAxKSB7CiYjNDM7CQllcnIgPSBudW1yZWFkID8gZXJybm8gOiBFTk9EQVRBOwomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcmV0dXJuIC1lcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnVmW251bXJlYWRdID0gJiMzOTtcMCYjMzk7OwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCiYjNDM7ewomIzQzOwlpbnQgZmQsIHNhdmVkX2Vycm5vOwomIzQzOwlzc2l6ZV90IG51bXdyaXR0ZW47CiYjNDM7CiYjNDM7CWlmIChidWZsZW4gJmx0OyAyKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7CiYjNDM7CWlmIChmZCA9PSAtMSkKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CW51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTsKJiM0MzsJc2F2ZWRfZXJybm8gPSBlcnJubzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwomIzQzOwlpZiAobnVtd3JpdHRlbiAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLXNhdmVkX2Vycm5vOwomIzQzOwomIzQzOwlpZiAobnVtd3JpdHRlbiAhPSAoc3NpemVfdCkoYnVmbGVuIC0gMSkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsJY2hhciBidWZbMjFdOwomIzQzOwljaGFyICplbmQ7CiYjNDM7CiYjNDM7CWlmICghbnVtKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIFJlamVjdCBzaWducyBhbmQgbGVhZGluZyB3aGl0ZXNwYWNlIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IHN0cnRvdWwoKSAqLwomIzQzOwlpZiAoYnVmWzBdICZsdDsgJiMzOTswJiMzOTsgfHwgYnVmWzBdICZndDsgJiMzOTs5JiMzOTspCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZXJybm8gPSAwOwomIzQzOwl2YWwgPSBzdHJ0b3VsKGJ1ZiwgJmFtcDtlbmQsIDEwKTsKJiM0MzsJaWYgKGVycm5vKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJLyogT25seSBhbGxvdyBhIG5ld2xpbmUgYWZ0ZXIgdGhlIG51bWJlciAqLwomIzQzOwlpZiAoKmVuZCA9PSAmIzM5O1xuJiMzOTspCiYjNDM7CQllbmQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwlpZiAoKmVuZCAhPSAmIzM5O1wwJiMzOTspCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJKm51bSA9IHZhbDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsyMV07CiYjNDM7CiYjNDM7CXNwcmludGYoYnVmLCAmIzM0OyVsdSYjMzQ7LCBudW0pOwomIzQzOwlyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTsKJiM0MzsJcmV0dXJuIHJldCA9PSAtRUlOVkFMID8gMCA6IHJldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41MGRhYTgyYzJiMmI0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaApAQCAtMCwwICYjNDM7MSwxMyBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7I2lmbmRlZiBfX01NX0ZJTEVfVVRJTFNfSF9fCiYjNDM7I2RlZmluZSBfX01NX0ZJTEVfVVRJTFNfSF9fCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGRlZi5oJmd0OwomIzQzOwomIzQzO2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTsKJiM0MztpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwomIzQzO2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pOwomIzQzO2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pOwomIzQzO2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7CiYjNDM7CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMKc2ltaWxhcml0eSBpbmRleCA4NyUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYwpyZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMKaW5kZXggZDc5MTdkY2UzYWJhYy4uYWJkOWY3MTgyZjg4ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYwpAQCAtOCwxMiAmIzQzOzgsMTggQEAKICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKIAotI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZmlsZV91dGlscy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgVEhQX1NZU0ZTICYjMzQ7L3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvJiMzNDsKICNkZWZpbmUgTUFYX1NFVFRJTkdTX0RFUFRIIDQKJiM0MzsKJiM0MzsjaWZuZGVmIEFSUkFZX1NJWkUKJiM0MzsjZGVmaW5lIEFSUkFZX1NJWkUoYXJyKSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3Nfc3RhY2tbTUFYX1NFVFRJTkdTX0RFUFRIXTsKIHN0YXRpYyBpbnQgc2V0dGluZ3NfaW5kZXg7CiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzYXZlZF9zZXR0aW5nczsKQEAgLTQ4LDYgJiM0Mzs1NCwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNobWVtX2VuYWJsZWRfc3RyaW5nc1tdID0gewogCU5VTEwKIH07CiAKJiM0MztzdGF0aWMgdm9pZCBwcmludF9maWxlX2FjY2Vzc19lcnJvcihjb25zdCBjaGFyICpwYXRoLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcHJpbnRmKCYjMzQ7IyAlczogJXMgKCVkKVxuJiMzNDssIHBhdGgsIHN0cmVycm9yKC1yZXQpLCAtcmV0KTsKJiM0Mzt9CiYjNDM7CiBpbnQgdGhwX3JlYWRfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10pCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKQEAgLTYxLDggJiM0Mzs3Miw5IEBAIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSkKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCX0KIAotCWlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7Ci0JCXBlcnJvcihwYXRoKTsKJiM0MzsJcmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQogCkBAIC0xMDMsMTIgJiM0MzsxMTUsMTcgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbCkKIAkJcHJpbnRmKCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXG4mIzM0OywgX19mdW5jX18pOwogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQotCXdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSAmIzQzOyAxKTsKJiM0MzsJcmV0ID0gd3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICYjNDM7IDEpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiB9CiAKIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsJdW5zaWduZWQgbG9uZyBudW07CiAJaW50IHJldDsKIAogCXJldCA9IHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCBUSFBfU1lTRlMgJiMzNDslcyYjMzQ7LCBuYW1lKTsKQEAgLTExNiw3ICYjNDM7MTMzLDEzIEBAIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpCiAJCXByaW50ZigmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xuJiMzNDssIF9fZnVuY19fKTsKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCX0KLQlyZXR1cm4gcmVhZF9udW0ocGF0aCk7CiYjNDM7CXJldCA9IHJlYWRfbnVtKHBhdGgsICZhbXA7bnVtKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbnVtOwogfQogCiB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pCkBAIC0xMjksNyAmIzQzOzE1MiwxMSBAQCB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pCiAJCXByaW50ZigmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xuJiMzNDssIF9fZnVuY19fKTsKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCX0KLQl3cml0ZV9udW0ocGF0aCwgbnVtKTsKJiM0MzsJcmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KIH0KIAogdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncykKQEAgLTE1Nyw4ICYjNDM7MTg0LDE1IEBAIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpCiAJCS5tYXhfcHRlc19zaGFyZWQgPSB0aHBfcmVhZF9udW0oJiMzNDtraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZCYjMzQ7KSwKIAkJLnBhZ2VzX3RvX3NjYW4gPSB0aHBfcmVhZF9udW0oJiMzNDtraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW4mIzM0OyksCiAJfTsKLQlpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkKLQkJc2V0dGluZ3MtJmd0O3JlYWRfYWhlYWRfa2IgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoKTsKJiM0MzsJaWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHsKJiM0MzsJCWludCByZXQgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLAomIzQzOwkJCQkgICAmYW1wO3NldHRpbmdzLSZndDtyZWFkX2FoZWFkX2tiKTsKJiM0MzsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpOwomIzQzOwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJCX0KJiM0MzsJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE5SX09SREVSUzsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKCEoKDEgJmx0OyZsdDsgaSkgJmFtcDsgb3JkZXJzKSkgewpAQCAtMjA4LDggJiM0MzsyNDIsMTUgQEAgdm9pZCB0aHBfd3JpdGVfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpCiAJdGhwX3dyaXRlX251bSgmIzM0O2todWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkJiMzNDssIGtodWdlcGFnZWQtJmd0O21heF9wdGVzX3NoYXJlZCk7CiAJdGhwX3dyaXRlX251bSgmIzM0O2todWdlcGFnZWQvcGFnZXNfdG9fc2NhbiYjMzQ7LCBraHVnZXBhZ2VkLSZndDtwYWdlc190b19zY2FuKTsKIAotCWlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKQotCQl3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgc2V0dGluZ3MtJmd0O3JlYWRfYWhlYWRfa2IpOwomIzQzOwlpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkgewomIzQzOwkJaW50IHJldCA9IHdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLAomIzQzOwkJCQkgICAgc2V0dGluZ3MtJmd0O3JlYWRfYWhlYWRfa2IpOwomIzQzOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHJldCk7CiYjNDM7CQkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwkJfQomIzQzOwl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgTlJfT1JERVJTOyBpJiM0MzsmIzQzOykgewogCQlpZiAoISgoMSAmbHQ7Jmx0OyBpKSAmYW1wOyBvcmRlcnMpKQpAQCAtMzA3LDggJiM0MzszNDgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX190aHBfc3VwcG9ydGVkX29yZGVycyhib29sIGlzX3NobWVtKQogCQl9CiAKIAkJcmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCQlpZiAocmV0KQotCQkJb3JkZXJzIHw9IDFVTCAmbHQ7Jmx0OyBpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWlmIChyZXQgIT0gLUVOT0VOVCkgewomIzQzOwkJCQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwomIzQzOwkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CQkJfQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJb3JkZXJzIHw9IDFVTCAmbHQ7Jmx0OyBpOwogCX0KIAogCXJldHVybiBvcmRlcnM7CkBAIC0zODIsOCAmIzQzOzQzMCw3IEBAIGludCBkZXRlY3RfaHVnZXRsYl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwgaW50IG1heCkKIAkJaWYgKHNzY2FuZihlbnRyeS0mZ3Q7ZF9uYW1lLCAmIzM0O2h1Z2VwYWdlcy0lenVrQiYjMzQ7LCAmYW1wO2tiKSAhPSAxKQogCQkJY29udGludWU7CiAJCXNpemVzW2NvdW50JiM0MzsmIzQzO10gPSBrYiAqIDEwMjQ7Ci0JCWtzZnRfcHJpbnRfbXNnKCYjMzQ7W0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXG4mIzM0OywKLQkJCSAgICAgICBrYik7CiYjNDM7CQlwcmludGYoJiMzNDsjIFtJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxuJiMzNDssIGtiKTsKIAl9CiAJY2xvc2VkaXIoZGlyKTsKIAlyZXR1cm4gY291bnQ7CkBAIC00MjUsMjggJiM0Mzs0NzIsNDkgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl9zeXNmc19wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsJdW5zaWduZWQgbG9uZyBucjsKJiM0MzsJaW50IHJldDsKIAogCWh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwogCi0JcmV0dXJuIHJlYWRfbnVtKHBhdGgpOwomIzQzOwlyZXQgPSByZWFkX251bShwYXRoLCAmYW1wO25yKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbnI7CiB9CiAKIHZvaWQgaHVnZXRsYl9zZXRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKQogewogCWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CWludCByZXQ7CiAKIAlodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCAmIzM0O25yX2h1Z2VwYWdlcyYjMzQ7KTsKIAotCXdyaXRlX251bV9pZ25vcmVfZWludmFsKHBhdGgsIG5yKTsKJiM0MzsJcmV0ID0gd3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiB9CiAKIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yOwomIzQzOwlpbnQgcmV0OwogCiAJaHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgJiMzNDtmcmVlX2h1Z2VwYWdlcyYjMzQ7KTsKIAotCXJldHVybiByZWFkX251bShwYXRoKTsKJiM0MzsJcmV0ID0gcmVhZF9udW0ocGF0aCwgJmFtcDtucik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5yOwogfQogCiBzdGF0aWMgYm9vbCBfX2h1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKQpAQCAtNTAyLDcgJiM0Mzs1NzAsOCBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyBzaXplc1tdLAogCQlyZXR1cm4gMDsKIAogCWlmIChucl9lbmFibGVkICZndDsgbWF4KSB7Ci0JCWtzZnRfcHJpbnRfbXNnKCYjMzQ7ZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxuJiMzNDssIG5yX2VuYWJsZWQsIG1heCk7CiYjNDM7CQlwcmludGYoJiMzNDsjIGRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcbiYjMzQ7LAomIzQzOwkJICAgICAgIG5yX2VuYWJsZWQsIG1heCk7CiAJCW5yX2VuYWJsZWQgPSBtYXg7CiAJfQogCkBAIC01NzQsOCAmIzQzOzY0MywxMCBAQCBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCh2b2lkKQogCiBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX3NpZ2hhbmRsZXIoaW50IHNpZykKIHsKJiM0MzsJKHZvaWQpc2lnOwomIzQzOwogCS8qIGV4aXQoKSB3aWxsIGludm9rZSB0aGUgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQgaGFuZGxlci4gKi8KLQlleGl0KEtTRlRfRkFJTCk7CiYjNDM7CWV4aXQoRVhJVF9GQUlMVVJFKTsKIH0KIAogdm9pZCBodWdlcGFnZV9zYXZlX3NldHRpbmdzKGJvb2wgdGhwLCBib29sIGh1Z2V0bGIpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmgKcmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oCmRpZmYgLS1naXQgYS90b29scy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvbW0vLmdpdGlnbm9yZQppbmRleCAxNDQ2YTY1OWU1NDA4Li4xNTRkNzQwYmUwMmU4IDEwMDY0NAotLS0gYS90b29scy9tbS8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tLy5naXRpZ25vcmUKQEAgLTMsMyAmIzQzOzMsNCBAQCBzbGFiaW5mbwogcGFnZS10eXBlcwogcGFnZV9vd25lcl9zb3J0CiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzO2d1cF9iZW5jaApkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZQppbmRleCA4NTgxODZhNmVlZmRiLi5mMjBhMzJkOGNjMjJlIDEwMDY0NAotLS0gYS90b29scy9tbS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9NYWtlZmlsZQpAQCAtMywxMyAmIzQzOzMsMTUgQEAKICMKIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlCiAKLUJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QKJiM0MztCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyCiYjNDM7QlVJTERfVEFSR0VUUyAmIzQzOz0gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoCiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHMKIAogTElCX0RJUiA9IC4uL2xpYi9hcGkKIExJQlMgPSAkKExJQl9ESVIpL2xpYmFwaS5hCiYjNDM7R1VQX0JFTkNIX09CSlMgPSBndXBfYmVuY2guYyAuLi9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyAuLi9saWIvbW0vZmlsZV91dGlscy5jCiAKLUNGTEFHUyAmIzQzOz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWQKJiM0MztDRkxBR1MgJiM0Mzs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1JLi4vLi4gLXB0aHJlYWQKIExERkxBR1MgJiM0Mzs9ICQoTElCUykgLXB0aHJlYWQKIAogYWxsOiAkKEJVSUxEX1RBUkdFVFMpCkBAIC0yMiw4ICYjNDM7MjQsMTEgQEAgJChMSUJTKToKICU6ICUuYwogCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkJmx0OyAkKExERkxBR1MpCiAKJiM0MztndXBfYmVuY2g6ICQoR1VQX0JFTkNIX09CSlMpICQoTElCUykKJiM0MzsJJChDQykgJChDRkxBR1MpIC1vICRAICQoR1VQX0JFTkNIX09CSlMpICQoTERGTEFHUykKJiM0MzsKIGNsZWFuOgotCSQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7CSQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaAogCW1ha2UgLUMgJChMSUJfRElSKSBjbGVhbgogCiBzYmluZGlyID89IC91c3Ivc2JpbgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jCnNpbWlsYXJpdHkgaW5kZXggNTAlCnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKcmVuYW1lIHRvIHRvb2xzL21tL2d1cF9iZW5jaC5jCmluZGV4IDNmODQxYTk2Zjg3MDYuLmZmNmU0NjY1NDY4MTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmMKQEAgLTEwLDExICYjNDM7MTAsMTAgQEAKICNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O3B0aHJlYWQuaCZndDsKLSNpbmNsdWRlICZsdDthc3NlcnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDttbS9ndXBfdGVzdC5oJmd0OwotI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDttbS9odWdlcGFnZV9zZXR0aW5ncy5oJmd0OwogCiAjZGVmaW5lIE1CICgxVUwgJmx0OyZsdDsgMjApCiAKQEAgLTM4LDEyICYjNDM7MzcsNiBAQCBzdGF0aWMgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZCkKIAkJcmV0dXJuICYjMzQ7UElOX0ZBU1RfQkVOQ0hNQVJLJiMzNDs7CiAJY2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOgogCQlyZXR1cm4gJiMzNDtQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLJiMzNDs7Ci0JY2FzZSBHVVBfQkFTSUNfVEVTVDoKLQkJcmV0dXJuICYjMzQ7R1VQX0JBU0lDX1RFU1QmIzM0OzsKLQljYXNlIFBJTl9CQVNJQ19URVNUOgotCQlyZXR1cm4gJiMzNDtQSU5fQkFTSUNfVEVTVCYjMzQ7OwotCWNhc2UgRFVNUF9VU0VSX1BBR0VTX1RFU1Q6Ci0JCXJldHVybiAmIzM0O0RVTVBfVVNFUl9QQUdFU19URVNUJiMzNDs7CiAJfQogCXJldHVybiAmIzM0O1Vua25vd24gY29tbWFuZCYjMzQ7OwogfQpAQCAtNTMsMzkgJiM0Mzs0NiwyOSBAQCB2b2lkICpndXBfdGhyZWFkKHZvaWQgKmRhdGEpCiAJc3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTsKIAlpbnQgaSwgc3RhdHVzOwogCi0JLyogT25seSByZXBvcnQgdGltaW5nIGluZm9ybWF0aW9uIG9uIHRoZSAqX0JFTkNITUFSSyBjb21tYW5kczogKi8KLQlpZiAoKGNtZCA9PSBQSU5fRkFTVF9CRU5DSE1BUkspIHx8IChjbWQgPT0gR1VQX0ZBU1RfQkVOQ0hNQVJLKSB8fAotCSAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkgewotCQlmb3IgKGkgPSAwOyBpICZsdDsgcmVwZWF0czsgaSYjNDM7JiM0MzspIHsKLQkJCWd1cC5zaXplID0gc2l6ZTsKLQkJCXN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCAmYW1wO2d1cCk7Ci0JCQlpZiAoc3RhdHVzKQotCQkJCWJyZWFrOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcmVwZWF0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWd1cC5zaXplID0gc2l6ZTsKJiM0MzsJCXN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCAmYW1wO2d1cCk7CiYjNDM7CQlpZiAoc3RhdHVzKSB7CiYjNDM7CQkJaW50IGVyciA9IGVycm5vOwogCiAJCQlwdGhyZWFkX211dGV4X2xvY2soJmFtcDtwcmludF9tdXRleCk7Ci0JCQlrc2Z0X3ByaW50X21zZygmIzM0OyVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1cyYjMzQ7LAotCQkJCSAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYywKLQkJCQkgICAgICAgZ3VwLnB1dF9kZWx0YV91c2VjKTsKLQkJCWlmIChndXAuc2l6ZSAhPSBzaXplKQotCQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7LCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpJiMzNDssIGd1cC5zaXplKTsKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7XG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7JXMgaW9jdGwgZmFpbGVkOiAlc1xuJiMzNDssIGNtZF90b19zdHIoY21kKSwKJiM0MzsJCQkJc3RyZXJyb3IoZXJyKSk7CiAJCQlwdGhyZWFkX211dGV4X3VubG9jaygmYW1wO3ByaW50X211dGV4KTsKJiM0MzsJCQlyZXR1cm4gZGF0YTsKIAkJfQotCX0gZWxzZSB7Ci0JCWd1cC5zaXplID0gc2l6ZTsKLQkJc3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsICZhbXA7Z3VwKTsKLQkJaWYgKHN0YXR1cykKLQkJCWdvdG8gcmV0dXJuXzsKIAogCQlwdGhyZWFkX211dGV4X2xvY2soJmFtcDtwcmludF9tdXRleCk7Ci0JCWtzZnRfcHJpbnRfbXNnKCYjMzQ7JXM6IGRvbmVcbiYjMzQ7LCBjbWRfdG9fc3RyKGNtZCkpOwomIzQzOwkJcHJpbnRmKCYjMzQ7JXM6IFRpbWU6IGdldDolbGxkIHB1dDolbGxkIHVzJiMzNDssCiYjNDM7CQkJY21kX3RvX3N0cihjbWQpLCBndXAuZ2V0X2RlbHRhX3VzZWMsCiYjNDM7CQkJZ3VwLnB1dF9kZWx0YV91c2VjKTsKIAkJaWYgKGd1cC5zaXplICE9IHNpemUpCi0JCQlrc2Z0X3ByaW50X21zZygmIzM0O1RydW5jYXRlZCAoc2l6ZTogJWxsZClcbiYjMzQ7LCBndXAuc2l6ZSk7CiYjNDM7CQkJcHJpbnRmKCYjMzQ7LCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpJiMzNDssIGd1cC5zaXplKTsKJiM0MzsJCXByaW50ZigmIzM0O1xuJiMzNDspOwogCQlwdGhyZWFkX211dGV4X3VubG9jaygmYW1wO3ByaW50X211dGV4KTsKIAl9CiAKLXJldHVybl86Ci0Ja3NmdF90ZXN0X3Jlc3VsdCghc3RhdHVzLCAmIzM0O2lvY3RsIHN0YXR1cyAlZFxuJiMzNDssIHN0YXR1cyk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTkzLDM4ICYjNDM7NzYsMjEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTsKIAlpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDsKLQlpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURTsKJiM0MzsJaW50IGZsYWdzID0gTUFQX1BSSVZBVEUsIHN0YXJ0ZWRfdGhyZWFkcyA9IDAsIGV4aXRfc3RhdHVzID0gMTsKIAljaGFyICpmaWxlID0gJiMzNDsvZGV2L3plcm8mIzM0OzsKLQlib29sIGh1Z2V0bGIgPSBmYWxzZTsKJiM0MzsJYm9vbCBodWdldGxiID0gZmFsc2UsIHRocmVhZF9lcnJvciA9IGZhbHNlOwomIzQzOwl2b2lkICp0aHJlYWRfcmVzdWx0OwogCXB0aHJlYWRfdCAqdGlkOwogCWNoYXIgKnA7CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O206cjpuOkY6ZjphYmNqOnRUTFV1d1dTSHB6JiMzNDspKSAhPSAtMSkgewomIzQzOwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O206cjpuOkY6Zjphajp0VEx1d1dTSCYjMzQ7KSkgIT0gLTEpIHsKIAkJc3dpdGNoIChvcHQpIHsKIAkJY2FzZSAmIzM5O2EmIzM5OzoKIAkJCWNtZCA9IFBJTl9GQVNUX0JFTkNITUFSSzsKIAkJCWJyZWFrOwotCQljYXNlICYjMzk7YiYjMzk7OgotCQkJY21kID0gUElOX0JBU0lDX1RFU1Q7Ci0JCQlicmVhazsKIAkJY2FzZSAmIzM5O0wmIzM5OzoKIAkJCWNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7CiAJCQlicmVhazsKLQkJY2FzZSAmIzM5O2MmIzM5OzoKLQkJCWNtZCA9IERVTVBfVVNFUl9QQUdFU19URVNUOwotCQkJLyoKLQkJCSAqIER1bXAgcGFnZSAwIChpbmRleCAxKS4gTWF5IGJlIG92ZXJyaWRkZW4gbGF0ZXIsIGJ5Ci0JCQkgKiB1c2VyJiMzOTtzIG5vbi1vcHRpb24gYXJndW1lbnRzLgotCQkJICoKLQkJCSAqIC53aGljaF9wYWdlcyBpcyB6ZXJvLWJhc2VkLCBzbyB0aGF0IHplcm8gY2FuIG1lYW4gJiMzNDtkbwotCQkJICogbm90aGluZyYjMzQ7LgotCQkJICovCi0JCQlndXAud2hpY2hfcGFnZXNbMF0gPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTtwJiMzOTs6Ci0JCQkvKiB3b3JrcyBvbmx5IHdpdGggRFVNUF9VU0VSX1BBR0VTX1RFU1QgKi8KLQkJCWd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOOwotCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtGJiMzOTs6CiAJCQkvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqLwogCQkJZ3VwLmd1cF9mbGFncyA9IHN0cnRvbChvcHRhcmcsIDAsIDApOwpAQCAtMTQxLDcgJiM0MzsxMDcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWNhc2UgJiMzOTtuJiMzOTs6CiAJCQlucl9wYWdlcyA9IGF0b2kob3B0YXJnKTsKIAkJCWlmIChucl9wYWdlcyAmbHQ7IDApCi0JCQkJbnJfcGFnZXMgPSBzaXplIC8gcHNpemUoKTsKJiM0MzsJCQkJbnJfcGFnZXMgPSBzaXplIC8gZ2V0cGFnZXNpemUoKTsKIAkJCWJyZWFrOwogCQljYXNlICYjMzk7dCYjMzk7OgogCQkJdGhwID0gMTsKQEAgLTE0OSw5ICYjNDM7MTE1LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQljYXNlICYjMzk7VCYjMzk7OgogCQkJdGhwID0gMDsKIAkJCWJyZWFrOwotCQljYXNlICYjMzk7VSYjMzk7OgotCQkJY21kID0gR1VQX0JBU0lDX1RFU1Q7Ci0JCQlicmVhazsKIAkJY2FzZSAmIzM5O3UmIzM5OzoKIAkJCWNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSzsKIAkJCWJyZWFrOwpAQCAtMTczLDUyICYjNDM7MTM2LDQxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWh1Z2V0bGIgPSB0cnVlOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtXcm9uZyBhcmd1bWVudFxuJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1dyb25nIGFyZ3VtZW50XG4mIzM0Oyk7CiYjNDM7CQkJZXhpdCgxKTsKIAkJfQogCX0KIAotCWlmIChvcHRpbmQgJmx0OyBhcmdjKSB7Ci0JCWludCBleHRyYV9hcmdfY291bnQgPSAwOwotCQkvKgotCQkgKiBGb3IgZXhhbXBsZToKLQkJICoKLQkJICogICAuL2d1cF90ZXN0IC1jIDAgMSAweDEwMDEKLQkJICoKLQkJICogLi4udG8gZHVtcCBwYWdlcyAwLCAxLCBhbmQgNDA5NwotCQkgKi8KLQotCQl3aGlsZSAoKG9wdGluZCAmbHQ7IGFyZ2MpICZhbXA7JmFtcDsKLQkJICAgICAgIChleHRyYV9hcmdfY291bnQgJmx0OyBHVVBfVEVTVF9NQVhfUEFHRVNfVE9fRFVNUCkpIHsKLQkJCS8qCi0JCQkgKiBEbyB0aGUgMS1iYXNlZCBpbmRleGluZyBoZXJlLCBzbyB0aGF0IHRoZSB1c2VyIGNhbgotCQkJICogdXNlIG5vcm1hbCAwLWJhc2VkIGluZGV4aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0JCQkgKi8KLQkJCWxvbmcgcGFnZV9pbmRleCA9IHN0cnRvbChhcmd2W29wdGluZF0sIDAsIDApICYjNDM7IDE7Ci0KLQkJCWd1cC53aGljaF9wYWdlc1tleHRyYV9hcmdfY291bnRdID0gcGFnZV9pbmRleDsKLQkJCWV4dHJhX2FyZ19jb3VudCYjNDM7JiM0Mzs7Ci0JCQlvcHRpbmQmIzQzOyYjNDM7OwotCQl9CiYjNDM7CWlmIChvcHRpbmQgIT0gYXJnYykgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7VW5leHBlY3RlZCBhcmd1bWVudCAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBhcmd2W29wdGluZF0pOwomIzQzOwkJZXhpdCgxKTsKIAl9CiAKLQlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwlpZiAoZ2V0ZXVpZCgpKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XG4mIzM0Oyk7CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiAKIAlpZiAoaHVnZXRsYikgewogCQl1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7CiAKLQkJaWYgKCFocF9zaXplKQotCQkJa3NmdF9leGl0X3NraXAoJiMzNDtIdWdlVExCIGlzIHVuYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CQlpZiAoIWhwX3NpemUpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtDb3VsZCBub3QgZGV0ZXJtaW5lIGh1Z2UgcGFnZSBzaXplXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIDE7CiYjNDM7CQl9CiAKIAkJc2l6ZSA9IChzaXplICYjNDM7IGhwX3NpemUgLSAxKSAmYW1wOyB+KGhwX3NpemUgLSAxKTsKLQkJaWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKQotCQkJa3NmdF9leGl0X3NraXAoJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcbiYjMzQ7KTsKJiM0MzsJCWlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xuJiMzNDspOwomIzQzOwkJCXJldHVybiAxOwomIzQzOwkJfQogCX0KIAotCWtzZnRfc2V0X3BsYW4obnRocmVhZHMpOwotCiAJZmlsZWQgPSBvcGVuKGZpbGUsIE9fUkRXUnxPX0NSRUFULCAwNjY0KTsKLQlpZiAoZmlsZWQgJmx0OyAwKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBmaWxlLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwlpZiAoZmlsZWQgJmx0OyAwKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBmaWxlLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KIAogCWd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzOwogCWlmICh3cml0ZSkKQEAgLTIyNywyNiAmIzQzOzE3OSwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwogCWlmIChndXBfZmQgPT0gLTEpIHsKIAkJc3dpdGNoIChlcnJubykgewotCQljYXNlIEVBQ0NFUzoKLQkJCWlmIChnZXR1aWQoKSkKLQkJCQlrc2Z0X3ByaW50X21zZygmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcbiYjMzQ7KTsKLQkJCWJyZWFrOwogCQljYXNlIEVOT0VOVDoKIAkJCWlmIChvcGVuZGlyKCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcmIzM0OykgPT0gTlVMTCkKLQkJCQlrc2Z0X3ByaW50X21zZygmIzM0O21vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcbiYjMzQ7KTsKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xuJiMzNDspOwomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xuJiMzNDspOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlrc2Z0X3ByaW50X21zZygmIzM0O2ZhaWxlZCB0byBvcGVuICVzOiAlc1xuJiMzNDssIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgR1VQX1RFU1RfRklMRSwKJiM0MzsJCQkJc3RyZXJyb3IoZXJybm8pKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcbiYjMzQ7KTsKLQkJa3NmdF9leGl0X3Bhc3MoKTsKJiM0MzsJCWdvdG8gZXJyX2Nsb3NlX2ZpbGVkOwogCX0KIAogCXAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCBmaWxlZCwgMCk7Ci0JaWYgKHAgPT0gTUFQX0ZBSUxFRCkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7bW1hcDogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwlpZiAocCA9PSBNQVBfRkFJTEVEKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttbWFwOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQlnb3RvIGVycl9jbG9zZV9ndXBfZmQ7CiYjNDM7CX0KIAlndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7CiAKIAlpZiAodGhwID09IDEpCkBAIC0yNTUsMjEgJiM0MzsyMDUsNDMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQltYWR2aXNlKHAsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSk7CiAKIAkvKiBGYXVsdCB0aGVtIGluIGhlcmUsIGZyb20gdXNlciBzcGFjZS4gKi8KLQlmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCAmbHQ7IGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IHBzaXplKCkpCiYjNDM7CWZvciAoOyAodW5zaWduZWQgbG9uZylwICZsdDsgZ3VwLmFkZHIgJiM0Mzsgc2l6ZTsgcCAmIzQzOz0gZ2V0cGFnZXNpemUoKSkKIAkJcFswXSA9IDA7CiAKIAl0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7Ci0JYXNzZXJ0KHRpZCk7CiYjNDM7CWlmICghdGlkKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgJWQgdGhyZWFkczogJXNcbiYjMzQ7LAomIzQzOwkJCW50aHJlYWRzLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwkJZ290byBlcnJfdW5tYXA7CiYjNDM7CX0KJiM0MzsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7CiAJCXJldCA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCAmYW1wO2d1cCk7Ci0JCWFzc2VydChyZXQgPT0gMCk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7cHRocmVhZF9jcmVhdGUgZmFpbGVkOiAlc1xuJiMzNDssIHN0cmVycm9yKHJldCkpOwomIzQzOwkJCXRocmVhZF9lcnJvciA9IHRydWU7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlzdGFydGVkX3RocmVhZHMmIzQzOyYjNDM7OwogCX0KLQlmb3IgKGkgPSAwOyBpICZsdDsgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7Ci0JCXJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpOwotCQlhc3NlcnQocmV0ID09IDApOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc3RhcnRlZF90aHJlYWRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgJmFtcDt0aHJlYWRfcmVzdWx0KTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtwdGhyZWFkX2pvaW4gZmFpbGVkOiAlc1xuJiMzNDssIHN0cmVycm9yKHJldCkpOwomIzQzOwkJCXRocmVhZF9lcnJvciA9IHRydWU7CiYjNDM7CQl9IGVsc2UgaWYgKHRocmVhZF9yZXN1bHQpCiYjNDM7CQkJdGhyZWFkX2Vycm9yID0gdHJ1ZTsKIAl9CiAKIAlmcmVlKHRpZCk7Ci0KLQlrc2Z0X2V4aXRfcGFzcygpOwomIzQzOwlpZiAoIXRocmVhZF9lcnJvcikKJiM0MzsJCWV4aXRfc3RhdHVzID0gMDsKJiM0MzsKJiM0MztlcnJfdW5tYXA6CiYjNDM7CW11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTsKJiM0MztlcnJfY2xvc2VfZ3VwX2ZkOgomIzQzOwljbG9zZShndXBfZmQpOwomIzQzO2Vycl9jbG9zZV9maWxlZDoKJiM0MzsJY2xvc2UoZmlsZWQpOwomIzQzOwlyZXR1cm4gZXhpdF9zdGF0dXM7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCmluZGV4IDJkNTM2NjE5NmUzMDkuLjljMDM2MjRmZDI5MzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCkBAIC0zNyw3ICYjNDM7MzcsOCBAQCBlbmRpZgogIyBMRExJQlMuCiBNQUtFRkxBR1MgJiM0Mzs9IC0tbm8tYnVpbHRpbi1ydWxlcwogCi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKQomIzQzO0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliCiYjNDM7Q0ZMQUdTICYjNDM7PSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKQogQ0ZMQUdTICYjNDM7PSAtV3VucmVhY2hhYmxlLWNvZGUKIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbQogCkBAIC01Nyw4ICYjNDM7NTgsOCBAQCBlbmRpZgogCiBURVNUX0dFTl9GSUxFUyA9IGNvdwogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGNvbXBhY3Rpb25fdGVzdAomIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXAKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXBfbG9uZ3Rlcm0KLVRFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXBfdGVzdAogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGhtbS10ZXN0cwogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGItbWFkdmlzZQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGItbW1hcApAQCAtMTg3LDggJiM0MzsxODgsMTAgQEAgVEVTVF9GSUxFUyAmIzQzOz0gd3JpdGVfaHVnZXRsYl9tZW1vcnkuc2gKIAogaW5jbHVkZSAuLi9saWIubWsKIAotJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jCi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmMKJiM0MzskKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXAomIzQzOwkJICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jCiYjNDM7JChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFwKJiM0MzsJCSAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYwogCiAkKE9VVFBVVCkvdWZmZC1zdHJlc3M6IHVmZmQtY29tbW9uLmMKICQoT1VUUFVUKS91ZmZkLXVuaXQtdGVzdHM6IHVmZmQtY29tbW9uLmMKQEAgLTIxNyw3ICYjNDM7MjIwLDcgQEAgJChCSU5BUklFU18zMik6IENGTEFHUyAmIzQzOz0gLW0zMiAtbXhzYXZlCiAkKEJJTkFSSUVTXzMyKTogTERMSUJTICYjNDM7PSAtbHJ0IC1sZGwgLWxtCiAkKEJJTkFSSUVTXzMyKTogJChPVVRQVVQpLyVfMzI6ICUuYwogCSQoY2FsbCBtc2csQ0MsLCRAKQotCSQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEAKJiM0MzsJJChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRACiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtMzIsJCh0KSkpKQogZW5kaWYKIApAQCAtMjI2LDcgJiM0MzsyMjksNyBAQCAkKEJJTkFSSUVTXzY0KTogQ0ZMQUdTICYjNDM7PSAtbTY0IC1teHNhdmUKICQoQklOQVJJRVNfNjQpOiBMRExJQlMgJiM0Mzs9IC1scnQgLWxkbAogJChCSU5BUklFU182NCk6ICQoT1VUUFVUKS8lXzY0OiAlLmMKIAkkKGNhbGwgbXNnLENDLCwkQCkKLQkkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRACiYjNDM7CSQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQAogJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTY0LCQodCkpKSkKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKaW5kZXggMzBkNGFjZTcxNTVhZS4uYjNmNTM3NzExOWNiOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKQEAgLTE1LDkgJiM0MzsxNSw5IEBACiAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIE1BUF9TSVpFX01CCTEwMAogI2RlZmluZSBNQVBfU0laRQkoTUFQX1NJWkVfTUIgKiAxMDI0ICogMTAyNCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKaW5kZXggOGFhNTI0OWQ5YmVmNi4uMzI2NGE4Mjg1NzViZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKQEAgLTI5LDcgJiM0MzsyOSw2IEBACiAjaW5jbHVkZSAmIzM0Oy4uLy4uLy4uLy4uL21tL2d1cF90ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplOwogc3RhdGljIGludCBwYWdlbWFwX2ZkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYwppbmRleCAxOTYwNjM1YTk1M2ViLi5lNDY2MGJmODliNjI0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYwpAQCAtMjUsNyAmIzQzOzI1LDYgQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogdWludDY0X3QgcGFnZV9zaXplOwogdWludDY0X3QgcG1kX3BhZ2VzaXplOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jCmluZGV4IDVjOGVjM2NhNzVkN2QuLmFmNWNkOWIzMDMzOTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMKQEAgLTIxLDcgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3Vpby5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2luY2x1ZGUgJiMzNDsuLi9waWRmZC9waWRmZC5oJiMzNDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zMWFlMzhlMDkxMzZkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMKQEAgLTAsMCAmIzQzOzEsMjYzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyAvLyBVc2UgbGw2NAomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZGlyZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9pb2N0bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDttbS9ndXBfdGVzdC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTUIgKDFVTCAmbHQ7Jmx0OyAyMCkKJiM0MzsKJiM0MzsvKiBKdXN0IHRoZSBmbGFncyB3ZSBuZWVkLCBjb3BpZWQgZnJvbSB0aGUga2VybmVsIGludGVybmFscy4gKi8KJiM0MzsjZGVmaW5lIEZPTExfV1JJVEUJMHgwMQkvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi8KJiM0MzsKJiM0MzsvKiBQYWdlIGNvdW50cyBleGVyY2lzaW5nIHNpbmdsZSwgVEhQLWJhdGNoLCBwYXJ0aWFsLCBhbmQgZnVsbC1tYXBwaW5nIEdVUC4gKi8KJiM0MztzdGF0aWMgY29uc3QgaW50IG5yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07CiYjNDM7CiYjNDM7I2RlZmluZSBHVVBfVEVTVF9GSUxFICYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QmIzM0OwomIzQzOyNkZWZpbmUgTlJfSFVHRV9QQUdFUyAyCiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgaHBfc2l6ZTsKJiM0MzsKJiM0MztGSVhUVVJFKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJaW50IGd1cF9mZDsKJiM0MzsJY2hhciAqYWRkcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJYm9vbCB0aHA7CiYjNDM7CWJvb2wgaHVnZXRsYjsKJiM0MzsJYm9vbCB3cml0ZTsKJiM0MzsJYm9vbCBzaGFyZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWQpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gZmFsc2UsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocCkKJiM0Mzt7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRfdGhwKQomIzQzO3sKJiM0MzsJLnRocCA9IHRydWUsCiYjNDM7CS5odWdldGxiID0gZmFsc2UsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSBmYWxzZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZSkKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZCkKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSB0cnVlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocCkKJiM0Mzt7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX3RocCkKJiM0Mzt7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSBmYWxzZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYikKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSB0cnVlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSB0cnVlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUChndXBfdGVzdCkKJiM0Mzt7CiYjNDM7CWludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTOwomIzQzOwljaGFyICpwOwomIzQzOwomIzQzOwlzZWxmLSZndDtzaXplID0gMTI4ICogTUI7CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDtodWdldGxiKSB7CiYjNDM7CQlpZiAoIWhwX3NpemUpCiYjNDM7CQkJU0tJUChyZXR1cm4sICYjMzQ7SHVnZVRMQiBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CQlpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSAmbHQ7IE5SX0hVR0VfUEFHRVMpCiYjNDM7CQkJU0tJUChyZXR1cm4sICYjMzQ7Tm90IGVub3VnaCBodWdlIHBhZ2VzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CQlzZWxmLSZndDtzaXplID0gTlJfSFVHRV9QQUdFUyAqIGhwX3NpemU7CiYjNDM7CQltbWFwX2ZsYWdzIHw9IE1BUF9IVUdFVExCOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDtzaGFyZWQpCiYjNDM7CQltbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgJmFtcDsgfk1BUF9QUklWQVRFKSB8IE1BUF9TSEFSRUQ7CiYjNDM7CiYjNDM7CS8qIGd1cF9mZCBoYXMgdG8gYmUgJmd0Oz0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqLwomIzQzOwlzZWxmLSZndDtndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7CiYjNDM7CUFTU0VSVF9HRShzZWxmLSZndDtndXBfZmQsIDApOwomIzQzOwomIzQzOwlzZWxmLSZndDthZGRyID0gbW1hcChOVUxMLCBzZWxmLSZndDtzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJCSAgbW1hcF9mbGFncywgLTEsIDApOwomIzQzOwomIzQzOwlBU1NFUlRfTkUoc2VsZi0mZ3Q7YWRkciwgTUFQX0ZBSUxFRCkgewomIzQzOwkJaW50IGVyciA9IGVycm5vOwomIzQzOwomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7Z3VwX2ZkKTsKJiM0MzsJCVRIX0xPRygmIzM0O21tYXAgZmFpbGVkOiAlcyYjMzQ7LCBzdHJlcnJvcihlcnIpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7dGhwKQomIzQzOwkJbWFkdmlzZShzZWxmLSZndDthZGRyLCBzZWxmLSZndDtzaXplLCBNQURWX0hVR0VQQUdFKTsKJiM0MzsJZWxzZSBpZiAoIXZhcmlhbnQtJmd0O2h1Z2V0bGIpCiYjNDM7CQltYWR2aXNlKHNlbGYtJmd0O2FkZHIsIHNlbGYtJmd0O3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7CiYjNDM7CiYjNDM7CWZvciAocCA9IHNlbGYtJmd0O2FkZHI7ICh1bnNpZ25lZCBsb25nKXAgJmx0OyAodW5zaWduZWQgbG9uZylzZWxmLSZndDthZGRyCiYjNDM7CQkJJiM0Mzsgc2VsZi0mZ3Q7c2l6ZTsgcCAmIzQzOz0gcHNpemUoKSkKJiM0MzsJCXBbMF0gPSAwOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJbXVubWFwKHNlbGYtJmd0O2FkZHIsIHNlbGYtJmd0O3NpemUpOwomIzQzOwljbG9zZShzZWxmLSZndDtndXBfZmQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydW5fZ3VwX2NtZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsCiYjNDM7CQkJIEZJWFRVUkVfREFUQShndXBfdGVzdCkgKnNlbGYsCiYjNDM7CQkJIGNvbnN0IEZJWFRVUkVfVkFSSUFOVChndXBfdGVzdCkgKnZhcmlhbnQsCiYjNDM7CQkJIHVuc2lnbmVkIGxvbmcgY29tbWFuZCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsKJiM0MzsJCQkuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtJmd0O2FkZHIsCiYjNDM7CQkJLnNpemUgPSBzZWxmLSZndDtzaXplLAomIzQzOwkJCS5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gJmx0OyAwID8KJiM0MzsJCQkJc2VsZi0mZ3Q7c2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldLAomIzQzOwkJCS5ndXBfZmxhZ3MgPSB2YXJpYW50LSZndDt3cml0ZSA/IEZPTExfV1JJVEUgOiAwLAomIzQzOwkJfTsKJiM0MzsKJiM0MzsJCVRIX0xPRygmIzM0O25yX3BhZ2VzX3Blcl9jYWxsPSV1JiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7CiYjNDM7CQlBU1NFUlRfRVEoaW9jdGwoc2VsZi0mZ3Q7Z3VwX2ZkLCBjb21tYW5kLCAmYW1wO2d1cCksIDApOwomIzQzOwkJQVNTRVJUX0VRKGd1cC5zaXplLCBzZWxmLSZndDtzaXplKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzKQomIzQzO3sKJiM0MzsJcnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfQkFTSUNfVEVTVCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXMpCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9CQVNJQ19URVNUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlc19mYXN0KQomIzQzO3sKJiM0MzsJcnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfRkFTVF9CRU5DSE1BUkspOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2Zhc3QpCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9GQVNUX0JFTkNITUFSSyk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfbG9uZ3Rlcm0pCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9MT05HVEVSTV9CRU5DSE1BUkspOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwomIzQzOwlpZiAoZmQgPT0gLTEpIHsKJiM0MzsJCWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CQlpZiAoZXJybm8gPT0gRUFDQ0VTKQomIzQzOwkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxuJiMzNDspOwomIzQzOwkJaWYgKGVycm5vID09IEVOT0VOVCkgewomIzQzOwkJCURJUiAqZGVidWdmcyA9IG9wZW5kaXIoJiMzNDsvc3lzL2tlcm5lbC9kZWJ1ZyYjMzQ7KTsKJiM0MzsKJiM0MzsJCQlpZiAoIWRlYnVnZnMpCiYjNDM7CQkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7TW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xuJiMzNDspOwomIzQzOwkJCWNsb3NlZGlyKGRlYnVnZnMpOwomIzQzOwkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7Q2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcbiYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byBvcGVuICVzOiAlc1xuJiMzNDssIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CX0KJiM0MzsJY2xvc2UoZmQpOwomIzQzOwomIzQzOwlocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpOwomIzQzOwlpZiAoaHBfc2l6ZSkKJiM0MzsJCWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChOUl9IVUdFX1BBR0VTKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwppbmRleCA1MTBkZTkzYmU2ODE0Li5jOWQ4YjQ0OTEyNjM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7CiBzdGF0aWMgaW50IG5yX2h1Z2V0bGJzaXplczsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKaW5kZXggZTI2NDJlY2EwZDAyYi4uZmExYTY1MTk2M2ZkMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKQEAgLTEwLDkgJiM0MzsxMCw2IEBACiAgKiBidWdzLgogICovCiAKLSNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwotCiAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDtmY250bC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CkBAIC0zMyw2ICYjNDM7MzAsOSBAQAogI2luY2x1ZGUgJmx0O3N5cy9ldmVudGZkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmQuaCZndDsKICNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKIAogLyoKICAqIFRoaXMgaXMgYSBwcml2YXRlIFVBUEkgdG8gdGhlIGtlcm5lbCB0ZXN0IG1vZHVsZSBzbyBpdCBpc24mIzM5O3QgZXhwb3J0ZWQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKaW5kZXggNTU1YjRiM2QxNDMwNy4uNTdjZjc5MGNhNDc4ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKQEAgLTE0LDcgJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBNSU5fRlJFRV9QQUdFUwkyMAogI2RlZmluZSBOUl9IVUdFX1BBR0VTCTEwCS8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCmluZGV4IDBmMmFhZDFiN2RiZDYuLmE0NThiZWNmNTgzMjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCkBAIC0xOCw3ICYjNDM7MTgsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWZkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpCiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYwppbmRleCBlZDNkOTJlODYyZDg3Li45YjcyNGFmNjZlOTM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMKQEAgLTI2LDcgJiM0MzsyNiw2IEBACiAjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIERFRkFVTFRfTEVOR1RIX01CIDEwVUwKICNkZWZpbmUgTUJfVE9fQllURVMoeCkgKHggKiAxMDI0ICogMTAyNCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jCmluZGV4IDNmZjdmMDYyYjdlYjQuLmY0NTE0ZGE0OWUxZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYwppbmRleCA0YWY5ZDNkYjdiNWI2Li5kOTU2NTIxOTM3OGFhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmMKQEAgLTIyLDEwICYjNDM7MjIsMTAgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zdGF0ZnMuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjaWZuZGVmIE1BRFZfU09GVF9PRkZMSU5FCiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMQpAQCAtODUsOCAmIzQzOzg1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgb3JpZ19lbmFibGVfc29mdF9vZmZsaW5lID0gLTFVTDsKIAogLyoKICAqIFJ1bnMgZnJvbSBhbiBhdGV4aXQgaGFuZGxlciwgc28gaXQgbXVzdCBub3QgY2FsbCBhbnl0aGluZyB0aGF0Ci0gKiBleGl0cyBvbiBmYWlsdXJlOiB3cml0ZV9udW0oKSB3b3VsZCByZS1lbnRlciBleGl0KCkgdGhyb3VnaAotICoga3NmdF9leGl0X2ZhaWxfbXNnKCkuCiYjNDM7ICogZXhpdHMgb24gZmFpbHVyZS4KICAqLwogc3RhdGljIHZvaWQgcmVzdG9yZV9lbmFibGVfc29mdF9vZmZsaW5lKHZvaWQpCiB7CkBAIC0xNTIsNyAmIzQzOzE1MSwxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvZnRfb2ZmbGluZV9jb21tb24oaW50IGVuYWJsZV9zb2Z0X29mZmxpbmUpCiAJaHVnZXBhZ2VzaXplX2tiID0gZmlsZV9zdGF0LmZfYnNpemUgLyAxMDI0OwogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7SHVnZXBhZ2VzaXplIGlzICVsZGtCXG4mIzM0OywgaHVnZXBhZ2VzaXplX2tiKTsKIAotCXdyaXRlX251bShFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIGVuYWJsZV9zb2Z0X29mZmxpbmUpOwomIzQzOwlyZXQgPSB3cml0ZV9udW0oRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRILCBlbmFibGVfc29mdF9vZmZsaW5lKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byB3cml0ZSB0byAlczogJXNcbiYjMzQ7LAomIzQzOwkJCQkgICBFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIHN0cmVycm9yKC1yZXQpKTsKIAogCW5yX2h1Z2VwYWdlc19iZWZvcmUgPSBodWdldGxiX25yX2RlZmF1bHRfcGFnZXMoKTsKIApAQCAtMTg5LDYgJiM0MzsxOTEsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvZnRfb2ZmbGluZV9jb21tb24oaW50IGVuYWJsZV9zb2Z0X29mZmxpbmUpCiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKJiM0MzsJaW50IHJldDsKJiM0MzsKIAlrc2Z0X3ByaW50X2hlYWRlcigpOwogCiAJaWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoOCkpCkBAIC0xOTYsNyAmIzQzOzIwMCwxMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKIAlrc2Z0X3NldF9wbGFuKDIpOwogCi0Jb3JpZ19lbmFibGVfc29mdF9vZmZsaW5lID0gcmVhZF9udW0oRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRIKTsKJiM0MzsJcmV0ID0gcmVhZF9udW0oRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRILCAmYW1wO29yaWdfZW5hYmxlX3NvZnRfb2ZmbGluZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gcmVhZCAlczogJXNcbiYjMzQ7LAomIzQzOwkJCQkgICBFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIHN0cmVycm9yKC1yZXQpKTsKJiM0MzsKIAlhdGV4aXQocmVzdG9yZV9lbmFibGVfc29mdF9vZmZsaW5lKTsKIAogCXRlc3Rfc29mdF9vZmZsaW5lX2NvbW1vbigxKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jCmluZGV4IGZiNDYwMDU3MGUxMzEuLjk0OTU5NzRlY2NiZWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uYwpAQCAtMjAsNyAmIzQzOzIwLDYgQEAKICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjaWZuZGVmIFNUQVRYX0RJT0FMSUdOCiAjZGVmaW5lIFNUQVRYX0RJT0FMSUdOCQkweDAwMDAyMDAwVQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwppbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwpAQCAtMTAsNyAmIzQzOzEwLDYgQEAKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMAogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMKaW5kZXggZjk0NTQ5ZWZjYzZmZi4uMjUzMmE0MmI5OGRmZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuYwpAQCAtMjUsNyAmIzQzOzI1LDYgQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBJTkxPT1BfSVRFUiAxMDAKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCmluZGV4IGY4MjY3M2Y1ZjZiNDcuLjUyNTEwOGNhY2U1NGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKQEAgLTIyLDcgJiM0MzsyMiw2IEBACiAjaW5jbHVkZSAmIzM0O2xpbnV4L21hZ2ljLmgmIzM0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIEJBU0VfQUREUiAoKHZvaWQgKikoMVVMICZsdDsmbHQ7IDMwKSkKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplOwpAQCAtMTIyLDYgJiM0MzsxMjEsNyBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKQogCWNoYXIgYnVmWzEgJmx0OyZsdDsgMTBdOwogCWNoYXIgcGF0aFtQQVRIX01BWF07CiAJY2hhciAqc3RyLCAqZW5kOwomIzQzOwlpbnQgcmV0OwogCiAJZmluZm8uZGlyID0gZGlyOwogCWlmIChzdGF0KGZpbmZvLmRpciwgJmFtcDtwYXRoX3N0YXQpKQpAQCAtMTQyLDggJiM0MzsxNDIsOSBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKQogCQkgICAgIG1ham9yKHBhdGhfc3RhdC5zdF9kZXYpLCBtaW5vcihwYXRoX3N0YXQuc3RfZGV2KSkKIAkgICAgJmd0Oz0gc2l6ZW9mKHBhdGgpKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcbiYjMzQ7LCBfX2Z1bmNfXyk7Ci0JaWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpCi0JCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3JlYWRfZmlsZSh1ZXZlbnQpJiMzNDspOwomIzQzOwlyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkX2ZpbGUoJXMpOiAlc1xuJiMzNDssIHBhdGgsIHN0cmVycm9yKC1yZXQpKTsKIAlpZiAoc3Ryc3RyKGJ1ZiwgJiMzNDtERVZUWVBFPWRpc2smIzM0OykpIHsKIAkJLyogRm91bmQgaXQgKi8KIAkJaWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsCkBAIC0zMjQsNyAmIzQzOzMyNSw3IEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApCiB7CiAJY29uc3QgaW50IG9wZW5fb3B0ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBPX1JET05MWSA6IE9fUkRXUjsKIAljb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0JaW50IGZkOwomIzQzOwlpbnQgZmQsIHJldDsKIAl2b2lkICpwOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIApAQCAtMzYyLDcgJiM0MzszNjMsMTEgQEAgc3RhdGljIHZvaWQgKmZpbGVfc2V0dXBfYXJlYV9jb21tb24oaW50IG5yX2hwYWdlcywgZW51bSBmaWxlX3NldHVwX29wcyBzZXR1cCkKIAkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7bW1hcCgpJiMzNDspOwogCiAJLyogRHJvcCBwYWdlIGNhY2hlICovCi0Jd3JpdGVfZmlsZSgmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcyYjMzQ7LCAmIzM0OzMmIzM0OywgMik7CiYjNDM7CXJldCA9IHdyaXRlX2ZpbGUoJiMzNDsvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMmIzM0OywgJiMzNDszJiMzNDssIDIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7d3JpdGVfZmlsZShkcm9wX2NhY2hlcyk6ICVzXG4mIzM0OywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCkpOwomIzQzOwogCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAlyZXR1cm4gcDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKaW5kZXggNWZkNzc5MmEwZDQ3OS4uNjcxMWY0YzYxMzcxMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKQEAgLTE1LDcgJiM0MzsxNSw2IEBACiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICZsdDtpbmNsdWRlL3Zkc28vdGltZTY0LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIEtTTV9TWVNGU19QQVRIICYjMzQ7L3N5cy9rZXJuZWwvbW0va3NtLyYjMzQ7CiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMKaW5kZXggZjE5ZDUzYzY5NTc2NC4uYTM1ZTJiNTdlMDViMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMKQEAgLTUsNyAmIzQzOzUsNiBAQAogICovCiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwpAQCAtMTYsNiAmIzQzOzE1LDcgQEAKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtzaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CiYjNDM7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAKICNkZWZpbmUgVFdPTUVHCQkoMiZsdDsmbHQ7MjApCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKaW5kZXggZDlhNGZiNzgyZWNmZS4uMDM4OThiNGY2Y2RhYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwpAQCAtMjQsNyAmIzQzOzI0LDYgQEAKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFBBR0VNQVBfQklUU19BTEwJCShQQUdFX0lTX1dQQUxMT1dFRCB8IFBBR0VfSVNfV1JJVFRFTiB8CVwKIAkJCQkJIFBBR0VfSVNfRklMRSB8IFBBR0VfSVNfUFJFU0VOVCB8CVwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jCmluZGV4IDgyYzZlOTZlYTZlYjMuLmY5ZWMxNDA4YTZlMzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYwpAQCAtMTQsNyAmIzQzOzE0LDYgQEAKICNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKIAogI2lmbmRlZiBQUl9USFBfRElTQUJMRV9FWENFUFRfQURWSVNFRApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwppbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwpAQCAtNDUsOCAmIzQzOzQ1LDggQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvcHRyYWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c2V0am1wLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3BrZXktaGVscGVycy5oJiMzNDsKIAogdTY0IHNoYWRvd19wa2V5X3JlZzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKaW5kZXggZDA5ZjlmNmEzODRlZS4uYWUwYWI1ZWZhYmFlNiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKQEAgLTEzMCwzMCAmIzQzOzEzMCw2IEBAIHRlc3Rfc2VsZWN0ZWQoKSB7CiAJZmkKIH0KIAotcnVuX2d1cF9tYXRyaXgoKSB7Ci0gICAgIyAtdDogdGhwPW9uLCAtVDogdGhwPW9mZiwgLUg6IGh1Z2V0bGI9b24KLSAgICBsb2NhbCBodWdldGxiX21iPTI1NgotCi0gICAgZm9yIGh1Z2UgaW4gLXQgLVQgJiMzNDstSCAtbSAkaHVnZXRsYl9tYiYjMzQ7OyBkbwotICAgICAgICAjIC11OiBndXAtZmFzdCwgLVU6IGd1cC1iYXNpYywgLWE6IHBpbi1mYXN0LCAtYjogcGluLWJhc2ljLCAtTDogcGluLWxvbmd0ZXJtCi0gICAgICAgIGZvciB0ZXN0X2NtZCBpbiAtdSAtVSAtYSAtYiAtTDsgZG8KLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wCi0gICAgICAgICAgICBmb3Igd3JpdGUgaW4gLXcgLVc7IGRvCi0gICAgICAgICAgICAgICAgIyAtUzogc2hhcmVkCi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TICYjMzQ7ICYjMzQ7OyBkbwotICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsCi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCYjMzk7cyBkZWZhdWx0IHRocCBzaXplIChvciAyTSBvbiB4ODYpLCAxMjMgdG8KLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm0KLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiAmIzM0Oy1uIDEmIzM0OyAmIzM0Oy1uIDUxMiYjMzQ7ICYjMzQ7LW4gMTIzJiMzNDsgJiMzNDstbiAtMSYjMzQ7OyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHVnZSAkdGVzdF9jbWQgJHdyaXRlICRzaGFyZSAkbnVtCi0gICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICBkb25lCi0gICAgICAgIGRvbmUKLSAgICBkb25lCi19Ci0KICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXMKIEFSQ0g2NFNUUj0mIzM0O2FybTY0IG1pcHM2NCBwYXJpc2M2NCBwcGM2NCBwcGM2NGxlIHJpc2N2NjQgczM5MHggc3BhcmM2NCB4ODZfNjQmIzM0OwogaWYgWyAteiAmIzM0OyRBUkNIJiMzNDsgXTsgdGhlbgpAQCAtMjc1LDE4ICYjNDM7MjUxLDcgQEAgZmkKIAogQ0FURUdPUlk9JiMzNDttbWFwJiMzNDsgcnVuX3Rlc3QgLi9tYXBfZml4ZWRfbm9yZXBsYWNlCiAKLWlmICRSVU5fQUxMOyB0aGVuCi0gICAgcnVuX2d1cF9tYXRyaXgKLWVsc2UKLSAgICAjIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmsKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAxCi0gICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gLTEKLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmsKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAxCi0gICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gLTEKLWZpCi0jIER1bXAgcGFnZXMgMCwgMTksIGFuZCA0MDk2LCB1c2luZyBwaW5fdXNlcl9wYWdlczoKLUNBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1jdCAtRiAweDEgMCAxOSAweDEwMDAKJiM0MztDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXAKIENBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cF9sb25ndGVybQogCiBDQVRFR09SWT0mIzM0O3VzZXJmYXVsdGZkJiMzNDsgcnVuX3Rlc3QgLi91ZmZkLXVuaXQtdGVzdHMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwppbmRleCA1ZjI3ODkxM2M0ZDc1Li43ZjY0OWI2NzMzNTUzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCkBAIC05LDcgJiM0Mzs5LDYgQEAKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIICYjMzQ7L3Byb2Mvc2VsZi9wYWdlbWFwJiMzNDsKICNkZWZpbmUgVEVTVF9JVEVSQVRJT05TIDEwMDAwCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwppbmRleCBjMDFkMjI3ZDdmZDZkLi42OGY1MDhjOWEzNTVmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKQEAgLTIxLDcgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiB1aW50NjRfdCBwYWdlc2l6ZTsKIHVuc2lnbmVkIGludCBwYWdlc2hpZnQ7CkBAIC0xNDUsNyAmIzQzOzE0NCwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCWlmIChyZXQgJmd0Oz0gSU5QVVRfTUFYKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslczogRGVidWdmcyBpbnB1dCBpcyB0b28gbG9uZ1xuJiMzNDssIF9fZnVuY19fKTsKIAotCXdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCAmIzQzOyAxKTsKJiM0MzsJcmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7d3JpdGVfZmlsZSglcyk6ICVzXG4mIzM0OywgU1BMSVRfREVCVUdGUywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCkpOwogfQogCiBzdGF0aWMgY2hhciAqYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2Uoc2l6ZV90IGxlbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMKaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMKQEAgLTE0LDcgJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQikKICNkZWZpbmUgTUFQX0hVR0VUTEIJMHg0MDAwMApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jCmluZGV4IDhlYjBjNTYzMGU3ZTMuLjk2ZjcyODk4ZWJlMGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMKQEAgLTE3LDcgJiM0MzsxNyw2IEBACiAjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogaW50IGJhY2tpbmdfZmQgPSAtMTsKIGludCBtbWFwX2ZsYWdzID0gTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkUgfCBNQVBfUFJJVkFURTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oCmluZGV4IDkyYTIxYjk3Zjc0NWEuLjA3MjM4NDNhNzYyNmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaApAQCAtMzcsNyAmIzQzOzM3LDYgQEAKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFVGRkRfRkxBR1MJKE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0sgfCBVRkZEX1VTRVJfTU9ERV9PTkxZKQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYwppbmRleCA1NzJjMjUxNmU4NzRkLi5jNDhlYWFiOGU3NWNmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMKQEAgLTcsOCAmIzQzOzcsOCBAQAogI2luY2x1ZGUgJmx0O2Fzc2VydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tYW4uaCZndDsKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDttbS9odWdlcGFnZV9zZXR0aW5ncy5oJmd0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt1ZmZkLWNvbW1vbi5oJiMzNDsKIAogc3RhdGljIGludCBwYWdlbWFwX2ZkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jCmluZGV4IGUyNGQ3YmEwMGI0NDEuLjVhMzU0YTY2NGQxZjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMKQEAgLTExLDcgJiM0MzsxMSw2IEBACiAKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogLyoKICAqIFRoZSBoaW50IGFkZHIgdmFsdWUgaXMgdXNlZCB0byBhbGxvY2F0ZSBhZGRyZXNzZXMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwppbmRleCA4MGJjOWY1OTdiNTIxLi40NzUxZGI3OThjM2FjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCkBAIC04ODksMTExICYjNDM7ODg5LDU0IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJcmV0dXJuIHJldCAmZ3Q7IDAgPyAwIDogLWVycm5vOwogfQogCi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKLXsKLQlpbnQgZmQ7Ci0Jc3NpemVfdCBudW1yZWFkOwotCi0JZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKLQlpZiAoZmQgPT0gLTEpCi0JCXJldHVybiAwOwotCi0JbnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7Ci0JaWYgKG51bXJlYWQgJmx0OyAxKSB7Ci0JCWNsb3NlKGZkKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JYnVmW251bXJlYWRdID0gJiMzOTtcMCYjMzk7OwotCWNsb3NlKGZkKTsKLQotCXJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkOwotfQotCi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpCi17Ci0JaW50IGZkLCBzYXZlZF9lcnJubzsKLQlzc2l6ZV90IG51bXdyaXR0ZW47Ci0KLQlpZiAoYnVmbGVuICZsdDsgMikKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7SW5jb3JyZWN0IGJ1ZmZlciBsZW46ICV6dVxuJiMzNDssIGJ1Zmxlbik7Ci0KLQlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpOwotCWlmIChmZCA9PSAtMSkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgb3BlbiBmYWlsZWQ6ICVzXG4mIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKLQotCW51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTsKLQlzYXZlZF9lcnJubyA9IGVycm5vOwotCWNsb3NlKGZkKTsKLQllcnJubyA9IHNhdmVkX2Vycm5vOwotCWlmIChudW13cml0dGVuICZsdDsgMCkgewotCQlpZiAoaWdub3JlX2VpbnZhbCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCkKLQkJCXJldHVybjsKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgd3JpdGUoJS4qcykgZmFpbGVkOiAlc1xuJiMzNDssIHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLAotCQkJCWJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKLQl9Ci0JaWYgKG51bXdyaXR0ZW4gIT0gYnVmbGVuIC0gMSkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgd3JpdGUoJS4qcykgaXMgdHJ1bmNhdGVkLCBleHBlY3RlZCAlenUgYnl0ZXMsIGdvdCAlemQgYnl0ZXNcbiYjMzQ7LAotCQkJCXBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLCBidWYsIGJ1ZmxlbiAtIDEsIG51bXdyaXR0ZW4pOwotfQotCi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQotewotCV9fd3JpdGVfZmlsZShwYXRoLCBidWYsIGJ1ZmxlbiwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTsKLX0KLQotdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKQotewotCWNoYXIgYnVmWzIxXTsKLQotCWlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQotCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDtyZWFkX2ZpbGUoKSYjMzQ7KTsKLQotCXJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotfQotCi1zdGF0aWMgdm9pZCBfX3dyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSwgYm9vbCBpZ25vcmVfZWludmFsKQotewotCWNoYXIgYnVmWzIxXTsKLQotCXNwcmludGYoYnVmLCAmIzM0OyVsdSYjMzQ7LCBudW0pOwotCV9fd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEsIGlnbm9yZV9laW52YWwpOwotfQotCi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSkKLXsKLQlyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpOwotfQotCi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKQotewotCXJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyB0cnVlKTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htYWxsLCBzaG1tYXg7CiAKIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCkKIHsKLQlpZiAoc2htbWF4KQotCQl3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7LCBzaG1tYXgpOwotCWlmIChzaG1hbGwpCi0JCXdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssIHNobWFsbCk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChzaG1tYXgpIHsKJiM0MzsJCXJldCA9IHdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4JiMzNDssIHNobW1heCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBzaG1tYXg6ICVzXG4mIzM0OywKJiM0MzsJCQkJCSAgIHN0cmVycm9yKC1yZXQpKTsKJiM0MzsJfQomIzQzOwlpZiAoc2htYWxsKSB7CiYjNDM7CQlyZXQgPSB3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCBzaG1hbGwpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgc2htYWxsOiAlc1xuJiMzNDssCiYjNDM7CQkJCQkgICBzdHJlcnJvcigtcmV0KSk7CiYjNDM7CX0KIH0KIAogdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpCiB7CiAJdW5zaWduZWQgbG9uZyBuciA9IGxlbmd0aCAvIHBzaXplKCk7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0OywgJmFtcDt2YWwpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byByZWFkIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xuJiMzNDssCiYjNDM7CQkJCSAgIHN0cmVycm9yKC1yZXQpKTsKIAotCXZhbCA9IHJlYWRfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0Oyk7CiAJaWYgKHZhbCAmbHQ7IGxlbmd0aCkgewotCQl3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7LCBsZW5ndGgpOwomIzQzOwkJcmV0ID0gd3JpdGVfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0OywgbGVuZ3RoKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXG4mIzM0OywKJiM0MzsJCQkJCSAgIGxlbmd0aCwgc3RyZXJyb3IoLXJldCkpOwogCQlzaG1tYXggPSB2YWw7CiAJfQogCi0JdmFsID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7KTsKJiM0MzsJcmV0ID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXG4mIzM0OywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCkpOwogCWlmICh2YWwgJmx0OyBucikgewotCQl3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCBucik7CiYjNDM7CQlyZXQgPSB3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCBucik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gd3JpdGUgJWx1IHRvIC9wcm9jL3N5cy9rZXJuZWwvc2htYWxsOiAlc1xuJiMzNDssCiYjNDM7CQkJCQkgICBuciwgc3RyZXJyb3IoLXJldCkpOwogCQlzaG1hbGwgPSB2YWw7CiAJfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCmluZGV4IDlhNDlhZjg4NzAyZTQuLjY0YTg2ZThhMGM0MWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKQEAgLTgsNiAmIzQzOzgsOCBAQAogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OyAvKiBfU0NfUEFHRVNJWkUgKi8KICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2ZpbGVfdXRpbHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCAmbHQ7Jmx0OyAobnIpKQogI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KQpAQCAtMTY2LDEyICYjNDM7MTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7CiAjZGVmaW5lIFBBR0VNQVBfUFJFU0VOVChlbnQpCSgoKGVudCkgJmFtcDsgKDF1bGwgJmx0OyZsdDsgNjMpKSAhPSAwKQogI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpCSgoZW50KSAmYW1wOyAoKDF1bGwgJmx0OyZsdDsgNTUpIC0gMSkpCiAKLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwotaW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwotdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTsKLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTsKLXZvaWQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pOwotCiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aCk7CiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTE1CgkJCQkJCQlvdXRwdXQ6IDEwMgoJCQkJCQkJdGhvdWdodHM6IDE1OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZyBFdmFsdWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24uIFRoZSB1c2VyJiMzOTtzIGdpdmVuIG1lIGEgZGlmZiwgYW5kIG15IGluaXRpYWwgc2NhbiBoaWdobGlnaHRzIGEgZmV3IGtleSBhcmVhcyBvZiBtb2RpZmljYXRpb24uIEZpcnN0LCBJIHNlZSBhIHNsZXcgb2YgY2hhbmdlcyB1bmRlciB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5IOKAkyBhIHNpZ25pZmljYW50IGNsdWUuIFNwZWNpZmljYWxseSwgYHRvb2xzL2xpYi9tbS9gLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCwgYW5kIGB0b29scy9tbS9gLiBUaGVyZSYjMzk7cyBhbHNvIHNvbWUgZG9jdW1lbnRhdGlvbiAoYERvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0YCkgYW5kIGEgYE1BSU5UQUlORVJTYCB1cGRhdGUuIEZpbmFsbHksIHRoZXJlJiMzOTtzIGEgdG91Y2ggaW4gYG1tL0tjb25maWdgLgoKTm93LCBhY2NvcmRpbmcgdG8gdGhlICYjMzQ7V0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkmIzM0OyBydWxlcywgdGhpcyBpcyB0aGUgY3J1Y2lhbCBwYXJ0LiBUaGUgcnVsZXMgZXhwbGljaXRseSBzdGF0ZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gdXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgYW5kIHRvb2xzIHRoYXQgKmRvbiYjMzk7dCogYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIG1vZHVsZXMgYXJlIGEgYmlnIHJlZCBmbGFnIGZvciAqbm90KiBmdXp6aW5nLiBXZSYjMzk7cmUgYWxzbyBsb29raW5nIGZvciBwdXJlbHkgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzIGFuZCBLY29uZmlnIGNoYW5nZXMgdGhhdCAqZG9uJiMzOTt0KiBpbXBhY3QgdGhlIGNvbXBpbGVkIEMgbG9naWMuCgpMb29raW5nIGF0IHRoZSBLY29uZmlnIGNoYW5nZSBjbG9zZWx5LCBpdCBzZWVtcyB0byBtb2RpZnkgdGhlIHRpdGxlIGFuZCBoZWxwIHRleHQgZm9yIGBDT05GSUdfR1VQX1RFU1RgOgoKYGBgZGlmZgotCWJvb2wgJiMzNDtFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzJiMzNDsKJiM0MzsJYm9vbCAmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHMgYW5kIGJlbmNobWFya3MmIzM0OwpgYGAKClRoZSBoZWxwIHRleHQgaXMgdXBkYXRlZDogdGhlIGtleSBoZXJlIGlzLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IGNoYW5nZSB0byBjb25maWcgbG9naWMgb3IgdGhlIGNvbXBpbGVkIEMgbG9naWMuIEhlcmUsIGl0IGRvZXMgKm5vdCogYWx0ZXIgYW55IGNvbmZpZyBsb2dpYywgZGVwZW5kZW5jaWVzLCBzZWxlY3QsIG9yIGFueXRoaW5nIHRoYXQgYWx0ZXJzIGNvbXBpbGVkIEMgbG9naWMuIEluIG90aGVyIHdvcmRzLCBpdCYjMzk7cyBhIGNvc21ldGljIGNoYW5nZSDigJMgb25seSB0aGUgaGVscCB0ZXh0IGlzIGNoYW5nZWQsIGl0IGRvZXNuJiMzOTt0IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBhbiBleHBsaWNpdCBleGNlcHRpb24uIFRoZSBvdGhlciBjaGFuZ2VzIGFyZSBzdHJpY3RseSB1bmRlciB0aGUgYHRvb2xzL2AsIGBEb2N1bWVudGF0aW9uL2AsIGFuZCBgTUFJTlRBSU5FUlNgLgoKTGV0IG1lIGNvbmZpcm0gdGhlIGNyaXRpY2FsIHBvaW50OiBJcyBhbnkga2VybmVsIEMgc291cmNlIGNvZGUgbW9kaWZpZWQsIGVzcGVjaWFsbHkgaW4gdGhlIGBtbS9gIGRpcmVjdG9yeT8gUXVpY2sgc2Nhbi4uLiBubywgaXQgaXNuJiMzOTt0LiBOb3QgZXZlbiBgaW5jbHVkZS9gLiBUaGUgaW1hZ2UgZmlsZXMgcmVtYWluIHVudG91Y2hlZC4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgKm9ubHkqIHRvdWNoZXMgYHRvb2xzL2AsIGRvY3VtZW50YXRpb24sIGBNQUlOVEFJTkVSU2AsIGFuZCB0aGUgS2NvbmZpZyBoZWxwIHRleHQuIEl0IGZhbGxzICpzcXVhcmVseSogd2l0aGluIHRoZSBkZWZpbmVkIG5lZ2F0aXZlIGNyaXRlcmlhLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgZGVhbGluZyB3aXRoIHNlbGZ0ZXN0cywgdG9vbHMsIGFuZCBkb2N1bWVudGF0aW9uLiBObyBrZXJuZWwtc3BhY2UgY29kZSBpcyBtb2RpZmllZC4KCk15IGNvbmNsdXNpb24gaXM6IGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuCgpOb3csIHRvIHNldCB0aGUgcmVzdWx0cyBjb3JyZWN0bHk6CgoqICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWAKKiAgIGBSZWFzb25pbmdgOiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzL3Rvb2xzIChgdG9vbHMvbGliL21tL2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLCBgdG9vbHMvbW0vYCksIGBEb2N1bWVudGF0aW9uL2AsIGBNQUlOVEFJTkVSU2AsIGFuZCB0aGUgaGVscCB0ZXh0IG9mIGBDT05GSUdfR1VQX1RFU1RgIGluIGBtbS9LY29uZmlnYC4gTm8ga2VybmVsLXNwYWNlIGV4ZWN1dGFibGUgQyBjb2RlIG9yIGtlcm5lbCBpbWFnZSBsb2dpYyBpcyBtb2RpZmllZC4mIzM0OwoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIChlbXB0eSBsaXN0LCBiZWNhdXNlIG5vIGNvbmZpZ3MgYXJlIHJlbGV2YW50KQoqICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGxpc3QsIGJlY2F1c2Ugbm8gc3ltYm9scyBhcmUgcmVsZXZhbnQpCgpSZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXJzcGFjZSB0b29scyBhbmQgc2VsZnRlc3RzICh0b29scy9saWIvbW0vLCB0b29scy9tbS8sIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyksIGRvY3VtZW50YXRpb24gKERvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0KSwgTUFJTlRBSU5FUlMsIGFuZCBLY29uZmlnIGhlbHAgdGV4dCAobW0vS2NvbmZpZykuIE5vIGNvbXBpbGVkIGtlcm5lbCBDIGxvZ2ljIGlzIGFmZmVjdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvbGliL21tLywgdG9vbHMvbW0vLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBkb2N1bWVudGF0aW9uIChEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCksIE1BSU5UQUlORVJTLCBhbmQgS2NvbmZpZyBoZWxwIHRleHQgKG1tL0tjb25maWcpLiBObyBjb21waWxlZCBrZXJuZWwgQyBsb2dpYyBpcyBhZmZlY3RlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ2OjU4LjE2NTg3NjU5OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDMxMzk2NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvbGliL21tLywgdG9vbHMvbW0vLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBkb2N1bWVudGF0aW9uIChEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCksIE1BSU5UQUlORVJTLCBhbmQgS2NvbmZpZyBoZWxwIHRleHQgKG1tL0tjb25maWcpLiBObyBjb21waWxlZCBrZXJuZWwgQyBsb2dpYyBpcyBhZmZlY3RlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ2OjU4LjE2NTg4MjA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzI3NTM0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MTMwZDc1MjcxZDc0M2EyYjIxZGJjYjRhNmIzNjViYTA0Zjc0MGQ0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjQ2OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcXG5pbmRleCBjMTZjYTE2M2I1NWUzLi5lMGFjZWRiZDFkNDg2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcXG5AQCAtMjI2LDE1ICsyMjYsNiBAQCB3aWxsIGJlIHBpbm5lZCBsb25ndGVybSwgYW5kIHdob3NlIGRhdGEgd2lsbCBiZSBhY2Nlc3NlZC5cXG4gXFxuIFVuaXQgdGVzdGluZ1xcbiA9PT09PT09PT09PT1cXG4tVGhpcyBmaWxlOjpcXG4tXFxuLSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxuLVxcbi1oYXMgdGhlIGZvbGxvd2luZyBuZXcgY2FsbHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBwaW4qKCkgd3JhcHBlciBmdW5jdGlvbnM6XFxuLVxcbi0qIFBJTl9GQVNUX0JFTkNITUFSSyAoLi9ndXBfdGVzdCAtYSlcXG4tKiBQSU5fQkFTSUNfVEVTVCAoLi9ndXBfdGVzdCAtYilcXG4tXFxuIFlvdSBjYW4gbW9uaXRvciBob3cgbWFueSB0b3RhbCBkbWEtcGlubmVkIHBhZ2VzIGhhdmUgYmVlbiBhY3F1aXJlZCBhbmQgcmVsZWFzZWRcXG4gc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCB2aWEgdHdvIG5ldyAvcHJvYy92bXN0YXQgZW50cmllczogOjpcXG4gXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAzNTI2MmFhM2U2N2VmLi5jNDdlNjU1YzQxMTEyIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMTcxODcsOCArMTcxODcsOSBAQCBUOlxcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbVxcbiBGOlxcdG1tL2d1cC5jXFxuIEY6XFx0bW0vZ3VwX3Rlc3QuY1xcbiBGOlxcdG1tL2d1cF90ZXN0LmhcXG4rRjpcXHR0b29scy9tbS9ndXBfYmVuY2guY1xcbitGOlxcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXFxuIEY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG4tRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxuIFxcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIEtTTSAoS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcpXFxuIE06XFx0QW5kcmV3IE1vcnRvbiBcXHUwMDNjYWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZ1xcdTAwM2VcXG5AQCAtMTcyOTUsNiArMTcyOTYsNyBAQCBGOlxcdG1tL21lbW9yeS10aWVycy5jXFxuIEY6XFx0bW0vcGFnZV9pZGxlLmNcXG4gRjpcXHRtbS9wZ2FsbG9jLXRyYWNrLmhcXG4gRjpcXHRtbS9wcm9jZXNzX3ZtX2FjY2Vzcy5jXFxuK0Y6XFx0dG9vbHMvbGliL21tL1xcbiBGOlxcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL1xcbiBcXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT05cXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcXG5pbmRleCBjMTgwZDQwY2Q2NzEyLi42MWFiMWI4YTJlYmRmIDEwMDY0NFxcbi0tLSBhL21tL0tjb25maWdcXG4rKysgYi9tbS9LY29uZmlnXFxuQEAgLTEyOTEsMjQgKzEyOTEsMTkgQEAgY29uZmlnIFBFUkNQVV9TVEFUU1xcbiBcXHQgIGJlIHVzZWQgdG8gaGVscCB1bmRlcnN0YW5kIHBlcmNwdSBtZW1vcnkgdXNhZ2UuXFxuIFxcbiBjb25maWcgR1VQX1RFU1RcXG4tXFx0Ym9vbCBcXFwiRW5hYmxlIGluZnJhc3RydWN0dXJlIGZvciBnZXRfdXNlcl9wYWdlcygpLXJlbGF0ZWQgdW5pdCB0ZXN0c1xcXCJcXG4rXFx0Ym9vbCBcXFwiRW5hYmxlIGluZnJhc3RydWN0dXJlIGZvciBnZXRfdXNlcl9wYWdlcygpLXJlbGF0ZWQgdW5pdCB0ZXN0cyBhbmQgYmVuY2htYXJrc1xcXCJcXG4gXFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbiBcXHRoZWxwXFxuIFxcdCAgUHJvdmlkZXMgL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYSB3YXlcXG4tXFx0ICB0byBtYWtlIGlvY3RsIGNhbGxzIHRoYXQgY2FuIGxhdW5jaCBrZXJuZWwtYmFzZWQgdW5pdCB0ZXN0cyBmb3JcXG4tXFx0ICB0aGUgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpIGZhbWlseSBvZiBBUEkgY2FsbHMuXFxuK1xcdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgYW5kXFxuK1xcdCAgYmVuY2htYXJrcyBmb3IgdGhlIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSBmYW1pbGllc1xcbitcXHQgIG9mIEFQSSBjYWxscy5cXG4gXFxuLVxcdCAgVGhlc2UgdGVzdHMgaW5jbHVkZSBiZW5jaG1hcmsgdGVzdGluZyBvZiB0aGUgX2Zhc3QgdmFyaWFudHMgb2ZcXG4tXFx0ICBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCksIGFzIHdlbGwgYXMgc21va2UgdGVzdHMgb2ZcXG4rXFx0ICBUaGVzZSBpbmNsdWRlIGJlbmNobWFyayB0ZXN0aW5nIG9mIHRoZSBfZmFzdCB2YXJpYW50cyBvZlxcbitcXHQgIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSwgYXMgd2VsbCBhcyB0ZXN0cyBvZlxcbiBcXHQgIHRoZSBub24tX2Zhc3QgdmFyaWFudHMuXFxuIFxcbi1cXHQgIFRoZXJlIGlzIGFsc28gYSBzdWItdGVzdCB0aGF0IGFsbG93cyBydW5uaW5nIGR1bXBfcGFnZSgpIG9uIGFueVxcbi1cXHQgIG9mIHVwIHRvIGVpZ2h0IHBhZ2VzIChzZWxlY3RlZCBieSBjb21tYW5kIGxpbmUgYXJncykgd2l0aGluIHRoZVxcbi1cXHQgIHJhbmdlIG9mIHVzZXItc3BhY2UgYWRkcmVzc2VzLiBUaGVzZSBwYWdlcyBhcmUgZWl0aGVyIHBpbm5lZCB2aWFcXG4tXFx0ICBwaW5fdXNlcl9wYWdlcyooKSwgb3IgcGlubmVkIHZpYSBnZXRfdXNlcl9wYWdlcyooKSwgYXMgc3BlY2lmaWVkXFxuLVxcdCAgYnkgb3RoZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cXG4tXFxuLVxcdCAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4rXFx0ICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYW5kIHRvb2xzL21tL2d1cF9iZW5jaC5jLlxcbiBcXG4gY29tbWVudCBcXFwiR1VQX1RFU1QgbmVlZHMgdG8gaGF2ZSBERUJVR19GUyBlbmFibGVkXFxcIlxcbiBcXHRkZXBlbmRzIG9uICFHVVBfVEVTVCBcXHUwMDI2XFx1MDAyNiAhREVCVUdfRlNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjliMjIzN2U5ODIzZTlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xcbkBAIC0wLDAgKzEsMTA2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiZmlsZV91dGlscy5oXFxcIlxcbitcXG4raW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXFxuK3tcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcdHNzaXplX3QgbnVtcmVhZDtcXG4rXFxuK1xcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XFxuK1xcdGlmIChmZCA9PSAtMSlcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdG51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xcbitcXHRpZiAobnVtcmVhZCBcXHUwMDNjIDEpIHtcXG4rXFx0XFx0ZXJyID0gbnVtcmVhZCA/IGVycm5vIDogRU5PREFUQTtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gLWVycjtcXG4rXFx0fVxcbitcXG4rXFx0YnVmW251bXJlYWRdID0gJ1xcXFwwJztcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcXG4re1xcbitcXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xcbitcXHRzc2l6ZV90IG51bXdyaXR0ZW47XFxuK1xcbitcXHRpZiAoYnVmbGVuIFxcdTAwM2MgMilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xcbitcXHRpZiAoZmQgPT0gLTEpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XFxuK1xcdHNhdmVkX2Vycm5vID0gZXJybm87XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFxuK1xcdGlmIChudW13cml0dGVuIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1zYXZlZF9lcnJubztcXG4rXFxuK1xcdGlmIChudW13cml0dGVuICE9IChzc2l6ZV90KShidWZsZW4gLSAxKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFx0Y2hhciBidWZbMjFdO1xcbitcXHRjaGFyICplbmQ7XFxuK1xcbitcXHRpZiAoIW51bSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBSZWplY3Qgc2lnbnMgYW5kIGxlYWRpbmcgd2hpdGVzcGFjZSB0aGF0IGFyZSBhY2NlcHRlZCBieSBzdHJ0b3VsKCkgKi9cXG4rXFx0aWYgKGJ1ZlswXSBcXHUwMDNjICcwJyB8fCBidWZbMF0gXFx1MDAzZSAnOScpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0ZXJybm8gPSAwO1xcbitcXHR2YWwgPSBzdHJ0b3VsKGJ1ZiwgXFx1MDAyNmVuZCwgMTApO1xcbitcXHRpZiAoZXJybm8pXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHQvKiBPbmx5IGFsbG93IGEgbmV3bGluZSBhZnRlciB0aGUgbnVtYmVyICovXFxuK1xcdGlmICgqZW5kID09ICdcXFxcbicpXFxuK1xcdFxcdGVuZCsrO1xcbitcXG4rXFx0aWYgKCplbmQgIT0gJ1xcXFwwJylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQqbnVtID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcXG4re1xcbitcXHRjaGFyIGJ1ZlsyMV07XFxuK1xcbitcXHRzcHJpbnRmKGJ1ZiwgXFxcIiVsdVxcXCIsIG51bSk7XFxuK1xcdHJldHVybiB3cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgKyAxKTtcXG4rfVxcbitcXG4raW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcXG4rXFx0cmV0dXJuIHJldCA9PSAtRUlOVkFMID8gMCA6IHJldDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTBkYWE4MmMyYjJiNFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXFxuQEAgLTAsMCArMSwxMyBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX19cXG4rI2RlZmluZSBfX01NX0ZJTEVfVVRJTFNfSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjc3RkZGVmLmhcXHUwMDNlXFxuK1xcbitpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XFxuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XFxuK2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pO1xcbitpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcXG4raW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5zaW1pbGFyaXR5IGluZGV4IDg3JVxcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5pbmRleCBkNzkxN2RjZTNhYmFjLi5hYmQ5ZjcxODJmODhmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG4rKysgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbkBAIC04LDEyICs4LDE4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbiBcXG4tI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImZpbGVfdXRpbHMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFRIUF9TWVNGUyBcXFwiL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvXFxcIlxcbiAjZGVmaW5lIE1BWF9TRVRUSU5HU19ERVBUSCA0XFxuK1xcbisjaWZuZGVmIEFSUkFZX1NJWkVcXG4rI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSlcXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5nc19zdGFja1tNQVhfU0VUVElOR1NfREVQVEhdO1xcbiBzdGF0aWMgaW50IHNldHRpbmdzX2luZGV4O1xcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzYXZlZF9zZXR0aW5ncztcXG5AQCAtNDgsNiArNTQsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzaG1lbV9lbmFibGVkX3N0cmluZ3NbXSA9IHtcXG4gXFx0TlVMTFxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoY29uc3QgY2hhciAqcGF0aCwgaW50IHJldClcXG4re1xcbitcXHRwcmludGYoXFxcIiMgJXM6ICVzICglZClcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKC1yZXQpLCAtcmV0KTtcXG4rfVxcbitcXG4gaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuQEAgLTYxLDggKzcyLDkgQEAgaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxcbiBcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7XFxuLVxcdFxcdHBlcnJvcihwYXRoKTtcXG4rXFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XFxuIFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTAzLDEyICsxMTUsMTcgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbClcXG4gXFx0XFx0cHJpbnRmKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuLVxcdHdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSArIDEpO1xcbitcXHRyZXQgPSB3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgKyAxKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcXG4ge1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHR1bnNpZ25lZCBsb25nIG51bTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHJldCA9IHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCBUSFBfU1lTRlMgXFxcIiVzXFxcIiwgbmFtZSk7XFxuQEAgLTExNiw3ICsxMzMsMTMgQEAgdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcXG4gXFx0XFx0cHJpbnRmKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuLVxcdHJldHVybiByZWFkX251bShwYXRoKTtcXG4rXFx0cmV0ID0gcmVhZF9udW0ocGF0aCwgXFx1MDAyNm51bSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbnVtO1xcbiB9XFxuIFxcbiB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXFxuQEAgLTEyOSw3ICsxNTIsMTEgQEAgdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKVxcbiBcXHRcXHRwcmludGYoXFxcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIFxcdH1cXG4tXFx0d3JpdGVfbnVtKHBhdGgsIG51bSk7XFxuK1xcdHJldCA9IHdyaXRlX251bShwYXRoLCBudW0pO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XFxuK1xcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxcbkBAIC0xNTcsOCArMTg0LDE1IEBAIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXFxuIFxcdFxcdC5tYXhfcHRlc19zaGFyZWQgPSB0aHBfcmVhZF9udW0oXFxcImtodWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXFxcIiksXFxuIFxcdFxcdC5wYWdlc190b19zY2FuID0gdGhwX3JlYWRfbnVtKFxcXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cXFwiKSxcXG4gXFx0fTtcXG4tXFx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXFxuLVxcdFxcdHNldHRpbmdzLVxcdTAwM2VyZWFkX2FoZWFkX2tiID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCk7XFxuK1xcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XFxuK1xcdFxcdGludCByZXQgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxcbitcXHRcXHRcXHRcXHQgICBcXHUwMDI2c2V0dGluZ3MtXFx1MDAzZXJlYWRfYWhlYWRfa2IpO1xcbitcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpO1xcbitcXHRcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX09SREVSUzsgaSsrKSB7XFxuIFxcdFxcdGlmICghKCgxIFxcdTAwM2NcXHUwMDNjIGkpIFxcdTAwMjYgb3JkZXJzKSkge1xcbkBAIC0yMDgsOCArMjQyLDE1IEBAIHZvaWQgdGhwX3dyaXRlX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxcbiBcXHR0aHBfd3JpdGVfbnVtKFxcXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFxcXCIsIGtodWdlcGFnZWQtXFx1MDAzZW1heF9wdGVzX3NoYXJlZCk7XFxuIFxcdHRocF93cml0ZV9udW0oXFxcImtodWdlcGFnZWQvcGFnZXNfdG9fc2NhblxcXCIsIGtodWdlcGFnZWQtXFx1MDAzZXBhZ2VzX3RvX3NjYW4pO1xcbiBcXG4tXFx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXFxuLVxcdFxcdHdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCBzZXR0aW5ncy1cXHUwMDNlcmVhZF9haGVhZF9rYik7XFxuK1xcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XFxuK1xcdFxcdGludCByZXQgPSB3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcXG4rXFx0XFx0XFx0XFx0ICAgIHNldHRpbmdzLVxcdTAwM2VyZWFkX2FoZWFkX2tiKTtcXG4rXFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTtcXG4rXFx0XFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9PUkRFUlM7IGkrKykge1xcbiBcXHRcXHRpZiAoISgoMSBcXHUwMDNjXFx1MDAzYyBpKSBcXHUwMDI2IG9yZGVycykpXFxuQEAgLTMwNyw4ICszNDgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX190aHBfc3VwcG9ydGVkX29yZGVycyhib29sIGlzX3NobWVtKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XFxuLVxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdG9yZGVycyB8PSAxVUwgXFx1MDAzY1xcdTAwM2MgaTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9FTlQpIHtcXG4rXFx0XFx0XFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0XFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvcmRlcnMgfD0gMVVMIFxcdTAwM2NcXHUwMDNjIGk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBvcmRlcnM7XFxuQEAgLTM4Miw4ICs0MzAsNyBAQCBpbnQgZGV0ZWN0X2h1Z2V0bGJfcGFnZV9zaXplcyh1bnNpZ25lZCBsb25nIHNpemVzW10sIGludCBtYXgpXFxuIFxcdFxcdGlmIChzc2NhbmYoZW50cnktXFx1MDAzZWRfbmFtZSwgXFxcImh1Z2VwYWdlcy0lenVrQlxcXCIsIFxcdTAwMjZrYikgIT0gMSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdHNpemVzW2NvdW50KytdID0ga2IgKiAxMDI0O1xcbi1cXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgICAga2IpO1xcbitcXHRcXHRwcmludGYoXFxcIiMgW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxcXG5cXFwiLCBrYik7XFxuIFxcdH1cXG4gXFx0Y2xvc2VkaXIoZGlyKTtcXG4gXFx0cmV0dXJuIGNvdW50O1xcbkBAIC00MjUsMjggKzQ3Miw0OSBAQCBzdGF0aWMgdm9pZCBodWdldGxiX3N5c2ZzX3BhdGgoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLFxcbiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcXFwibnJfaHVnZXBhZ2VzXFxcIik7XFxuIFxcbi1cXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XFxuK1xcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFxcdTAwMjZucik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbnI7XFxuIH1cXG4gXFxuIHZvaWQgaHVnZXRsYl9zZXRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcXFwibnJfaHVnZXBhZ2VzXFxcIik7XFxuIFxcbi1cXHR3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7XFxuK1xcdHJldCA9IHdyaXRlX251bV9pZ25vcmVfZWludmFsKHBhdGgsIG5yKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcXFwiZnJlZV9odWdlcGFnZXNcXFwiKTtcXG4gXFxuLVxcdHJldHVybiByZWFkX251bShwYXRoKTtcXG4rXFx0cmV0ID0gcmVhZF9udW0ocGF0aCwgXFx1MDAyNm5yKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBucjtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgX19odWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcXG5AQCAtNTAyLDcgKzU3MCw4IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHNpemVzW10sXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aWYgKG5yX2VuYWJsZWQgXFx1MDAzZSBtYXgpIHtcXG4tXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXFxcblxcXCIsIG5yX2VuYWJsZWQsIG1heCk7XFxuK1xcdFxcdHByaW50ZihcXFwiIyBkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgbnJfZW5hYmxlZCwgbWF4KTtcXG4gXFx0XFx0bnJfZW5hYmxlZCA9IG1heDtcXG4gXFx0fVxcbiBcXG5AQCAtNTc0LDggKzY0MywxMCBAQCBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCh2b2lkKVxcbiBcXG4gc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19zaWdoYW5kbGVyKGludCBzaWcpXFxuIHtcXG4rXFx0KHZvaWQpc2lnO1xcbitcXG4gXFx0LyogZXhpdCgpIHdpbGwgaW52b2tlIHRoZSBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCBoYW5kbGVyLiAqL1xcbi1cXHRleGl0KEtTRlRfRkFJTCk7XFxuK1xcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gfVxcbiBcXG4gdm9pZCBodWdlcGFnZV9zYXZlX3NldHRpbmdzKGJvb2wgdGhwLCBib29sIGh1Z2V0bGIpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmggYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcbnNpbWlsYXJpdHkgaW5kZXggMTAwJVxcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmVcXG5pbmRleCAxNDQ2YTY1OWU1NDA4Li4xNTRkNzQwYmUwMmU4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcXG4rKysgYi90b29scy9tbS8uZ2l0aWdub3JlXFxuQEAgLTMsMyArMyw0IEBAIHNsYWJpbmZvXFxuIHBhZ2UtdHlwZXNcXG4gcGFnZV9vd25lcl9zb3J0XFxuIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XFxuK2d1cF9iZW5jaFxcbmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlXFxuaW5kZXggODU4MTg2YTZlZWZkYi4uZjIwYTMyZDhjYzIyZSAxMDA2NDRcXG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL21tL01ha2VmaWxlXFxuQEAgLTMsMTMgKzMsMTUgQEBcXG4gI1xcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxcbiBcXG4tQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyXFxuK0JVSUxEX1RBUkdFVFMgKz0gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xcbiBcXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcXG4rR1VQX0JFTkNIX09CSlMgPSBndXBfYmVuY2guYyAuLi9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyAuLi9saWIvbW0vZmlsZV91dGlscy5jXFxuIFxcbi1DRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWRcXG4rQ0ZMQUdTICs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1JLi4vLi4gLXB0aHJlYWRcXG4gTERGTEFHUyArPSAkKExJQlMpIC1wdGhyZWFkXFxuIFxcbiBhbGw6ICQoQlVJTERfVEFSR0VUUylcXG5AQCAtMjIsOCArMjQsMTEgQEAgJChMSUJTKTpcXG4gJTogJS5jXFxuIFxcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXFx1MDAzYyAkKExERkxBR1MpXFxuIFxcbitndXBfYmVuY2g6ICQoR1VQX0JFTkNIX09CSlMpICQoTElCUylcXG4rXFx0JChDQykgJChDRkxBR1MpIC1vICRAICQoR1VQX0JFTkNIX09CSlMpICQoTERGTEFHUylcXG4rXFxuIGNsZWFuOlxcbi1cXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitcXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2hcXG4gXFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXFxuIFxcbiBzYmluZGlyID89IC91c3Ivc2JpblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcXG5zaW1pbGFyaXR5IGluZGV4IDUwJVxcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG5yZW5hbWUgdG8gdG9vbHMvbW0vZ3VwX2JlbmNoLmNcXG5pbmRleCAzZjg0MWE5NmY4NzA2Li5mZjZlNDY2NTQ2ODEzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4rKysgYi90b29scy9tbS9ndXBfYmVuY2guY1xcbkBAIC0xMCwxMSArMTAsMTAgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zdGF0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3B0aHJlYWQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2Fzc2VydC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NtbS9ndXBfdGVzdC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgTUIgKDFVTCBcXHUwMDNjXFx1MDAzYyAyMClcXG4gXFxuQEAgLTM4LDEyICszNyw2IEBAIHN0YXRpYyBjaGFyICpjbWRfdG9fc3RyKHVuc2lnbmVkIGxvbmcgY21kKVxcbiBcXHRcXHRyZXR1cm4gXFxcIlBJTl9GQVNUX0JFTkNITUFSS1xcXCI7XFxuIFxcdGNhc2UgUElOX0xPTkdURVJNX0JFTkNITUFSSzpcXG4gXFx0XFx0cmV0dXJuIFxcXCJQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXFxcIjtcXG4tXFx0Y2FzZSBHVVBfQkFTSUNfVEVTVDpcXG4tXFx0XFx0cmV0dXJuIFxcXCJHVVBfQkFTSUNfVEVTVFxcXCI7XFxuLVxcdGNhc2UgUElOX0JBU0lDX1RFU1Q6XFxuLVxcdFxcdHJldHVybiBcXFwiUElOX0JBU0lDX1RFU1RcXFwiO1xcbi1cXHRjYXNlIERVTVBfVVNFUl9QQUdFU19URVNUOlxcbi1cXHRcXHRyZXR1cm4gXFxcIkRVTVBfVVNFUl9QQUdFU19URVNUXFxcIjtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gXFxcIlVua25vd24gY29tbWFuZFxcXCI7XFxuIH1cXG5AQCAtNTMsMzkgKzQ2LDI5IEBAIHZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcXG4gXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTtcXG4gXFx0aW50IGksIHN0YXR1cztcXG4gXFxuLVxcdC8qIE9ubHkgcmVwb3J0IHRpbWluZyBpbmZvcm1hdGlvbiBvbiB0aGUgKl9CRU5DSE1BUksgY29tbWFuZHM6ICovXFxuLVxcdGlmICgoY21kID09IFBJTl9GQVNUX0JFTkNITUFSSykgfHwgKGNtZCA9PSBHVVBfRkFTVF9CRU5DSE1BUkspIHx8XFxuLVxcdCAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkge1xcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmVwZWF0czsgaSsrKSB7XFxuLVxcdFxcdFxcdGd1cC5zaXplID0gc2l6ZTtcXG4tXFx0XFx0XFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFxcdTAwMjZndXApO1xcbi1cXHRcXHRcXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJlcGVhdHM7IGkrKykge1xcbitcXHRcXHRndXAuc2l6ZSA9IHNpemU7XFxuK1xcdFxcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcXHUwMDI2Z3VwKTtcXG4rXFx0XFx0aWYgKHN0YXR1cykge1xcbitcXHRcXHRcXHRpbnQgZXJyID0gZXJybm87XFxuIFxcbiBcXHRcXHRcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNnByaW50X211dGV4KTtcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIiVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1xcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGd1cC5wdXRfZGVsdGFfdXNlYyk7XFxuLVxcdFxcdFxcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxcbi1cXHRcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiLCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxcIiwgZ3VwLnNpemUpO1xcbi1cXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCIlcyBpb2N0bCBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBjbWRfdG9fc3RyKGNtZCksXFxuK1xcdFxcdFxcdFxcdHN0cmVycm9yKGVycikpO1xcbiBcXHRcXHRcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2cHJpbnRfbXV0ZXgpO1xcbitcXHRcXHRcXHRyZXR1cm4gZGF0YTtcXG4gXFx0XFx0fVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRndXAuc2l6ZSA9IHNpemU7XFxuLVxcdFxcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcXHUwMDI2Z3VwKTtcXG4tXFx0XFx0aWYgKHN0YXR1cylcXG4tXFx0XFx0XFx0Z290byByZXR1cm5fO1xcbiBcXG4gXFx0XFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZwcmludF9tdXRleCk7XFxuLVxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCIlczogZG9uZVxcXFxuXFxcIiwgY21kX3RvX3N0cihjbWQpKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcXFwiLFxcbitcXHRcXHRcXHRjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcXG4rXFx0XFx0XFx0Z3VwLnB1dF9kZWx0YV91c2VjKTtcXG4gXFx0XFx0aWYgKGd1cC5zaXplICE9IHNpemUpXFxuLVxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJUcnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxcXG5cXFwiLCBndXAuc2l6ZSk7XFxuK1xcdFxcdFxcdHByaW50ZihcXFwiLCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxcIiwgZ3VwLnNpemUpO1xcbitcXHRcXHRwcmludGYoXFxcIlxcXFxuXFxcIik7XFxuIFxcdFxcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFxcdTAwMjZwcmludF9tdXRleCk7XFxuIFxcdH1cXG4gXFxuLXJldHVybl86XFxuLVxcdGtzZnRfdGVzdF9yZXN1bHQoIXN0YXR1cywgXFxcImlvY3RsIHN0YXR1cyAlZFxcXFxuXFxcIiwgc3RhdHVzKTtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuQEAgLTkzLDM4ICs3NiwyMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIHtcXG4gXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xcbiBcXHRpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDtcXG4tXFx0aW50IGZsYWdzID0gTUFQX1BSSVZBVEU7XFxuK1xcdGludCBmbGFncyA9IE1BUF9QUklWQVRFLCBzdGFydGVkX3RocmVhZHMgPSAwLCBleGl0X3N0YXR1cyA9IDE7XFxuIFxcdGNoYXIgKmZpbGUgPSBcXFwiL2Rldi96ZXJvXFxcIjtcXG4tXFx0Ym9vbCBodWdldGxiID0gZmFsc2U7XFxuK1xcdGJvb2wgaHVnZXRsYiA9IGZhbHNlLCB0aHJlYWRfZXJyb3IgPSBmYWxzZTtcXG4rXFx0dm9pZCAqdGhyZWFkX3Jlc3VsdDtcXG4gXFx0cHRocmVhZF90ICp0aWQ7XFxuIFxcdGNoYXIgKnA7XFxuIFxcbi1cXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwibTpyOm46RjpmOmFiY2o6dFRMVXV3V1NIcHpcXFwiKSkgIT0gLTEpIHtcXG4rXFx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcIm06cjpuOkY6Zjphajp0VEx1d1dTSFxcXCIpKSAhPSAtMSkge1xcbiBcXHRcXHRzd2l0Y2ggKG9wdCkge1xcbiBcXHRcXHRjYXNlICdhJzpcXG4gXFx0XFx0XFx0Y21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLO1xcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnYic6XFxuLVxcdFxcdFxcdGNtZCA9IFBJTl9CQVNJQ19URVNUO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAnTCc6XFxuIFxcdFxcdFxcdGNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdjJzpcXG4tXFx0XFx0XFx0Y21kID0gRFVNUF9VU0VSX1BBR0VTX1RFU1Q7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIER1bXAgcGFnZSAwIChpbmRleCAxKS4gTWF5IGJlIG92ZXJyaWRkZW4gbGF0ZXIsIGJ5XFxuLVxcdFxcdFxcdCAqIHVzZXIncyBub24tb3B0aW9uIGFyZ3VtZW50cy5cXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogLndoaWNoX3BhZ2VzIGlzIHplcm8tYmFzZWQsIHNvIHRoYXQgemVybyBjYW4gbWVhbiBcXFwiZG9cXG4tXFx0XFx0XFx0ICogbm90aGluZ1xcXCIuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAncCc6XFxuLVxcdFxcdFxcdC8qIHdvcmtzIG9ubHkgd2l0aCBEVU1QX1VTRVJfUEFHRVNfVEVTVCAqL1xcbi1cXHRcXHRcXHRndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ0YnOlxcbiBcXHRcXHRcXHQvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqL1xcbiBcXHRcXHRcXHRndXAuZ3VwX2ZsYWdzID0gc3RydG9sKG9wdGFyZywgMCwgMCk7XFxuQEAgLTE0MSw3ICsxMDcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdGNhc2UgJ24nOlxcbiBcXHRcXHRcXHRucl9wYWdlcyA9IGF0b2kob3B0YXJnKTtcXG4gXFx0XFx0XFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0XFx0bnJfcGFnZXMgPSBzaXplIC8gcHNpemUoKTtcXG4rXFx0XFx0XFx0XFx0bnJfcGFnZXMgPSBzaXplIC8gZ2V0cGFnZXNpemUoKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ3QnOlxcbiBcXHRcXHRcXHR0aHAgPSAxO1xcbkBAIC0xNDksOSArMTE1LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRjYXNlICdUJzpcXG4gXFx0XFx0XFx0dGhwID0gMDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ1UnOlxcbi1cXHRcXHRcXHRjbWQgPSBHVVBfQkFTSUNfVEVTVDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ3UnOlxcbiBcXHRcXHRcXHRjbWQgPSBHVVBfRkFTVF9CRU5DSE1BUks7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xNzMsNTIgKzEzNiw0MSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcdGh1Z2V0bGIgPSB0cnVlO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJXcm9uZyBhcmd1bWVudFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV3JvbmcgYXJndW1lbnRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRleGl0KDEpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChvcHRpbmQgXFx1MDAzYyBhcmdjKSB7XFxuLVxcdFxcdGludCBleHRyYV9hcmdfY291bnQgPSAwO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBGb3IgZXhhbXBsZTpcXG4tXFx0XFx0ICpcXG4tXFx0XFx0ICogICAuL2d1cF90ZXN0IC1jIDAgMSAweDEwMDFcXG4tXFx0XFx0ICpcXG4tXFx0XFx0ICogLi4udG8gZHVtcCBwYWdlcyAwLCAxLCBhbmQgNDA5N1xcbi1cXHRcXHQgKi9cXG4tXFxuLVxcdFxcdHdoaWxlICgob3B0aW5kIFxcdTAwM2MgYXJnYykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICAgIChleHRyYV9hcmdfY291bnQgXFx1MDAzYyBHVVBfVEVTVF9NQVhfUEFHRVNfVE9fRFVNUCkpIHtcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW5cXG4tXFx0XFx0XFx0ICogdXNlIG5vcm1hbCAwLWJhc2VkIGluZGV4aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSArIDE7XFxuLVxcbi1cXHRcXHRcXHRndXAud2hpY2hfcGFnZXNbZXh0cmFfYXJnX2NvdW50XSA9IHBhZ2VfaW5kZXg7XFxuLVxcdFxcdFxcdGV4dHJhX2FyZ19jb3VudCsrO1xcbi1cXHRcXHRcXHRvcHRpbmQrKztcXG4tXFx0XFx0fVxcbitcXHRpZiAob3B0aW5kICE9IGFyZ2MpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJVbmV4cGVjdGVkIGFyZ3VtZW50ICclcydcXFxcblxcXCIsIGFyZ3Zbb3B0aW5kXSk7XFxuK1xcdFxcdGV4aXQoMSk7XFxuIFxcdH1cXG4gXFxuLVxcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcdGlmIChnZXRldWlkKCkpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxcXG5cXFwiKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGh1Z2V0bGIpIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xcbiBcXG4tXFx0XFx0aWYgKCFocF9zaXplKVxcbi1cXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiSHVnZVRMQiBpcyB1bmF2YWlsYWJsZVxcXFxuXFxcIik7XFxuK1xcdFxcdGlmICghaHBfc2l6ZSkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkNvdWxkIG5vdCBkZXRlcm1pbmUgaHVnZSBwYWdlIHNpemVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0c2l6ZSA9IChzaXplICsgaHBfc2l6ZSAtIDEpIFxcdTAwMjYgfihocF9zaXplIC0gMSk7XFxuLVxcdFxcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSlcXG4tXFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcXFxuXFxcIik7XFxuK1xcdFxcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGtzZnRfc2V0X3BsYW4obnRocmVhZHMpO1xcbi1cXG4gXFx0ZmlsZWQgPSBvcGVuKGZpbGUsIE9fUkRXUnxPX0NSRUFULCAwNjY0KTtcXG4tXFx0aWYgKGZpbGVkIFxcdTAwM2MgMClcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdGlmIChmaWxlZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuIFxcbiBcXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlcztcXG4gXFx0aWYgKHdyaXRlKVxcbkBAIC0yMjcsMjYgKzE3OSwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdGd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcXG4gXFx0aWYgKGd1cF9mZCA9PSAtMSkge1xcbiBcXHRcXHRzd2l0Y2ggKGVycm5vKSB7XFxuLVxcdFxcdGNhc2UgRUFDQ0VTOlxcbi1cXHRcXHRcXHRpZiAoZ2V0dWlkKCkpXFxuLVxcdFxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgRU5PRU5UOlxcbiBcXHRcXHRcXHRpZiAob3BlbmRpcihcXFwiL3N5cy9rZXJuZWwvZGVidWdcXFwiKSA9PSBOVUxMKVxcbi1cXHRcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwibW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcXFxuXFxcIik7XFxuLVxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJtb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJmYWlsZWQgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxcXG5cXFwiLCBHVVBfVEVTVF9GSUxFLFxcbitcXHRcXHRcXHRcXHRzdHJlcnJvcihlcnJubykpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbi1cXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXFxcblxcXCIpO1xcbi1cXHRcXHRrc2Z0X2V4aXRfcGFzcygpO1xcbitcXHRcXHRnb3RvIGVycl9jbG9zZV9maWxlZDtcXG4gXFx0fVxcbiBcXG4gXFx0cCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIGZpbGVkLCAwKTtcXG4tXFx0aWYgKHAgPT0gTUFQX0ZBSUxFRClcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJtbWFwOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0aWYgKHAgPT0gTUFQX0ZBSUxFRCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIm1tYXA6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHRnb3RvIGVycl9jbG9zZV9ndXBfZmQ7XFxuK1xcdH1cXG4gXFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylwO1xcbiBcXG4gXFx0aWYgKHRocCA9PSAxKVxcbkBAIC0yNTUsMjEgKzIwNSw0MyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcXG4gXFxuIFxcdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xcbi1cXHRmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCBcXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBwc2l6ZSgpKVxcbitcXHRmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCBcXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBnZXRwYWdlc2l6ZSgpKVxcbiBcXHRcXHRwWzBdID0gMDtcXG4gXFxuIFxcdHRpZCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIG50aHJlYWRzKTtcXG4tXFx0YXNzZXJ0KHRpZCk7XFxuK1xcdGlmICghdGlkKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlICVkIHRocmVhZHM6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRudGhyZWFkcywgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0XFx0Z290byBlcnJfdW5tYXA7XFxuK1xcdH1cXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudGhyZWFkczsgaSsrKSB7XFxuIFxcdFxcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsIFxcdTAwMjZndXApO1xcbi1cXHRcXHRhc3NlcnQocmV0ID09IDApO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwicHRocmVhZF9jcmVhdGUgZmFpbGVkOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IocmV0KSk7XFxuK1xcdFxcdFxcdHRocmVhZF9lcnJvciA9IHRydWU7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdHN0YXJ0ZWRfdGhyZWFkcysrO1xcbiBcXHR9XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudGhyZWFkczsgaSsrKSB7XFxuLVxcdFxcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpO1xcbi1cXHRcXHRhc3NlcnQocmV0ID09IDApO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3RhcnRlZF90aHJlYWRzOyBpKyspIHtcXG4rXFx0XFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgXFx1MDAyNnRocmVhZF9yZXN1bHQpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwicHRocmVhZF9qb2luIGZhaWxlZDogJXNcXFxcblxcXCIsIHN0cmVycm9yKHJldCkpO1xcbitcXHRcXHRcXHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xcbitcXHRcXHR9IGVsc2UgaWYgKHRocmVhZF9yZXN1bHQpXFxuK1xcdFxcdFxcdHRocmVhZF9lcnJvciA9IHRydWU7XFxuIFxcdH1cXG4gXFxuIFxcdGZyZWUodGlkKTtcXG4tXFxuLVxcdGtzZnRfZXhpdF9wYXNzKCk7XFxuK1xcdGlmICghdGhyZWFkX2Vycm9yKVxcbitcXHRcXHRleGl0X3N0YXR1cyA9IDA7XFxuK1xcbitlcnJfdW5tYXA6XFxuK1xcdG11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTtcXG4rZXJyX2Nsb3NlX2d1cF9mZDpcXG4rXFx0Y2xvc2UoZ3VwX2ZkKTtcXG4rZXJyX2Nsb3NlX2ZpbGVkOlxcbitcXHRjbG9zZShmaWxlZCk7XFxuK1xcdHJldHVybiBleGl0X3N0YXR1cztcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuaW5kZXggMmQ1MzY2MTk2ZTMwOS4uOWMwMzYyNGZkMjkzNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuQEAgLTM3LDcgKzM3LDggQEAgZW5kaWZcXG4gIyBMRExJQlMuXFxuIE1BS0VGTEFHUyArPSAtLW5vLWJ1aWx0aW4tcnVsZXNcXG4gXFxuLUNGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXFxuK0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliXFxuK0NGTEFHUyArPSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxcbiBDRkxBR1MgKz0gLVd1bnJlYWNoYWJsZS1jb2RlXFxuIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbVxcbiBcXG5AQCAtNTcsOCArNTgsOCBAQCBlbmRpZlxcbiBcXG4gVEVTVF9HRU5fRklMRVMgPSBjb3dcXG4gVEVTVF9HRU5fRklMRVMgKz0gY29tcGFjdGlvbl90ZXN0XFxuK1RFU1RfR0VOX0ZJTEVTICs9IGd1cFxcbiBURVNUX0dFTl9GSUxFUyArPSBndXBfbG9uZ3Rlcm1cXG4tVEVTVF9HRU5fRklMRVMgKz0gZ3VwX3Rlc3RcXG4gVEVTVF9HRU5fRklMRVMgKz0gaG1tLXRlc3RzXFxuIFRFU1RfR0VOX0ZJTEVTICs9IGh1Z2V0bGItbWFkdmlzZVxcbiBURVNUX0dFTl9GSUxFUyArPSBodWdldGxiLW1tYXBcXG5AQCAtMTg3LDggKzE4OCwxMCBAQCBURVNUX0ZJTEVTICs9IHdyaXRlX2h1Z2V0bGJfbWVtb3J5LnNoXFxuIFxcbiBpbmNsdWRlIC4uL2xpYi5ta1xcbiBcXG4tJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jXFxuLSQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbiskKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXFxcXFxcbitcXHRcXHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcXG4rJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXFxcXG4rXFx0XFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXFxuIFxcbiAkKE9VVFBVVCkvdWZmZC1zdHJlc3M6IHVmZmQtY29tbW9uLmNcXG4gJChPVVRQVVQpL3VmZmQtdW5pdC10ZXN0czogdWZmZC1jb21tb24uY1xcbkBAIC0yMTcsNyArMjIwLDcgQEAgJChCSU5BUklFU18zMik6IENGTEFHUyArPSAtbTMyIC1teHNhdmVcXG4gJChCSU5BUklFU18zMik6IExETElCUyArPSAtbHJ0IC1sZGwgLWxtXFxuICQoQklOQVJJRVNfMzIpOiAkKE9VVFBVVCkvJV8zMjogJS5jXFxuIFxcdCQoY2FsbCBtc2csQ0MsLCRAKVxcbi1cXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXFxuK1xcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQFxcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtMzIsJCh0KSkpKVxcbiBlbmRpZlxcbiBcXG5AQCAtMjI2LDcgKzIyOSw3IEBAICQoQklOQVJJRVNfNjQpOiBDRkxBR1MgKz0gLW02NCAtbXhzYXZlXFxuICQoQklOQVJJRVNfNjQpOiBMRExJQlMgKz0gLWxydCAtbGRsXFxuICQoQklOQVJJRVNfNjQpOiAkKE9VVFBVVCkvJV82NDogJS5jXFxuIFxcdCQoY2FsbCBtc2csQ0MsLCRAKVxcbi1cXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXFxuK1xcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQFxcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtNjQsJCh0KSkpKVxcbiBlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xcbmluZGV4IDMwZDRhY2U3MTU1YWUuLmIzZjUzNzcxMTljYjggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xcbkBAIC0xNSw5ICsxNSw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBNQVBfU0laRV9NQlxcdDEwMFxcbiAjZGVmaW5lIE1BUF9TSVpFXFx0KE1BUF9TSVpFX01CICogMTAyNCAqIDEwMjQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG5pbmRleCA4YWE1MjQ5ZDliZWY2Li4zMjY0YTgyODU3NWJkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG5AQCAtMjksNyArMjksNiBAQFxcbiAjaW5jbHVkZSBcXFwiLi4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XFxuIHN0YXRpYyBpbnQgcGFnZW1hcF9mZDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xcbmluZGV4IDE5NjA2MzVhOTUzZWIuLmU0NjYwYmY4OWI2MjQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xcbkBAIC0yNSw3ICsyNSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuIHVpbnQ2NF90IHBhZ2Vfc2l6ZTtcXG4gdWludDY0X3QgcG1kX3BhZ2VzaXplO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcXG5pbmRleCA1YzhlYzNjYTc1ZDdkLi5hZjVjZDliMzAzMzk1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xcbkBAIC0yMSw3ICsyMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdWlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXFwiLi4vcGlkZmQvcGlkZmQuaFxcXCJcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjMxYWUzOGUwOTEzNmRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmNcXG5AQCAtMCwwICsxLDI2MyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyAvLyBVc2UgbGw2NFxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRib29sLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZGlyZW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvaW9jdGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NtbS9ndXBfdGVzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4rXFxuKyNkZWZpbmUgTUIgKDFVTCBcXHUwMDNjXFx1MDAzYyAyMClcXG4rXFxuKy8qIEp1c3QgdGhlIGZsYWdzIHdlIG5lZWQsIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgaW50ZXJuYWxzLiAqL1xcbisjZGVmaW5lIEZPTExfV1JJVEVcXHQweDAxXFx0LyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovXFxuK1xcbisvKiBQYWdlIGNvdW50cyBleGVyY2lzaW5nIHNpbmdsZSwgVEhQLWJhdGNoLCBwYXJ0aWFsLCBhbmQgZnVsbC1tYXBwaW5nIEdVUC4gKi9cXG4rc3RhdGljIGNvbnN0IGludCBucl9wYWdlc19saXN0W10gPSB7IDEsIDUxMiwgMTIzLCAtMSB9O1xcbitcXG4rI2RlZmluZSBHVVBfVEVTVF9GSUxFIFxcXCIvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdFxcXCJcXG4rI2RlZmluZSBOUl9IVUdFX1BBR0VTIDJcXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGhwX3NpemU7XFxuK1xcbitGSVhUVVJFKGd1cF90ZXN0KVxcbit7XFxuK1xcdGludCBndXBfZmQ7XFxuK1xcdGNoYXIgKmFkZHI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVChndXBfdGVzdClcXG4re1xcbitcXHRib29sIHRocDtcXG4rXFx0Ym9vbCBodWdldGxiO1xcbitcXHRib29sIHdyaXRlO1xcbitcXHRib29sIHNoYXJlZDtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGUpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSB0cnVlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWQpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSBmYWxzZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV90aHApXFxuK3tcXG4rXFx0LnRocCA9IHRydWUsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF90aHApXFxuK3tcXG4rXFx0LnRocCA9IHRydWUsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IHRydWUsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF9odWdldGxiKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSB0cnVlLFxcbitcXHQud3JpdGUgPSBmYWxzZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZClcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gdHJ1ZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV90aHApXFxuK3tcXG4rXFx0LnRocCA9IHRydWUsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRfdGhwKVxcbit7XFxuK1xcdC50aHAgPSB0cnVlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSBmYWxzZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYilcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gdHJ1ZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF9odWdldGxiKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSB0cnVlLFxcbitcXHQud3JpdGUgPSBmYWxzZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1NFVFVQKGd1cF90ZXN0KVxcbit7XFxuK1xcdGludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTO1xcbitcXHRjaGFyICpwO1xcbitcXG4rXFx0c2VsZi1cXHUwMDNlc2l6ZSA9IDEyOCAqIE1CO1xcbitcXG4rXFx0aWYgKHZhcmlhbnQtXFx1MDAzZWh1Z2V0bGIpIHtcXG4rXFx0XFx0aWYgKCFocF9zaXplKVxcbitcXHRcXHRcXHRTS0lQKHJldHVybiwgXFxcIkh1Z2VUTEIgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuK1xcbitcXHRcXHRpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSBcXHUwMDNjIE5SX0hVR0VfUEFHRVMpXFxuK1xcdFxcdFxcdFNLSVAocmV0dXJuLCBcXFwiTm90IGVub3VnaCBodWdlIHBhZ2VzXFxcXG5cXFwiKTtcXG4rXFxuK1xcdFxcdHNlbGYtXFx1MDAzZXNpemUgPSBOUl9IVUdFX1BBR0VTICogaHBfc2l6ZTtcXG4rXFx0XFx0bW1hcF9mbGFncyB8PSBNQVBfSFVHRVRMQjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZhcmlhbnQtXFx1MDAzZXNoYXJlZClcXG4rXFx0XFx0bW1hcF9mbGFncyA9IChtbWFwX2ZsYWdzIFxcdTAwMjYgfk1BUF9QUklWQVRFKSB8IE1BUF9TSEFSRUQ7XFxuK1xcbitcXHQvKiBndXBfZmQgaGFzIHRvIGJlIFxcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cXG4rXFx0c2VsZi1cXHUwMDNlZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xcbitcXHRBU1NFUlRfR0Uoc2VsZi1cXHUwMDNlZ3VwX2ZkLCAwKTtcXG4rXFxuK1xcdHNlbGYtXFx1MDAzZWFkZHIgPSBtbWFwKE5VTEwsIHNlbGYtXFx1MDAzZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdFxcdCAgbW1hcF9mbGFncywgLTEsIDApO1xcbitcXG4rXFx0QVNTRVJUX05FKHNlbGYtXFx1MDAzZWFkZHIsIE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0aW50IGVyciA9IGVycm5vO1xcbitcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZ3VwX2ZkKTtcXG4rXFx0XFx0VEhfTE9HKFxcXCJtbWFwIGZhaWxlZDogJXNcXFwiLCBzdHJlcnJvcihlcnIpKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZhcmlhbnQtXFx1MDAzZXRocClcXG4rXFx0XFx0bWFkdmlzZShzZWxmLVxcdTAwM2VhZGRyLCBzZWxmLVxcdTAwM2VzaXplLCBNQURWX0hVR0VQQUdFKTtcXG4rXFx0ZWxzZSBpZiAoIXZhcmlhbnQtXFx1MDAzZWh1Z2V0bGIpXFxuK1xcdFxcdG1hZHZpc2Uoc2VsZi1cXHUwMDNlYWRkciwgc2VsZi1cXHUwMDNlc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcXG4rXFxuK1xcdGZvciAocCA9IHNlbGYtXFx1MDAzZWFkZHI7ICh1bnNpZ25lZCBsb25nKXAgXFx1MDAzYyAodW5zaWduZWQgbG9uZylzZWxmLVxcdTAwM2VhZGRyXFxuK1xcdFxcdFxcdCsgc2VsZi1cXHUwMDNlc2l6ZTsgcCArPSBwc2l6ZSgpKVxcbitcXHRcXHRwWzBdID0gMDtcXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTihndXBfdGVzdClcXG4re1xcbitcXHRtdW5tYXAoc2VsZi1cXHUwMDNlYWRkciwgc2VsZi1cXHUwMDNlc2l6ZSk7XFxuK1xcdGNsb3NlKHNlbGYtXFx1MDAzZWd1cF9mZCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9ndXBfY21kKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSxcXG4rXFx0XFx0XFx0IEZJWFRVUkVfREFUQShndXBfdGVzdCkgKnNlbGYsXFxuK1xcdFxcdFxcdCBjb25zdCBGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpICp2YXJpYW50LFxcbitcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBjb21tYW5kKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7XFxuK1xcdFxcdFxcdC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cXHUwMDNlYWRkcixcXG4rXFx0XFx0XFx0LnNpemUgPSBzZWxmLVxcdTAwM2VzaXplLFxcbitcXHRcXHRcXHQubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdFxcdHNlbGYtXFx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXSxcXG4rXFx0XFx0XFx0Lmd1cF9mbGFncyA9IHZhcmlhbnQtXFx1MDAzZXdyaXRlID8gRk9MTF9XUklURSA6IDAsXFxuK1xcdFxcdH07XFxuK1xcbitcXHRcXHRUSF9MT0coXFxcIm5yX3BhZ2VzX3Blcl9jYWxsPSV1XFxcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXFx1MDAzZWd1cF9mZCwgY29tbWFuZCwgXFx1MDAyNmd1cCksIDApO1xcbitcXHRcXHRBU1NFUlRfRVEoZ3VwLnNpemUsIHNlbGYtXFx1MDAzZXNpemUpO1xcbitcXHR9XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXMpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfQkFTSUNfVEVTVCk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXMpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fQkFTSUNfVEVTVCk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdClcXG4re1xcbitcXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIEdVUF9GQVNUX0JFTkNITUFSSyk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfZmFzdClcXG4re1xcbitcXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9GQVNUX0JFTkNITUFSSyk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfbG9uZ3Rlcm0pXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKTtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xcbitcXHRpZiAoZmQgPT0gLTEpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4rXFx0XFx0aWYgKGVycm5vID09IEVBQ0NFUylcXG4rXFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXFxcblxcXCIpO1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRU5PRU5UKSB7XFxuK1xcdFxcdFxcdERJUiAqZGVidWdmcyA9IG9wZW5kaXIoXFxcIi9zeXMva2VybmVsL2RlYnVnXFxcIik7XFxuK1xcbitcXHRcXHRcXHRpZiAoIWRlYnVnZnMpXFxuK1xcdFxcdFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Y2xvc2VkaXIoZGVidWdmcyk7XFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJDaGVjayBDT05GSUdfR1VQX1RFU1QgaW4ga2VybmVsIGNvbmZpZ1xcXFxuXFxcIik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0aHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcXG4rXFx0aWYgKGhwX3NpemUpXFxuK1xcdFxcdGh1Z2V0bGJfc2V0dXBfZGVmYXVsdChOUl9IVUdFX1BBR0VTKTtcXG4rXFxuK1xcdHJldHVybiB0ZXN0X2hhcm5lc3NfcnVuKGFyZ2MsIGFyZ3YpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG5pbmRleCA1MTBkZTkzYmU2ODE0Li5jOWQ4YjQ0OTEyNjM4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG5AQCAtMjksNyArMjksNiBAQFxcbiAjaW5jbHVkZSBcXFwiLi4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XFxuIHN0YXRpYyBpbnQgbnJfaHVnZXRsYnNpemVzO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXFxuaW5kZXggZTI2NDJlY2EwZDAyYi4uZmExYTY1MTk2M2ZkMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXFxuQEAgLTEwLDkgKzEwLDYgQEBcXG4gICogYnVncy5cXG4gICovXFxuIFxcbi0jaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuLVxcbiAjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbkBAIC0zMyw2ICszMCw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvZXZlbnRmZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdXNlcmZhdWx0ZmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3BvbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4gXFxuIC8qXFxuICAqIFRoaXMgaXMgYSBwcml2YXRlIFVBUEkgdG8gdGhlIGtlcm5lbCB0ZXN0IG1vZHVsZSBzbyBpdCBpc24ndCBleHBvcnRlZFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXFxuaW5kZXggNTU1YjRiM2QxNDMwNy4uNTdjZjc5MGNhNDc4ZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXFxuQEAgLTE0LDcgKzE0LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIE1JTl9GUkVFX1BBR0VTXFx0MjBcXG4gI2RlZmluZSBOUl9IVUdFX1BBR0VTXFx0MTBcXHQvKiBjb21tb24gbnVtYmVyIG9mIHBhZ2VzIHRvIG1hcC9hbGxvY2F0ZSAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXFxuaW5kZXggMGYyYWFkMWI3ZGJkNi4uYTQ1OGJlY2Y1ODMyNyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXFxuQEAgLTE4LDcgKzE4LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWZkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxcbiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXFxuaW5kZXggZWQzZDkyZTg2MmQ4Ny4uOWI3MjRhZjY2ZTkzOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xcbkBAIC0yNiw3ICsyNiw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRib29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIERFRkFVTFRfTEVOR1RIX01CIDEwVUxcXG4gI2RlZmluZSBNQl9UT19CWVRFUyh4KSAoeCAqIDEwMjQgKiAxMDI0KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xcbmluZGV4IDNmZjdmMDYyYjdlYjQuLmY0NTE0ZGE0OWUxZGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcXG5AQCAtMjksNyArMjksNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNClcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXFxuaW5kZXggNGFmOWQzZGI3YjViNi4uZDk1NjUyMTkzNzhhYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xcbkBAIC0yMiwxMCArMjIsMTAgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdGZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORVxcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxcbkBAIC04NSw4ICs4NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9yaWdfZW5hYmxlX3NvZnRfb2ZmbGluZSA9IC0xVUw7XFxuIFxcbiAvKlxcbiAgKiBSdW5zIGZyb20gYW4gYXRleGl0IGhhbmRsZXIsIHNvIGl0IG11c3Qgbm90IGNhbGwgYW55dGhpbmcgdGhhdFxcbi0gKiBleGl0cyBvbiBmYWlsdXJlOiB3cml0ZV9udW0oKSB3b3VsZCByZS1lbnRlciBleGl0KCkgdGhyb3VnaFxcbi0gKiBrc2Z0X2V4aXRfZmFpbF9tc2coKS5cXG4rICogZXhpdHMgb24gZmFpbHVyZS5cXG4gICovXFxuIHN0YXRpYyB2b2lkIHJlc3RvcmVfZW5hYmxlX3NvZnRfb2ZmbGluZSh2b2lkKVxcbiB7XFxuQEAgLTE1Miw3ICsxNTEsMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2Z0X29mZmxpbmVfY29tbW9uKGludCBlbmFibGVfc29mdF9vZmZsaW5lKVxcbiBcXHRodWdlcGFnZXNpemVfa2IgPSBmaWxlX3N0YXQuZl9ic2l6ZSAvIDEwMjQ7XFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJIdWdlcGFnZXNpemUgaXMgJWxka0JcXFxcblxcXCIsIGh1Z2VwYWdlc2l6ZV9rYik7XFxuIFxcbi1cXHR3cml0ZV9udW0oRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRILCBlbmFibGVfc29mdF9vZmZsaW5lKTtcXG4rXFx0cmV0ID0gd3JpdGVfbnVtKEVOQUJMRV9TT0ZUX09GRkxJTkVfUEFUSCwgZW5hYmxlX3NvZnRfb2ZmbGluZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiRmFpbGVkIHRvIHdyaXRlIHRvICVzOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRILCBzdHJlcnJvcigtcmV0KSk7XFxuIFxcbiBcXHRucl9odWdlcGFnZXNfYmVmb3JlID0gaHVnZXRsYl9ucl9kZWZhdWx0X3BhZ2VzKCk7XFxuIFxcbkBAIC0xODksNiArMTkxLDggQEAgc3RhdGljIHZvaWQgdGVzdF9zb2Z0X29mZmxpbmVfY29tbW9uKGludCBlbmFibGVfc29mdF9vZmZsaW5lKVxcbiBcXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiB7XFxuK1xcdGludCByZXQ7XFxuK1xcbiBcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbiBcXG4gXFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoOCkpXFxuQEAgLTE5Niw3ICsyMDAsMTEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXG4gXFx0a3NmdF9zZXRfcGxhbigyKTtcXG4gXFxuLVxcdG9yaWdfZW5hYmxlX3NvZnRfb2ZmbGluZSA9IHJlYWRfbnVtKEVOQUJMRV9TT0ZUX09GRkxJTkVfUEFUSCk7XFxuK1xcdHJldCA9IHJlYWRfbnVtKEVOQUJMRV9TT0ZUX09GRkxJTkVfUEFUSCwgXFx1MDAyNm9yaWdfZW5hYmxlX3NvZnRfb2ZmbGluZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiRmFpbGVkIHRvIHJlYWQgJXM6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIHN0cmVycm9yKC1yZXQpKTtcXG4rXFxuIFxcdGF0ZXhpdChyZXN0b3JlX2VuYWJsZV9zb2Z0X29mZmxpbmUpO1xcbiBcXG4gXFx0dGVzdF9zb2Z0X29mZmxpbmVfY29tbW9uKDEpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbmluZGV4IGZiNDYwMDU3MGUxMzEuLjk0OTU5NzRlY2NiZWEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcXG5AQCAtMjAsNyArMjAsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpZm5kZWYgU1RBVFhfRElPQUxJR05cXG4gI2RlZmluZSBTVEFUWF9ESU9BTElHTlxcdFxcdDB4MDAwMDIwMDBVXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcXG5pbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcXG5AQCAtMTAsNyArMTAsNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbkBAIC0yNSw3ICsyNSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBJTkxPT1BfSVRFUiAxMDBcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbmluZGV4IGY4MjY3M2Y1ZjZiNDcuLjUyNTEwOGNhY2U1NGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuQEAgLTIyLDcgKzIyLDYgQEBcXG4gI2luY2x1ZGUgXFxcImxpbnV4L21hZ2ljLmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgQkFTRV9BRERSICgodm9pZCAqKSgxVUwgXFx1MDAzY1xcdTAwM2MgMzApKVxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBocGFnZV9wbWRfc2l6ZTtcXG5AQCAtMTIyLDYgKzEyMSw3IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXFxuIFxcdGNoYXIgYnVmWzEgXFx1MDAzY1xcdTAwM2MgMTBdO1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbiBcXHRjaGFyICpzdHIsICplbmQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRmaW5mby5kaXIgPSBkaXI7XFxuIFxcdGlmIChzdGF0KGZpbmZvLmRpciwgXFx1MDAyNnBhdGhfc3RhdCkpXFxuQEAgLTE0Miw4ICsxNDIsOSBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKVxcbiBcXHRcXHQgICAgIG1ham9yKHBhdGhfc3RhdC5zdF9kZXYpLCBtaW5vcihwYXRoX3N0YXQuc3RfZGV2KSlcXG4gXFx0ICAgIFxcdTAwM2U9IHNpemVvZihwYXRoKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4tXFx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwicmVhZF9maWxlKHVldmVudClcXFwiKTtcXG4rXFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRfZmlsZSglcyk6ICVzXFxcXG5cXFwiLCBwYXRoLCBzdHJlcnJvcigtcmV0KSk7XFxuIFxcdGlmIChzdHJzdHIoYnVmLCBcXFwiREVWVFlQRT1kaXNrXFxcIikpIHtcXG4gXFx0XFx0LyogRm91bmQgaXQgKi9cXG4gXFx0XFx0aWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXFxuQEAgLTMyNCw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxcbiB7XFxuIFxcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XFxuIFxcdGNvbnN0IGludCBtbWFwX3Byb3QgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IFBST1RfUkVBRCA6IChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTtcXG4tXFx0aW50IGZkO1xcbitcXHRpbnQgZmQsIHJldDtcXG4gXFx0dm9pZCAqcDtcXG4gXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbiBcXG5AQCAtMzYyLDcgKzM2MywxMSBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcIm1tYXAoKVxcXCIpO1xcbiBcXG4gXFx0LyogRHJvcCBwYWdlIGNhY2hlICovXFxuLVxcdHdyaXRlX2ZpbGUoXFxcIi9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1xcXCIsIFxcXCIzXFxcIiwgMik7XFxuK1xcdHJldCA9IHdyaXRlX2ZpbGUoXFxcIi9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1xcXCIsIFxcXCIzXFxcIiwgMik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwid3JpdGVfZmlsZShkcm9wX2NhY2hlcyk6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBzdHJlcnJvcigtcmV0KSk7XFxuK1xcbiBcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRyZXR1cm4gcDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuaW5kZXggNWZkNzc5MmEwZDQ3OS4uNjcxMWY0YzYxMzcxMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuQEAgLTE1LDcgKzE1LDYgQEBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXHUwMDNjaW5jbHVkZS92ZHNvL3RpbWU2NC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgS1NNX1NZU0ZTX1BBVEggXFxcIi9zeXMva2VybmVsL21tL2tzbS9cXFwiXFxuICNkZWZpbmUgS1NNX0ZQKHMpIChLU01fU1lTRlNfUEFUSCBzKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuaW5kZXggZjE5ZDUzYzY5NTc2NC4uYTM1ZTJiNTdlMDViMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuQEAgLTUsNyArNSw2IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbkBAIC0xNiw2ICsxNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdGltZS5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gXFxuICNkZWZpbmUgVFdPTUVHXFx0XFx0KDJcXHUwMDNjXFx1MDAzYzIwKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5pbmRleCBkOWE0ZmI3ODJlY2ZlLi4wMzg5OGI0ZjZjZGFiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbkBAIC0yNCw3ICsyNCw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBQQUdFTUFQX0JJVFNfQUxMXFx0XFx0KFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHxcXHRcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdCBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfFxcdFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG5pbmRleCA4MmM2ZTk2ZWE2ZWIzLi5mOWVjMTQwOGE2ZTMwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuQEAgLTE0LDcgKzE0LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuIFxcbiAjaWZuZGVmIFBSX1RIUF9ESVNBQkxFX0VYQ0VQVF9BRFZJU0VEXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG5pbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG5AQCAtNDUsOCArNDUsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvcHRyYWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzZXRqbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInBrZXktaGVscGVycy5oXFxcIlxcbiBcXG4gdTY0IHNoYWRvd19wa2V5X3JlZztcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbmluZGV4IGQwOWY5ZjZhMzg0ZWUuLmFlMGFiNWVmYWJhZTYgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbkBAIC0xMzAsMzAgKzEzMCw2IEBAIHRlc3Rfc2VsZWN0ZWQoKSB7XFxuIFxcdGZpXFxuIH1cXG4gXFxuLXJ1bl9ndXBfbWF0cml4KCkge1xcbi0gICAgIyAtdDogdGhwPW9uLCAtVDogdGhwPW9mZiwgLUg6IGh1Z2V0bGI9b25cXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XFxuLVxcbi0gICAgZm9yIGh1Z2UgaW4gLXQgLVQgXFxcIi1IIC1tICRodWdldGxiX21iXFxcIjsgZG9cXG4tICAgICAgICAjIC11OiBndXAtZmFzdCwgLVU6IGd1cC1iYXNpYywgLWE6IHBpbi1mYXN0LCAtYjogcGluLWJhc2ljLCAtTDogcGluLWxvbmd0ZXJtXFxuLSAgICAgICAgZm9yIHRlc3RfY21kIGluIC11IC1VIC1hIC1iIC1MOyBkb1xcbi0gICAgICAgICAgICAjIC13OiB3cml0ZT0xLCAtVzogd3JpdGU9MFxcbi0gICAgICAgICAgICBmb3Igd3JpdGUgaW4gLXcgLVc7IGRvXFxuLSAgICAgICAgICAgICAgICAjIC1TOiBzaGFyZWRcXG4tICAgICAgICAgICAgICAgIGZvciBzaGFyZSBpbiAtUyBcXFwiIFxcXCI7IGRvXFxuLSAgICAgICAgICAgICAgICAgICAgIyAtbjogSG93IG1hbnkgcGFnZXMgdG8gZmV0Y2ggdG9nZXRoZXI/ICA1MTIgaXMgc3BlY2lhbFxcbi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCdzIGRlZmF1bHQgdGhwIHNpemUgKG9yIDJNIG9uIHg4NiksIDEyMyB0b1xcbi0gICAgICAgICAgICAgICAgICAgICMganVzdCB0ZXN0IHBhcnRpYWwgZ3VwIHdoZW4gaGl0IGEgaHVnZSBpbiB3aGF0ZXZlciBmb3JtXFxuLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiBcXFwiLW4gMVxcXCIgXFxcIi1uIDUxMlxcXCIgXFxcIi1uIDEyM1xcXCIgXFxcIi1uIC0xXFxcIjsgZG9cXG4tICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IFxcXFxcXG4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHVnZSAkdGVzdF9jbWQgJHdyaXRlICRzaGFyZSAkbnVtXFxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxcbi0gICAgICAgICAgICAgICAgZG9uZVxcbi0gICAgICAgICAgICBkb25lXFxuLSAgICAgICAgZG9uZVxcbi0gICAgZG9uZVxcbi19XFxuLVxcbiAjIGZpbHRlciA2NGJpdCBhcmNoaXRlY3R1cmVzXFxuIEFSQ0g2NFNUUj1cXFwiYXJtNjQgbWlwczY0IHBhcmlzYzY0IHBwYzY0IHBwYzY0bGUgcmlzY3Y2NCBzMzkweCBzcGFyYzY0IHg4Nl82NFxcXCJcXG4gaWYgWyAteiBcXFwiJEFSQ0hcXFwiIF07IHRoZW5cXG5AQCAtMjc1LDE4ICsyNTEsNyBAQCBmaVxcbiBcXG4gQ0FURUdPUlk9XFxcIm1tYXBcXFwiIHJ1bl90ZXN0IC4vbWFwX2ZpeGVkX25vcmVwbGFjZVxcbiBcXG4taWYgJFJVTl9BTEw7IHRoZW5cXG4tICAgIHJ1bl9ndXBfbWF0cml4XFxuLWVsc2VcXG4tICAgICMgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFya1xcbi0gICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIDFcXG4tICAgIENBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAtMVxcbi0gICAgIyBwaW5fdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXFxuLSAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gMVxcbi0gICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIC0xXFxuLWZpXFxuLSMgRHVtcCBwYWdlcyAwLCAxOSwgYW5kIDQwOTYsIHVzaW5nIHBpbl91c2VyX3BhZ2VzOlxcbi1DQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMFxcbitDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwXFxuIENBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfbG9uZ3Rlcm1cXG4gXFxuIENBVEVHT1JZPVxcXCJ1c2VyZmF1bHRmZFxcXCIgcnVuX3Rlc3QgLi91ZmZkLXVuaXQtdGVzdHNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXFxuaW5kZXggNWYyNzg5MTNjNGQ3NS4uN2Y2NDliNjczMzU1MyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG5AQCAtOSw3ICs5LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIIFxcXCIvcHJvYy9zZWxmL3BhZ2VtYXBcXFwiXFxuICNkZWZpbmUgVEVTVF9JVEVSQVRJT05TIDEwMDAwXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuaW5kZXggYzAxZDIyN2Q3ZmQ2ZC4uNjhmNTA4YzlhMzU1ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbkBAIC0yMSw3ICsyMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiB1aW50NjRfdCBwYWdlc2l6ZTtcXG4gdW5zaWduZWQgaW50IHBhZ2VzaGlmdDtcXG5AQCAtMTQ1LDcgKzE0NCwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiBcXHRpZiAocmV0IFxcdTAwM2U9IElOUFVUX01BWClcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlczogRGVidWdmcyBpbnB1dCBpcyB0b28gbG9uZ1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXG4tXFx0d3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICsgMSk7XFxuK1xcdHJldCA9IHdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCArIDEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIndyaXRlX2ZpbGUoJXMpOiAlc1xcXFxuXFxcIiwgU1BMSVRfREVCVUdGUyxcXG4rXFx0XFx0XFx0XFx0ICAgc3RyZXJyb3IoLXJldCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY2hhciAqYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2Uoc2l6ZV90IGxlbilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xcbmluZGV4IDUwZDA4MDViNjVkYjkuLmEwNGY1ODhkZjc4MGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xcbkBAIC0xNCw3ICsxNCw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQilcXG4gI2RlZmluZSBNQVBfSFVHRVRMQlxcdDB4NDAwMDBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXFxuaW5kZXggOGViMGM1NjMwZTdlMy4uOTZmNzI4OThlYmUwYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcXG5AQCAtMTcsNyArMTcsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuIGludCBiYWNraW5nX2ZkID0gLTE7XFxuIGludCBtbWFwX2ZsYWdzID0gTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkUgfCBNQVBfUFJJVkFURTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcXG5pbmRleCA5MmEyMWI5N2Y3NDVhLi4wNzIzODQzYTc2MjZiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXFxuQEAgLTM3LDcgKzM3LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFVGRkRfRkxBR1NcXHQoT19DTE9FWEVDIHwgT19OT05CTE9DSyB8IFVGRkRfVVNFUl9NT0RFX09OTFkpXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xcbmluZGV4IDU3MmMyNTE2ZTg3NGQuLmM0OGVhYWI4ZTc1Y2YgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcXG5AQCAtNyw4ICs3LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2Fzc2VydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ1ZmZkLWNvbW1vbi5oXFxcIlxcbiBcXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcXG5pbmRleCBlMjRkN2JhMDBiNDQxLi41YTM1NGE2NjRkMWY3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xcbkBAIC0xMSw3ICsxMSw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gLypcXG4gICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3Nlc1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5pbmRleCA4MGJjOWY1OTdiNTIxLi40NzUxZGI3OThjM2FjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbkBAIC04ODksMTExICs4ODksNTQgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcXG4gXFx0cmV0dXJuIHJldCBcXHUwMDNlIDAgPyAwIDogLWVycm5vO1xcbiB9XFxuIFxcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcXG4te1xcbi1cXHRpbnQgZmQ7XFxuLVxcdHNzaXplX3QgbnVtcmVhZDtcXG4tXFxuLVxcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XFxuLVxcdGlmIChmZCA9PSAtMSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcXG4tXFx0aWYgKG51bXJlYWQgXFx1MDAzYyAxKSB7XFxuLVxcdFxcdGNsb3NlKGZkKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuLVxcdGJ1ZltudW1yZWFkXSA9ICdcXFxcMCc7XFxuLVxcdGNsb3NlKGZkKTtcXG4tXFxuLVxcdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpXFxuLXtcXG4tXFx0aW50IGZkLCBzYXZlZF9lcnJubztcXG4tXFx0c3NpemVfdCBudW13cml0dGVuO1xcbi1cXG4tXFx0aWYgKGJ1ZmxlbiBcXHUwMDNjIDIpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiSW5jb3JyZWN0IGJ1ZmZlciBsZW46ICV6dVxcXFxuXFxcIiwgYnVmbGVuKTtcXG4tXFxuLVxcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XFxuLVxcdGlmIChmZCA9PSAtMSlcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlcyBvcGVuIGZhaWxlZDogJXNcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7XFxuLVxcbi1cXHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XFxuLVxcdHNhdmVkX2Vycm5vID0gZXJybm87XFxuLVxcdGNsb3NlKGZkKTtcXG4tXFx0ZXJybm8gPSBzYXZlZF9lcnJubztcXG4tXFx0aWYgKG51bXdyaXR0ZW4gXFx1MDAzYyAwKSB7XFxuLVxcdFxcdGlmIChpZ25vcmVfZWludmFsIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlZBTClcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIHdyaXRlKCUuKnMpIGZhaWxlZDogJXNcXFxcblxcXCIsIHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLFxcbi1cXHRcXHRcXHRcXHRidWYsIHN0cmVycm9yKGVycm5vKSk7XFxuLVxcdH1cXG4tXFx0aWYgKG51bXdyaXR0ZW4gIT0gYnVmbGVuIC0gMSlcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0cGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7XFxuLX1cXG4tXFxuLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXFxuLXtcXG4tXFx0X193cml0ZV9maWxlKHBhdGgsIGJ1ZiwgYnVmbGVuLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpO1xcbi19XFxuLVxcbi11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpXFxuLXtcXG4tXFx0Y2hhciBidWZbMjFdO1xcbi1cXG4tXFx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwicmVhZF9maWxlKClcXFwiKTtcXG4tXFxuLVxcdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBfX3dyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSwgYm9vbCBpZ25vcmVfZWludmFsKVxcbi17XFxuLVxcdGNoYXIgYnVmWzIxXTtcXG4tXFxuLVxcdHNwcmludGYoYnVmLCBcXFwiJWx1XFxcIiwgbnVtKTtcXG4tXFx0X193cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgKyAxLCBpZ25vcmVfZWludmFsKTtcXG4tfVxcbi1cXG4tdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXFxuLXtcXG4tXFx0cmV0dXJuIF9fd3JpdGVfbnVtKHBhdGgsIG51bSwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTtcXG4tfVxcbi1cXG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcXG4te1xcbi1cXHRyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gdHJ1ZSk7XFxuLX1cXG4tXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWFsbCwgc2htbWF4O1xcbiBcXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKVxcbiB7XFxuLVxcdGlmIChzaG1tYXgpXFxuLVxcdFxcdHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiLCBzaG1tYXgpO1xcbi1cXHRpZiAoc2htYWxsKVxcbi1cXHRcXHR3cml0ZV9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXFxcIiwgc2htYWxsKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChzaG1tYXgpIHtcXG4rXFx0XFx0cmV0ID0gd3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIHNobW1heCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byByZXN0b3JlIHNobW1heDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cmVycm9yKC1yZXQpKTtcXG4rXFx0fVxcbitcXHRpZiAoc2htYWxsKSB7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBzaG1hbGwpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gcmVzdG9yZSBzaG1hbGw6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJlcnJvcigtcmV0KSk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuciA9IGxlbmd0aCAvIHBzaXplKCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmFsO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XFxcIiwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byByZWFkIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgc3RyZXJyb3IoLXJldCkpO1xcbiBcXG4tXFx0dmFsID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XFxcIik7XFxuIFxcdGlmICh2YWwgXFx1MDAzYyBsZW5ndGgpIHtcXG4tXFx0XFx0d3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIGxlbmd0aCk7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiLCBsZW5ndGgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gd3JpdGUgJWx1IHRvIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgbGVuZ3RoLCBzdHJlcnJvcigtcmV0KSk7XFxuIFxcdFxcdHNobW1heCA9IHZhbDtcXG4gXFx0fVxcbiBcXG4tXFx0dmFsID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXFxcIik7XFxuK1xcdHJldCA9IHJlYWRfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFxcXCIsIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gcmVhZCAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cmVycm9yKC1yZXQpKTtcXG4gXFx0aWYgKHZhbCBcXHUwMDNjIG5yKSB7XFxuLVxcdFxcdHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBucik7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBucik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBuciwgc3RyZXJyb3IoLXJldCkpO1xcbiBcXHRcXHRzaG1hbGwgPSB2YWw7XFxuIFxcdH1cXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li42NGE4NmU4YTBjNDFiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbkBAIC04LDYgKzgsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlIC8qIF9TQ19QQUdFU0laRSAqL1xcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vZmlsZV91dGlscy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgQklUX1VMTChucikgICAgICAgICAgICAgICAgICAgKDFVTEwgXFx1MDAzY1xcdTAwM2MgKG5yKSlcXG4gI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KVxcbkBAIC0xNjYsMTIgKzE2OCw2IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pO1xcbiAjZGVmaW5lIFBBR0VNQVBfUFJFU0VOVChlbnQpXFx0KCgoZW50KSBcXHUwMDI2ICgxdWxsIFxcdTAwM2NcXHUwMDNjIDYzKSkgIT0gMClcXG4gI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpXFx0KChlbnQpIFxcdTAwMjYgKCgxdWxsIFxcdTAwM2NcXHUwMDNjIDU1KSAtIDEpKVxcbiBcXG4tdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XFxuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcXG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcXG4tdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xcbi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcXG4tXFxuIHZvaWQgc2htX2xpbWl0c19wcmVwYXJlKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTtcXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ2OjU5LjA5OTM1NDIyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTA5NzkwNzYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvbGliL21tLywgdG9vbHMvbW0vLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBkb2N1bWVudGF0aW9uIChEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCksIE1BSU5UQUlORVJTLCBhbmQgS2NvbmZpZyBoZWxwIHRleHQgKG1tL0tjb25maWcpLiBObyBjb21waWxlZCBrZXJuZWwgQyBsb2dpYyBpcyBhZmZlY3RlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODEzMGQ3NTI3MWQ3NDNhMmIyMWRiY2I0YTZiMzY1YmEwNGY3NDBkNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjQ2OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuaW5kZXggYzE2Y2ExNjNiNTVlMy4uZTBhY2VkYmQxZDQ4NiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuQEAgLTIyNiwxNSArMjI2LDYgQEAgd2lsbCBiZSBwaW5uZWQgbG9uZ3Rlcm0sIGFuZCB3aG9zZSBkYXRhIHdpbGwgYmUgYWNjZXNzZWQuXG4gXG4gVW5pdCB0ZXN0aW5nXG4gPT09PT09PT09PT09XG4tVGhpcyBmaWxlOjpcbi1cbi0gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuLVxuLWhhcyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFwcGVyIGZ1bmN0aW9uczpcbi1cbi0qIFBJTl9GQVNUX0JFTkNITUFSSyAoLi9ndXBfdGVzdCAtYSlcbi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKVxuLVxuIFlvdSBjYW4gbW9uaXRvciBob3cgbWFueSB0b3RhbCBkbWEtcGlubmVkIHBhZ2VzIGhhdmUgYmVlbiBhY3F1aXJlZCBhbmQgcmVsZWFzZWRcbiBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIHZpYSB0d28gbmV3IC9wcm9jL3Ztc3RhdCBlbnRyaWVzOiA6OlxuIFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDM1MjYyYWEzZTY3ZWYuLmM0N2U2NTVjNDExMTIgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xNzE4Nyw4ICsxNzE4Nyw5IEBAIFQ6XHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW1cbiBGOlx0bW0vZ3VwLmNcbiBGOlx0bW0vZ3VwX3Rlc3QuY1xuIEY6XHRtbS9ndXBfdGVzdC5oXG4rRjpcdHRvb2xzL21tL2d1cF9iZW5jaC5jXG4rRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG4tRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiBcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIEtTTSAoS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcpXG4gTTpcdEFuZHJldyBNb3J0b24gXHUwMDNjYWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZ1x1MDAzZVxuQEAgLTE3Mjk1LDYgKzE3Mjk2LDcgQEAgRjpcdG1tL21lbW9yeS10aWVycy5jXG4gRjpcdG1tL3BhZ2VfaWRsZS5jXG4gRjpcdG1tL3BnYWxsb2MtdHJhY2suaFxuIEY6XHRtbS9wcm9jZXNzX3ZtX2FjY2Vzcy5jXG4rRjpcdHRvb2xzL2xpYi9tbS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT05cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggYzE4MGQ0MGNkNjcxMi4uNjFhYjFiOGEyZWJkZiAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbisrKyBiL21tL0tjb25maWdcbkBAIC0xMjkxLDI0ICsxMjkxLDE5IEBAIGNvbmZpZyBQRVJDUFVfU1RBVFNcbiBcdCAgYmUgdXNlZCB0byBoZWxwIHVuZGVyc3RhbmQgcGVyY3B1IG1lbW9yeSB1c2FnZS5cbiBcbiBjb25maWcgR1VQX1RFU1Rcbi1cdGJvb2wgXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzXCJcbitcdGJvb2wgXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzIGFuZCBiZW5jaG1hcmtzXCJcbiBcdGRlcGVuZHMgb24gREVCVUdfRlNcbiBcdGhlbHBcbiBcdCAgUHJvdmlkZXMgL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYSB3YXlcbi1cdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yXG4tXHQgIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWx5IG9mIEFQSSBjYWxscy5cbitcdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgYW5kXG4rXHQgIGJlbmNobWFya3MgZm9yIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWxpZXNcbitcdCAgb2YgQVBJIGNhbGxzLlxuIFxuLVx0ICBUaGVzZSB0ZXN0cyBpbmNsdWRlIGJlbmNobWFyayB0ZXN0aW5nIG9mIHRoZSBfZmFzdCB2YXJpYW50cyBvZlxuLVx0ICBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCksIGFzIHdlbGwgYXMgc21va2UgdGVzdHMgb2ZcbitcdCAgVGhlc2UgaW5jbHVkZSBiZW5jaG1hcmsgdGVzdGluZyBvZiB0aGUgX2Zhc3QgdmFyaWFudHMgb2ZcbitcdCAgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpLCBhcyB3ZWxsIGFzIHRlc3RzIG9mXG4gXHQgIHRoZSBub24tX2Zhc3QgdmFyaWFudHMuXG4gXG4tXHQgIFRoZXJlIGlzIGFsc28gYSBzdWItdGVzdCB0aGF0IGFsbG93cyBydW5uaW5nIGR1bXBfcGFnZSgpIG9uIGFueVxuLVx0ICBvZiB1cCB0byBlaWdodCBwYWdlcyAoc2VsZWN0ZWQgYnkgY29tbWFuZCBsaW5lIGFyZ3MpIHdpdGhpbiB0aGVcbi1cdCAgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlIHBhZ2VzIGFyZSBlaXRoZXIgcGlubmVkIHZpYVxuLVx0ICBwaW5fdXNlcl9wYWdlcyooKSwgb3IgcGlubmVkIHZpYSBnZXRfdXNlcl9wYWdlcyooKSwgYXMgc3BlY2lmaWVkXG4tXHQgIGJ5IG90aGVyIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXG4tXG4tXHQgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4rXHQgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYyBhbmQgdG9vbHMvbW0vZ3VwX2JlbmNoLmMuXG4gXG4gY29tbWVudCBcIkdVUF9URVNUIG5lZWRzIHRvIGhhdmUgREVCVUdfRlMgZW5hYmxlZFwiXG4gXHRkZXBlbmRzIG9uICFHVVBfVEVTVCBcdTAwMjZcdTAwMjYgIURFQlVHX0ZTXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45YjIyMzdlOTgyM2U5XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG5AQCAtMCwwICsxLDEwNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJmaWxlX3V0aWxzLmhcIlxuK1xuK2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1x0c3NpemVfdCBudW1yZWFkO1xuK1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbitcdGlmIChmZCA9PSAtMSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdG51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xuK1x0aWYgKG51bXJlYWQgXHUwMDNjIDEpIHtcbitcdFx0ZXJyID0gbnVtcmVhZCA/IGVycm5vIDogRU5PREFUQTtcbitcdFx0Y2xvc2UoZmQpO1xuK1x0XHRyZXR1cm4gLWVycjtcbitcdH1cbitcbitcdGJ1ZltudW1yZWFkXSA9ICdcXDAnO1xuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbilcbit7XG4rXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xuK1x0c3NpemVfdCBudW13cml0dGVuO1xuK1xuK1x0aWYgKGJ1ZmxlbiBcdTAwM2MgMilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xuK1x0aWYgKGZkID09IC0xKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0bnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xuK1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGNsb3NlKGZkKTtcbitcbitcdGlmIChudW13cml0dGVuIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLXNhdmVkX2Vycm5vO1xuK1xuK1x0aWYgKG51bXdyaXR0ZW4gIT0gKHNzaXplX3QpKGJ1ZmxlbiAtIDEpKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdmFsO1xuK1x0aW50IHJldDtcbitcdGNoYXIgYnVmWzIxXTtcbitcdGNoYXIgKmVuZDtcbitcbitcdGlmICghbnVtKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBSZWplY3Qgc2lnbnMgYW5kIGxlYWRpbmcgd2hpdGVzcGFjZSB0aGF0IGFyZSBhY2NlcHRlZCBieSBzdHJ0b3VsKCkgKi9cbitcdGlmIChidWZbMF0gXHUwMDNjICcwJyB8fCBidWZbMF0gXHUwMDNlICc5JylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRlcnJubyA9IDA7XG4rXHR2YWwgPSBzdHJ0b3VsKGJ1ZiwgXHUwMDI2ZW5kLCAxMCk7XG4rXHRpZiAoZXJybm8pXG4rXHRcdHJldHVybiAtZXJybm87XG4rXG4rXHQvKiBPbmx5IGFsbG93IGEgbmV3bGluZSBhZnRlciB0aGUgbnVtYmVyICovXG4rXHRpZiAoKmVuZCA9PSAnXFxuJylcbitcdFx0ZW5kKys7XG4rXG4rXHRpZiAoKmVuZCAhPSAnXFwwJylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQqbnVtID0gdmFsO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4re1xuK1x0Y2hhciBidWZbMjFdO1xuK1xuK1x0c3ByaW50ZihidWYsIFwiJWx1XCIsIG51bSk7XG4rXHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICsgMSk7XG4rfVxuK1xuK2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7XG4rXHRyZXR1cm4gcmV0ID09IC1FSU5WQUwgPyAwIDogcmV0O1xuK31cbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUwZGFhODJjMmIyYjRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmhcbkBAIC0wLDAgKzEsMTMgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyNpZm5kZWYgX19NTV9GSUxFX1VUSUxTX0hfX1xuKyNkZWZpbmUgX19NTV9GSUxFX1VUSUxTX0hfX1xuK1xuKyNpbmNsdWRlIFx1MDAzY3N0ZGRlZi5oXHUwMDNlXG4rXG4raW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4raW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSk7XG4raW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4raW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbnNpbWlsYXJpdHkgaW5kZXggODclXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbmluZGV4IGQ3OTE3ZGNlM2FiYWMuLmFiZDlmNzE4MmY4OGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG4rKysgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuQEAgLTgsMTIgKzgsMTggQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwiZmlsZV91dGlscy5oXCJcbiAjaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgVEhQX1NZU0ZTIFwiL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvXCJcbiAjZGVmaW5lIE1BWF9TRVRUSU5HU19ERVBUSCA0XG4rXG4rI2lmbmRlZiBBUlJBWV9TSVpFXG4rI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSlcbisjZW5kaWZcbitcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5nc19zdGFja1tNQVhfU0VUVElOR1NfREVQVEhdO1xuIHN0YXRpYyBpbnQgc2V0dGluZ3NfaW5kZXg7XG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2F2ZWRfc2V0dGluZ3M7XG5AQCAtNDgsNiArNTQsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzaG1lbV9lbmFibGVkX3N0cmluZ3NbXSA9IHtcbiBcdE5VTExcbiB9O1xuIFxuK3N0YXRpYyB2b2lkIHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGNvbnN0IGNoYXIgKnBhdGgsIGludCByZXQpXG4re1xuK1x0cHJpbnRmKFwiIyAlczogJXMgKCVkKVxcblwiLCBwYXRoLCBzdHJlcnJvcigtcmV0KSwgLXJldCk7XG4rfVxuK1xuIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuQEAgLTYxLDggKzcyLDkgQEAgaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4gXG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkge1xuLVx0XHRwZXJyb3IocGF0aCk7XG4rXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbiBcbkBAIC0xMDMsMTIgKzExNSwxNyBAQCB2b2lkIHRocF93cml0ZV9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsKVxuIFx0XHRwcmludGYoXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHR3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgKyAxKTtcbitcdHJldCA9IHdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSArIDEpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbitcdHVuc2lnbmVkIGxvbmcgbnVtO1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCBUSFBfU1lTRlMgXCIlc1wiLCBuYW1lKTtcbkBAIC0xMTYsNyArMTMzLDEzIEBAIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpXG4gXHRcdHByaW50ZihcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbi1cdHJldHVybiByZWFkX251bShwYXRoKTtcbitcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm51bSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdH1cbitcbitcdHJldHVybiBudW07XG4gfVxuIFxuIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcbkBAIC0xMjksNyArMTUyLDExIEBAIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcbiBcdFx0cHJpbnRmKFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0d3JpdGVfbnVtKHBhdGgsIG51bSk7XG4rXHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0fVxuIH1cbiBcbiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuQEAgLTE1Nyw4ICsxODQsMTUgQEAgdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbiBcdFx0Lm1heF9wdGVzX3NoYXJlZCA9IHRocF9yZWFkX251bShcImtodWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXCIpLFxuIFx0XHQucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bShcImtodWdlcGFnZWQvcGFnZXNfdG9fc2NhblwiKSxcbiBcdH07XG4tXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSlcbi1cdFx0c2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYiA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgpO1xuK1x0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHtcbitcdFx0aW50IHJldCA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG4rXHRcdFx0XHQgICBcdTAwMjZzZXR0aW5ncy1cdTAwM2VyZWFkX2FoZWFkX2tiKTtcbitcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHJldCk7XG4rXHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9PUkRFUlM7IGkrKykge1xuIFx0XHRpZiAoISgoMSBcdTAwM2NcdTAwM2MgaSkgXHUwMDI2IG9yZGVycykpIHtcbkBAIC0yMDgsOCArMjQyLDE1IEBAIHZvaWQgdGhwX3dyaXRlX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuIFx0dGhwX3dyaXRlX251bShcImtodWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXCIsIGtodWdlcGFnZWQtXHUwMDNlbWF4X3B0ZXNfc2hhcmVkKTtcbiBcdHRocF93cml0ZV9udW0oXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cIiwga2h1Z2VwYWdlZC1cdTAwM2VwYWdlc190b19zY2FuKTtcbiBcbi1cdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxuLVx0XHR3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgc2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4rXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xuK1x0XHRpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG4rXHRcdFx0XHQgICAgc2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4rXG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpO1xuK1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfT1JERVJTOyBpKyspIHtcbiBcdFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNiBvcmRlcnMpKVxuQEAgLTMwNyw4ICszNDgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX190aHBfc3VwcG9ydGVkX29yZGVycyhib29sIGlzX3NobWVtKVxuIFx0XHR9XG4gXG4gXHRcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRvcmRlcnMgfD0gMVVMIFx1MDAzY1x1MDAzYyBpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0aWYgKHJldCAhPSAtRU5PRU5UKSB7XG4rXHRcdFx0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0XHRcdH1cbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRvcmRlcnMgfD0gMVVMIFx1MDAzY1x1MDAzYyBpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIG9yZGVycztcbkBAIC0zODIsOCArNDMwLDcgQEAgaW50IGRldGVjdF9odWdldGxiX3BhZ2Vfc2l6ZXModW5zaWduZWQgbG9uZyBzaXplc1tdLCBpbnQgbWF4KVxuIFx0XHRpZiAoc3NjYW5mKGVudHJ5LVx1MDAzZWRfbmFtZSwgXCJodWdlcGFnZXMtJXp1a0JcIiwgXHUwMDI2a2IpICE9IDEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdHNpemVzW2NvdW50KytdID0ga2IgKiAxMDI0O1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcIltJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcblwiLFxuLVx0XHRcdCAgICAgICBrYik7XG4rXHRcdHByaW50ZihcIiMgW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxuXCIsIGtiKTtcbiBcdH1cbiBcdGNsb3NlZGlyKGRpcik7XG4gXHRyZXR1cm4gY291bnQ7XG5AQCAtNDI1LDI4ICs0NzIsNDkgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl9zeXNmc19wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbixcbiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHR1bnNpZ25lZCBsb25nIG5yO1xuK1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwibnJfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbnI7XG4gfVxuIFxuIHZvaWQgaHVnZXRsYl9zZXRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHRpbnQgcmV0O1xuIFxuIFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXCJucl9odWdlcGFnZXNcIik7XG4gXG4tXHR3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7XG4rXHRyZXQgPSB3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdH1cbiB9XG4gXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHR1bnNpZ25lZCBsb25nIG5yO1xuK1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwiZnJlZV9odWdlcGFnZXNcIik7XG4gXG4tXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XG4rXHRyZXQgPSByZWFkX251bShwYXRoLCBcdTAwMjZucik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdH1cbitcbitcdHJldHVybiBucjtcbiB9XG4gXG4gc3RhdGljIGJvb2wgX19odWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcbkBAIC01MDIsNyArNTcwLDggQEAgdW5zaWduZWQgbG9uZyBodWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgbnIsIHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSxcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAobnJfZW5hYmxlZCBcdTAwM2UgbWF4KSB7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwiZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxcblwiLCBucl9lbmFibGVkLCBtYXgpO1xuK1x0XHRwcmludGYoXCIjIGRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXG5cIixcbitcdFx0ICAgICAgIG5yX2VuYWJsZWQsIG1heCk7XG4gXHRcdG5yX2VuYWJsZWQgPSBtYXg7XG4gXHR9XG4gXG5AQCAtNTc0LDggKzY0MywxMCBAQCBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3Nfc2lnaGFuZGxlcihpbnQgc2lnKVxuIHtcbitcdCh2b2lkKXNpZztcbitcbiBcdC8qIGV4aXQoKSB3aWxsIGludm9rZSB0aGUgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQgaGFuZGxlci4gKi9cbi1cdGV4aXQoS1NGVF9GQUlMKTtcbitcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiB9XG4gXG4gdm9pZCBodWdlcGFnZV9zYXZlX3NldHRpbmdzKGJvb2wgdGhwLCBib29sIGh1Z2V0bGIpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5zaW1pbGFyaXR5IGluZGV4IDEwMCVcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbnJlbmFtZSB0byB0b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlXG5pbmRleCAxNDQ2YTY1OWU1NDA4Li4xNTRkNzQwYmUwMmU4IDEwMDY0NFxuLS0tIGEvdG9vbHMvbW0vLmdpdGlnbm9yZVxuKysrIGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxuQEAgLTMsMyArMyw0IEBAIHNsYWJpbmZvXG4gcGFnZS10eXBlc1xuIHBhZ2Vfb3duZXJfc29ydFxuIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4rZ3VwX2JlbmNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxuaW5kZXggODU4MTg2YTZlZWZkYi4uZjIwYTMyZDhjYzIyZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXG4rKysgYi90b29scy9tbS9NYWtlZmlsZVxuQEAgLTMsMTMgKzMsMTUgQEBcbiAjXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcbiBcbi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4rQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlclxuK0JVSUxEX1RBUkdFVFMgKz0gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXG4gSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzXG4gXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcbiBMSUJTID0gJChMSUJfRElSKS9saWJhcGkuYVxuK0dVUF9CRU5DSF9PQkpTID0gZ3VwX2JlbmNoLmMgLi4vbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgLi4vbGliL21tL2ZpbGVfdXRpbHMuY1xuIFxuLUNGTEFHUyArPSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtcHRocmVhZFxuK0NGTEFHUyArPSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtSS4uLy4uIC1wdGhyZWFkXG4gTERGTEFHUyArPSAkKExJQlMpIC1wdGhyZWFkXG4gXG4gYWxsOiAkKEJVSUxEX1RBUkdFVFMpXG5AQCAtMjIsOCArMjQsMTEgQEAgJChMSUJTKTpcbiAlOiAlLmNcbiBcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXHUwMDNjICQoTERGTEFHUylcbiBcbitndXBfYmVuY2g6ICQoR1VQX0JFTkNIX09CSlMpICQoTElCUylcbitcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKEdVUF9CRU5DSF9PQkpTKSAkKExERkxBR1MpXG4rXG4gY2xlYW46XG4tXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK1x0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXG4gXHRtYWtlIC1DICQoTElCX0RJUikgY2xlYW5cbiBcbiBzYmluZGlyID89IC91c3Ivc2JpblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMgYi90b29scy9tbS9ndXBfYmVuY2guY1xuc2ltaWxhcml0eSBpbmRleCA1MCVcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbnJlbmFtZSB0byB0b29scy9tbS9ndXBfYmVuY2guY1xuaW5kZXggM2Y4NDFhOTZmODcwNi4uZmY2ZTQ2NjU0NjgxMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbisrKyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jXG5AQCAtMTAsMTEgKzEwLDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYXNzZXJ0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY21tL2d1cF90ZXN0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbisjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2RlZmluZSBNQiAoMVVMIFx1MDAzY1x1MDAzYyAyMClcbiBcbkBAIC0zOCwxMiArMzcsNiBAQCBzdGF0aWMgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZClcbiBcdFx0cmV0dXJuIFwiUElOX0ZBU1RfQkVOQ0hNQVJLXCI7XG4gXHRjYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6XG4gXHRcdHJldHVybiBcIlBJTl9MT05HVEVSTV9CRU5DSE1BUktcIjtcbi1cdGNhc2UgR1VQX0JBU0lDX1RFU1Q6XG4tXHRcdHJldHVybiBcIkdVUF9CQVNJQ19URVNUXCI7XG4tXHRjYXNlIFBJTl9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCJQSU5fQkFTSUNfVEVTVFwiO1xuLVx0Y2FzZSBEVU1QX1VTRVJfUEFHRVNfVEVTVDpcbi1cdFx0cmV0dXJuIFwiRFVNUF9VU0VSX1BBR0VTX1RFU1RcIjtcbiBcdH1cbiBcdHJldHVybiBcIlVua25vd24gY29tbWFuZFwiO1xuIH1cbkBAIC01MywzOSArNDYsMjkgQEAgdm9pZCAqZ3VwX3RocmVhZCh2b2lkICpkYXRhKVxuIFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTtcbiBcdGludCBpLCBzdGF0dXM7XG4gXG4tXHQvKiBPbmx5IHJlcG9ydCB0aW1pbmcgaW5mb3JtYXRpb24gb24gdGhlICpfQkVOQ0hNQVJLIGNvbW1hbmRzOiAqL1xuLVx0aWYgKChjbWQgPT0gUElOX0ZBU1RfQkVOQ0hNQVJLKSB8fCAoY21kID09IEdVUF9GQVNUX0JFTkNITUFSSykgfHxcbi1cdCAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXBlYXRzOyBpKyspIHtcbi1cdFx0XHRndXAuc2l6ZSA9IHNpemU7XG4tXHRcdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4tXHRcdFx0aWYgKHN0YXR1cylcbi1cdFx0XHRcdGJyZWFrO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVwZWF0czsgaSsrKSB7XG4rXHRcdGd1cC5zaXplID0gc2l6ZTtcbitcdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4rXHRcdGlmIChzdGF0dXMpIHtcbitcdFx0XHRpbnQgZXJyID0gZXJybm87XG4gXG4gXHRcdFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbi1cdFx0XHRrc2Z0X3ByaW50X21zZyhcIiVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1wiLFxuLVx0XHRcdFx0ICAgICAgIGNtZF90b19zdHIoY21kKSwgZ3VwLmdldF9kZWx0YV91c2VjLFxuLVx0XHRcdFx0ICAgICAgIGd1cC5wdXRfZGVsdGFfdXNlYyk7XG4tXHRcdFx0aWYgKGd1cC5zaXplICE9IHNpemUpXG4tXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcIiwgdHJ1bmNhdGVkIChzaXplOiAlbGxkKVwiLCBndXAuc2l6ZSk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCJcXG5cIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiJXMgaW9jdGwgZmFpbGVkOiAlc1xcblwiLCBjbWRfdG9fc3RyKGNtZCksXG4rXHRcdFx0XHRzdHJlcnJvcihlcnIpKTtcbiBcdFx0XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4rXHRcdFx0cmV0dXJuIGRhdGE7XG4gXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGd1cC5zaXplID0gc2l6ZTtcbi1cdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4tXHRcdGlmIChzdGF0dXMpXG4tXHRcdFx0Z290byByZXR1cm5fO1xuIFxuIFx0XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcIiVzOiBkb25lXFxuXCIsIGNtZF90b19zdHIoY21kKSk7XG4rXHRcdHByaW50ZihcIiVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1wiLFxuK1x0XHRcdGNtZF90b19zdHIoY21kKSwgZ3VwLmdldF9kZWx0YV91c2VjLFxuK1x0XHRcdGd1cC5wdXRfZGVsdGFfdXNlYyk7XG4gXHRcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiVHJ1bmNhdGVkIChzaXplOiAlbGxkKVxcblwiLCBndXAuc2l6ZSk7XG4rXHRcdFx0cHJpbnRmKFwiLCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXCIsIGd1cC5zaXplKTtcbitcdFx0cHJpbnRmKFwiXFxuXCIpO1xuIFx0XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4gXHR9XG4gXG4tcmV0dXJuXzpcbi1cdGtzZnRfdGVzdF9yZXN1bHQoIXN0YXR1cywgXCJpb2N0bCBzdGF0dXMgJWRcXG5cIiwgc3RhdHVzKTtcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbkBAIC05MywzOCArNzYsMjEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIHtcbiBcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbiBcdGludCBmaWxlZCwgaSwgb3B0LCBucl9wYWdlcyA9IDEsIHRocCA9IC0xLCB3cml0ZSA9IDEsIG50aHJlYWRzID0gMSwgcmV0O1xuLVx0aW50IGZsYWdzID0gTUFQX1BSSVZBVEU7XG4rXHRpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURSwgc3RhcnRlZF90aHJlYWRzID0gMCwgZXhpdF9zdGF0dXMgPSAxO1xuIFx0Y2hhciAqZmlsZSA9IFwiL2Rldi96ZXJvXCI7XG4tXHRib29sIGh1Z2V0bGIgPSBmYWxzZTtcbitcdGJvb2wgaHVnZXRsYiA9IGZhbHNlLCB0aHJlYWRfZXJyb3IgPSBmYWxzZTtcbitcdHZvaWQgKnRocmVhZF9yZXN1bHQ7XG4gXHRwdGhyZWFkX3QgKnRpZDtcbiBcdGNoYXIgKnA7XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcIm06cjpuOkY6ZjphYmNqOnRUTFV1d1dTSHB6XCIpKSAhPSAtMSkge1xuK1x0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCJtOnI6bjpGOmY6YWo6dFRMdXdXU0hcIikpICE9IC0xKSB7XG4gXHRcdHN3aXRjaCAob3B0KSB7XG4gXHRcdGNhc2UgJ2EnOlxuIFx0XHRcdGNtZCA9IFBJTl9GQVNUX0JFTkNITUFSSztcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnYic6XG4tXHRcdFx0Y21kID0gUElOX0JBU0lDX1RFU1Q7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ0wnOlxuIFx0XHRcdGNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ2MnOlxuLVx0XHRcdGNtZCA9IERVTVBfVVNFUl9QQUdFU19URVNUO1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRHVtcCBwYWdlIDAgKGluZGV4IDEpLiBNYXkgYmUgb3ZlcnJpZGRlbiBsYXRlciwgYnlcbi1cdFx0XHQgKiB1c2VyJ3Mgbm9uLW9wdGlvbiBhcmd1bWVudHMuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAud2hpY2hfcGFnZXMgaXMgemVyby1iYXNlZCwgc28gdGhhdCB6ZXJvIGNhbiBtZWFuIFwiZG9cbi1cdFx0XHQgKiBub3RoaW5nXCIuXG4tXHRcdFx0ICovXG4tXHRcdFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAncCc6XG4tXHRcdFx0Lyogd29ya3Mgb25seSB3aXRoIERVTVBfVVNFUl9QQUdFU19URVNUICovXG4tXHRcdFx0Z3VwLnRlc3RfZmxhZ3MgfD0gR1VQX1RFU1RfRkxBR19EVU1QX1BBR0VTX1VTRV9QSU47XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ0YnOlxuIFx0XHRcdC8qIHN0cnRvbCwgc28geW91IGNhbiBwYXNzIGZsYWdzIGluIGhleCBmb3JtICovXG4gXHRcdFx0Z3VwLmd1cF9mbGFncyA9IHN0cnRvbChvcHRhcmcsIDAsIDApO1xuQEAgLTE0MSw3ICsxMDcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGNhc2UgJ24nOlxuIFx0XHRcdG5yX3BhZ2VzID0gYXRvaShvcHRhcmcpO1xuIFx0XHRcdGlmIChucl9wYWdlcyBcdTAwM2MgMClcbi1cdFx0XHRcdG5yX3BhZ2VzID0gc2l6ZSAvIHBzaXplKCk7XG4rXHRcdFx0XHRucl9wYWdlcyA9IHNpemUgLyBnZXRwYWdlc2l6ZSgpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICd0JzpcbiBcdFx0XHR0aHAgPSAxO1xuQEAgLTE0OSw5ICsxMTUsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGNhc2UgJ1QnOlxuIFx0XHRcdHRocCA9IDA7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ1UnOlxuLVx0XHRcdGNtZCA9IEdVUF9CQVNJQ19URVNUO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICd1JzpcbiBcdFx0XHRjbWQgPSBHVVBfRkFTVF9CRU5DSE1BUks7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTczLDUyICsxMzYsNDEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdGh1Z2V0bGIgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIldyb25nIGFyZ3VtZW50XFxuXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIldyb25nIGFyZ3VtZW50XFxuXCIpO1xuK1x0XHRcdGV4aXQoMSk7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChvcHRpbmQgXHUwMDNjIGFyZ2MpIHtcbi1cdFx0aW50IGV4dHJhX2FyZ19jb3VudCA9IDA7XG4tXHRcdC8qXG4tXHRcdCAqIEZvciBleGFtcGxlOlxuLVx0XHQgKlxuLVx0XHQgKiAgIC4vZ3VwX3Rlc3QgLWMgMCAxIDB4MTAwMVxuLVx0XHQgKlxuLVx0XHQgKiAuLi50byBkdW1wIHBhZ2VzIDAsIDEsIGFuZCA0MDk3XG4tXHRcdCAqL1xuLVxuLVx0XHR3aGlsZSAoKG9wdGluZCBcdTAwM2MgYXJnYykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgICAoZXh0cmFfYXJnX2NvdW50IFx1MDAzYyBHVVBfVEVTVF9NQVhfUEFHRVNfVE9fRFVNUCkpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIERvIHRoZSAxLWJhc2VkIGluZGV4aW5nIGhlcmUsIHNvIHRoYXQgdGhlIHVzZXIgY2FuXG4tXHRcdFx0ICogdXNlIG5vcm1hbCAwLWJhc2VkIGluZGV4aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0bG9uZyBwYWdlX2luZGV4ID0gc3RydG9sKGFyZ3Zbb3B0aW5kXSwgMCwgMCkgKyAxO1xuLVxuLVx0XHRcdGd1cC53aGljaF9wYWdlc1tleHRyYV9hcmdfY291bnRdID0gcGFnZV9pbmRleDtcbi1cdFx0XHRleHRyYV9hcmdfY291bnQrKztcbi1cdFx0XHRvcHRpbmQrKztcbi1cdFx0fVxuK1x0aWYgKG9wdGluZCAhPSBhcmdjKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIlVuZXhwZWN0ZWQgYXJndW1lbnQgJyVzJ1xcblwiLCBhcmd2W29wdGluZF0pO1xuK1x0XHRleGl0KDEpO1xuIFx0fVxuIFxuLVx0a3NmdF9wcmludF9oZWFkZXIoKTtcbitcdGlmIChnZXRldWlkKCkpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwiKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbiBcbiBcdGlmIChodWdldGxiKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcbiBcbi1cdFx0aWYgKCFocF9zaXplKVxuLVx0XHRcdGtzZnRfZXhpdF9za2lwKFwiSHVnZVRMQiBpcyB1bmF2YWlsYWJsZVxcblwiKTtcbitcdFx0aWYgKCFocF9zaXplKSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiQ291bGQgbm90IGRldGVybWluZSBodWdlIHBhZ2Ugc2l6ZVxcblwiKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuIFxuIFx0XHRzaXplID0gKHNpemUgKyBocF9zaXplIC0gMSkgXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xuLVx0XHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpXG4tXHRcdFx0a3NmdF9leGl0X3NraXAoXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cIik7XG4rXHRcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSkge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwiKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuIFx0fVxuIFxuLVx0a3NmdF9zZXRfcGxhbihudGhyZWFkcyk7XG4tXG4gXHRmaWxlZCA9IG9wZW4oZmlsZSwgT19SRFdSfE9fQ1JFQVQsIDA2NjQpO1xuLVx0aWYgKGZpbGVkIFx1MDAzYyAwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdGlmIChmaWxlZCBcdTAwM2MgMCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4gXG4gXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlcztcbiBcdGlmICh3cml0ZSlcbkBAIC0yMjcsMjYgKzE3OSwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4gXHRpZiAoZ3VwX2ZkID09IC0xKSB7XG4gXHRcdHN3aXRjaCAoZXJybm8pIHtcbi1cdFx0Y2FzZSBFQUNDRVM6XG4tXHRcdFx0aWYgKGdldHVpZCgpKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCIpO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEVOT0VOVDpcbiBcdFx0XHRpZiAob3BlbmRpcihcIi9zeXMva2VybmVsL2RlYnVnXCIpID09IE5VTEwpXG4tXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcIm1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cIik7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCJjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXFxuXCIpO1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwibW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcblwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXFxuXCIpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCIsIEdVUF9URVNUX0ZJTEUsXG4rXHRcdFx0XHRzdHJlcnJvcihlcnJubykpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cIik7XG4tXHRcdGtzZnRfZXhpdF9wYXNzKCk7XG4rXHRcdGdvdG8gZXJyX2Nsb3NlX2ZpbGVkO1xuIFx0fVxuIFxuIFx0cCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIGZpbGVkLCAwKTtcbi1cdGlmIChwID09IE1BUF9GQUlMRUQpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm1tYXA6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRpZiAocCA9PSBNQVBfRkFJTEVEKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1tYXA6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdGdvdG8gZXJyX2Nsb3NlX2d1cF9mZDtcbitcdH1cbiBcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDtcbiBcbiBcdGlmICh0aHAgPT0gMSlcbkBAIC0yNTUsMjEgKzIwNSw0MyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcbiBcdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xuLVx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBwc2l6ZSgpKVxuK1x0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBnZXRwYWdlc2l6ZSgpKVxuIFx0XHRwWzBdID0gMDtcbiBcbiBcdHRpZCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIG50aHJlYWRzKTtcbi1cdGFzc2VydCh0aWQpO1xuK1x0aWYgKCF0aWQpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiRmFpbGVkIHRvIGFsbG9jYXRlICVkIHRocmVhZHM6ICVzXFxuXCIsXG4rXHRcdFx0bnRocmVhZHMsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdGdvdG8gZXJyX3VubWFwO1xuK1x0fVxuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRocmVhZHM7IGkrKykge1xuIFx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsIFx1MDAyNmd1cCk7XG4tXHRcdGFzc2VydChyZXQgPT0gMCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6ICVzXFxuXCIsIHN0cmVycm9yKHJldCkpO1xuK1x0XHRcdHRocmVhZF9lcnJvciA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0c3RhcnRlZF90aHJlYWRzKys7XG4gXHR9XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudGhyZWFkczsgaSsrKSB7XG4tXHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpO1xuLVx0XHRhc3NlcnQocmV0ID09IDApO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhcnRlZF90aHJlYWRzOyBpKyspIHtcbitcdFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgXHUwMDI2dGhyZWFkX3Jlc3VsdCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJwdGhyZWFkX2pvaW4gZmFpbGVkOiAlc1xcblwiLCBzdHJlcnJvcihyZXQpKTtcbitcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuK1x0XHR9IGVsc2UgaWYgKHRocmVhZF9yZXN1bHQpXG4rXHRcdFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcbiBcdH1cbiBcbiBcdGZyZWUodGlkKTtcbi1cbi1cdGtzZnRfZXhpdF9wYXNzKCk7XG4rXHRpZiAoIXRocmVhZF9lcnJvcilcbitcdFx0ZXhpdF9zdGF0dXMgPSAwO1xuK1xuK2Vycl91bm1hcDpcbitcdG11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTtcbitlcnJfY2xvc2VfZ3VwX2ZkOlxuK1x0Y2xvc2UoZ3VwX2ZkKTtcbitlcnJfY2xvc2VfZmlsZWQ6XG4rXHRjbG9zZShmaWxlZCk7XG4rXHRyZXR1cm4gZXhpdF9zdGF0dXM7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IDJkNTM2NjE5NmUzMDkuLjljMDM2MjRmZDI5MzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbkBAIC0zNyw3ICszNyw4IEBAIGVuZGlmXG4gIyBMRExJQlMuXG4gTUFLRUZMQUdTICs9IC0tbm8tYnVpbHRpbi1ydWxlc1xuIFxuLUNGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXG4rQ0ZMQUdTID0gLVdhbGwgLU8yIC1JICQodG9wX3NyY2RpcikgLUkgJCh0b3Bfc3JjZGlyKS90b29scy9saWJcbitDRkxBR1MgKz0gJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUylcbiBDRkxBR1MgKz0gLVd1bnJlYWNoYWJsZS1jb2RlXG4gTERMSUJTID0gLWxydCAtbHB0aHJlYWQgLWxtXG4gXG5AQCAtNTcsOCArNTgsOCBAQCBlbmRpZlxuIFxuIFRFU1RfR0VOX0ZJTEVTID0gY293XG4gVEVTVF9HRU5fRklMRVMgKz0gY29tcGFjdGlvbl90ZXN0XG4rVEVTVF9HRU5fRklMRVMgKz0gZ3VwXG4gVEVTVF9HRU5fRklMRVMgKz0gZ3VwX2xvbmd0ZXJtXG4tVEVTVF9HRU5fRklMRVMgKz0gZ3VwX3Rlc3RcbiBURVNUX0dFTl9GSUxFUyArPSBobW0tdGVzdHNcbiBURVNUX0dFTl9GSUxFUyArPSBodWdldGxiLW1hZHZpc2VcbiBURVNUX0dFTl9GSUxFUyArPSBodWdldGxiLW1tYXBcbkBAIC0xODcsOCArMTg4LDEwIEBAIFRFU1RfRklMRVMgKz0gd3JpdGVfaHVnZXRsYl9tZW1vcnkuc2hcbiBcbiBpbmNsdWRlIC4uL2xpYi5ta1xuIFxuLSQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuLSQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuKyQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcXFxuK1x0XHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbiskKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXFxcbitcdFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG4gXG4gJChPVVRQVVQpL3VmZmQtc3RyZXNzOiB1ZmZkLWNvbW1vbi5jXG4gJChPVVRQVVQpL3VmZmQtdW5pdC10ZXN0czogdWZmZC1jb21tb24uY1xuQEAgLTIxNyw3ICsyMjAsNyBAQCAkKEJJTkFSSUVTXzMyKTogQ0ZMQUdTICs9IC1tMzIgLW14c2F2ZVxuICQoQklOQVJJRVNfMzIpOiBMRExJQlMgKz0gLWxydCAtbGRsIC1sbVxuICQoQklOQVJJRVNfMzIpOiAkKE9VVFBVVCkvJV8zMjogJS5jXG4gXHQkKGNhbGwgbXNnLENDLCwkQClcbi1cdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEBcbitcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQFxuICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS0zMiwkKHQpKSkpXG4gZW5kaWZcbiBcbkBAIC0yMjYsNyArMjI5LDcgQEAgJChCSU5BUklFU182NCk6IENGTEFHUyArPSAtbTY0IC1teHNhdmVcbiAkKEJJTkFSSUVTXzY0KTogTERMSUJTICs9IC1scnQgLWxkbFxuICQoQklOQVJJRVNfNjQpOiAkKE9VVFBVVCkvJV82NDogJS5jXG4gXHQkKGNhbGwgbXNnLENDLCwkQClcbi1cdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEBcbitcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQFxuICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS02NCwkKHQpKSkpXG4gZW5kaWZcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG5pbmRleCAzMGQ0YWNlNzE1NWFlLi5iM2Y1Mzc3MTE5Y2I4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG5AQCAtMTUsOSArMTUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBNQVBfU0laRV9NQlx0MTAwXG4gI2RlZmluZSBNQVBfU0laRVx0KE1BUF9TSVpFX01CICogMTAyNCAqIDEwMjQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuaW5kZXggOGFhNTI0OWQ5YmVmNi4uMzI2NGE4Mjg1NzViZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuQEAgLTI5LDcgKzI5LDYgQEBcbiAjaW5jbHVkZSBcIi4uLy4uLy4uLy4uL21tL2d1cF90ZXN0LmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbmluZGV4IDE5NjA2MzVhOTUzZWIuLmU0NjYwYmY4OWI2MjQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbkBAIC0yNSw3ICsyNSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiB1aW50NjRfdCBwYWdlX3NpemU7XG4gdWludDY0X3QgcG1kX3BhZ2VzaXplO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuaW5kZXggNWM4ZWMzY2E3NWQ3ZC4uYWY1Y2Q5YjMwMzM5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5AQCAtMjEsNyArMjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy91aW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2luY2x1ZGUgXCIuLi9waWRmZC9waWRmZC5oXCJcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzFhZTM4ZTA5MTM2ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmNcbkBAIC0wLDAgKzEsMjYzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyAvLyBVc2UgbGw2NFxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2RpcmVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vZ3VwX3Rlc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuK1xuKyNkZWZpbmUgTUIgKDFVTCBcdTAwM2NcdTAwM2MgMjApXG4rXG4rLyogSnVzdCB0aGUgZmxhZ3Mgd2UgbmVlZCwgY29waWVkIGZyb20gdGhlIGtlcm5lbCBpbnRlcm5hbHMuICovXG4rI2RlZmluZSBGT0xMX1dSSVRFXHQweDAxXHQvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi9cbitcbisvKiBQYWdlIGNvdW50cyBleGVyY2lzaW5nIHNpbmdsZSwgVEhQLWJhdGNoLCBwYXJ0aWFsLCBhbmQgZnVsbC1tYXBwaW5nIEdVUC4gKi9cbitzdGF0aWMgY29uc3QgaW50IG5yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07XG4rXG4rI2RlZmluZSBHVVBfVEVTVF9GSUxFIFwiL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3RcIlxuKyNkZWZpbmUgTlJfSFVHRV9QQUdFUyAyXG4rXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBfc2l6ZTtcbitcbitGSVhUVVJFKGd1cF90ZXN0KVxuK3tcbitcdGludCBndXBfZmQ7XG4rXHRjaGFyICphZGRyO1xuK1x0dW5zaWduZWQgbG9uZyBzaXplO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KVxuK3tcbitcdGJvb2wgdGhwO1xuK1x0Ym9vbCBodWdldGxiO1xuK1x0Ym9vbCB3cml0ZTtcbitcdGJvb2wgc2hhcmVkO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZSlcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZClcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocClcbit7XG4rXHQudGhwID0gdHJ1ZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX3RocClcbit7XG4rXHQudGhwID0gdHJ1ZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSBmYWxzZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGVfaHVnZXRsYilcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IHRydWUsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX2h1Z2V0bGIpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSB0cnVlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGUpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IHRydWUsXG4rXHQuc2hhcmVkID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSBmYWxzZSxcbitcdC5zaGFyZWQgPSB0cnVlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocClcbit7XG4rXHQudGhwID0gdHJ1ZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV9odWdldGxiKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gdHJ1ZSxcbitcdC53cml0ZSA9IHRydWUsXG4rXHQuc2hhcmVkID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX2h1Z2V0bGIpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSB0cnVlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAoZ3VwX3Rlc3QpXG4re1xuK1x0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVM7XG4rXHRjaGFyICpwO1xuK1xuK1x0c2VsZi1cdTAwM2VzaXplID0gMTI4ICogTUI7XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2VodWdldGxiKSB7XG4rXHRcdGlmICghaHBfc2l6ZSlcbitcdFx0XHRTS0lQKHJldHVybiwgXCJIdWdlVExCIG5vdCBhdmFpbGFibGVcXG5cIik7XG4rXG4rXHRcdGlmIChodWdldGxiX2ZyZWVfZGVmYXVsdF9wYWdlcygpIFx1MDAzYyBOUl9IVUdFX1BBR0VTKVxuK1x0XHRcdFNLSVAocmV0dXJuLCBcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwiKTtcbitcbitcdFx0c2VsZi1cdTAwM2VzaXplID0gTlJfSFVHRV9QQUdFUyAqIGhwX3NpemU7XG4rXHRcdG1tYXBfZmxhZ3MgfD0gTUFQX0hVR0VUTEI7XG4rXHR9XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2VzaGFyZWQpXG4rXHRcdG1tYXBfZmxhZ3MgPSAobW1hcF9mbGFncyBcdTAwMjYgfk1BUF9QUklWQVRFKSB8IE1BUF9TSEFSRUQ7XG4rXG4rXHQvKiBndXBfZmQgaGFzIHRvIGJlIFx1MDAzZT0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqL1xuK1x0c2VsZi1cdTAwM2VndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4rXHRBU1NFUlRfR0Uoc2VsZi1cdTAwM2VndXBfZmQsIDApO1xuK1xuK1x0c2VsZi1cdTAwM2VhZGRyID0gbW1hcChOVUxMLCBzZWxmLVx1MDAzZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdFx0ICBtbWFwX2ZsYWdzLCAtMSwgMCk7XG4rXG4rXHRBU1NFUlRfTkUoc2VsZi1cdTAwM2VhZGRyLCBNQVBfRkFJTEVEKSB7XG4rXHRcdGludCBlcnIgPSBlcnJubztcbitcbitcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VndXBfZmQpO1xuK1x0XHRUSF9MT0coXCJtbWFwIGZhaWxlZDogJXNcIiwgc3RyZXJyb3IoZXJyKSk7XG4rXHR9XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2V0aHApXG4rXHRcdG1hZHZpc2Uoc2VsZi1cdTAwM2VhZGRyLCBzZWxmLVx1MDAzZXNpemUsIE1BRFZfSFVHRVBBR0UpO1xuK1x0ZWxzZSBpZiAoIXZhcmlhbnQtXHUwMDNlaHVnZXRsYilcbitcdFx0bWFkdmlzZShzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbitcbitcdGZvciAocCA9IHNlbGYtXHUwMDNlYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyXG4rXHRcdFx0KyBzZWxmLVx1MDAzZXNpemU7IHAgKz0gcHNpemUoKSlcbitcdFx0cFswXSA9IDA7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04oZ3VwX3Rlc3QpXG4re1xuK1x0bXVubWFwKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplKTtcbitcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX2d1cF9jbWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuK1x0XHRcdCBGSVhUVVJFX0RBVEEoZ3VwX3Rlc3QpICpzZWxmLFxuK1x0XHRcdCBjb25zdCBGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpICp2YXJpYW50LFxuK1x0XHRcdCB1bnNpZ25lZCBsb25nIGNvbW1hbmQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0ge1xuK1x0XHRcdC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyLFxuK1x0XHRcdC5zaXplID0gc2VsZi1cdTAwM2VzaXplLFxuK1x0XHRcdC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gXHUwMDNjIDAgP1xuK1x0XHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV0sXG4rXHRcdFx0Lmd1cF9mbGFncyA9IHZhcmlhbnQtXHUwMDNld3JpdGUgPyBGT0xMX1dSSVRFIDogMCxcbitcdFx0fTtcbitcbitcdFx0VEhfTE9HKFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbitcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBjb21tYW5kLCBcdTAwMjZndXApLCAwKTtcbitcdFx0QVNTRVJUX0VRKGd1cC5zaXplLCBzZWxmLVx1MDAzZXNpemUpO1xuK1x0fVxuK31cbitcbitURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzKVxuK3tcbitcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0JBU0lDX1RFU1QpO1xuK31cbitcbitURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzKVxuK3tcbitcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgUElOX0JBU0lDX1RFU1QpO1xuK31cbitcbitURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzX2Zhc3QpXG4re1xuK1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfRkFTVF9CRU5DSE1BUkspO1xuK31cbitcbitURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2Zhc3QpXG4re1xuK1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fRkFTVF9CRU5DSE1BUkspO1xuK31cbitcbitURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtKVxuK3tcbitcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgUElOX0xPTkdURVJNX0JFTkNITUFSSyk7XG4rfVxuK1xuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbit7XG4rXHRpbnQgZmQ7XG4rXG4rXHRmZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbitcdGlmIChmZCA9PSAtMSkge1xuK1x0XHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0XHRpZiAoZXJybm8gPT0gRUFDQ0VTKVxuK1x0XHRcdGtzZnRfZXhpdF9za2lwKFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwiKTtcbitcdFx0aWYgKGVycm5vID09IEVOT0VOVCkge1xuK1x0XHRcdERJUiAqZGVidWdmcyA9IG9wZW5kaXIoXCIvc3lzL2tlcm5lbC9kZWJ1Z1wiKTtcbitcbitcdFx0XHRpZiAoIWRlYnVnZnMpXG4rXHRcdFx0XHRrc2Z0X2V4aXRfc2tpcChcIk1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cIik7XG4rXHRcdFx0Y2xvc2VkaXIoZGVidWdmcyk7XG4rXHRcdFx0a3NmdF9leGl0X3NraXAoXCJDaGVjayBDT05GSUdfR1VQX1RFU1QgaW4ga2VybmVsIGNvbmZpZ1xcblwiKTtcbitcdFx0fVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJGYWlsZWQgdG8gb3BlbiAlczogJXNcXG5cIiwgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdH1cbitcdGNsb3NlKGZkKTtcbitcbitcdGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4rXHRpZiAoaHBfc2l6ZSlcbitcdFx0aHVnZXRsYl9zZXR1cF9kZWZhdWx0KE5SX0hVR0VfUEFHRVMpO1xuK1xuK1x0cmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbmluZGV4IDUxMGRlOTNiZTY4MTQuLmM5ZDhiNDQ5MTI2MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xuIHN0YXRpYyBpbnQgbnJfaHVnZXRsYnNpemVzO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IGUyNjQyZWNhMGQwMmIuLmZhMWE2NTE5NjNmZDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbkBAIC0xMCw5ICsxMCw2IEBAXG4gICogYnVncy5cbiAgKi9cbiBcbi0jaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4tXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG5AQCAtMzMsNiArMzAsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9ldmVudGZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4gXG4gLypcbiAgKiBUaGlzIGlzIGEgcHJpdmF0ZSBVQVBJIHRvIHRoZSBrZXJuZWwgdGVzdCBtb2R1bGUgc28gaXQgaXNuJ3QgZXhwb3J0ZWRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5pbmRleCA1NTViNGIzZDE0MzA3Li41N2NmNzkwY2E0NzhkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5AQCAtMTQsNyArMTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIE1JTl9GUkVFX1BBR0VTXHQyMFxuICNkZWZpbmUgTlJfSFVHRV9QQUdFU1x0MTBcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuaW5kZXggMGYyYWFkMWI3ZGJkNi4uYTQ1OGJlY2Y1ODMyNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuQEAgLTE4LDcgKzE4LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1mZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNClcbiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcbmluZGV4IGVkM2Q5MmU4NjJkODcuLjliNzI0YWY2NmU5MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG5AQCAtMjYsNyArMjYsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgREVGQVVMVF9MRU5HVEhfTUIgMTBVTFxuICNkZWZpbmUgTUJfVE9fQllURVMoeCkgKHggKiAxMDI0ICogMTAyNClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuaW5kZXggM2ZmN2YwNjJiN2ViNC4uZjQ1MTRkYTQ5ZTFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbmluZGV4IDRhZjlkM2RiN2I1YjYuLmQ5NTY1MjE5Mzc4YWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG5AQCAtMjIsMTAgKzIyLDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0ZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpZm5kZWYgTUFEVl9TT0ZUX09GRkxJTkVcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxuQEAgLTg1LDggKzg1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgb3JpZ19lbmFibGVfc29mdF9vZmZsaW5lID0gLTFVTDtcbiBcbiAvKlxuICAqIFJ1bnMgZnJvbSBhbiBhdGV4aXQgaGFuZGxlciwgc28gaXQgbXVzdCBub3QgY2FsbCBhbnl0aGluZyB0aGF0XG4tICogZXhpdHMgb24gZmFpbHVyZTogd3JpdGVfbnVtKCkgd291bGQgcmUtZW50ZXIgZXhpdCgpIHRocm91Z2hcbi0gKiBrc2Z0X2V4aXRfZmFpbF9tc2coKS5cbisgKiBleGl0cyBvbiBmYWlsdXJlLlxuICAqL1xuIHN0YXRpYyB2b2lkIHJlc3RvcmVfZW5hYmxlX3NvZnRfb2ZmbGluZSh2b2lkKVxuIHtcbkBAIC0xNTIsNyArMTUxLDEwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29mdF9vZmZsaW5lX2NvbW1vbihpbnQgZW5hYmxlX3NvZnRfb2ZmbGluZSlcbiBcdGh1Z2VwYWdlc2l6ZV9rYiA9IGZpbGVfc3RhdC5mX2JzaXplIC8gMTAyNDtcbiBcdGtzZnRfcHJpbnRfbXNnKFwiSHVnZXBhZ2VzaXplIGlzICVsZGtCXFxuXCIsIGh1Z2VwYWdlc2l6ZV9rYik7XG4gXG4tXHR3cml0ZV9udW0oRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRILCBlbmFibGVfc29mdF9vZmZsaW5lKTtcbitcdHJldCA9IHdyaXRlX251bShFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIGVuYWJsZV9zb2Z0X29mZmxpbmUpO1xuK1x0aWYgKHJldClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHdyaXRlIHRvICVzOiAlc1xcblwiLFxuK1x0XHRcdFx0ICAgRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRILCBzdHJlcnJvcigtcmV0KSk7XG4gXG4gXHRucl9odWdlcGFnZXNfYmVmb3JlID0gaHVnZXRsYl9ucl9kZWZhdWx0X3BhZ2VzKCk7XG4gXG5AQCAtMTg5LDYgKzE5MSw4IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29mdF9vZmZsaW5lX2NvbW1vbihpbnQgZW5hYmxlX3NvZnRfb2ZmbGluZSlcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4ge1xuK1x0aW50IHJldDtcbitcbiBcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4gXG4gXHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdCg4KSlcbkBAIC0xOTYsNyArMjAwLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcbiBcdGtzZnRfc2V0X3BsYW4oMik7XG4gXG4tXHRvcmlnX2VuYWJsZV9zb2Z0X29mZmxpbmUgPSByZWFkX251bShFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgpO1xuK1x0cmV0ID0gcmVhZF9udW0oRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRILCBcdTAwMjZvcmlnX2VuYWJsZV9zb2Z0X29mZmxpbmUpO1xuK1x0aWYgKHJldClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHJlYWQgJXM6ICVzXFxuXCIsXG4rXHRcdFx0XHQgICBFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIHN0cmVycm9yKC1yZXQpKTtcbitcbiBcdGF0ZXhpdChyZXN0b3JlX2VuYWJsZV9zb2Z0X29mZmxpbmUpO1xuIFxuIFx0dGVzdF9zb2Z0X29mZmxpbmVfY29tbW9uKDEpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG5pbmRleCBmYjQ2MDA1NzBlMTMxLi45NDk1OTc0ZWNjYmVhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuQEAgLTIwLDcgKzIwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2lmbmRlZiBTVEFUWF9ESU9BTElHTlxuICNkZWZpbmUgU1RBVFhfRElPQUxJR05cdFx0MHgwMDAwMjAwMFVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5pbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5AQCAtMTAsNyArMTAsNiBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcbkBAIC0yNSw3ICsyNSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuaW5kZXggZjgyNjczZjVmNmI0Ny4uNTI1MTA4Y2FjZTU0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjIsNyArMjIsNiBAQFxuICNpbmNsdWRlIFwibGludXgvbWFnaWMuaFwiXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuQEAgLTEyMiw2ICsxMjEsNyBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKVxuIFx0Y2hhciBidWZbMSBcdTAwM2NcdTAwM2MgMTBdO1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiBcdGNoYXIgKnN0ciwgKmVuZDtcbitcdGludCByZXQ7XG4gXG4gXHRmaW5mby5kaXIgPSBkaXI7XG4gXHRpZiAoc3RhdChmaW5mby5kaXIsIFx1MDAyNnBhdGhfc3RhdCkpXG5AQCAtMTQyLDggKzE0Miw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRcdCAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKVxuIFx0ICAgIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuLVx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcInJlYWRfZmlsZSh1ZXZlbnQpXCIpO1xuK1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuK1x0aWYgKHJldClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZF9maWxlKCVzKTogJXNcXG5cIiwgcGF0aCwgc3RyZXJyb3IoLXJldCkpO1xuIFx0aWYgKHN0cnN0cihidWYsIFwiREVWVFlQRT1kaXNrXCIpKSB7XG4gXHRcdC8qIEZvdW5kIGl0ICovXG4gXHRcdGlmIChzbnByaW50ZihmaW5mby5kZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuQEAgLTMyNCw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIHtcbiBcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XG4gXHRjb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7XG4tXHRpbnQgZmQ7XG4rXHRpbnQgZmQsIHJldDtcbiBcdHZvaWQgKnA7XG4gXHR1bnNpZ25lZCBsb25nIHNpemU7XG4gXG5AQCAtMzYyLDcgKzM2MywxMSBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJtbWFwKClcIik7XG4gXG4gXHQvKiBEcm9wIHBhZ2UgY2FjaGUgKi9cbi1cdHdyaXRlX2ZpbGUoXCIvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNcIiwgXCIzXCIsIDIpO1xuK1x0cmV0ID0gd3JpdGVfZmlsZShcIi9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1wiLCBcIjNcIiwgMik7XG4rXHRpZiAocmV0KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJ3cml0ZV9maWxlKGRyb3BfY2FjaGVzKTogJXNcXG5cIixcbitcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbitcbiBcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdHJldHVybiBwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li42NzExZjRjNjEzNzExIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5AQCAtMTUsNyArMTUsNiBAQFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFx1MDAzY2luY2x1ZGUvdmRzby90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgS1NNX1NZU0ZTX1BBVEggXCIvc3lzL2tlcm5lbC9tbS9rc20vXCJcbiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5pbmRleCBmMTlkNTNjNjk1NzY0Li5hMzVlMmI1N2UwNWIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5AQCAtNSw3ICs1LDYgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbkBAIC0xNiw2ICsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiBcbiAjZGVmaW5lIFRXT01FR1x0XHQoMlx1MDAzY1x1MDAzYzIwKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggZDlhNGZiNzgyZWNmZS4uMDM4OThiNGY2Y2RhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5AQCAtMjQsNyArMjQsNiBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgUEFHRU1BUF9CSVRTX0FMTFx0XHQoUEFHRV9JU19XUEFMTE9XRUQgfCBQQUdFX0lTX1dSSVRURU4gfFx0XFxcbiBcdFx0XHRcdFx0IFBBR0VfSVNfRklMRSB8IFBBR0VfSVNfUFJFU0VOVCB8XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG5pbmRleCA4MmM2ZTk2ZWE2ZWIzLi5mOWVjMTQwOGE2ZTMwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuQEAgLTE0LDcgKzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiBcbiAjaWZuZGVmIFBSX1RIUF9ESVNBQkxFX0VYQ0VQVF9BRFZJU0VEXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuaW5kZXggYWU2ZTE1MzBiMzU0OC4uYjc4ODJhYjk3NjgzZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuQEAgLTQ1LDggKzQ1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gI2luY2x1ZGUgXCJwa2V5LWhlbHBlcnMuaFwiXG4gXG4gdTY0IHNoYWRvd19wa2V5X3JlZztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCBkMDlmOWY2YTM4NGVlLi5hZTBhYjVlZmFiYWU2IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5AQCAtMTMwLDMwICsxMzAsNiBAQCB0ZXN0X3NlbGVjdGVkKCkge1xuIFx0ZmlcbiB9XG4gXG4tcnVuX2d1cF9tYXRyaXgoKSB7XG4tICAgICMgLXQ6IHRocD1vbiwgLVQ6IHRocD1vZmYsIC1IOiBodWdldGxiPW9uXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XG4tXG4tICAgIGZvciBodWdlIGluIC10IC1UIFwiLUggLW0gJGh1Z2V0bGJfbWJcIjsgZG9cbi0gICAgICAgICMgLXU6IGd1cC1mYXN0LCAtVTogZ3VwLWJhc2ljLCAtYTogcGluLWZhc3QsIC1iOiBwaW4tYmFzaWMsIC1MOiBwaW4tbG9uZ3Rlcm1cbi0gICAgICAgIGZvciB0ZXN0X2NtZCBpbiAtdSAtVSAtYSAtYiAtTDsgZG9cbi0gICAgICAgICAgICAjIC13OiB3cml0ZT0xLCAtVzogd3JpdGU9MFxuLSAgICAgICAgICAgIGZvciB3cml0ZSBpbiAtdyAtVzsgZG9cbi0gICAgICAgICAgICAgICAgIyAtUzogc2hhcmVkXG4tICAgICAgICAgICAgICAgIGZvciBzaGFyZSBpbiAtUyBcIiBcIjsgZG9cbi0gICAgICAgICAgICAgICAgICAgICMgLW46IEhvdyBtYW55IHBhZ2VzIHRvIGZldGNoIHRvZ2V0aGVyPyAgNTEyIGlzIHNwZWNpYWxcbi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCdzIGRlZmF1bHQgdGhwIHNpemUgKG9yIDJNIG9uIHg4NiksIDEyMyB0b1xuLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm1cbi0gICAgICAgICAgICAgICAgICAgIGZvciBudW0gaW4gXCItbiAxXCIgXCItbiA1MTJcIiBcIi1uIDEyM1wiIFwiLW4gLTFcIjsgZG9cbi0gICAgICAgICAgICAgICAgICAgICAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCBcXFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGh1Z2UgJHRlc3RfY21kICR3cml0ZSAkc2hhcmUgJG51bVxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgZG9uZVxuLSAgICBkb25lXG4tfVxuLVxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcbiBBUkNINjRTVFI9XCJhcm02NCBtaXBzNjQgcGFyaXNjNjQgcHBjNjQgcHBjNjRsZSByaXNjdjY0IHMzOTB4IHNwYXJjNjQgeDg2XzY0XCJcbiBpZiBbIC16IFwiJEFSQ0hcIiBdOyB0aGVuXG5AQCAtMjc1LDE4ICsyNTEsNyBAQCBmaVxuIFxuIENBVEVHT1JZPVwibW1hcFwiIHJ1bl90ZXN0IC4vbWFwX2ZpeGVkX25vcmVwbGFjZVxuIFxuLWlmICRSVU5fQUxMOyB0aGVuXG4tICAgIHJ1bl9ndXBfbWF0cml4XG4tZWxzZVxuLSAgICAjIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcbi0gICAgQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAtMVxuLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcbi0gICAgQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gMVxuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAtMVxuLWZpXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XG4tQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMFxuK0NBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cFxuIENBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cF9sb25ndGVybVxuIFxuIENBVEVHT1JZPVwidXNlcmZhdWx0ZmRcIiBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0c1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggNWYyNzg5MTNjNGQ3NS4uN2Y2NDliNjczMzU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtOSw3ICs5LDYgQEBcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIIFwiL3Byb2Mvc2VsZi9wYWdlbWFwXCJcbiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCBjMDFkMjI3ZDdmZDZkLi42OGY1MDhjOWEzNTVmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTIxLDcgKzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiB1aW50NjRfdCBwYWdlc2l6ZTtcbiB1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0O1xuQEAgLTE0NSw3ICsxNDQsMTAgQEAgc3RhdGljIHZvaWQgd3JpdGVfZGVidWdmcyhjb25zdCBjaGFyICpmbXQsIC4uLilcbiBcdGlmIChyZXQgXHUwMDNlPSBJTlBVVF9NQVgpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXFxuXCIsIF9fZnVuY19fKTtcbiBcbi1cdHdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCArIDEpO1xuK1x0cmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICsgMSk7XG4rXHRpZiAocmV0KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJ3cml0ZV9maWxlKCVzKTogJXNcXG5cIiwgU1BMSVRfREVCVUdGUyxcbitcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiB9XG4gXG4gc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuQEAgLTE0LDcgKzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQilcbiAjZGVmaW5lIE1BUF9IVUdFVExCXHQweDQwMDAwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5pbmRleCA4ZWIwYzU2MzBlN2UzLi45NmY3Mjg5OGViZTBhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbkBAIC0xNyw3ICsxNyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIGludCBiYWNraW5nX2ZkID0gLTE7XG4gaW50IG1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5pbmRleCA5MmEyMWI5N2Y3NDVhLi4wNzIzODQzYTc2MjZiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxuQEAgLTM3LDcgKzM3LDYgQEBcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIFVGRkRfRkxBR1NcdChPX0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSlcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuaW5kZXggNTcyYzI1MTZlODc0ZC4uYzQ4ZWFhYjhlNzVjZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbkBAIC03LDggKzcsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuICNpbmNsdWRlIFwidWZmZC1jb21tb24uaFwiXG4gXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xuaW5kZXggZTI0ZDdiYTAwYjQ0MS4uNWEzNTRhNjY0ZDFmNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG5AQCAtMTEsNyArMTEsNiBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIC8qXG4gICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3Nlc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggODBiYzlmNTk3YjUyMS4uNDc1MWRiNzk4YzNhYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtODg5LDExMSArODg5LDU0IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRyZXR1cm4gcmV0IFx1MDAzZSAwID8gMCA6IC1lcnJubztcbiB9XG4gXG4taW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4te1xuLVx0aW50IGZkO1xuLVx0c3NpemVfdCBudW1yZWFkO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdGlmIChudW1yZWFkIFx1MDAzYyAxKSB7XG4tXHRcdGNsb3NlKGZkKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRidWZbbnVtcmVhZF0gPSAnXFwwJztcbi1cdGNsb3NlKGZkKTtcbi1cbi1cdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0aW50IGZkLCBzYXZlZF9lcnJubztcbi1cdHNzaXplX3QgbnVtd3JpdHRlbjtcbi1cbi1cdGlmIChidWZsZW4gXHUwMDNjIDIpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkluY29ycmVjdCBidWZmZXIgbGVuOiAlenVcXG5cIiwgYnVmbGVuKTtcbi1cbi1cdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XG4tXHRpZiAoZmQgPT0gLTEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzIG9wZW4gZmFpbGVkOiAlc1xcblwiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpO1xuLVxuLVx0bnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xuLVx0c2F2ZWRfZXJybm8gPSBlcnJubztcbi1cdGNsb3NlKGZkKTtcbi1cdGVycm5vID0gc2F2ZWRfZXJybm87XG4tXHRpZiAobnVtd3JpdHRlbiBcdTAwM2MgMCkge1xuLVx0XHRpZiAoaWdub3JlX2VpbnZhbCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXMgd3JpdGUoJS4qcykgZmFpbGVkOiAlc1xcblwiLCBwYXRoLCAoaW50KShidWZsZW4gLSAxKSxcbi1cdFx0XHRcdGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdH1cbi1cdGlmIChudW13cml0dGVuICE9IGJ1ZmxlbiAtIDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzIHdyaXRlKCUuKnMpIGlzIHRydW5jYXRlZCwgZXhwZWN0ZWQgJXp1IGJ5dGVzLCBnb3QgJXpkIGJ5dGVzXFxuXCIsXG4tXHRcdFx0XHRwYXRoLCAoaW50KShidWZsZW4gLSAxKSwgYnVmLCBidWZsZW4gLSAxLCBudW13cml0dGVuKTtcbi19XG4tXG4tdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbilcbi17XG4tXHRfX3dyaXRlX2ZpbGUocGF0aCwgYnVmLCBidWZsZW4sIC8qIGlnbm9yZV9laW52YWwgPSAqLyBmYWxzZSk7XG4tfVxuLVxuLXVuc2lnbmVkIGxvbmcgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aClcbi17XG4tXHRjaGFyIGJ1ZlsyMV07XG4tXG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwicmVhZF9maWxlKClcIik7XG4tXG4tXHRyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDEwKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgX193cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0sIGJvb2wgaWdub3JlX2VpbnZhbClcbi17XG4tXHRjaGFyIGJ1ZlsyMV07XG4tXG4tXHRzcHJpbnRmKGJ1ZiwgXCIlbHVcIiwgbnVtKTtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICsgMSwgaWdub3JlX2VpbnZhbCk7XG4tfVxuLVxuLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuLXtcbi1cdHJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyBmYWxzZSk7XG4tfVxuLVxuLXZvaWQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4te1xuLVx0cmV0dXJuIF9fd3JpdGVfbnVtKHBhdGgsIG51bSwgLyogaWdub3JlX2VpbnZhbCA9ICovIHRydWUpO1xuLX1cbi1cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1hbGwsIHNobW1heDtcbiBcbiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpXG4ge1xuLVx0aWYgKHNobW1heClcbi1cdFx0d3JpdGVfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcIiwgc2htbWF4KTtcbi1cdGlmIChzaG1hbGwpXG4tXHRcdHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIHNobWFsbCk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHNobW1heCkge1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBzaG1tYXgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byByZXN0b3JlIHNobW1heDogJXNcXG5cIixcbitcdFx0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuK1x0fVxuK1x0aWYgKHNobWFsbCkge1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFwiLCBzaG1hbGwpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byByZXN0b3JlIHNobWFsbDogJXNcXG5cIixcbitcdFx0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuK1x0fVxuIH1cbiBcbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlYWRfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcIiwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byByZWFkIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xcblwiLFxuK1x0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuIFxuLVx0dmFsID0gcmVhZF9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiKTtcbiBcdGlmICh2YWwgXHUwMDNjIGxlbmd0aCkge1xuLVx0XHR3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBsZW5ndGgpO1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBsZW5ndGgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxuXCIsXG4rXHRcdFx0XHRcdCAgIGxlbmd0aCwgc3RyZXJyb3IoLXJldCkpO1xuIFx0XHRzaG1tYXggPSB2YWw7XG4gXHR9XG4gXG4tXHR2YWwgPSByZWFkX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIpO1xuK1x0cmV0ID0gcmVhZF9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFwiLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxuXCIsXG4rXHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4gXHRpZiAodmFsIFx1MDAzYyBucikge1xuLVx0XHR3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFwiLCBucik7XG4rXHRcdHJldCA9IHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIG5yKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJGYWlsZWQgdG8gd3JpdGUgJWx1IHRvIC9wcm9jL3N5cy9rZXJuZWwvc2htYWxsOiAlc1xcblwiLFxuK1x0XHRcdFx0XHQgICBuciwgc3RyZXJyb3IoLXJldCkpO1xuIFx0XHRzaG1hbGwgPSB2YWw7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuaW5kZXggOWE0OWFmODg3MDJlNC4uNjRhODZlOGEwYzQxYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5AQCAtOCw2ICs4LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZSAvKiBfU0NfUEFHRVNJWkUgKi9cbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vZmlsZV91dGlscy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNkZWZpbmUgQklUX1VMTChucikgICAgICAgICAgICAgICAgICAgKDFVTEwgXHUwMDNjXHUwMDNjIChucikpXG4gI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KVxuQEAgLTE2NiwxMiArMTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVx0KCgoZW50KSBcdTAwMjYgKDF1bGwgXHUwMDNjXHUwMDNjIDYzKSkgIT0gMClcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcdCgoZW50KSBcdTAwMjYgKCgxdWxsIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSlcbiBcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpO1xuIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0Njo1OS4wOTkzNTU5MDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDk3ODg1MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBXb3J0aEZ1enppbmcgRXZhbHVhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gVGhlIHVzZXIncyBnaXZlbiBtZSBhIGRpZmYsIGFuZCBteSBpbml0aWFsIHNjYW4gaGlnaGxpZ2h0cyBhIGZldyBrZXkgYXJlYXMgb2YgbW9kaWZpY2F0aW9uLiBGaXJzdCwgSSBzZWUgYSBzbGV3IG9mIGNoYW5nZXMgdW5kZXIgdGhlIGB0b29scy9gIGRpcmVjdG9yeSDigJMgYSBzaWduaWZpY2FudCBjbHVlLiBTcGVjaWZpY2FsbHksIGB0b29scy9saWIvbW0vYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AsIGFuZCBgdG9vbHMvbW0vYC4gVGhlcmUncyBhbHNvIHNvbWUgZG9jdW1lbnRhdGlvbiAoYERvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0YCkgYW5kIGEgYE1BSU5UQUlORVJTYCB1cGRhdGUuIEZpbmFsbHksIHRoZXJlJ3MgYSB0b3VjaCBpbiBgbW0vS2NvbmZpZ2AuXG5cbk5vdywgYWNjb3JkaW5nIHRvIHRoZSBcIldIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXCIgcnVsZXMsIHRoaXMgaXMgdGhlIGNydWNpYWwgcGFydC4gVGhlIHJ1bGVzIGV4cGxpY2l0bHkgc3RhdGUgdGhhdCBtb2RpZmljYXRpb25zIHRvIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIGFuZCB0b29scyB0aGF0ICpkb24ndCogYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIG1vZHVsZXMgYXJlIGEgYmlnIHJlZCBmbGFnIGZvciAqbm90KiBmdXp6aW5nLiBXZSdyZSBhbHNvIGxvb2tpbmcgZm9yIHB1cmVseSBkb2N1bWVudGF0aW9uIGNoYW5nZXMgYW5kIEtjb25maWcgY2hhbmdlcyB0aGF0ICpkb24ndCogaW1wYWN0IHRoZSBjb21waWxlZCBDIGxvZ2ljLlxuXG5Mb29raW5nIGF0IHRoZSBLY29uZmlnIGNoYW5nZSBjbG9zZWx5LCBpdCBzZWVtcyB0byBtb2RpZnkgdGhlIHRpdGxlIGFuZCBoZWxwIHRleHQgZm9yIGBDT05GSUdfR1VQX1RFU1RgOlxuXG5gYGBkaWZmXG4tXHRib29sIFwiRW5hYmxlIGluZnJhc3RydWN0dXJlIGZvciBnZXRfdXNlcl9wYWdlcygpLXJlbGF0ZWQgdW5pdCB0ZXN0c1wiXG4rXHRib29sIFwiRW5hYmxlIGluZnJhc3RydWN0dXJlIGZvciBnZXRfdXNlcl9wYWdlcygpLXJlbGF0ZWQgdW5pdCB0ZXN0cyBhbmQgYmVuY2htYXJrc1wiXG5gYGBcblxuVGhlIGhlbHAgdGV4dCBpcyB1cGRhdGVkOiB0aGUga2V5IGhlcmUgaXMsIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbnkgY2hhbmdlIHRvIGNvbmZpZyBsb2dpYyBvciB0aGUgY29tcGlsZWQgQyBsb2dpYy4gSGVyZSwgaXQgZG9lcyAqbm90KiBhbHRlciBhbnkgY29uZmlnIGxvZ2ljLCBkZXBlbmRlbmNpZXMsIHNlbGVjdCwgb3IgYW55dGhpbmcgdGhhdCBhbHRlcnMgY29tcGlsZWQgQyBsb2dpYy4gSW4gb3RoZXIgd29yZHMsIGl0J3MgYSBjb3NtZXRpYyBjaGFuZ2Ug4oCTIG9ubHkgdGhlIGhlbHAgdGV4dCBpcyBjaGFuZ2VkLCBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBhbiBleHBsaWNpdCBleGNlcHRpb24uIFRoZSBvdGhlciBjaGFuZ2VzIGFyZSBzdHJpY3RseSB1bmRlciB0aGUgYHRvb2xzL2AsIGBEb2N1bWVudGF0aW9uL2AsIGFuZCBgTUFJTlRBSU5FUlNgLlxuXG5MZXQgbWUgY29uZmlybSB0aGUgY3JpdGljYWwgcG9pbnQ6IElzIGFueSBrZXJuZWwgQyBzb3VyY2UgY29kZSBtb2RpZmllZCwgZXNwZWNpYWxseSBpbiB0aGUgYG1tL2AgZGlyZWN0b3J5PyBRdWljayBzY2FuLi4uIG5vLCBpdCBpc24ndC4gTm90IGV2ZW4gYGluY2x1ZGUvYC4gVGhlIGltYWdlIGZpbGVzIHJlbWFpbiB1bnRvdWNoZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgKm9ubHkqIHRvdWNoZXMgYHRvb2xzL2AsIGRvY3VtZW50YXRpb24sIGBNQUlOVEFJTkVSU2AsIGFuZCB0aGUgS2NvbmZpZyBoZWxwIHRleHQuIEl0IGZhbGxzICpzcXVhcmVseSogd2l0aGluIHRoZSBkZWZpbmVkIG5lZ2F0aXZlIGNyaXRlcmlhLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgZGVhbGluZyB3aXRoIHNlbGZ0ZXN0cywgdG9vbHMsIGFuZCBkb2N1bWVudGF0aW9uLiBObyBrZXJuZWwtc3BhY2UgY29kZSBpcyBtb2RpZmllZC5cblxuTXkgY29uY2x1c2lvbiBpczogYFdvcnRoRnV6emluZyA9IGZhbHNlYC5cblxuTm93LCB0byBzZXQgdGhlIHJlc3VsdHMgY29ycmVjdGx5OlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWBcbiogICBgUmVhc29uaW5nYDogXCJUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cy90b29scyAoYHRvb2xzL2xpYi9tbS9gLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCwgYHRvb2xzL21tL2ApLCBgRG9jdW1lbnRhdGlvbi9gLCBgTUFJTlRBSU5FUlNgLCBhbmQgdGhlIGhlbHAgdGV4dCBvZiBgQ09ORklHX0dVUF9URVNUYCBpbiBgbW0vS2NvbmZpZ2AuIE5vIGtlcm5lbC1zcGFjZSBleGVjdXRhYmxlIEMgY29kZSBvciBrZXJuZWwgaW1hZ2UgbG9naWMgaXMgbW9kaWZpZWQuXCJcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKGVtcHR5IGxpc3QsIGJlY2F1c2Ugbm8gY29uZmlncyBhcmUgcmVsZXZhbnQpXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGxpc3QsIGJlY2F1c2Ugbm8gc3ltYm9scyBhcmUgcmVsZXZhbnQpXG5cblJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MTUsIk91dHB1dFRva2VucyI6MTAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ3OjA4LjE5NzI0Mzk3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvbGliL21tLywgdG9vbHMvbW0vLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBkb2N1bWVudGF0aW9uIChEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCksIE1BSU5UQUlORVJTLCBhbmQgS2NvbmZpZyBoZWxwIHRleHQgKG1tL0tjb25maWcpLiBObyBjb21waWxlZCBrZXJuZWwgQyBsb2dpYyBpcyBhZmZlY3RlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlcnNwYWNlIHRvb2xzIGFuZCBzZWxmdGVzdHMgKHRvb2xzL2xpYi9tbS8sIHRvb2xzL21tLywgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vKSwgZG9jdW1lbnRhdGlvbiAoRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QpLCBNQUlOVEFJTkVSUywgYW5kIEtjb25maWcgaGVscCB0ZXh0IChtbS9LY29uZmlnKS4gTm8gY29tcGlsZWQga2VybmVsIEMgbG9naWMgaXMgYWZmZWN0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NzowOC4xOTcyNjMzODhaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow9vs2x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 12:25:17 +0000 UTC FinishedAt: 2026-09-11 12:47:09 +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+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvbGliL21tLywgdG9vbHMvbW0vLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBkb2N1bWVudGF0aW9uIChEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCksIE1BSU5UQUlORVJTLCBhbmQgS2NvbmZpZyBoZWxwIHRleHQgKG1tL0tjb25maWcpLiBObyBjb21waWxlZCBrZXJuZWwgQyBsb2dpYyBpcyBhZmZlY3RlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MTMwZDc1MjcxZDc0M2EyYjIxZGJjYjRhNmIzNjViYTA0Zjc0MGQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTI6NDY6NTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuaW5kZXggYzE2Y2ExNjNiNTVlMy4uZTBhY2VkYmQxZDQ4NiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuQEAgLTIyNiwxNSAmIzQzOzIyNiw2IEBAIHdpbGwgYmUgcGlubmVkIGxvbmd0ZXJtLCBhbmQgd2hvc2UgZGF0YSB3aWxsIGJlIGFjY2Vzc2VkLlxuIFxuIFVuaXQgdGVzdGluZ1xuID09PT09PT09PT09PVxuLVRoaXMgZmlsZTo6XG4tXG4tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbi1cbi1oYXMgdGhlIGZvbGxvd2luZyBuZXcgY2FsbHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBwaW4qKCkgd3JhcHBlciBmdW5jdGlvbnM6XG4tXG4tKiBQSU5fRkFTVF9CRU5DSE1BUksgKC4vZ3VwX3Rlc3QgLWEpXG4tKiBQSU5fQkFTSUNfVEVTVCAoLi9ndXBfdGVzdCAtYilcbi1cbiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkXG4gc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCB2aWEgdHdvIG5ldyAvcHJvYy92bXN0YXQgZW50cmllczogOjpcbiBcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAzNTI2MmFhM2U2N2VmLi5jNDdlNjU1YzQxMTEyIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTcxODcsOCAmIzQzOzE3MTg3LDkgQEAgVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbVxuIEY6XHRtbS9ndXAuY1xuIEY6XHRtbS9ndXBfdGVzdC5jXG4gRjpcdG1tL2d1cF90ZXN0LmhcbiYjNDM7RjpcdHRvb2xzL21tL2d1cF9iZW5jaC5jXG4mIzQzO0Y6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xuIEY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuLUY6XHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKVxuIE06XHRBbmRyZXcgTW9ydG9uIFx1MDAzY2FrcG1AbGludXgtZm91bmRhdGlvbi5vcmdcdTAwM2VcbkBAIC0xNzI5NSw2ICYjNDM7MTcyOTYsNyBAQCBGOlx0bW0vbWVtb3J5LXRpZXJzLmNcbiBGOlx0bW0vcGFnZV9pZGxlLmNcbiBGOlx0bW0vcGdhbGxvYy10cmFjay5oXG4gRjpcdG1tL3Byb2Nlc3Nfdm1fYWNjZXNzLmNcbiYjNDM7RjpcdHRvb2xzL2xpYi9tbS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT05cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggYzE4MGQ0MGNkNjcxMi4uNjFhYjFiOGEyZWJkZiAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWdcbkBAIC0xMjkxLDI0ICYjNDM7MTI5MSwxOSBAQCBjb25maWcgUEVSQ1BVX1NUQVRTXG4gXHQgIGJlIHVzZWQgdG8gaGVscCB1bmRlcnN0YW5kIHBlcmNwdSBtZW1vcnkgdXNhZ2UuXG4gXG4gY29uZmlnIEdVUF9URVNUXG4tXHRib29sIFwmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHNcJiMzNDtcbiYjNDM7XHRib29sIFwmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHMgYW5kIGJlbmNobWFya3NcJiMzNDtcbiBcdGRlcGVuZHMgb24gREVCVUdfRlNcbiBcdGhlbHBcbiBcdCAgUHJvdmlkZXMgL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYSB3YXlcbi1cdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yXG4tXHQgIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWx5IG9mIEFQSSBjYWxscy5cbiYjNDM7XHQgIHRvIG1ha2UgaW9jdGwgY2FsbHMgdGhhdCBjYW4gbGF1bmNoIGtlcm5lbC1iYXNlZCB1bml0IHRlc3RzIGFuZFxuJiM0MztcdCAgYmVuY2htYXJrcyBmb3IgdGhlIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSBmYW1pbGllc1xuJiM0MztcdCAgb2YgQVBJIGNhbGxzLlxuIFxuLVx0ICBUaGVzZSB0ZXN0cyBpbmNsdWRlIGJlbmNobWFyayB0ZXN0aW5nIG9mIHRoZSBfZmFzdCB2YXJpYW50cyBvZlxuLVx0ICBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCksIGFzIHdlbGwgYXMgc21va2UgdGVzdHMgb2ZcbiYjNDM7XHQgIFRoZXNlIGluY2x1ZGUgYmVuY2htYXJrIHRlc3Rpbmcgb2YgdGhlIF9mYXN0IHZhcmlhbnRzIG9mXG4mIzQzO1x0ICBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCksIGFzIHdlbGwgYXMgdGVzdHMgb2ZcbiBcdCAgdGhlIG5vbi1fZmFzdCB2YXJpYW50cy5cbiBcbi1cdCAgVGhlcmUgaXMgYWxzbyBhIHN1Yi10ZXN0IHRoYXQgYWxsb3dzIHJ1bm5pbmcgZHVtcF9wYWdlKCkgb24gYW55XG4tXHQgIG9mIHVwIHRvIGVpZ2h0IHBhZ2VzIChzZWxlY3RlZCBieSBjb21tYW5kIGxpbmUgYXJncykgd2l0aGluIHRoZVxuLVx0ICByYW5nZSBvZiB1c2VyLXNwYWNlIGFkZHJlc3Nlcy4gVGhlc2UgcGFnZXMgYXJlIGVpdGhlciBwaW5uZWQgdmlhXG4tXHQgIHBpbl91c2VyX3BhZ2VzKigpLCBvciBwaW5uZWQgdmlhIGdldF91c2VyX3BhZ2VzKigpLCBhcyBzcGVjaWZpZWRcbi1cdCAgYnkgb3RoZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cbi1cbi1cdCAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiYjNDM7XHQgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYyBhbmQgdG9vbHMvbW0vZ3VwX2JlbmNoLmMuXG4gXG4gY29tbWVudCBcJiMzNDtHVVBfVEVTVCBuZWVkcyB0byBoYXZlIERFQlVHX0ZTIGVuYWJsZWRcJiMzNDtcbiBcdGRlcGVuZHMgb24gIUdVUF9URVNUIFx1MDAyNlx1MDAyNiAhREVCVUdfRlNcbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5jIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjliMjIzN2U5ODIzZTlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbkBAIC0wLDAgJiM0MzsxLDEwNiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZmlsZV91dGlscy5oXCYjMzQ7XG4mIzQzO1xuJiM0MztpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgZXJyO1xuJiM0MztcdHNzaXplX3QgbnVtcmVhZDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbiYjNDM7XHRpZiAoZmQgPT0gLTEpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbiYjNDM7XHRpZiAobnVtcmVhZCBcdTAwM2MgMSkge1xuJiM0MztcdFx0ZXJyID0gbnVtcmVhZCA/IGVycm5vIDogRU5PREFUQTtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdHJldHVybiAtZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnVmW251bXJlYWRdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xuJiM0MztcdHNzaXplX3QgbnVtd3JpdHRlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJ1ZmxlbiBcdTAwM2MgMilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xuJiM0MztcdGlmIChmZCA9PSAtMSlcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbiYjNDM7XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLXNhdmVkX2Vycm5vO1xuJiM0MztcbiYjNDM7XHRpZiAobnVtd3JpdHRlbiAhPSAoc3NpemVfdCkoYnVmbGVuIC0gMSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNoYXIgYnVmWzIxXTtcbiYjNDM7XHRjaGFyICplbmQ7XG4mIzQzO1xuJiM0MztcdGlmICghbnVtKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogUmVqZWN0IHNpZ25zIGFuZCBsZWFkaW5nIHdoaXRlc3BhY2UgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgc3RydG91bCgpICovXG4mIzQzO1x0aWYgKGJ1ZlswXSBcdTAwM2MgJiMzOTswJiMzOTsgfHwgYnVmWzBdIFx1MDAzZSAmIzM5OzkmIzM5OylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRlcnJubyA9IDA7XG4mIzQzO1x0dmFsID0gc3RydG91bChidWYsIFx1MDAyNmVuZCwgMTApO1xuJiM0MztcdGlmIChlcnJubylcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgYWxsb3cgYSBuZXdsaW5lIGFmdGVyIHRoZSBudW1iZXIgKi9cbiYjNDM7XHRpZiAoKmVuZCA9PSAmIzM5O1xcbiYjMzk7KVxuJiM0MztcdFx0ZW5kJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0aWYgKCplbmQgIT0gJiMzOTtcXDAmIzM5OylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQqbnVtID0gdmFsO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMjFdO1xuJiM0MztcbiYjNDM7XHRzcHJpbnRmKGJ1ZiwgXCYjMzQ7JWx1XCYjMzQ7LCBudW0pO1xuJiM0MztcdHJldHVybiB3cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgJiM0MzsgMSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHdyaXRlX251bShwYXRoLCBudW0pO1xuJiM0MztcdHJldHVybiByZXQgPT0gLUVJTlZBTCA/IDAgOiByZXQ7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUwZGFhODJjMmIyYjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmhcbkBAIC0wLDAgJiM0MzsxLDEzIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX19NTV9GSUxFX1VUSUxTX0hfX1xuJiM0MzsjZGVmaW5lIF9fTU1fRklMRV9VVElMU19IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGRlZi5oXHUwMDNlXG4mIzQzO1xuJiM0MztpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4mIzQzO2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4mIzQzO2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pO1xuJiM0MztpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcbiYjNDM7aW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuc2ltaWxhcml0eSBpbmRleCA4NyVcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbnJlbmFtZSB0byB0b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuaW5kZXggZDc5MTdkY2UzYWJhYy4uYWJkOWY3MTgyZjg4ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5AQCAtOCwxMiAmIzQzOzgsMTggQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtmaWxlX3V0aWxzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBUSFBfU1lTRlMgXCYjMzQ7L3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvXCYjMzQ7XG4gI2RlZmluZSBNQVhfU0VUVElOR1NfREVQVEggNFxuJiM0MztcbiYjNDM7I2lmbmRlZiBBUlJBWV9TSVpFXG4mIzQzOyNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5nc19zdGFja1tNQVhfU0VUVElOR1NfREVQVEhdO1xuIHN0YXRpYyBpbnQgc2V0dGluZ3NfaW5kZXg7XG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2F2ZWRfc2V0dGluZ3M7XG5AQCAtNDgsNiAmIzQzOzU0LDExIEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2htZW1fZW5hYmxlZF9zdHJpbmdzW10gPSB7XG4gXHROVUxMXG4gfTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoY29uc3QgY2hhciAqcGF0aCwgaW50IHJldClcbiYjNDM7e1xuJiM0MztcdHByaW50ZihcJiMzNDsjICVzOiAlcyAoJWQpXFxuXCYjMzQ7LCBwYXRoLCBzdHJlcnJvcigtcmV0KSwgLXJldCk7XG4mIzQzO31cbiYjNDM7XG4gaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG5AQCAtNjEsOCAmIzQzOzcyLDkgQEAgaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4gXG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkge1xuLVx0XHRwZXJyb3IocGF0aCk7XG4mIzQzO1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbiBcbkBAIC0xMDMsMTIgJiM0MzsxMTUsMTcgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbClcbiBcdFx0cHJpbnRmKFwmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHR3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgJiM0MzsgMSk7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICYjNDM7IDEpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0fVxuIH1cbiBcbiB1bnNpZ25lZCBsb25nIHRocF9yZWFkX251bShjb25zdCBjaGFyICpuYW1lKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBudW07XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gc25wcmludGYocGF0aCwgUEFUSF9NQVgsIFRIUF9TWVNGUyBcJiMzNDslc1wmIzM0OywgbmFtZSk7XG5AQCAtMTE2LDcgJiM0MzsxMzMsMTMgQEAgdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcbiBcdFx0cHJpbnRmKFwmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XG4mIzQzO1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnVtKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG51bTtcbiB9XG4gXG4gdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKVxuQEAgLTEyOSw3ICYjNDM7MTUyLDExIEBAIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcbiBcdFx0cHJpbnRmKFwmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwmIzM0OywgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHR3cml0ZV9udW0ocGF0aCwgbnVtKTtcbiYjNDM7XHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiB9XG4gXG4gdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbkBAIC0xNTcsOCAmIzQzOzE4NCwxNSBAQCB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuIFx0XHQubWF4X3B0ZXNfc2hhcmVkID0gdGhwX3JlYWRfbnVtKFwmIzM0O2todWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXCYjMzQ7KSxcbiBcdFx0LnBhZ2VzX3RvX3NjYW4gPSB0aHBfcmVhZF9udW0oXCYjMzQ7a2h1Z2VwYWdlZC9wYWdlc190b19zY2FuXCYjMzQ7KSxcbiBcdH07XG4tXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSlcbi1cdFx0c2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYiA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgpO1xuJiM0MztcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XG4mIzQzO1x0XHRpbnQgcmV0ID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcbiYjNDM7XHRcdFx0XHQgICBcdTAwMjZzZXR0aW5ncy1cdTAwM2VyZWFkX2FoZWFkX2tiKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHJldCk7XG4mIzQzO1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9PUkRFUlM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICghKCgxIFx1MDAzY1x1MDAzYyBpKSBcdTAwMjYgb3JkZXJzKSkge1xuQEAgLTIwOCw4ICYjNDM7MjQyLDE1IEBAIHZvaWQgdGhwX3dyaXRlX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuIFx0dGhwX3dyaXRlX251bShcJiMzNDtraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFwmIzM0Oywga2h1Z2VwYWdlZC1cdTAwM2VtYXhfcHRlc19zaGFyZWQpO1xuIFx0dGhwX3dyaXRlX251bShcJiMzNDtraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cJiMzNDssIGtodWdlcGFnZWQtXHUwMDNlcGFnZXNfdG9fc2Nhbik7XG4gXG4tXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSlcbi1cdFx0d3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuJiM0MztcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XG4mIzQzO1x0XHRpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG4mIzQzO1x0XHRcdFx0ICAgIHNldHRpbmdzLVx1MDAzZXJlYWRfYWhlYWRfa2IpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTtcbiYjNDM7XHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX09SREVSUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNiBvcmRlcnMpKVxuQEAgLTMwNyw4ICYjNDM7MzQ4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX3N1cHBvcnRlZF9vcmRlcnMoYm9vbCBpc19zaG1lbSlcbiBcdFx0fVxuIFxuIFx0XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0aWYgKHJldCAhPSAtRU5PRU5UKSB7XG4mIzQzO1x0XHRcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiYjNDM7XHRcdFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0b3JkZXJzIHw9IDFVTCBcdTAwM2NcdTAwM2MgaTtcbiBcdH1cbiBcbiBcdHJldHVybiBvcmRlcnM7XG5AQCAtMzgyLDggJiM0Mzs0MzAsNyBAQCBpbnQgZGV0ZWN0X2h1Z2V0bGJfcGFnZV9zaXplcyh1bnNpZ25lZCBsb25nIHNpemVzW10sIGludCBtYXgpXG4gXHRcdGlmIChzc2NhbmYoZW50cnktXHUwMDNlZF9uYW1lLCBcJiMzNDtodWdlcGFnZXMtJXp1a0JcJiMzNDssIFx1MDAyNmtiKSAhPSAxKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRzaXplc1tjb3VudCYjNDM7JiM0MztdID0ga2IgKiAxMDI0O1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtbSU5GT10gZGV0ZWN0ZWQgaHVnZXRsYiBwYWdlIHNpemU6ICV6dSBLaUJcXG5cJiMzNDssXG4tXHRcdFx0ICAgICAgIGtiKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDsjIFtJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcblwmIzM0Oywga2IpO1xuIFx0fVxuIFx0Y2xvc2VkaXIoZGlyKTtcbiBcdHJldHVybiBjb3VudDtcbkBAIC00MjUsMjggJiM0Mzs0NzIsNDkgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl9zeXNmc19wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbixcbiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXCYjMzQ7bnJfaHVnZXBhZ2VzXCYjMzQ7KTtcbiBcbi1cdHJldHVybiByZWFkX251bShwYXRoKTtcbiYjNDM7XHRyZXQgPSByZWFkX251bShwYXRoLCBcdTAwMjZucik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBucjtcbiB9XG4gXG4gdm9pZCBodWdldGxiX3NldF9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbnIpXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXCYjMzQ7bnJfaHVnZXBhZ2VzXCYjMzQ7KTtcbiBcbi1cdHdyaXRlX251bV9pZ25vcmVfZWludmFsKHBhdGgsIG5yKTtcbiYjNDM7XHRyZXQgPSB3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnI7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwmIzM0O2ZyZWVfaHVnZXBhZ2VzXCYjMzQ7KTtcbiBcbi1cdHJldHVybiByZWFkX251bShwYXRoKTtcbiYjNDM7XHRyZXQgPSByZWFkX251bShwYXRoLCBcdTAwMjZucik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBucjtcbiB9XG4gXG4gc3RhdGljIGJvb2wgX19odWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcbkBAIC01MDIsNyAmIzQzOzU3MCw4IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHNpemVzW10sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKG5yX2VuYWJsZWQgXHUwMDNlIG1heCkge1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxuXCYjMzQ7LCBucl9lbmFibGVkLCBtYXgpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0OyMgZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBucl9lbmFibGVkLCBtYXgpO1xuIFx0XHRucl9lbmFibGVkID0gbWF4O1xuIFx0fVxuIFxuQEAgLTU3NCw4ICYjNDM7NjQzLDEwIEBAIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0KHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19zaWdoYW5kbGVyKGludCBzaWcpXG4ge1xuJiM0MztcdCh2b2lkKXNpZztcbiYjNDM7XG4gXHQvKiBleGl0KCkgd2lsbCBpbnZva2UgdGhlIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3NfYXRleGl0IGhhbmRsZXIuICovXG4tXHRleGl0KEtTRlRfRkFJTCk7XG4mIzQzO1x0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIH1cbiBcbiB2b2lkIGh1Z2VwYWdlX3NhdmVfc2V0dGluZ3MoYm9vbCB0aHAsIGJvb2wgaHVnZXRsYilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbnNpbWlsYXJpdHkgaW5kZXggMTAwJVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxucmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmVcbmluZGV4IDE0NDZhNjU5ZTU0MDguLjE1NGQ3NDBiZTAyZTggMTAwNjQ0XG4tLS0gYS90b29scy9tbS8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS8uZ2l0aWdub3JlXG5AQCAtMywzICYjNDM7Myw0IEBAIHNsYWJpbmZvXG4gcGFnZS10eXBlc1xuIHBhZ2Vfb3duZXJfc29ydFxuIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4mIzQzO2d1cF9iZW5jaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL01ha2VmaWxlIGIvdG9vbHMvbW0vTWFrZWZpbGVcbmluZGV4IDg1ODE4NmE2ZWVmZGIuLmYyMGEzMmQ4Y2MyMmUgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vTWFrZWZpbGVcbkBAIC0zLDEzICYjNDM7MywxNSBAQFxuICNcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxuIFxuLUJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3RcbiYjNDM7QlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlclxuJiM0MztCVUlMRF9UQVJHRVRTICYjNDM7PSB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2hcbiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHNcbiBcbiBMSUJfRElSID0gLi4vbGliL2FwaVxuIExJQlMgPSAkKExJQl9ESVIpL2xpYmFwaS5hXG4mIzQzO0dVUF9CRU5DSF9PQkpTID0gZ3VwX2JlbmNoLmMgLi4vbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgLi4vbGliL21tL2ZpbGVfdXRpbHMuY1xuIFxuLUNGTEFHUyAmIzQzOz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWRcbiYjNDM7Q0ZMQUdTICYjNDM7PSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtSS4uLy4uIC1wdGhyZWFkXG4gTERGTEFHUyAmIzQzOz0gJChMSUJTKSAtcHRocmVhZFxuIFxuIGFsbDogJChCVUlMRF9UQVJHRVRTKVxuQEAgLTIyLDggJiM0MzsyNCwxMSBAQCAkKExJQlMpOlxuICU6ICUuY1xuIFx0JChDQykgJChDRkxBR1MpIC1vICRAICRcdTAwM2MgJChMREZMQUdTKVxuIFxuJiM0MztndXBfYmVuY2g6ICQoR1VQX0JFTkNIX09CSlMpICQoTElCUylcbiYjNDM7XHQkKENDKSAkKENGTEFHUykgLW8gJEAgJChHVVBfQkVOQ0hfT0JKUykgJChMREZMQUdTKVxuJiM0MztcbiBjbGVhbjpcbi1cdCQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4mIzQzO1x0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXG4gXHRtYWtlIC1DICQoTElCX0RJUikgY2xlYW5cbiBcbiBzYmluZGlyID89IC91c3Ivc2JpblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMgYi90b29scy9tbS9ndXBfYmVuY2guY1xuc2ltaWxhcml0eSBpbmRleCA1MCVcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbnJlbmFtZSB0byB0b29scy9tbS9ndXBfYmVuY2guY1xuaW5kZXggM2Y4NDFhOTZmODcwNi4uZmY2ZTQ2NjU0NjgxMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jXG5AQCAtMTAsMTEgJiM0MzsxMCwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY21tL2d1cF90ZXN0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNkZWZpbmUgTUIgKDFVTCBcdTAwM2NcdTAwM2MgMjApXG4gXG5AQCAtMzgsMTIgJiM0MzszNyw2IEBAIHN0YXRpYyBjaGFyICpjbWRfdG9fc3RyKHVuc2lnbmVkIGxvbmcgY21kKVxuIFx0XHRyZXR1cm4gXCYjMzQ7UElOX0ZBU1RfQkVOQ0hNQVJLXCYjMzQ7O1xuIFx0Y2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOlxuIFx0XHRyZXR1cm4gXCYjMzQ7UElOX0xPTkdURVJNX0JFTkNITUFSS1wmIzM0Oztcbi1cdGNhc2UgR1VQX0JBU0lDX1RFU1Q6XG4tXHRcdHJldHVybiBcJiMzNDtHVVBfQkFTSUNfVEVTVFwmIzM0Oztcbi1cdGNhc2UgUElOX0JBU0lDX1RFU1Q6XG4tXHRcdHJldHVybiBcJiMzNDtQSU5fQkFTSUNfVEVTVFwmIzM0Oztcbi1cdGNhc2UgRFVNUF9VU0VSX1BBR0VTX1RFU1Q6XG4tXHRcdHJldHVybiBcJiMzNDtEVU1QX1VTRVJfUEFHRVNfVEVTVFwmIzM0OztcbiBcdH1cbiBcdHJldHVybiBcJiMzNDtVbmtub3duIGNvbW1hbmRcJiMzNDs7XG4gfVxuQEAgLTUzLDM5ICYjNDM7NDYsMjkgQEAgdm9pZCAqZ3VwX3RocmVhZCh2b2lkICpkYXRhKVxuIFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTtcbiBcdGludCBpLCBzdGF0dXM7XG4gXG4tXHQvKiBPbmx5IHJlcG9ydCB0aW1pbmcgaW5mb3JtYXRpb24gb24gdGhlICpfQkVOQ0hNQVJLIGNvbW1hbmRzOiAqL1xuLVx0aWYgKChjbWQgPT0gUElOX0ZBU1RfQkVOQ0hNQVJLKSB8fCAoY21kID09IEdVUF9GQVNUX0JFTkNITUFSSykgfHxcbi1cdCAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXBlYXRzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGd1cC5zaXplID0gc2l6ZTtcbi1cdFx0XHRzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgXHUwMDI2Z3VwKTtcbi1cdFx0XHRpZiAoc3RhdHVzKVxuLVx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVwZWF0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGd1cC5zaXplID0gc2l6ZTtcbiYjNDM7XHRcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcdTAwMjZndXApO1xuJiM0MztcdFx0aWYgKHN0YXR1cykge1xuJiM0MztcdFx0XHRpbnQgZXJyID0gZXJybm87XG4gXG4gXHRcdFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbi1cdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDslczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcJiMzNDssXG4tXHRcdFx0XHQgICAgICAgY21kX3RvX3N0cihjbWQpLCBndXAuZ2V0X2RlbHRhX3VzZWMsXG4tXHRcdFx0XHQgICAgICAgZ3VwLnB1dF9kZWx0YV91c2VjKTtcbi1cdFx0XHRpZiAoZ3VwLnNpemUgIT0gc2l6ZSlcbi1cdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0OywgdHJ1bmNhdGVkIChzaXplOiAlbGxkKVwmIzM0OywgZ3VwLnNpemUpO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDslcyBpb2N0bCBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBjbWRfdG9fc3RyKGNtZCksXG4mIzQzO1x0XHRcdFx0c3RyZXJyb3IoZXJyKSk7XG4gXHRcdFx0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuJiM0MztcdFx0XHRyZXR1cm4gZGF0YTtcbiBcdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0Z3VwLnNpemUgPSBzaXplO1xuLVx0XHRzdGF0dXMgPSBpb2N0bChndXBfZmQsIGNtZCwgXHUwMDI2Z3VwKTtcbi1cdFx0aWYgKHN0YXR1cylcbi1cdFx0XHRnb3RvIHJldHVybl87XG4gXG4gXHRcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0OyVzOiBkb25lXFxuXCYjMzQ7LCBjbWRfdG9fc3RyKGNtZCkpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0OyVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1wmIzM0OyxcbiYjNDM7XHRcdFx0Y21kX3RvX3N0cihjbWQpLCBndXAuZ2V0X2RlbHRhX3VzZWMsXG4mIzQzO1x0XHRcdGd1cC5wdXRfZGVsdGFfdXNlYyk7XG4gXHRcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1RydW5jYXRlZCAoc2l6ZTogJWxsZClcXG5cJiMzNDssIGd1cC5zaXplKTtcbiYjNDM7XHRcdFx0cHJpbnRmKFwmIzM0OywgdHJ1bmNhdGVkIChzaXplOiAlbGxkKVwmIzM0OywgZ3VwLnNpemUpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O1xcblwmIzM0Oyk7XG4gXHRcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbiBcdH1cbiBcbi1yZXR1cm5fOlxuLVx0a3NmdF90ZXN0X3Jlc3VsdCghc3RhdHVzLCBcJiMzNDtpb2N0bCBzdGF0dXMgJWRcXG5cJiMzNDssIHN0YXR1cyk7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG5AQCAtOTMsMzggJiM0Mzs3NiwyMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4ge1xuIFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xuIFx0aW50IGZpbGVkLCBpLCBvcHQsIG5yX3BhZ2VzID0gMSwgdGhwID0gLTEsIHdyaXRlID0gMSwgbnRocmVhZHMgPSAxLCByZXQ7XG4tXHRpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURTtcbiYjNDM7XHRpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURSwgc3RhcnRlZF90aHJlYWRzID0gMCwgZXhpdF9zdGF0dXMgPSAxO1xuIFx0Y2hhciAqZmlsZSA9IFwmIzM0Oy9kZXYvemVyb1wmIzM0Oztcbi1cdGJvb2wgaHVnZXRsYiA9IGZhbHNlO1xuJiM0MztcdGJvb2wgaHVnZXRsYiA9IGZhbHNlLCB0aHJlYWRfZXJyb3IgPSBmYWxzZTtcbiYjNDM7XHR2b2lkICp0aHJlYWRfcmVzdWx0O1xuIFx0cHRocmVhZF90ICp0aWQ7XG4gXHRjaGFyICpwO1xuIFxuLVx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCYjMzQ7bTpyOm46RjpmOmFiY2o6dFRMVXV3V1NIcHpcJiMzNDspKSAhPSAtMSkge1xuJiM0MztcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwmIzM0O206cjpuOkY6Zjphajp0VEx1d1dTSFwmIzM0OykpICE9IC0xKSB7XG4gXHRcdHN3aXRjaCAob3B0KSB7XG4gXHRcdGNhc2UgJiMzOTthJiMzOTs6XG4gXHRcdFx0Y21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7YiYjMzk7OlxuLVx0XHRcdGNtZCA9IFBJTl9CQVNJQ19URVNUO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7TCYjMzk7OlxuIFx0XHRcdGNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTtjJiMzOTs6XG4tXHRcdFx0Y21kID0gRFVNUF9VU0VSX1BBR0VTX1RFU1Q7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBEdW1wIHBhZ2UgMCAoaW5kZXggMSkuIE1heSBiZSBvdmVycmlkZGVuIGxhdGVyLCBieVxuLVx0XHRcdCAqIHVzZXImIzM5O3Mgbm9uLW9wdGlvbiBhcmd1bWVudHMuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAud2hpY2hfcGFnZXMgaXMgemVyby1iYXNlZCwgc28gdGhhdCB6ZXJvIGNhbiBtZWFuIFwmIzM0O2RvXG4tXHRcdFx0ICogbm90aGluZ1wmIzM0Oy5cbi1cdFx0XHQgKi9cbi1cdFx0XHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlICYjMzk7cCYjMzk7OlxuLVx0XHRcdC8qIHdvcmtzIG9ubHkgd2l0aCBEVU1QX1VTRVJfUEFHRVNfVEVTVCAqL1xuLVx0XHRcdGd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICYjMzk7RiYjMzk7OlxuIFx0XHRcdC8qIHN0cnRvbCwgc28geW91IGNhbiBwYXNzIGZsYWdzIGluIGhleCBmb3JtICovXG4gXHRcdFx0Z3VwLmd1cF9mbGFncyA9IHN0cnRvbChvcHRhcmcsIDAsIDApO1xuQEAgLTE0MSw3ICYjNDM7MTA3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICYjMzk7biYjMzk7OlxuIFx0XHRcdG5yX3BhZ2VzID0gYXRvaShvcHRhcmcpO1xuIFx0XHRcdGlmIChucl9wYWdlcyBcdTAwM2MgMClcbi1cdFx0XHRcdG5yX3BhZ2VzID0gc2l6ZSAvIHBzaXplKCk7XG4mIzQzO1x0XHRcdFx0bnJfcGFnZXMgPSBzaXplIC8gZ2V0cGFnZXNpemUoKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O3QmIzM5OzpcbiBcdFx0XHR0aHAgPSAxO1xuQEAgLTE0OSw5ICYjNDM7MTE1LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICYjMzk7VCYjMzk7OlxuIFx0XHRcdHRocCA9IDA7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJiMzOTtVJiMzOTs6XG4tXHRcdFx0Y21kID0gR1VQX0JBU0lDX1RFU1Q7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJiMzOTt1JiMzOTs6XG4gXHRcdFx0Y21kID0gR1VQX0ZBU1RfQkVOQ0hNQVJLO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTE3Myw1MiAmIzQzOzEzNiw0MSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0aHVnZXRsYiA9IHRydWU7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1dyb25nIGFyZ3VtZW50XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O1dyb25nIGFyZ3VtZW50XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZXhpdCgxKTtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKG9wdGluZCBcdTAwM2MgYXJnYykge1xuLVx0XHRpbnQgZXh0cmFfYXJnX2NvdW50ID0gMDtcbi1cdFx0Lypcbi1cdFx0ICogRm9yIGV4YW1wbGU6XG4tXHRcdCAqXG4tXHRcdCAqICAgLi9ndXBfdGVzdCAtYyAwIDEgMHgxMDAxXG4tXHRcdCAqXG4tXHRcdCAqIC4uLnRvIGR1bXAgcGFnZXMgMCwgMSwgYW5kIDQwOTdcbi1cdFx0ICovXG4tXG4tXHRcdHdoaWxlICgob3B0aW5kIFx1MDAzYyBhcmdjKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICAgIChleHRyYV9hcmdfY291bnQgXHUwMDNjIEdVUF9URVNUX01BWF9QQUdFU19UT19EVU1QKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW5cbi1cdFx0XHQgKiB1c2Ugbm9ybWFsIDAtYmFzZWQgaW5kZXhpbmcgb24gdGhlIGNvbW1hbmQgbGluZS5cbi1cdFx0XHQgKi9cbi1cdFx0XHRsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSAmIzQzOyAxO1xuLVxuLVx0XHRcdGd1cC53aGljaF9wYWdlc1tleHRyYV9hcmdfY291bnRdID0gcGFnZV9pbmRleDtcbi1cdFx0XHRleHRyYV9hcmdfY291bnQmIzQzOyYjNDM7O1xuLVx0XHRcdG9wdGluZCYjNDM7JiM0Mzs7XG4tXHRcdH1cbiYjNDM7XHRpZiAob3B0aW5kICE9IGFyZ2MpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtVbmV4cGVjdGVkIGFyZ3VtZW50ICYjMzk7JXMmIzM5O1xcblwmIzM0OywgYXJndltvcHRpbmRdKTtcbiYjNDM7XHRcdGV4aXQoMSk7XG4gXHR9XG4gXG4tXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuJiM0MztcdGlmIChnZXRldWlkKCkpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGV4aXQoMSk7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKGh1Z2V0bGIpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xuIFxuLVx0XHRpZiAoIWhwX3NpemUpXG4tXHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7SHVnZVRMQiBpcyB1bmF2YWlsYWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRpZiAoIWhwX3NpemUpIHtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0NvdWxkIG5vdCBkZXRlcm1pbmUgaHVnZSBwYWdlIHNpemVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0c2l6ZSA9IChzaXplICYjNDM7IGhwX3NpemUgLSAxKSBcdTAwMjYgfihocF9zaXplIC0gMSk7XG4tXHRcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSlcbi1cdFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbi1cdGtzZnRfc2V0X3BsYW4obnRocmVhZHMpO1xuLVxuIFx0ZmlsZWQgPSBvcGVuKGZpbGUsIE9fUkRXUnxPX0NSRUFULCAwNjY0KTtcbi1cdGlmIChmaWxlZCBcdTAwM2MgMClcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O1VuYWJsZSB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRpZiAoZmlsZWQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cJiMzNDssIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4gXG4gXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlcztcbiBcdGlmICh3cml0ZSlcbkBAIC0yMjcsMjYgJiM0MzsxNzksMjQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0Z3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xuIFx0aWYgKGd1cF9mZCA9PSAtMSkge1xuIFx0XHRzd2l0Y2ggKGVycm5vKSB7XG4tXHRcdGNhc2UgRUFDQ0VTOlxuLVx0XHRcdGlmIChnZXR1aWQoKSlcbi1cdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cJiMzNDspO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEVOT0VOVDpcbiBcdFx0XHRpZiAob3BlbmRpcihcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Z1wmIzM0OykgPT0gTlVMTClcbi1cdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O21vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cJiMzNDspO1xuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2NoZWNrIGlmIENPTkZJR19HVVBfVEVTVCBpcyBlbmFibGVkIGluIGtlcm5lbCBjb25maWdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDttb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2NoZWNrIGlmIENPTkZJR19HVVBfVEVTVCBpcyBlbmFibGVkIGluIGtlcm5lbCBjb25maWdcXG5cJiMzNDspO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2ZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2ZhaWxlZCB0byBvcGVuICVzOiAlc1xcblwmIzM0OywgR1VQX1RFU1RfRklMRSxcbiYjNDM7XHRcdFx0XHRzdHJlcnJvcihlcnJubykpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCYjMzQ7KTtcbi1cdFx0a3NmdF9leGl0X3Bhc3MoKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2Nsb3NlX2ZpbGVkO1xuIFx0fVxuIFxuIFx0cCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIGZpbGVkLCAwKTtcbi1cdGlmIChwID09IE1BUF9GQUlMRUQpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDttbWFwOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRpZiAocCA9PSBNQVBfRkFJTEVEKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7bW1hcDogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0XHRnb3RvIGVycl9jbG9zZV9ndXBfZmQ7XG4mIzQzO1x0fVxuIFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylwO1xuIFxuIFx0aWYgKHRocCA9PSAxKVxuQEAgLTI1NSwyMSAmIzQzOzIwNSw0MyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcbiBcdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xuLVx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IHBzaXplKCkpXG4mIzQzO1x0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IGdldHBhZ2VzaXplKCkpXG4gXHRcdHBbMF0gPSAwO1xuIFxuIFx0dGlkID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpICogbnRocmVhZHMpO1xuLVx0YXNzZXJ0KHRpZCk7XG4mIzQzO1x0aWYgKCF0aWQpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgJWQgdGhyZWFkczogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdG50aHJlYWRzLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0Z290byBlcnJfdW5tYXA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG50aHJlYWRzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsIFx1MDAyNmd1cCk7XG4tXHRcdGFzc2VydChyZXQgPT0gMCk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihyZXQpKTtcbiYjNDM7XHRcdFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzdGFydGVkX3RocmVhZHMmIzQzOyYjNDM7O1xuIFx0fVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpO1xuLVx0XHRhc3NlcnQocmV0ID09IDApO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YXJ0ZWRfdGhyZWFkczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIFx1MDAyNnRocmVhZF9yZXN1bHQpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7cHRocmVhZF9qb2luIGZhaWxlZDogJXNcXG5cJiMzNDssIHN0cmVycm9yKHJldCkpO1xuJiM0MztcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuJiM0MztcdFx0fSBlbHNlIGlmICh0aHJlYWRfcmVzdWx0KVxuJiM0MztcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuIFx0fVxuIFxuIFx0ZnJlZSh0aWQpO1xuLVxuLVx0a3NmdF9leGl0X3Bhc3MoKTtcbiYjNDM7XHRpZiAoIXRocmVhZF9lcnJvcilcbiYjNDM7XHRcdGV4aXRfc3RhdHVzID0gMDtcbiYjNDM7XG4mIzQzO2Vycl91bm1hcDpcbiYjNDM7XHRtdW5tYXAoKHZvaWQgKilndXAuYWRkciwgc2l6ZSk7XG4mIzQzO2Vycl9jbG9zZV9ndXBfZmQ6XG4mIzQzO1x0Y2xvc2UoZ3VwX2ZkKTtcbiYjNDM7ZXJyX2Nsb3NlX2ZpbGVkOlxuJiM0MztcdGNsb3NlKGZpbGVkKTtcbiYjNDM7XHRyZXR1cm4gZXhpdF9zdGF0dXM7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IDJkNTM2NjE5NmUzMDkuLjljMDM2MjRmZDI5MzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbkBAIC0zNyw3ICYjNDM7MzcsOCBAQCBlbmRpZlxuICMgTERMSUJTLlxuIE1BS0VGTEFHUyAmIzQzOz0gLS1uby1idWlsdGluLXJ1bGVzXG4gXG4tQ0ZMQUdTID0gLVdhbGwgLU8yIC1JICQodG9wX3NyY2RpcikgJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUylcbiYjNDM7Q0ZMQUdTID0gLVdhbGwgLU8yIC1JICQodG9wX3NyY2RpcikgLUkgJCh0b3Bfc3JjZGlyKS90b29scy9saWJcbiYjNDM7Q0ZMQUdTICYjNDM7PSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxuIENGTEFHUyAmIzQzOz0gLVd1bnJlYWNoYWJsZS1jb2RlXG4gTERMSUJTID0gLWxydCAtbHB0aHJlYWQgLWxtXG4gXG5AQCAtNTcsOCAmIzQzOzU4LDggQEAgZW5kaWZcbiBcbiBURVNUX0dFTl9GSUxFUyA9IGNvd1xuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBjb21wYWN0aW9uX3Rlc3RcbiYjNDM7VEVTVF9HRU5fRklMRVMgJiM0Mzs9IGd1cFxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXBfbG9uZ3Rlcm1cbi1URVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VwX3Rlc3RcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaG1tLXRlc3RzXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGItbWFkdmlzZVxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiLW1tYXBcbkBAIC0xODcsOCAmIzQzOzE4OCwxMCBAQCBURVNUX0ZJTEVTICYjNDM7PSB3cml0ZV9odWdldGxiX21lbW9yeS5zaFxuIFxuIGluY2x1ZGUgLi4vbGliLm1rXG4gXG4tJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jXG4tJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jXG4mIzQzOyQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcXFxuJiM0MztcdFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG4mIzQzOyQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcXFxuJiM0MztcdFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG4gXG4gJChPVVRQVVQpL3VmZmQtc3RyZXNzOiB1ZmZkLWNvbW1vbi5jXG4gJChPVVRQVVQpL3VmZmQtdW5pdC10ZXN0czogdWZmZC1jb21tb24uY1xuQEAgLTIxNyw3ICYjNDM7MjIwLDcgQEAgJChCSU5BUklFU18zMik6IENGTEFHUyAmIzQzOz0gLW0zMiAtbXhzYXZlXG4gJChCSU5BUklFU18zMik6IExETElCUyAmIzQzOz0gLWxydCAtbGRsIC1sbVxuICQoQklOQVJJRVNfMzIpOiAkKE9VVFBVVCkvJV8zMjogJS5jXG4gXHQkKGNhbGwgbXNnLENDLCwkQClcbi1cdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEBcbiYjNDM7XHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkXiAkKExETElCUykgLW8gJEBcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtMzIsJCh0KSkpKVxuIGVuZGlmXG4gXG5AQCAtMjI2LDcgJiM0MzsyMjksNyBAQCAkKEJJTkFSSUVTXzY0KTogQ0ZMQUdTICYjNDM7PSAtbTY0IC1teHNhdmVcbiAkKEJJTkFSSUVTXzY0KTogTERMSUJTICYjNDM7PSAtbHJ0IC1sZGxcbiAkKEJJTkFSSUVTXzY0KTogJChPVVRQVVQpLyVfNjQ6ICUuY1xuIFx0JChjYWxsIG1zZyxDQywsJEApXG4tXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXG4mIzQzO1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRAXG4gJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTY0LCQodCkpKSlcbiBlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcbmluZGV4IDMwZDRhY2U3MTU1YWUuLmIzZjUzNzcxMTljYjggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcbkBAIC0xNSw5ICYjNDM7MTUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIE1BUF9TSVpFX01CXHQxMDBcbiAjZGVmaW5lIE1BUF9TSVpFXHQoTUFQX1NJWkVfTUIgKiAxMDI0ICogMTAyNClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5pbmRleCA4YWE1MjQ5ZDliZWY2Li4zMjY0YTgyODU3NWJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5AQCAtMjksNyAmIzQzOzI5LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gc3RhdGljIHNpemVfdCBwYWdlc2l6ZTtcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xuaW5kZXggMTk2MDYzNWE5NTNlYi4uZTQ2NjBiZjg5YjYyNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xuQEAgLTI1LDcgJiM0MzsyNSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiB1aW50NjRfdCBwYWdlX3NpemU7XG4gdWludDY0X3QgcG1kX3BhZ2VzaXplO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuaW5kZXggNWM4ZWMzY2E3NWQ3ZC4uYWY1Y2Q5YjMwMzM5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5AQCAtMjEsNyAmIzQzOzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcJiMzNDsuLi9waWRmZC9waWRmZC5oXCYjMzQ7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjMxYWUzOGUwOTEzNmRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG5AQCAtMCwwICYjNDM7MSwyNjMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18gLy8gVXNlIGxsNjRcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvaW9jdGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2d1cF90ZXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUIgKDFVTCBcdTAwM2NcdTAwM2MgMjApXG4mIzQzO1xuJiM0MzsvKiBKdXN0IHRoZSBmbGFncyB3ZSBuZWVkLCBjb3BpZWQgZnJvbSB0aGUga2VybmVsIGludGVybmFscy4gKi9cbiYjNDM7I2RlZmluZSBGT0xMX1dSSVRFXHQweDAxXHQvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi9cbiYjNDM7XG4mIzQzOy8qIFBhZ2UgY291bnRzIGV4ZXJjaXNpbmcgc2luZ2xlLCBUSFAtYmF0Y2gsIHBhcnRpYWwsIGFuZCBmdWxsLW1hcHBpbmcgR1VQLiAqL1xuJiM0MztzdGF0aWMgY29uc3QgaW50IG5yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEdVUF9URVNUX0ZJTEUgXCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3RcJiMzNDtcbiYjNDM7I2RlZmluZSBOUl9IVUdFX1BBR0VTIDJcbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGhwX3NpemU7XG4mIzQzO1xuJiM0MztGSVhUVVJFKGd1cF90ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGd1cF9mZDtcbiYjNDM7XHRjaGFyICphZGRyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVChndXBfdGVzdClcbiYjNDM7e1xuJiM0MztcdGJvb2wgdGhwO1xuJiM0MztcdGJvb2wgaHVnZXRsYjtcbiYjNDM7XHRib29sIHdyaXRlO1xuJiM0MztcdGJvb2wgc2hhcmVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZSlcbiYjNDM7e1xuJiM0MztcdC50aHAgPSBmYWxzZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IHRydWUsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV90aHApXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gdHJ1ZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IHRydWUsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX3RocClcbiYjNDM7e1xuJiM0MztcdC50aHAgPSB0cnVlLFxuJiM0MztcdC5odWdldGxiID0gZmFsc2UsXG4mIzQzO1x0LndyaXRlID0gZmFsc2UsXG4mIzQzO1x0LnNoYXJlZCA9IGZhbHNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV9odWdldGxiKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gdHJ1ZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSBmYWxzZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF9odWdldGxiKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gdHJ1ZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gZmFsc2UsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGUpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSB0cnVlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWQpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV90aHApXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gdHJ1ZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IHRydWUsXG4mIzQzO1x0LnNoYXJlZCA9IHRydWUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF90aHApXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gdHJ1ZSxcbiYjNDM7XHQuaHVnZXRsYiA9IGZhbHNlLFxuJiM0MztcdC53cml0ZSA9IGZhbHNlLFxuJiM0MztcdC5zaGFyZWQgPSB0cnVlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX2h1Z2V0bGIpXG4mIzQzO3tcbiYjNDM7XHQudGhwID0gZmFsc2UsXG4mIzQzO1x0Lmh1Z2V0bGIgPSB0cnVlLFxuJiM0MztcdC53cml0ZSA9IHRydWUsXG4mIzQzO1x0LnNoYXJlZCA9IHRydWUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF9odWdldGxiKVxuJiM0Mzt7XG4mIzQzO1x0LnRocCA9IGZhbHNlLFxuJiM0MztcdC5odWdldGxiID0gdHJ1ZSxcbiYjNDM7XHQud3JpdGUgPSBmYWxzZSxcbiYjNDM7XHQuc2hhcmVkID0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAoZ3VwX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUztcbiYjNDM7XHRjaGFyICpwO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZXNpemUgPSAxMjggKiBNQjtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhcmlhbnQtXHUwMDNlaHVnZXRsYikge1xuJiM0MztcdFx0aWYgKCFocF9zaXplKVxuJiM0MztcdFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7SHVnZVRMQiBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSBcdTAwM2MgTlJfSFVHRV9QQUdFUylcbiYjNDM7XHRcdFx0U0tJUChyZXR1cm4sIFwmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0c2VsZi1cdTAwM2VzaXplID0gTlJfSFVHRV9QQUdFUyAqIGhwX3NpemU7XG4mIzQzO1x0XHRtbWFwX2ZsYWdzIHw9IE1BUF9IVUdFVExCO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZhcmlhbnQtXHUwMDNlc2hhcmVkKVxuJiM0MztcdFx0bW1hcF9mbGFncyA9IChtbWFwX2ZsYWdzIFx1MDAyNiB+TUFQX1BSSVZBVEUpIHwgTUFQX1NIQVJFRDtcbiYjNDM7XG4mIzQzO1x0LyogZ3VwX2ZkIGhhcyB0byBiZSBcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cbiYjNDM7XHRzZWxmLVx1MDAzZWd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbiYjNDM7XHRBU1NFUlRfR0Uoc2VsZi1cdTAwM2VndXBfZmQsIDApO1xuJiM0MztcbiYjNDM7XHRzZWxmLVx1MDAzZWFkZHIgPSBtbWFwKE5VTEwsIHNlbGYtXHUwMDNlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdFx0ICBtbWFwX2ZsYWdzLCAtMSwgMCk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9ORShzZWxmLVx1MDAzZWFkZHIsIE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGludCBlcnIgPSBlcnJubztcbiYjNDM7XG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZWd1cF9mZCk7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bW1hcCBmYWlsZWQ6ICVzXCYjMzQ7LCBzdHJlcnJvcihlcnIpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh2YXJpYW50LVx1MDAzZXRocClcbiYjNDM7XHRcdG1hZHZpc2Uoc2VsZi1cdTAwM2VhZGRyLCBzZWxmLVx1MDAzZXNpemUsIE1BRFZfSFVHRVBBR0UpO1xuJiM0MztcdGVsc2UgaWYgKCF2YXJpYW50LVx1MDAzZWh1Z2V0bGIpXG4mIzQzO1x0XHRtYWR2aXNlKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplLCBNQURWX05PSFVHRVBBR0UpO1xuJiM0MztcbiYjNDM7XHRmb3IgKHAgPSBzZWxmLVx1MDAzZWFkZHI7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkclxuJiM0MztcdFx0XHQmIzQzOyBzZWxmLVx1MDAzZXNpemU7IHAgJiM0Mzs9IHBzaXplKCkpXG4mIzQzO1x0XHRwWzBdID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihndXBfdGVzdClcbiYjNDM7e1xuJiM0MztcdG11bm1hcChzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSk7XG4mIzQzO1x0Y2xvc2Uoc2VsZi1cdTAwM2VndXBfZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydW5fZ3VwX2NtZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4mIzQzO1x0XHRcdCBGSVhUVVJFX0RBVEEoZ3VwX3Rlc3QpICpzZWxmLFxuJiM0MztcdFx0XHQgY29uc3QgRklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KSAqdmFyaWFudCxcbiYjNDM7XHRcdFx0IHVuc2lnbmVkIGxvbmcgY29tbWFuZClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0ge1xuJiM0MztcdFx0XHQuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtXHUwMDNlYWRkcixcbiYjNDM7XHRcdFx0LnNpemUgPSBzZWxmLVx1MDAzZXNpemUsXG4mIzQzO1x0XHRcdC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gXHUwMDNjIDAgP1xuJiM0MztcdFx0XHRcdHNlbGYtXHUwMDNlc2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldLFxuJiM0MztcdFx0XHQuZ3VwX2ZsYWdzID0gdmFyaWFudC1cdTAwM2V3cml0ZSA/IEZPTExfV1JJVEUgOiAwLFxuJiM0MztcdFx0fTtcbiYjNDM7XG4mIzQzO1x0XHRUSF9MT0coXCYjMzQ7bnJfcGFnZXNfcGVyX2NhbGw9JXVcJiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoaW9jdGwoc2VsZi1cdTAwM2VndXBfZmQsIGNvbW1hbmQsIFx1MDAyNmd1cCksIDApO1xuJiM0MztcdFx0QVNTRVJUX0VRKGd1cC5zaXplLCBzZWxmLVx1MDAzZXNpemUpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0JBU0lDX1RFU1QpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fQkFTSUNfVEVTVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdClcbiYjNDM7e1xuJiM0MztcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0ZBU1RfQkVOQ0hNQVJLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBwaW5fdXNlcl9wYWdlc19mYXN0KVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fRkFTVF9CRU5DSE1BUkspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbiYjNDM7XHRpZiAoZmQgPT0gLTEpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRUFDQ0VTKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGlmIChlcnJubyA9PSBFTk9FTlQpIHtcbiYjNDM7XHRcdFx0RElSICpkZWJ1Z2ZzID0gb3BlbmRpcihcJiMzNDsvc3lzL2tlcm5lbC9kZWJ1Z1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIWRlYnVnZnMpXG4mIzQzO1x0XHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7TW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGNsb3NlZGlyKGRlYnVnZnMpO1xuJiM0MztcdFx0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtDaGVjayBDT05GSUdfR1VQX1RFU1QgaW4ga2VybmVsIGNvbmZpZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCYjMzQ7LCBHVVBfVEVTVF9GSUxFLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4mIzQzO1x0aWYgKGhwX3NpemUpXG4mIzQzO1x0XHRodWdldGxiX3NldHVwX2RlZmF1bHQoTlJfSFVHRV9QQUdFUyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0ZXN0X2hhcm5lc3NfcnVuKGFyZ2MsIGFyZ3YpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuaW5kZXggNTEwZGU5M2JlNjgxNC4uYzlkOGI0NDkxMjYzOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuQEAgLTI5LDcgJiM0MzsyOSw2IEBAXG4gI2luY2x1ZGUgXCYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XG4gc3RhdGljIGludCBucl9odWdldGxic2l6ZXM7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuaW5kZXggZTI2NDJlY2EwZDAyYi4uZmExYTY1MTk2M2ZkMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuQEAgLTEwLDkgJiM0MzsxMCw2IEBAXG4gICogYnVncy5cbiAgKi9cbiBcbi0jaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuLVxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuQEAgLTMzLDYgJiM0MzszMCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL2V2ZW50ZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuIFxuIC8qXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbiYjMzk7dCBleHBvcnRlZFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbmluZGV4IDU1NWI0YjNkMTQzMDcuLjU3Y2Y3OTBjYTQ3OGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbkBAIC0xNCw3ICYjNDM7MTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIE1JTl9GUkVFX1BBR0VTXHQyMFxuICNkZWZpbmUgTlJfSFVHRV9QQUdFU1x0MTBcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuaW5kZXggMGYyYWFkMWI3ZGJkNi4uYTQ1OGJlY2Y1ODMyNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuQEAgLTE4LDcgJiM0MzsxOCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtZmQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXG4gI2RlZmluZSBQUk9URUNUSU9OIChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG5pbmRleCBlZDNkOTJlODYyZDg3Li45YjcyNGFmNjZlOTM4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xuQEAgLTI2LDcgJiM0MzsyNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBERUZBVUxUX0xFTkdUSF9NQiAxMFVMXG4gI2RlZmluZSBNQl9UT19CWVRFUyh4KSAoeCAqIDEwMjQgKiAxMDI0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jXG5pbmRleCAzZmY3ZjA2MmI3ZWI0Li5mNDUxNGRhNDllMWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuQEAgLTI5LDcgJiM0MzsyOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG5pbmRleCA0YWY5ZDNkYjdiNWI2Li5kOTU2NTIxOTM3OGFhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xuQEAgLTIyLDEwICYjNDM7MjIsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXRmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNpZm5kZWYgTUFEVl9TT0ZUX09GRkxJTkVcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxuQEAgLTg1LDggJiM0Mzs4NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9yaWdfZW5hYmxlX3NvZnRfb2ZmbGluZSA9IC0xVUw7XG4gXG4gLypcbiAgKiBSdW5zIGZyb20gYW4gYXRleGl0IGhhbmRsZXIsIHNvIGl0IG11c3Qgbm90IGNhbGwgYW55dGhpbmcgdGhhdFxuLSAqIGV4aXRzIG9uIGZhaWx1cmU6IHdyaXRlX251bSgpIHdvdWxkIHJlLWVudGVyIGV4aXQoKSB0aHJvdWdoXG4tICoga3NmdF9leGl0X2ZhaWxfbXNnKCkuXG4mIzQzOyAqIGV4aXRzIG9uIGZhaWx1cmUuXG4gICovXG4gc3RhdGljIHZvaWQgcmVzdG9yZV9lbmFibGVfc29mdF9vZmZsaW5lKHZvaWQpXG4ge1xuQEAgLTE1Miw3ICYjNDM7MTUxLDEwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29mdF9vZmZsaW5lX2NvbW1vbihpbnQgZW5hYmxlX3NvZnRfb2ZmbGluZSlcbiBcdGh1Z2VwYWdlc2l6ZV9rYiA9IGZpbGVfc3RhdC5mX2JzaXplIC8gMTAyNDtcbiBcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O0h1Z2VwYWdlc2l6ZSBpcyAlbGRrQlxcblwmIzM0OywgaHVnZXBhZ2VzaXplX2tiKTtcbiBcbi1cdHdyaXRlX251bShFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIGVuYWJsZV9zb2Z0X29mZmxpbmUpO1xuJiM0MztcdHJldCA9IHdyaXRlX251bShFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIGVuYWJsZV9zb2Z0X29mZmxpbmUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHdyaXRlIHRvICVzOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIHN0cmVycm9yKC1yZXQpKTtcbiBcbiBcdG5yX2h1Z2VwYWdlc19iZWZvcmUgPSBodWdldGxiX25yX2RlZmF1bHRfcGFnZXMoKTtcbiBcbkBAIC0xODksNiAmIzQzOzE5MSw4IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29mdF9vZmZsaW5lX2NvbW1vbihpbnQgZW5hYmxlX3NvZnRfb2ZmbGluZSlcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4ge1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuIFx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiBcbiBcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KDgpKVxuQEAgLTE5Niw3ICYjNDM7MjAwLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcbiBcdGtzZnRfc2V0X3BsYW4oMik7XG4gXG4tXHRvcmlnX2VuYWJsZV9zb2Z0X29mZmxpbmUgPSByZWFkX251bShFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgpO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKEVOQUJMRV9TT0ZUX09GRkxJTkVfUEFUSCwgXHUwMDI2b3JpZ19lbmFibGVfc29mdF9vZmZsaW5lKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O0ZhaWxlZCB0byByZWFkICVzOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIHN0cmVycm9yKC1yZXQpKTtcbiYjNDM7XG4gXHRhdGV4aXQocmVzdG9yZV9lbmFibGVfc29mdF9vZmZsaW5lKTtcbiBcbiBcdHRlc3Rfc29mdF9vZmZsaW5lX2NvbW1vbigxKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuaW5kZXggZmI0NjAwNTcwZTEzMS4uOTQ5NTk3NGVjY2JlYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcbkBAIC0yMCw3ICYjNDM7MjAsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaWZuZGVmIFNUQVRYX0RJT0FMSUdOXG4gI2RlZmluZSBTVEFUWF9ESU9BTElHTlx0XHQweDAwMDAyMDAwVVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbmluZGV4IDJkYzE1ODA1NGY2NjYuLjU2YzVhODUzM2U5ZDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbkBAIC0xMCw3ICYjNDM7MTAsNiBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcbkBAIC0yNSw3ICYjNDM7MjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCBmODI2NzNmNWY2YjQ3Li41MjUxMDhjYWNlNTRhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbkBAIC0yMiw3ICYjNDM7MjIsNiBAQFxuICNpbmNsdWRlIFwmIzM0O2xpbnV4L21hZ2ljLmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuQEAgLTEyMiw2ICYjNDM7MTIxLDcgQEAgc3RhdGljIHZvaWQgZ2V0X2ZpbmZvKGNvbnN0IGNoYXIgKmRpcilcbiBcdGNoYXIgYnVmWzEgXHUwMDNjXHUwMDNjIDEwXTtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4gXHRjaGFyICpzdHIsICplbmQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdGZpbmZvLmRpciA9IGRpcjtcbiBcdGlmIChzdGF0KGZpbmZvLmRpciwgXHUwMDI2cGF0aF9zdGF0KSlcbkBAIC0xNDIsOCAmIzQzOzE0Miw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRcdCAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKVxuIFx0ICAgIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwmIzM0O3JlYWRfZmlsZSh1ZXZlbnQpXCYjMzQ7KTtcbiYjNDM7XHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtyZWFkX2ZpbGUoJXMpOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoLXJldCkpO1xuIFx0aWYgKHN0cnN0cihidWYsIFwmIzM0O0RFVlRZUEU9ZGlza1wmIzM0OykpIHtcbiBcdFx0LyogRm91bmQgaXQgKi9cbiBcdFx0aWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG5AQCAtMzI0LDcgJiM0MzszMjUsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIHtcbiBcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XG4gXHRjb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7XG4tXHRpbnQgZmQ7XG4mIzQzO1x0aW50IGZkLCByZXQ7XG4gXHR2b2lkICpwO1xuIFx0dW5zaWduZWQgbG9uZyBzaXplO1xuIFxuQEAgLTM2Miw3ICYjNDM7MzYzLDExIEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttbWFwKClcJiMzNDspO1xuIFxuIFx0LyogRHJvcCBwYWdlIGNhY2hlICovXG4tXHR3cml0ZV9maWxlKFwmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1wmIzM0OywgXCYjMzQ7M1wmIzM0OywgMik7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShcJiMzNDsvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNcJiMzNDssIFwmIzM0OzNcJiMzNDssIDIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7d3JpdGVfZmlsZShkcm9wX2NhY2hlcyk6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiYjNDM7XG4gXHRzdWNjZXNzKFwmIzM0O09LXCYjMzQ7KTtcbiBcdHJldHVybiBwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li42NzExZjRjNjEzNzExIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5AQCAtMTUsNyAmIzQzOzE1LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFx1MDAzY2luY2x1ZGUvdmRzby90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIEtTTV9TWVNGU19QQVRIIFwmIzM0Oy9zeXMva2VybmVsL21tL2tzbS9cJiMzNDtcbiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5pbmRleCBmMTlkNTNjNjk1NzY0Li5hMzVlMmI1N2UwNWIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5AQCAtNSw3ICYjNDM7NSw2IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuQEAgLTE2LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFRXT01FR1x0XHQoMlx1MDAzY1x1MDAzYzIwKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggZDlhNGZiNzgyZWNmZS4uMDM4OThiNGY2Y2RhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5AQCAtMjQsNyAmIzQzOzI0LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFBBR0VNQVBfQklUU19BTExcdFx0KFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHxcdFxcXG4gXHRcdFx0XHRcdCBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuaW5kZXggODJjNmU5NmVhNmViMy4uZjllYzE0MDhhNmUzMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcbkBAIC0xNCw3ICYjNDM7MTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuIFxuICNpZm5kZWYgUFJfVEhQX0RJU0FCTEVfRVhDRVBUX0FEVklTRURcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5pbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5AQCAtNDUsOCAmIzQzOzQ1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7cGtleS1oZWxwZXJzLmhcJiMzNDtcbiBcbiB1NjQgc2hhZG93X3BrZXlfcmVnO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IGQwOWY5ZjZhMzg0ZWUuLmFlMGFiNWVmYWJhZTYgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0xMzAsMzAgJiM0MzsxMzAsNiBAQCB0ZXN0X3NlbGVjdGVkKCkge1xuIFx0ZmlcbiB9XG4gXG4tcnVuX2d1cF9tYXRyaXgoKSB7XG4tICAgICMgLXQ6IHRocD1vbiwgLVQ6IHRocD1vZmYsIC1IOiBodWdldGxiPW9uXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XG4tXG4tICAgIGZvciBodWdlIGluIC10IC1UIFwmIzM0Oy1IIC1tICRodWdldGxiX21iXCYjMzQ7OyBkb1xuLSAgICAgICAgIyAtdTogZ3VwLWZhc3QsIC1VOiBndXAtYmFzaWMsIC1hOiBwaW4tZmFzdCwgLWI6IHBpbi1iYXNpYywgLUw6IHBpbi1sb25ndGVybVxuLSAgICAgICAgZm9yIHRlc3RfY21kIGluIC11IC1VIC1hIC1iIC1MOyBkb1xuLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wXG4tICAgICAgICAgICAgZm9yIHdyaXRlIGluIC13IC1XOyBkb1xuLSAgICAgICAgICAgICAgICAjIC1TOiBzaGFyZWRcbi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TIFwmIzM0OyBcJiMzNDs7IGRvXG4tICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsXG4tICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaXQmIzM5O3MgZGVmYXVsdCB0aHAgc2l6ZSAob3IgMk0gb24geDg2KSwgMTIzIHRvXG4tICAgICAgICAgICAgICAgICAgICAjIGp1c3QgdGVzdCBwYXJ0aWFsIGd1cCB3aGVuIGhpdCBhIGh1Z2UgaW4gd2hhdGV2ZXIgZm9ybVxuLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiBcJiMzNDstbiAxXCYjMzQ7IFwmIzM0Oy1uIDUxMlwmIzM0OyBcJiMzNDstbiAxMjNcJiMzNDsgXCYjMzQ7LW4gLTFcJiMzNDs7IGRvXG4tICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCBcXFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGh1Z2UgJHRlc3RfY21kICR3cml0ZSAkc2hhcmUgJG51bVxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgZG9uZVxuLSAgICBkb25lXG4tfVxuLVxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcbiBBUkNINjRTVFI9XCYjMzQ7YXJtNjQgbWlwczY0IHBhcmlzYzY0IHBwYzY0IHBwYzY0bGUgcmlzY3Y2NCBzMzkweCBzcGFyYzY0IHg4Nl82NFwmIzM0O1xuIGlmIFsgLXogXCYjMzQ7JEFSQ0hcJiMzNDsgXTsgdGhlblxuQEAgLTI3NSwxOCAmIzQzOzI1MSw3IEBAIGZpXG4gXG4gQ0FURUdPUlk9XCYjMzQ7bW1hcFwmIzM0OyBydW5fdGVzdCAuL21hcF9maXhlZF9ub3JlcGxhY2VcbiBcbi1pZiAkUlVOX0FMTDsgdGhlblxuLSAgICBydW5fZ3VwX21hdHJpeFxuLWVsc2Vcbi0gICAgIyBnZXRfdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXG4tICAgIENBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxuLSAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIC0xXG4tICAgICMgcGluX3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFya1xuLSAgICBDQVRFR09SWT1cJiMzNDtndXBfdGVzdFwmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIDFcbi0gICAgQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAtMVxuLWZpXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XG4tQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtY3QgLUYgMHgxIDAgMTkgMHgxMDAwXG4mIzQzO0NBVEVHT1JZPVwmIzM0O2d1cF90ZXN0XCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwXG4gQ0FURUdPUlk9XCYjMzQ7Z3VwX3Rlc3RcJiMzNDsgcnVuX3Rlc3QgLi9ndXBfbG9uZ3Rlcm1cbiBcbiBDQVRFR09SWT1cJiMzNDt1c2VyZmF1bHRmZFwmIzM0OyBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0c1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggNWYyNzg5MTNjNGQ3NS4uN2Y2NDliNjczMzU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtOSw3ICYjNDM7OSw2IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBQQUdFTUFQX0ZJTEVfUEFUSCBcJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXBcJiMzNDtcbiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCBjMDFkMjI3ZDdmZDZkLi42OGY1MDhjOWEzNTVmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTIxLDcgJiM0MzsyMSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gdWludDY0X3QgcGFnZXNpemU7XG4gdW5zaWduZWQgaW50IHBhZ2VzaGlmdDtcbkBAIC0xNDUsNyAmIzQzOzE0NCwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0aWYgKHJldCBcdTAwM2U9IElOUFVUX01BWClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXG4tXHR3cml0ZV9maWxlKFNQTElUX0RFQlVHRlMsIGlucHV0LCByZXQgJiM0MzsgMSk7XG4mIzQzO1x0cmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7d3JpdGVfZmlsZSglcyk6ICVzXFxuXCYjMzQ7LCBTUExJVF9ERUJVR0ZTLFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiB9XG4gXG4gc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuQEAgLTE0LDcgJiM0MzsxNCw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjaWYgIWRlZmluZWQoTUFQX0hVR0VUTEIpXG4gI2RlZmluZSBNQVBfSFVHRVRMQlx0MHg0MDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuaW5kZXggOGViMGM1NjMwZTdlMy4uOTZmNzI4OThlYmUwYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5AQCAtMTcsNyAmIzQzOzE3LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7dm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbi0jaW5jbHVkZSBcJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oXCYjMzQ7XG4gXG4gaW50IGJhY2tpbmdfZmQgPSAtMTtcbiBpbnQgbW1hcF9mbGFncyA9IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcbmluZGV4IDkyYTIxYjk3Zjc0NWEuLjA3MjM4NDNhNzYyNmIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5AQCAtMzcsNyAmIzQzOzM3LDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbiAjZGVmaW5lIFVGRkRfRkxBR1NcdChPX0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSlcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuaW5kZXggNTcyYzI1MTZlODc0ZC4uYzQ4ZWFhYjhlNzVjZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbkBAIC03LDggJiM0Mzs3LDggQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc3NlcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3VmZmQtY29tbW9uLmhcJiMzNDtcbiBcbiBzdGF0aWMgaW50IHBhZ2VtYXBfZmQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG5pbmRleCBlMjRkN2JhMDBiNDQxLi41YTM1NGE2NjRkMWY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcbkBAIC0xMSw3ICYjNDM7MTEsNiBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4tI2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuIFxuIC8qXG4gICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3Nlc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggODBiYzlmNTk3YjUyMS4uNDc1MWRiNzk4YzNhYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtODg5LDExMSAmIzQzOzg4OSw1NCBAQCBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0cmV0dXJuIHJldCBcdTAwM2UgMCA/IDAgOiAtZXJybm87XG4gfVxuIFxuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdGludCBmZDtcbi1cdHNzaXplX3QgbnVtcmVhZDtcbi1cbi1cdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XG4tXHRpZiAoZmQgPT0gLTEpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XG4tXHRpZiAobnVtcmVhZCBcdTAwM2MgMSkge1xuLVx0XHRjbG9zZShmZCk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0YnVmW251bXJlYWRdID0gJiMzOTtcXDAmIzM5Oztcbi1cdGNsb3NlKGZkKTtcbi1cbi1cdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0aW50IGZkLCBzYXZlZF9lcnJubztcbi1cdHNzaXplX3QgbnVtd3JpdHRlbjtcbi1cbi1cdGlmIChidWZsZW4gXHUwMDNjIDIpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtJbmNvcnJlY3QgYnVmZmVyIGxlbjogJXp1XFxuXCYjMzQ7LCBidWZsZW4pO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0OyVzIG9wZW4gZmFpbGVkOiAlc1xcblwmIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbi1cbi1cdG51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdHNhdmVkX2Vycm5vID0gZXJybm87XG4tXHRjbG9zZShmZCk7XG4tXHRlcnJubyA9IHNhdmVkX2Vycm5vO1xuLVx0aWYgKG51bXdyaXR0ZW4gXHUwMDNjIDApIHtcbi1cdFx0aWYgKGlnbm9yZV9laW52YWwgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTClcbi1cdFx0XHRyZXR1cm47XG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBwYXRoLCAoaW50KShidWZsZW4gLSAxKSxcbi1cdFx0XHRcdGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdH1cbi1cdGlmIChudW13cml0dGVuICE9IGJ1ZmxlbiAtIDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDslcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcblwmIzM0Oyxcbi1cdFx0XHRcdHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLCBidWYsIGJ1ZmxlbiAtIDEsIG51bXdyaXR0ZW4pO1xuLX1cbi1cbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuLXtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIGJ1ZmxlbiwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTtcbi19XG4tXG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKVxuLXtcbi1cdGNoYXIgYnVmWzIxXTtcbi1cbi1cdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7cmVhZF9maWxlKClcJiMzNDspO1xuLVxuLVx0cmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0Y2hhciBidWZbMjFdO1xuLVxuLVx0c3ByaW50ZihidWYsIFwmIzM0OyVsdVwmIzM0OywgbnVtKTtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEsIGlnbm9yZV9laW52YWwpO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbi17XG4tXHRyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpO1xuLX1cbi1cbi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuLXtcbi1cdHJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyB0cnVlKTtcbi19XG4tXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htYWxsLCBzaG1tYXg7XG4gXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKVxuIHtcbi1cdGlmIChzaG1tYXgpXG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heFwmIzM0Oywgc2htbWF4KTtcbi1cdGlmIChzaG1hbGwpXG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0Oywgc2htYWxsKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc2htbWF4KSB7XG4mIzQzO1x0XHRyZXQgPSB3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIHNobW1heCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgc2htbWF4OiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHNobWFsbCkge1xuJiM0MztcdFx0cmV0ID0gd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBzaG1hbGwpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O0ZhaWxlZCB0byByZXN0b3JlIHNobWFsbDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4mIzQzO1x0fVxuIH1cbiBcbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7LCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiBcbi1cdHZhbCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XCYjMzQ7KTtcbiBcdGlmICh2YWwgXHUwMDNjIGxlbmd0aCkge1xuLVx0XHR3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIGxlbmd0aCk7XG4mIzQzO1x0XHRyZXQgPSB3cml0ZV9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcJiMzNDssIGxlbmd0aCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobW1heDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBsZW5ndGgsIHN0cmVycm9yKC1yZXQpKTtcbiBcdFx0c2htbWF4ID0gdmFsO1xuIFx0fVxuIFxuLVx0dmFsID0gcmVhZF9udW0oXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcJiMzNDspO1xuJiM0MztcdHJldCA9IHJlYWRfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiBcdGlmICh2YWwgXHUwMDNjIG5yKSB7XG4tXHRcdHdyaXRlX251bShcJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbFwmIzM0OywgbnIpO1xuJiM0MztcdFx0cmV0ID0gd3JpdGVfbnVtKFwmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCYjMzQ7LCBucik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7RmFpbGVkIHRvIHdyaXRlICVsdSB0byAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBuciwgc3RyZXJyb3IoLXJldCkpO1xuIFx0XHRzaG1hbGwgPSB2YWw7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuaW5kZXggOWE0OWFmODg3MDJlNC4uNjRhODZlOGEwYzQxYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5AQCAtOCw2ICYjNDM7OCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2UgLyogX1NDX1BBR0VTSVpFICovXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY21tL2ZpbGVfdXRpbHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCBcdTAwM2NcdTAwM2MgKG5yKSlcbiAjZGVmaW5lIFBNX1NPRlRfRElSVFkgICAgICAgICAgICAgICAgIEJJVF9VTEwoNTUpXG5AQCAtMTY2LDEyICYjNDM7MTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVx0KCgoZW50KSBcdTAwMjYgKDF1bGwgXHUwMDNjXHUwMDNjIDYzKSkgIT0gMClcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcdCgoZW50KSBcdTAwMjYgKCgxdWxsIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSlcbiBcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpO1xuIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvbGliL21tLywgdG9vbHMvbW0vLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBkb2N1bWVudGF0aW9uIChEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCksIE1BSU5UQUlORVJTLCBhbmQgS2NvbmZpZyBoZWxwIHRleHQgKG1tL0tjb25maWcpLiBObyBjb21waWxlZCBrZXJuZWwgQyBsb2dpYyBpcyBhZmZlY3RlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MTMwZDc1MjcxZDc0M2EyYjIxZGJjYjRhNmIzNjViYTA0Zjc0MGQ0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTI6NDY6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CmluZGV4IGMxNmNhMTYzYjU1ZTMuLmUwYWNlZGJkMWQ0ODYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0CkBAIC0yMjYsMTUgJiM0MzsyMjYsNiBAQCB3aWxsIGJlIHBpbm5lZCBsb25ndGVybSwgYW5kIHdob3NlIGRhdGEgd2lsbCBiZSBhY2Nlc3NlZC4KIAogVW5pdCB0ZXN0aW5nCiA9PT09PT09PT09PT0KLVRoaXMgZmlsZTo6Ci0KLSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jCi0KLWhhcyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFwcGVyIGZ1bmN0aW9uczoKLQotKiBQSU5fRkFTVF9CRU5DSE1BUksgKC4vZ3VwX3Rlc3QgLWEpCi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKQotCiBZb3UgY2FuIG1vbml0b3IgaG93IG1hbnkgdG90YWwgZG1hLXBpbm5lZCBwYWdlcyBoYXZlIGJlZW4gYWNxdWlyZWQgYW5kIHJlbGVhc2VkCiBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIHZpYSB0d28gbmV3IC9wcm9jL3Ztc3RhdCBlbnRyaWVzOiA6OgogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDM1MjYyYWEzZTY3ZWYuLmM0N2U2NTVjNDExMTIgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xNzE4Nyw4ICYjNDM7MTcxODcsOSBAQCBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW0KIEY6CW1tL2d1cC5jCiBGOgltbS9ndXBfdGVzdC5jCiBGOgltbS9ndXBfdGVzdC5oCiYjNDM7RjoJdG9vbHMvbW0vZ3VwX2JlbmNoLmMKJiM0MztGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMKLUY6CXRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKIAogTUVNT1JZIE1BTkFHRU1FTlQgLSBLU00gKEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nKQogTToJQW5kcmV3IE1vcnRvbiAmbHQ7YWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZyZndDsKQEAgLTE3Mjk1LDYgJiM0MzsxNzI5Niw3IEBAIEY6CW1tL21lbW9yeS10aWVycy5jCiBGOgltbS9wYWdlX2lkbGUuYwogRjoJbW0vcGdhbGxvYy10cmFjay5oCiBGOgltbS9wcm9jZXNzX3ZtX2FjY2Vzcy5jCiYjNDM7RjoJdG9vbHMvbGliL21tLwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vCiAKIE1FTU9SWSBNQU5BR0VNRU5UIC0gTlVNQSBNRU1CTE9DS1MgQU5EIE5VTUEgRU1VTEFUSU9OCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCBjMTgwZDQwY2Q2NzEyLi42MWFiMWI4YTJlYmRmIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWcKQEAgLTEyOTEsMjQgJiM0MzsxMjkxLDE5IEBAIGNvbmZpZyBQRVJDUFVfU1RBVFMKIAkgIGJlIHVzZWQgdG8gaGVscCB1bmRlcnN0YW5kIHBlcmNwdSBtZW1vcnkgdXNhZ2UuCiAKIGNvbmZpZyBHVVBfVEVTVAotCWJvb2wgJiMzNDtFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzJiMzNDsKJiM0MzsJYm9vbCAmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHMgYW5kIGJlbmNobWFya3MmIzM0OwogCWRlcGVuZHMgb24gREVCVUdfRlMKIAloZWxwCiAJICBQcm92aWRlcyAvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdCwgd2hpY2ggaW4gdHVybiBwcm92aWRlcyBhIHdheQotCSAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yCi0JICB0aGUgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpIGZhbWlseSBvZiBBUEkgY2FsbHMuCiYjNDM7CSAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgYW5kCiYjNDM7CSAgYmVuY2htYXJrcyBmb3IgdGhlIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSBmYW1pbGllcwomIzQzOwkgIG9mIEFQSSBjYWxscy4KIAotCSAgVGhlc2UgdGVzdHMgaW5jbHVkZSBiZW5jaG1hcmsgdGVzdGluZyBvZiB0aGUgX2Zhc3QgdmFyaWFudHMgb2YKLQkgIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSwgYXMgd2VsbCBhcyBzbW9rZSB0ZXN0cyBvZgomIzQzOwkgIFRoZXNlIGluY2x1ZGUgYmVuY2htYXJrIHRlc3Rpbmcgb2YgdGhlIF9mYXN0IHZhcmlhbnRzIG9mCiYjNDM7CSAgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpLCBhcyB3ZWxsIGFzIHRlc3RzIG9mCiAJICB0aGUgbm9uLV9mYXN0IHZhcmlhbnRzLgogCi0JICBUaGVyZSBpcyBhbHNvIGEgc3ViLXRlc3QgdGhhdCBhbGxvd3MgcnVubmluZyBkdW1wX3BhZ2UoKSBvbiBhbnkKLQkgIG9mIHVwIHRvIGVpZ2h0IHBhZ2VzIChzZWxlY3RlZCBieSBjb21tYW5kIGxpbmUgYXJncykgd2l0aGluIHRoZQotCSAgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlIHBhZ2VzIGFyZSBlaXRoZXIgcGlubmVkIHZpYQotCSAgcGluX3VzZXJfcGFnZXMqKCksIG9yIHBpbm5lZCB2aWEgZ2V0X3VzZXJfcGFnZXMqKCksIGFzIHNwZWNpZmllZAotCSAgYnkgb3RoZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLQotCSAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKJiM0MzsJICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYW5kIHRvb2xzL21tL2d1cF9iZW5jaC5jLgogCiBjb21tZW50ICYjMzQ7R1VQX1RFU1QgbmVlZHMgdG8gaGF2ZSBERUJVR19GUyBlbmFibGVkJiMzNDsKIAlkZXBlbmRzIG9uICFHVVBfVEVTVCAmYW1wOyZhbXA7ICFERUJVR19GUwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOWIyMjM3ZTk4MjNlOQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmMKQEAgLTAsMCAmIzQzOzEsMTA2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2ZpbGVfdXRpbHMuaCYjMzQ7CiYjNDM7CiYjNDM7aW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCiYjNDM7ewomIzQzOwlpbnQgZmQsIGVycjsKJiM0MzsJc3NpemVfdCBudW1yZWFkOwomIzQzOwomIzQzOwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgPT0gLTEpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwludW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTsKJiM0MzsJaWYgKG51bXJlYWQgJmx0OyAxKSB7CiYjNDM7CQllcnIgPSBudW1yZWFkID8gZXJybm8gOiBFTk9EQVRBOwomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcmV0dXJuIC1lcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnVmW251bXJlYWRdID0gJiMzOTtcMCYjMzk7OwomIzQzOwljbG9zZShmZCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCiYjNDM7ewomIzQzOwlpbnQgZmQsIHNhdmVkX2Vycm5vOwomIzQzOwlzc2l6ZV90IG51bXdyaXR0ZW47CiYjNDM7CiYjNDM7CWlmIChidWZsZW4gJmx0OyAyKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7CiYjNDM7CWlmIChmZCA9PSAtMSkKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CW51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTsKJiM0MzsJc2F2ZWRfZXJybm8gPSBlcnJubzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwomIzQzOwlpZiAobnVtd3JpdHRlbiAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLXNhdmVkX2Vycm5vOwomIzQzOwomIzQzOwlpZiAobnVtd3JpdHRlbiAhPSAoc3NpemVfdCkoYnVmbGVuIC0gMSkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsJY2hhciBidWZbMjFdOwomIzQzOwljaGFyICplbmQ7CiYjNDM7CiYjNDM7CWlmICghbnVtKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIFJlamVjdCBzaWducyBhbmQgbGVhZGluZyB3aGl0ZXNwYWNlIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IHN0cnRvdWwoKSAqLwomIzQzOwlpZiAoYnVmWzBdICZsdDsgJiMzOTswJiMzOTsgfHwgYnVmWzBdICZndDsgJiMzOTs5JiMzOTspCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZXJybm8gPSAwOwomIzQzOwl2YWwgPSBzdHJ0b3VsKGJ1ZiwgJmFtcDtlbmQsIDEwKTsKJiM0MzsJaWYgKGVycm5vKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJLyogT25seSBhbGxvdyBhIG5ld2xpbmUgYWZ0ZXIgdGhlIG51bWJlciAqLwomIzQzOwlpZiAoKmVuZCA9PSAmIzM5O1xuJiMzOTspCiYjNDM7CQllbmQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwlpZiAoKmVuZCAhPSAmIzM5O1wwJiMzOTspCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJKm51bSA9IHZhbDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsyMV07CiYjNDM7CiYjNDM7CXNwcmludGYoYnVmLCAmIzM0OyVsdSYjMzQ7LCBudW0pOwomIzQzOwlyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTsKJiM0MzsJcmV0dXJuIHJldCA9PSAtRUlOVkFMID8gMCA6IHJldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41MGRhYTgyYzJiMmI0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaApAQCAtMCwwICYjNDM7MSwxMyBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7I2lmbmRlZiBfX01NX0ZJTEVfVVRJTFNfSF9fCiYjNDM7I2RlZmluZSBfX01NX0ZJTEVfVVRJTFNfSF9fCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGRlZi5oJmd0OwomIzQzOwomIzQzO2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTsKJiM0MztpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwomIzQzO2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pOwomIzQzO2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pOwomIzQzO2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7CiYjNDM7CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMKc2ltaWxhcml0eSBpbmRleCA4NyUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYwpyZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMKaW5kZXggZDc5MTdkY2UzYWJhYy4uYWJkOWY3MTgyZjg4ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYwpAQCAtOCwxMiAmIzQzOzgsMTggQEAKICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKIAotI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZmlsZV91dGlscy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgVEhQX1NZU0ZTICYjMzQ7L3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvJiMzNDsKICNkZWZpbmUgTUFYX1NFVFRJTkdTX0RFUFRIIDQKJiM0MzsKJiM0MzsjaWZuZGVmIEFSUkFZX1NJWkUKJiM0MzsjZGVmaW5lIEFSUkFZX1NJWkUoYXJyKSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2V0dGluZ3Nfc3RhY2tbTUFYX1NFVFRJTkdTX0RFUFRIXTsKIHN0YXRpYyBpbnQgc2V0dGluZ3NfaW5kZXg7CiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzYXZlZF9zZXR0aW5nczsKQEAgLTQ4LDYgJiM0Mzs1NCwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNobWVtX2VuYWJsZWRfc3RyaW5nc1tdID0gewogCU5VTEwKIH07CiAKJiM0MztzdGF0aWMgdm9pZCBwcmludF9maWxlX2FjY2Vzc19lcnJvcihjb25zdCBjaGFyICpwYXRoLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcHJpbnRmKCYjMzQ7IyAlczogJXMgKCVkKVxuJiMzNDssIHBhdGgsIHN0cmVycm9yKC1yZXQpLCAtcmV0KTsKJiM0Mzt9CiYjNDM7CiBpbnQgdGhwX3JlYWRfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10pCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKQEAgLTYxLDggJiM0Mzs3Miw5IEBAIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSkKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCX0KIAotCWlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7Ci0JCXBlcnJvcihwYXRoKTsKJiM0MzsJcmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQogCkBAIC0xMDMsMTIgJiM0MzsxMTUsMTcgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbCkKIAkJcHJpbnRmKCYjMzQ7JXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXG4mIzM0OywgX19mdW5jX18pOwogCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJfQotCXdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSAmIzQzOyAxKTsKJiM0MzsJcmV0ID0gd3JpdGVfZmlsZShwYXRoLCB2YWwsIHN0cmxlbih2YWwpICYjNDM7IDEpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiB9CiAKIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsJdW5zaWduZWQgbG9uZyBudW07CiAJaW50IHJldDsKIAogCXJldCA9IHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCBUSFBfU1lTRlMgJiMzNDslcyYjMzQ7LCBuYW1lKTsKQEAgLTExNiw3ICYjNDM7MTMzLDEzIEBAIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpCiAJCXByaW50ZigmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xuJiMzNDssIF9fZnVuY19fKTsKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCX0KLQlyZXR1cm4gcmVhZF9udW0ocGF0aCk7CiYjNDM7CXJldCA9IHJlYWRfbnVtKHBhdGgsICZhbXA7bnVtKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbnVtOwogfQogCiB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pCkBAIC0xMjksNyAmIzQzOzE1MiwxMSBAQCB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pCiAJCXByaW50ZigmIzM0OyVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xuJiMzNDssIF9fZnVuY19fKTsKIAkJZXhpdChFWElUX0ZBSUxVUkUpOwogCX0KLQl3cml0ZV9udW0ocGF0aCwgbnVtKTsKJiM0MzsJcmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KIH0KIAogdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncykKQEAgLTE1Nyw4ICYjNDM7MTg0LDE1IEBAIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpCiAJCS5tYXhfcHRlc19zaGFyZWQgPSB0aHBfcmVhZF9udW0oJiMzNDtraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZCYjMzQ7KSwKIAkJLnBhZ2VzX3RvX3NjYW4gPSB0aHBfcmVhZF9udW0oJiMzNDtraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW4mIzM0OyksCiAJfTsKLQlpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkKLQkJc2V0dGluZ3MtJmd0O3JlYWRfYWhlYWRfa2IgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoKTsKJiM0MzsJaWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHsKJiM0MzsJCWludCByZXQgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLAomIzQzOwkJCQkgICAmYW1wO3NldHRpbmdzLSZndDtyZWFkX2FoZWFkX2tiKTsKJiM0MzsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpOwomIzQzOwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJCX0KJiM0MzsJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE5SX09SREVSUzsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKCEoKDEgJmx0OyZsdDsgaSkgJmFtcDsgb3JkZXJzKSkgewpAQCAtMjA4LDggJiM0MzsyNDIsMTUgQEAgdm9pZCB0aHBfd3JpdGVfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpCiAJdGhwX3dyaXRlX251bSgmIzM0O2todWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkJiMzNDssIGtodWdlcGFnZWQtJmd0O21heF9wdGVzX3NoYXJlZCk7CiAJdGhwX3dyaXRlX251bSgmIzM0O2todWdlcGFnZWQvcGFnZXNfdG9fc2NhbiYjMzQ7LCBraHVnZXBhZ2VkLSZndDtwYWdlc190b19zY2FuKTsKIAotCWlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKQotCQl3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgc2V0dGluZ3MtJmd0O3JlYWRfYWhlYWRfa2IpOwomIzQzOwlpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkgewomIzQzOwkJaW50IHJldCA9IHdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLAomIzQzOwkJCQkgICAgc2V0dGluZ3MtJmd0O3JlYWRfYWhlYWRfa2IpOwomIzQzOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHJldCk7CiYjNDM7CQkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwkJfQomIzQzOwl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgTlJfT1JERVJTOyBpJiM0MzsmIzQzOykgewogCQlpZiAoISgoMSAmbHQ7Jmx0OyBpKSAmYW1wOyBvcmRlcnMpKQpAQCAtMzA3LDggJiM0MzszNDgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX190aHBfc3VwcG9ydGVkX29yZGVycyhib29sIGlzX3NobWVtKQogCQl9CiAKIAkJcmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCQlpZiAocmV0KQotCQkJb3JkZXJzIHw9IDFVTCAmbHQ7Jmx0OyBpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCWlmIChyZXQgIT0gLUVOT0VOVCkgewomIzQzOwkJCQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwomIzQzOwkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CQkJfQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJb3JkZXJzIHw9IDFVTCAmbHQ7Jmx0OyBpOwogCX0KIAogCXJldHVybiBvcmRlcnM7CkBAIC0zODIsOCAmIzQzOzQzMCw3IEBAIGludCBkZXRlY3RfaHVnZXRsYl9wYWdlX3NpemVzKHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwgaW50IG1heCkKIAkJaWYgKHNzY2FuZihlbnRyeS0mZ3Q7ZF9uYW1lLCAmIzM0O2h1Z2VwYWdlcy0lenVrQiYjMzQ7LCAmYW1wO2tiKSAhPSAxKQogCQkJY29udGludWU7CiAJCXNpemVzW2NvdW50JiM0MzsmIzQzO10gPSBrYiAqIDEwMjQ7Ci0JCWtzZnRfcHJpbnRfbXNnKCYjMzQ7W0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXG4mIzM0OywKLQkJCSAgICAgICBrYik7CiYjNDM7CQlwcmludGYoJiMzNDsjIFtJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxuJiMzNDssIGtiKTsKIAl9CiAJY2xvc2VkaXIoZGlyKTsKIAlyZXR1cm4gY291bnQ7CkBAIC00MjUsMjggJiM0Mzs0NzIsNDkgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl9zeXNmc19wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKJiM0MzsJdW5zaWduZWQgbG9uZyBucjsKJiM0MzsJaW50IHJldDsKIAogCWh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwogCi0JcmV0dXJuIHJlYWRfbnVtKHBhdGgpOwomIzQzOwlyZXQgPSByZWFkX251bShwYXRoLCAmYW1wO25yKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbnI7CiB9CiAKIHZvaWQgaHVnZXRsYl9zZXRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKQogewogCWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CWludCByZXQ7CiAKIAlodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCAmIzM0O25yX2h1Z2VwYWdlcyYjMzQ7KTsKIAotCXdyaXRlX251bV9pZ25vcmVfZWludmFsKHBhdGgsIG5yKTsKJiM0MzsJcmV0ID0gd3JpdGVfbnVtX2lnbm9yZV9laW52YWwocGF0aCwgbnIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpOwomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiB9CiAKIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yOwomIzQzOwlpbnQgcmV0OwogCiAJaHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgJiMzNDtmcmVlX2h1Z2VwYWdlcyYjMzQ7KTsKIAotCXJldHVybiByZWFkX251bShwYXRoKTsKJiM0MzsJcmV0ID0gcmVhZF9udW0ocGF0aCwgJmFtcDtucik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7CiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5yOwogfQogCiBzdGF0aWMgYm9vbCBfX2h1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKQpAQCAtNTAyLDcgJiM0Mzs1NzAsOCBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfc2V0dXAodW5zaWduZWQgbG9uZyBuciwgdW5zaWduZWQgbG9uZyBzaXplc1tdLAogCQlyZXR1cm4gMDsKIAogCWlmIChucl9lbmFibGVkICZndDsgbWF4KSB7Ci0JCWtzZnRfcHJpbnRfbXNnKCYjMzQ7ZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxuJiMzNDssIG5yX2VuYWJsZWQsIG1heCk7CiYjNDM7CQlwcmludGYoJiMzNDsjIGRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcbiYjMzQ7LAomIzQzOwkJICAgICAgIG5yX2VuYWJsZWQsIG1heCk7CiAJCW5yX2VuYWJsZWQgPSBtYXg7CiAJfQogCkBAIC01NzQsOCAmIzQzOzY0MywxMCBAQCBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCh2b2lkKQogCiBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX3NpZ2hhbmRsZXIoaW50IHNpZykKIHsKJiM0MzsJKHZvaWQpc2lnOwomIzQzOwogCS8qIGV4aXQoKSB3aWxsIGludm9rZSB0aGUgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQgaGFuZGxlci4gKi8KLQlleGl0KEtTRlRfRkFJTCk7CiYjNDM7CWV4aXQoRVhJVF9GQUlMVVJFKTsKIH0KIAogdm9pZCBodWdlcGFnZV9zYXZlX3NldHRpbmdzKGJvb2wgdGhwLCBib29sIGh1Z2V0bGIpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5oIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmgKcmVuYW1lIHRvIHRvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oCmRpZmYgLS1naXQgYS90b29scy9tbS8uZ2l0aWdub3JlIGIvdG9vbHMvbW0vLmdpdGlnbm9yZQppbmRleCAxNDQ2YTY1OWU1NDA4Li4xNTRkNzQwYmUwMmU4IDEwMDY0NAotLS0gYS90b29scy9tbS8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tLy5naXRpZ25vcmUKQEAgLTMsMyAmIzQzOzMsNCBAQCBzbGFiaW5mbwogcGFnZS10eXBlcwogcGFnZV9vd25lcl9zb3J0CiB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdAomIzQzO2d1cF9iZW5jaApkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZQppbmRleCA4NTgxODZhNmVlZmRiLi5mMjBhMzJkOGNjMjJlIDEwMDY0NAotLS0gYS90b29scy9tbS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9NYWtlZmlsZQpAQCAtMywxMyAmIzQzOzMsMTUgQEAKICMKIGluY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlCiAKLUJVSUxEX1RBUkdFVFM9cGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QKJiM0MztCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyCiYjNDM7QlVJTERfVEFSR0VUUyAmIzQzOz0gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoCiBJTlNUQUxMX1RBUkdFVFMgPSAkKEJVSUxEX1RBUkdFVFMpIHRocG1hcHMKIAogTElCX0RJUiA9IC4uL2xpYi9hcGkKIExJQlMgPSAkKExJQl9ESVIpL2xpYmFwaS5hCiYjNDM7R1VQX0JFTkNIX09CSlMgPSBndXBfYmVuY2guYyAuLi9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyAuLi9saWIvbW0vZmlsZV91dGlscy5jCiAKLUNGTEFHUyAmIzQzOz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWQKJiM0MztDRkxBR1MgJiM0Mzs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1JLi4vLi4gLXB0aHJlYWQKIExERkxBR1MgJiM0Mzs9ICQoTElCUykgLXB0aHJlYWQKIAogYWxsOiAkKEJVSUxEX1RBUkdFVFMpCkBAIC0yMiw4ICYjNDM7MjQsMTEgQEAgJChMSUJTKToKICU6ICUuYwogCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkJmx0OyAkKExERkxBR1MpCiAKJiM0MztndXBfYmVuY2g6ICQoR1VQX0JFTkNIX09CSlMpICQoTElCUykKJiM0MzsJJChDQykgJChDRkxBR1MpIC1vICRAICQoR1VQX0JFTkNIX09CSlMpICQoTERGTEFHUykKJiM0MzsKIGNsZWFuOgotCSQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0CiYjNDM7CSQoUk0pIHBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0IGd1cF9iZW5jaAogCW1ha2UgLUMgJChMSUJfRElSKSBjbGVhbgogCiBzYmluZGlyID89IC91c3Ivc2JpbgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuYyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jCnNpbWlsYXJpdHkgaW5kZXggNTAlCnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKcmVuYW1lIHRvIHRvb2xzL21tL2d1cF9iZW5jaC5jCmluZGV4IDNmODQxYTk2Zjg3MDYuLmZmNmU0NjY1NDY4MTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmMKQEAgLTEwLDExICYjNDM7MTAsMTAgQEAKICNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O3B0aHJlYWQuaCZndDsKLSNpbmNsdWRlICZsdDthc3NlcnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDttbS9ndXBfdGVzdC5oJmd0OwotI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDttbS9odWdlcGFnZV9zZXR0aW5ncy5oJmd0OwogCiAjZGVmaW5lIE1CICgxVUwgJmx0OyZsdDsgMjApCiAKQEAgLTM4LDEyICYjNDM7MzcsNiBAQCBzdGF0aWMgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZCkKIAkJcmV0dXJuICYjMzQ7UElOX0ZBU1RfQkVOQ0hNQVJLJiMzNDs7CiAJY2FzZSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLOgogCQlyZXR1cm4gJiMzNDtQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLJiMzNDs7Ci0JY2FzZSBHVVBfQkFTSUNfVEVTVDoKLQkJcmV0dXJuICYjMzQ7R1VQX0JBU0lDX1RFU1QmIzM0OzsKLQljYXNlIFBJTl9CQVNJQ19URVNUOgotCQlyZXR1cm4gJiMzNDtQSU5fQkFTSUNfVEVTVCYjMzQ7OwotCWNhc2UgRFVNUF9VU0VSX1BBR0VTX1RFU1Q6Ci0JCXJldHVybiAmIzM0O0RVTVBfVVNFUl9QQUdFU19URVNUJiMzNDs7CiAJfQogCXJldHVybiAmIzM0O1Vua25vd24gY29tbWFuZCYjMzQ7OwogfQpAQCAtNTMsMzkgJiM0Mzs0NiwyOSBAQCB2b2lkICpndXBfdGhyZWFkKHZvaWQgKmRhdGEpCiAJc3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTsKIAlpbnQgaSwgc3RhdHVzOwogCi0JLyogT25seSByZXBvcnQgdGltaW5nIGluZm9ybWF0aW9uIG9uIHRoZSAqX0JFTkNITUFSSyBjb21tYW5kczogKi8KLQlpZiAoKGNtZCA9PSBQSU5fRkFTVF9CRU5DSE1BUkspIHx8IChjbWQgPT0gR1VQX0ZBU1RfQkVOQ0hNQVJLKSB8fAotCSAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkgewotCQlmb3IgKGkgPSAwOyBpICZsdDsgcmVwZWF0czsgaSYjNDM7JiM0MzspIHsKLQkJCWd1cC5zaXplID0gc2l6ZTsKLQkJCXN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCAmYW1wO2d1cCk7Ci0JCQlpZiAoc3RhdHVzKQotCQkJCWJyZWFrOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcmVwZWF0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWd1cC5zaXplID0gc2l6ZTsKJiM0MzsJCXN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCAmYW1wO2d1cCk7CiYjNDM7CQlpZiAoc3RhdHVzKSB7CiYjNDM7CQkJaW50IGVyciA9IGVycm5vOwogCiAJCQlwdGhyZWFkX211dGV4X2xvY2soJmFtcDtwcmludF9tdXRleCk7Ci0JCQlrc2Z0X3ByaW50X21zZygmIzM0OyVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1cyYjMzQ7LAotCQkJCSAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYywKLQkJCQkgICAgICAgZ3VwLnB1dF9kZWx0YV91c2VjKTsKLQkJCWlmIChndXAuc2l6ZSAhPSBzaXplKQotCQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7LCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpJiMzNDssIGd1cC5zaXplKTsKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7XG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7JXMgaW9jdGwgZmFpbGVkOiAlc1xuJiMzNDssIGNtZF90b19zdHIoY21kKSwKJiM0MzsJCQkJc3RyZXJyb3IoZXJyKSk7CiAJCQlwdGhyZWFkX211dGV4X3VubG9jaygmYW1wO3ByaW50X211dGV4KTsKJiM0MzsJCQlyZXR1cm4gZGF0YTsKIAkJfQotCX0gZWxzZSB7Ci0JCWd1cC5zaXplID0gc2l6ZTsKLQkJc3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsICZhbXA7Z3VwKTsKLQkJaWYgKHN0YXR1cykKLQkJCWdvdG8gcmV0dXJuXzsKIAogCQlwdGhyZWFkX211dGV4X2xvY2soJmFtcDtwcmludF9tdXRleCk7Ci0JCWtzZnRfcHJpbnRfbXNnKCYjMzQ7JXM6IGRvbmVcbiYjMzQ7LCBjbWRfdG9fc3RyKGNtZCkpOwomIzQzOwkJcHJpbnRmKCYjMzQ7JXM6IFRpbWU6IGdldDolbGxkIHB1dDolbGxkIHVzJiMzNDssCiYjNDM7CQkJY21kX3RvX3N0cihjbWQpLCBndXAuZ2V0X2RlbHRhX3VzZWMsCiYjNDM7CQkJZ3VwLnB1dF9kZWx0YV91c2VjKTsKIAkJaWYgKGd1cC5zaXplICE9IHNpemUpCi0JCQlrc2Z0X3ByaW50X21zZygmIzM0O1RydW5jYXRlZCAoc2l6ZTogJWxsZClcbiYjMzQ7LCBndXAuc2l6ZSk7CiYjNDM7CQkJcHJpbnRmKCYjMzQ7LCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpJiMzNDssIGd1cC5zaXplKTsKJiM0MzsJCXByaW50ZigmIzM0O1xuJiMzNDspOwogCQlwdGhyZWFkX211dGV4X3VubG9jaygmYW1wO3ByaW50X211dGV4KTsKIAl9CiAKLXJldHVybl86Ci0Ja3NmdF90ZXN0X3Jlc3VsdCghc3RhdHVzLCAmIzM0O2lvY3RsIHN0YXR1cyAlZFxuJiMzNDssIHN0YXR1cyk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTkzLDM4ICYjNDM7NzYsMjEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTsKIAlpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDsKLQlpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURTsKJiM0MzsJaW50IGZsYWdzID0gTUFQX1BSSVZBVEUsIHN0YXJ0ZWRfdGhyZWFkcyA9IDAsIGV4aXRfc3RhdHVzID0gMTsKIAljaGFyICpmaWxlID0gJiMzNDsvZGV2L3plcm8mIzM0OzsKLQlib29sIGh1Z2V0bGIgPSBmYWxzZTsKJiM0MzsJYm9vbCBodWdldGxiID0gZmFsc2UsIHRocmVhZF9lcnJvciA9IGZhbHNlOwomIzQzOwl2b2lkICp0aHJlYWRfcmVzdWx0OwogCXB0aHJlYWRfdCAqdGlkOwogCWNoYXIgKnA7CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O206cjpuOkY6ZjphYmNqOnRUTFV1d1dTSHB6JiMzNDspKSAhPSAtMSkgewomIzQzOwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAmIzM0O206cjpuOkY6Zjphajp0VEx1d1dTSCYjMzQ7KSkgIT0gLTEpIHsKIAkJc3dpdGNoIChvcHQpIHsKIAkJY2FzZSAmIzM5O2EmIzM5OzoKIAkJCWNtZCA9IFBJTl9GQVNUX0JFTkNITUFSSzsKIAkJCWJyZWFrOwotCQljYXNlICYjMzk7YiYjMzk7OgotCQkJY21kID0gUElOX0JBU0lDX1RFU1Q7Ci0JCQlicmVhazsKIAkJY2FzZSAmIzM5O0wmIzM5OzoKIAkJCWNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7CiAJCQlicmVhazsKLQkJY2FzZSAmIzM5O2MmIzM5OzoKLQkJCWNtZCA9IERVTVBfVVNFUl9QQUdFU19URVNUOwotCQkJLyoKLQkJCSAqIER1bXAgcGFnZSAwIChpbmRleCAxKS4gTWF5IGJlIG92ZXJyaWRkZW4gbGF0ZXIsIGJ5Ci0JCQkgKiB1c2VyJiMzOTtzIG5vbi1vcHRpb24gYXJndW1lbnRzLgotCQkJICoKLQkJCSAqIC53aGljaF9wYWdlcyBpcyB6ZXJvLWJhc2VkLCBzbyB0aGF0IHplcm8gY2FuIG1lYW4gJiMzNDtkbwotCQkJICogbm90aGluZyYjMzQ7LgotCQkJICovCi0JCQlndXAud2hpY2hfcGFnZXNbMF0gPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgJiMzOTtwJiMzOTs6Ci0JCQkvKiB3b3JrcyBvbmx5IHdpdGggRFVNUF9VU0VSX1BBR0VTX1RFU1QgKi8KLQkJCWd1cC50ZXN0X2ZsYWdzIHw9IEdVUF9URVNUX0ZMQUdfRFVNUF9QQUdFU19VU0VfUElOOwotCQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtGJiMzOTs6CiAJCQkvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqLwogCQkJZ3VwLmd1cF9mbGFncyA9IHN0cnRvbChvcHRhcmcsIDAsIDApOwpAQCAtMTQxLDcgJiM0MzsxMDcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWNhc2UgJiMzOTtuJiMzOTs6CiAJCQlucl9wYWdlcyA9IGF0b2kob3B0YXJnKTsKIAkJCWlmIChucl9wYWdlcyAmbHQ7IDApCi0JCQkJbnJfcGFnZXMgPSBzaXplIC8gcHNpemUoKTsKJiM0MzsJCQkJbnJfcGFnZXMgPSBzaXplIC8gZ2V0cGFnZXNpemUoKTsKIAkJCWJyZWFrOwogCQljYXNlICYjMzk7dCYjMzk7OgogCQkJdGhwID0gMTsKQEAgLTE0OSw5ICYjNDM7MTE1LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQljYXNlICYjMzk7VCYjMzk7OgogCQkJdGhwID0gMDsKIAkJCWJyZWFrOwotCQljYXNlICYjMzk7VSYjMzk7OgotCQkJY21kID0gR1VQX0JBU0lDX1RFU1Q7Ci0JCQlicmVhazsKIAkJY2FzZSAmIzM5O3UmIzM5OzoKIAkJCWNtZCA9IEdVUF9GQVNUX0JFTkNITUFSSzsKIAkJCWJyZWFrOwpAQCAtMTczLDUyICYjNDM7MTM2LDQxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWh1Z2V0bGIgPSB0cnVlOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtXcm9uZyBhcmd1bWVudFxuJiMzNDspOwomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O1dyb25nIGFyZ3VtZW50XG4mIzM0Oyk7CiYjNDM7CQkJZXhpdCgxKTsKIAkJfQogCX0KIAotCWlmIChvcHRpbmQgJmx0OyBhcmdjKSB7Ci0JCWludCBleHRyYV9hcmdfY291bnQgPSAwOwotCQkvKgotCQkgKiBGb3IgZXhhbXBsZToKLQkJICoKLQkJICogICAuL2d1cF90ZXN0IC1jIDAgMSAweDEwMDEKLQkJICoKLQkJICogLi4udG8gZHVtcCBwYWdlcyAwLCAxLCBhbmQgNDA5NwotCQkgKi8KLQotCQl3aGlsZSAoKG9wdGluZCAmbHQ7IGFyZ2MpICZhbXA7JmFtcDsKLQkJICAgICAgIChleHRyYV9hcmdfY291bnQgJmx0OyBHVVBfVEVTVF9NQVhfUEFHRVNfVE9fRFVNUCkpIHsKLQkJCS8qCi0JCQkgKiBEbyB0aGUgMS1iYXNlZCBpbmRleGluZyBoZXJlLCBzbyB0aGF0IHRoZSB1c2VyIGNhbgotCQkJICogdXNlIG5vcm1hbCAwLWJhc2VkIGluZGV4aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0JCQkgKi8KLQkJCWxvbmcgcGFnZV9pbmRleCA9IHN0cnRvbChhcmd2W29wdGluZF0sIDAsIDApICYjNDM7IDE7Ci0KLQkJCWd1cC53aGljaF9wYWdlc1tleHRyYV9hcmdfY291bnRdID0gcGFnZV9pbmRleDsKLQkJCWV4dHJhX2FyZ19jb3VudCYjNDM7JiM0Mzs7Ci0JCQlvcHRpbmQmIzQzOyYjNDM7OwotCQl9CiYjNDM7CWlmIChvcHRpbmQgIT0gYXJnYykgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7VW5leHBlY3RlZCBhcmd1bWVudCAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBhcmd2W29wdGluZF0pOwomIzQzOwkJZXhpdCgxKTsKIAl9CiAKLQlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwlpZiAoZ2V0ZXVpZCgpKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XG4mIzM0Oyk7CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiAKIAlpZiAoaHVnZXRsYikgewogCQl1bnNpZ25lZCBsb25nIGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7CiAKLQkJaWYgKCFocF9zaXplKQotCQkJa3NmdF9leGl0X3NraXAoJiMzNDtIdWdlVExCIGlzIHVuYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CQlpZiAoIWhwX3NpemUpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtDb3VsZCBub3QgZGV0ZXJtaW5lIGh1Z2UgcGFnZSBzaXplXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIDE7CiYjNDM7CQl9CiAKIAkJc2l6ZSA9IChzaXplICYjNDM7IGhwX3NpemUgLSAxKSAmYW1wOyB+KGhwX3NpemUgLSAxKTsKLQkJaWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoc2l6ZSAvIGhwX3NpemUpKQotCQkJa3NmdF9leGl0X3NraXAoJiMzNDtOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcbiYjMzQ7KTsKJiM0MzsJCWlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSkgewomIzQzOwkJCWZwcmludGYoc3RkZXJyLCAmIzM0O05vdCBlbm91Z2ggaHVnZSBwYWdlc1xuJiMzNDspOwomIzQzOwkJCXJldHVybiAxOwomIzQzOwkJfQogCX0KIAotCWtzZnRfc2V0X3BsYW4obnRocmVhZHMpOwotCiAJZmlsZWQgPSBvcGVuKGZpbGUsIE9fUkRXUnxPX0NSRUFULCAwNjY0KTsKLQlpZiAoZmlsZWQgJmx0OyAwKQotCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBmaWxlLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwlpZiAoZmlsZWQgJmx0OyAwKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtVbmFibGUgdG8gb3BlbiAlczogJXNcbiYjMzQ7LCBmaWxlLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KIAogCWd1cC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzOwogCWlmICh3cml0ZSkKQEAgLTIyNywyNiAmIzQzOzE3OSwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwogCWlmIChndXBfZmQgPT0gLTEpIHsKIAkJc3dpdGNoIChlcnJubykgewotCQljYXNlIEVBQ0NFUzoKLQkJCWlmIChnZXR1aWQoKSkKLQkJCQlrc2Z0X3ByaW50X21zZygmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcbiYjMzQ7KTsKLQkJCWJyZWFrOwogCQljYXNlIEVOT0VOVDoKIAkJCWlmIChvcGVuZGlyKCYjMzQ7L3N5cy9rZXJuZWwvZGVidWcmIzM0OykgPT0gTlVMTCkKLQkJCQlrc2Z0X3ByaW50X21zZygmIzM0O21vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcbiYjMzQ7KTsKLQkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xuJiMzNDspOwomIzQzOwkJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXG4mIzM0Oyk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7Y2hlY2sgaWYgQ09ORklHX0dVUF9URVNUIGlzIGVuYWJsZWQgaW4ga2VybmVsIGNvbmZpZ1xuJiMzNDspOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlrc2Z0X3ByaW50X21zZygmIzM0O2ZhaWxlZCB0byBvcGVuICVzOiAlc1xuJiMzNDssIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXM6ICVzXG4mIzM0OywgR1VQX1RFU1RfRklMRSwKJiM0MzsJCQkJc3RyZXJyb3IoZXJybm8pKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWtzZnRfdGVzdF9yZXN1bHRfc2tpcCgmIzM0O1BsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcbiYjMzQ7KTsKLQkJa3NmdF9leGl0X3Bhc3MoKTsKJiM0MzsJCWdvdG8gZXJyX2Nsb3NlX2ZpbGVkOwogCX0KIAogCXAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCBmaWxlZCwgMCk7Ci0JaWYgKHAgPT0gTUFQX0ZBSUxFRCkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7bW1hcDogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwlpZiAocCA9PSBNQVBfRkFJTEVEKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttbWFwOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQlnb3RvIGVycl9jbG9zZV9ndXBfZmQ7CiYjNDM7CX0KIAlndXAuYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7CiAKIAlpZiAodGhwID09IDEpCkBAIC0yNTUsMjEgJiM0MzsyMDUsNDMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQltYWR2aXNlKHAsIHNpemUsIE1BRFZfTk9IVUdFUEFHRSk7CiAKIAkvKiBGYXVsdCB0aGVtIGluIGhlcmUsIGZyb20gdXNlciBzcGFjZS4gKi8KLQlmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCAmbHQ7IGd1cC5hZGRyICYjNDM7IHNpemU7IHAgJiM0Mzs9IHBzaXplKCkpCiYjNDM7CWZvciAoOyAodW5zaWduZWQgbG9uZylwICZsdDsgZ3VwLmFkZHIgJiM0Mzsgc2l6ZTsgcCAmIzQzOz0gZ2V0cGFnZXNpemUoKSkKIAkJcFswXSA9IDA7CiAKIAl0aWQgPSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfdCkgKiBudGhyZWFkcyk7Ci0JYXNzZXJ0KHRpZCk7CiYjNDM7CWlmICghdGlkKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgJWQgdGhyZWFkczogJXNcbiYjMzQ7LAomIzQzOwkJCW50aHJlYWRzLCBzdHJlcnJvcihlcnJubykpOwomIzQzOwkJZ290byBlcnJfdW5tYXA7CiYjNDM7CX0KJiM0MzsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7CiAJCXJldCA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGlkW2ldLCBOVUxMLCBndXBfdGhyZWFkLCAmYW1wO2d1cCk7Ci0JCWFzc2VydChyZXQgPT0gMCk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7cHRocmVhZF9jcmVhdGUgZmFpbGVkOiAlc1xuJiMzNDssIHN0cmVycm9yKHJldCkpOwomIzQzOwkJCXRocmVhZF9lcnJvciA9IHRydWU7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlzdGFydGVkX3RocmVhZHMmIzQzOyYjNDM7OwogCX0KLQlmb3IgKGkgPSAwOyBpICZsdDsgbnRocmVhZHM7IGkmIzQzOyYjNDM7KSB7Ci0JCXJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpOwotCQlhc3NlcnQocmV0ID09IDApOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc3RhcnRlZF90aHJlYWRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgJmFtcDt0aHJlYWRfcmVzdWx0KTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtwdGhyZWFkX2pvaW4gZmFpbGVkOiAlc1xuJiMzNDssIHN0cmVycm9yKHJldCkpOwomIzQzOwkJCXRocmVhZF9lcnJvciA9IHRydWU7CiYjNDM7CQl9IGVsc2UgaWYgKHRocmVhZF9yZXN1bHQpCiYjNDM7CQkJdGhyZWFkX2Vycm9yID0gdHJ1ZTsKIAl9CiAKIAlmcmVlKHRpZCk7Ci0KLQlrc2Z0X2V4aXRfcGFzcygpOwomIzQzOwlpZiAoIXRocmVhZF9lcnJvcikKJiM0MzsJCWV4aXRfc3RhdHVzID0gMDsKJiM0MzsKJiM0MztlcnJfdW5tYXA6CiYjNDM7CW11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTsKJiM0MztlcnJfY2xvc2VfZ3VwX2ZkOgomIzQzOwljbG9zZShndXBfZmQpOwomIzQzO2Vycl9jbG9zZV9maWxlZDoKJiM0MzsJY2xvc2UoZmlsZWQpOwomIzQzOwlyZXR1cm4gZXhpdF9zdGF0dXM7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCmluZGV4IDJkNTM2NjE5NmUzMDkuLjljMDM2MjRmZDI5MzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCkBAIC0zNyw3ICYjNDM7MzcsOCBAQCBlbmRpZgogIyBMRExJQlMuCiBNQUtFRkxBR1MgJiM0Mzs9IC0tbm8tYnVpbHRpbi1ydWxlcwogCi1DRkxBR1MgPSAtV2FsbCAtTzIgLUkgJCh0b3Bfc3JjZGlyKSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKQomIzQzO0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliCiYjNDM7Q0ZMQUdTICYjNDM7PSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKQogQ0ZMQUdTICYjNDM7PSAtV3VucmVhY2hhYmxlLWNvZGUKIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbQogCkBAIC01Nyw4ICYjNDM7NTgsOCBAQCBlbmRpZgogCiBURVNUX0dFTl9GSUxFUyA9IGNvdwogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGNvbXBhY3Rpb25fdGVzdAomIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXAKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXBfbG9uZ3Rlcm0KLVRFU1RfR0VOX0ZJTEVTICYjNDM7PSBndXBfdGVzdAogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGhtbS10ZXN0cwogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGItbWFkdmlzZQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGItbW1hcApAQCAtMTg3LDggJiM0MzsxODgsMTAgQEAgVEVTVF9GSUxFUyAmIzQzOz0gd3JpdGVfaHVnZXRsYl9tZW1vcnkuc2gKIAogaW5jbHVkZSAuLi9saWIubWsKIAotJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jCi0kKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jIGh1Z2VwYWdlX3NldHRpbmdzLmMKJiM0MzskKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXAomIzQzOwkJICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jCiYjNDM7JChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFwKJiM0MzsJCSAgICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYwogCiAkKE9VVFBVVCkvdWZmZC1zdHJlc3M6IHVmZmQtY29tbW9uLmMKICQoT1VUUFVUKS91ZmZkLXVuaXQtdGVzdHM6IHVmZmQtY29tbW9uLmMKQEAgLTIxNyw3ICYjNDM7MjIwLDcgQEAgJChCSU5BUklFU18zMik6IENGTEFHUyAmIzQzOz0gLW0zMiAtbXhzYXZlCiAkKEJJTkFSSUVTXzMyKTogTERMSUJTICYjNDM7PSAtbHJ0IC1sZGwgLWxtCiAkKEJJTkFSSUVTXzMyKTogJChPVVRQVVQpLyVfMzI6ICUuYwogCSQoY2FsbCBtc2csQ0MsLCRAKQotCSQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEAKJiM0MzsJJChRKSQoQ0MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJF4gJChMRExJQlMpIC1vICRACiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtMzIsJCh0KSkpKQogZW5kaWYKIApAQCAtMjI2LDcgJiM0MzsyMjksNyBAQCAkKEJJTkFSSUVTXzY0KTogQ0ZMQUdTICYjNDM7PSAtbTY0IC1teHNhdmUKICQoQklOQVJJRVNfNjQpOiBMRExJQlMgJiM0Mzs9IC1scnQgLWxkbAogJChCSU5BUklFU182NCk6ICQoT1VUUFVUKS8lXzY0OiAlLmMKIAkkKGNhbGwgbXNnLENDLCwkQCkKLQkkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRACiYjNDM7CSQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQAogJChmb3JlYWNoIHQsJChWTVRBUkdFVFMpLCQoZXZhbCAkKGNhbGwgZ2VuLXRhcmdldC1ydWxlLTY0LCQodCkpKSkKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKaW5kZXggMzBkNGFjZTcxNTVhZS4uYjNmNTM3NzExOWNiOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMKQEAgLTE1LDkgJiM0MzsxNSw5IEBACiAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIE1BUF9TSVpFX01CCTEwMAogI2RlZmluZSBNQVBfU0laRQkoTUFQX1NJWkVfTUIgKiAxMDI0ICogMTAyNCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKaW5kZXggOGFhNTI0OWQ5YmVmNi4uMzI2NGE4Mjg1NzViZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKQEAgLTI5LDcgJiM0MzsyOSw2IEBACiAjaW5jbHVkZSAmIzM0Oy4uLy4uLy4uLy4uL21tL2d1cF90ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplOwogc3RhdGljIGludCBwYWdlbWFwX2ZkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYwppbmRleCAxOTYwNjM1YTk1M2ViLi5lNDY2MGJmODliNjI0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuYwpAQCAtMjUsNyAmIzQzOzI1LDYgQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogdWludDY0X3QgcGFnZV9zaXplOwogdWludDY0X3QgcG1kX3BhZ2VzaXplOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jCmluZGV4IDVjOGVjM2NhNzVkN2QuLmFmNWNkOWIzMDMzOTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMKQEAgLTIxLDcgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3Vpby5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2luY2x1ZGUgJiMzNDsuLi9waWRmZC9waWRmZC5oJiMzNDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zMWFlMzhlMDkxMzZkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMKQEAgLTAsMCAmIzQzOzEsMjYzIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyAvLyBVc2UgbGw2NAomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZGlyZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9pb2N0bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDttbS9ndXBfdGVzdC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTUIgKDFVTCAmbHQ7Jmx0OyAyMCkKJiM0MzsKJiM0MzsvKiBKdXN0IHRoZSBmbGFncyB3ZSBuZWVkLCBjb3BpZWQgZnJvbSB0aGUga2VybmVsIGludGVybmFscy4gKi8KJiM0MzsjZGVmaW5lIEZPTExfV1JJVEUJMHgwMQkvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi8KJiM0MzsKJiM0MzsvKiBQYWdlIGNvdW50cyBleGVyY2lzaW5nIHNpbmdsZSwgVEhQLWJhdGNoLCBwYXJ0aWFsLCBhbmQgZnVsbC1tYXBwaW5nIEdVUC4gKi8KJiM0MztzdGF0aWMgY29uc3QgaW50IG5yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07CiYjNDM7CiYjNDM7I2RlZmluZSBHVVBfVEVTVF9GSUxFICYjMzQ7L3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QmIzM0OwomIzQzOyNkZWZpbmUgTlJfSFVHRV9QQUdFUyAyCiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgaHBfc2l6ZTsKJiM0MzsKJiM0MztGSVhUVVJFKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJaW50IGd1cF9mZDsKJiM0MzsJY2hhciAqYWRkcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJYm9vbCB0aHA7CiYjNDM7CWJvb2wgaHVnZXRsYjsKJiM0MzsJYm9vbCB3cml0ZTsKJiM0MzsJYm9vbCBzaGFyZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlKQomIzQzO3sKJiM0MzsJLnRocCA9IGZhbHNlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWQpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gZmFsc2UsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocCkKJiM0Mzt7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWRfdGhwKQomIzQzO3sKJiM0MzsJLnRocCA9IHRydWUsCiYjNDM7CS5odWdldGxiID0gZmFsc2UsCiYjNDM7CS53cml0ZSA9IGZhbHNlLAomIzQzOwkuc2hhcmVkID0gZmFsc2UsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IGZhbHNlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSBmYWxzZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZSkKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gdHJ1ZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZCkKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSBmYWxzZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSB0cnVlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocCkKJiM0Mzt7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX3RocCkKJiM0Mzt7CiYjNDM7CS50aHAgPSB0cnVlLAomIzQzOwkuaHVnZXRsYiA9IGZhbHNlLAomIzQzOwkud3JpdGUgPSBmYWxzZSwKJiM0MzsJLnNoYXJlZCA9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYikKJiM0Mzt7CiYjNDM7CS50aHAgPSBmYWxzZSwKJiM0MzsJLmh1Z2V0bGIgPSB0cnVlLAomIzQzOwkud3JpdGUgPSB0cnVlLAomIzQzOwkuc2hhcmVkID0gdHJ1ZSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX2h1Z2V0bGIpCiYjNDM7ewomIzQzOwkudGhwID0gZmFsc2UsCiYjNDM7CS5odWdldGxiID0gdHJ1ZSwKJiM0MzsJLndyaXRlID0gZmFsc2UsCiYjNDM7CS5zaGFyZWQgPSB0cnVlLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUChndXBfdGVzdCkKJiM0Mzt7CiYjNDM7CWludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTOwomIzQzOwljaGFyICpwOwomIzQzOwomIzQzOwlzZWxmLSZndDtzaXplID0gMTI4ICogTUI7CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDtodWdldGxiKSB7CiYjNDM7CQlpZiAoIWhwX3NpemUpCiYjNDM7CQkJU0tJUChyZXR1cm4sICYjMzQ7SHVnZVRMQiBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CQlpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSAmbHQ7IE5SX0hVR0VfUEFHRVMpCiYjNDM7CQkJU0tJUChyZXR1cm4sICYjMzQ7Tm90IGVub3VnaCBodWdlIHBhZ2VzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CQlzZWxmLSZndDtzaXplID0gTlJfSFVHRV9QQUdFUyAqIGhwX3NpemU7CiYjNDM7CQltbWFwX2ZsYWdzIHw9IE1BUF9IVUdFVExCOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDtzaGFyZWQpCiYjNDM7CQltbWFwX2ZsYWdzID0gKG1tYXBfZmxhZ3MgJmFtcDsgfk1BUF9QUklWQVRFKSB8IE1BUF9TSEFSRUQ7CiYjNDM7CiYjNDM7CS8qIGd1cF9mZCBoYXMgdG8gYmUgJmd0Oz0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqLwomIzQzOwlzZWxmLSZndDtndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7CiYjNDM7CUFTU0VSVF9HRShzZWxmLSZndDtndXBfZmQsIDApOwomIzQzOwomIzQzOwlzZWxmLSZndDthZGRyID0gbW1hcChOVUxMLCBzZWxmLSZndDtzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJCSAgbW1hcF9mbGFncywgLTEsIDApOwomIzQzOwomIzQzOwlBU1NFUlRfTkUoc2VsZi0mZ3Q7YWRkciwgTUFQX0ZBSUxFRCkgewomIzQzOwkJaW50IGVyciA9IGVycm5vOwomIzQzOwomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7Z3VwX2ZkKTsKJiM0MzsJCVRIX0xPRygmIzM0O21tYXAgZmFpbGVkOiAlcyYjMzQ7LCBzdHJlcnJvcihlcnIpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmFyaWFudC0mZ3Q7dGhwKQomIzQzOwkJbWFkdmlzZShzZWxmLSZndDthZGRyLCBzZWxmLSZndDtzaXplLCBNQURWX0hVR0VQQUdFKTsKJiM0MzsJZWxzZSBpZiAoIXZhcmlhbnQtJmd0O2h1Z2V0bGIpCiYjNDM7CQltYWR2aXNlKHNlbGYtJmd0O2FkZHIsIHNlbGYtJmd0O3NpemUsIE1BRFZfTk9IVUdFUEFHRSk7CiYjNDM7CiYjNDM7CWZvciAocCA9IHNlbGYtJmd0O2FkZHI7ICh1bnNpZ25lZCBsb25nKXAgJmx0OyAodW5zaWduZWQgbG9uZylzZWxmLSZndDthZGRyCiYjNDM7CQkJJiM0Mzsgc2VsZi0mZ3Q7c2l6ZTsgcCAmIzQzOz0gcHNpemUoKSkKJiM0MzsJCXBbMF0gPSAwOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKGd1cF90ZXN0KQomIzQzO3sKJiM0MzsJbXVubWFwKHNlbGYtJmd0O2FkZHIsIHNlbGYtJmd0O3NpemUpOwomIzQzOwljbG9zZShzZWxmLSZndDtndXBfZmQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydW5fZ3VwX2NtZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsCiYjNDM7CQkJIEZJWFRVUkVfREFUQShndXBfdGVzdCkgKnNlbGYsCiYjNDM7CQkJIGNvbnN0IEZJWFRVUkVfVkFSSUFOVChndXBfdGVzdCkgKnZhcmlhbnQsCiYjNDM7CQkJIHVuc2lnbmVkIGxvbmcgY29tbWFuZCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgKGludClBUlJBWV9TSVpFKG5yX3BhZ2VzX2xpc3QpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGd1cF90ZXN0IGd1cCA9IHsKJiM0MzsJCQkuYWRkciA9ICh1bnNpZ25lZCBsb25nKXNlbGYtJmd0O2FkZHIsCiYjNDM7CQkJLnNpemUgPSBzZWxmLSZndDtzaXplLAomIzQzOwkJCS5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gJmx0OyAwID8KJiM0MzsJCQkJc2VsZi0mZ3Q7c2l6ZSAvIHBzaXplKCkgOiBucl9wYWdlc19saXN0W2ldLAomIzQzOwkJCS5ndXBfZmxhZ3MgPSB2YXJpYW50LSZndDt3cml0ZSA/IEZPTExfV1JJVEUgOiAwLAomIzQzOwkJfTsKJiM0MzsKJiM0MzsJCVRIX0xPRygmIzM0O25yX3BhZ2VzX3Blcl9jYWxsPSV1JiMzNDssIGd1cC5ucl9wYWdlc19wZXJfY2FsbCk7CiYjNDM7CQlBU1NFUlRfRVEoaW9jdGwoc2VsZi0mZ3Q7Z3VwX2ZkLCBjb21tYW5kLCAmYW1wO2d1cCksIDApOwomIzQzOwkJQVNTRVJUX0VRKGd1cC5zaXplLCBzZWxmLSZndDtzaXplKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzKQomIzQzO3sKJiM0MzsJcnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfQkFTSUNfVEVTVCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXMpCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9CQVNJQ19URVNUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGd1cF90ZXN0LCBnZXRfdXNlcl9wYWdlc19mYXN0KQomIzQzO3sKJiM0MzsJcnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfRkFTVF9CRU5DSE1BUkspOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2Zhc3QpCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9GQVNUX0JFTkNITUFSSyk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfbG9uZ3Rlcm0pCiYjNDM7ewomIzQzOwlydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9MT05HVEVSTV9CRU5DSE1BUkspOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpOwomIzQzOwlpZiAoZmQgPT0gLTEpIHsKJiM0MzsJCWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CQlpZiAoZXJybm8gPT0gRUFDQ0VTKQomIzQzOwkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7UGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxuJiMzNDspOwomIzQzOwkJaWYgKGVycm5vID09IEVOT0VOVCkgewomIzQzOwkJCURJUiAqZGVidWdmcyA9IG9wZW5kaXIoJiMzNDsvc3lzL2tlcm5lbC9kZWJ1ZyYjMzQ7KTsKJiM0MzsKJiM0MzsJCQlpZiAoIWRlYnVnZnMpCiYjNDM7CQkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7TW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xuJiMzNDspOwomIzQzOwkJCWNsb3NlZGlyKGRlYnVnZnMpOwomIzQzOwkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7Q2hlY2sgQ09ORklHX0dVUF9URVNUIGluIGtlcm5lbCBjb25maWdcbiYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byBvcGVuICVzOiAlc1xuJiMzNDssIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CX0KJiM0MzsJY2xvc2UoZmQpOwomIzQzOwomIzQzOwlocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpOwomIzQzOwlpZiAoaHBfc2l6ZSkKJiM0MzsJCWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChOUl9IVUdFX1BBR0VTKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwppbmRleCA1MTBkZTkzYmU2ODE0Li5jOWQ4YjQ0OTEyNjM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICYjMzQ7Li4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7CiBzdGF0aWMgaW50IG5yX2h1Z2V0bGJzaXplczsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKaW5kZXggZTI2NDJlY2EwZDAyYi4uZmExYTY1MTk2M2ZkMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKQEAgLTEwLDkgJiM0MzsxMCw2IEBACiAgKiBidWdzLgogICovCiAKLSNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwotCiAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDtmY250bC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CkBAIC0zMyw2ICYjNDM7MzAsOSBAQAogI2luY2x1ZGUgJmx0O3N5cy9ldmVudGZkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmQuaCZndDsKICNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKIAogLyoKICAqIFRoaXMgaXMgYSBwcml2YXRlIFVBUEkgdG8gdGhlIGtlcm5lbCB0ZXN0IG1vZHVsZSBzbyBpdCBpc24mIzM5O3QgZXhwb3J0ZWQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKaW5kZXggNTU1YjRiM2QxNDMwNy4uNTdjZjc5MGNhNDc4ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmMKQEAgLTE0LDcgJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBNSU5fRlJFRV9QQUdFUwkyMAogI2RlZmluZSBOUl9IVUdFX1BBR0VTCTEwCS8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCmluZGV4IDBmMmFhZDFiN2RiZDYuLmE0NThiZWNmNTgzMjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jCkBAIC0xOCw3ICYjNDM7MTgsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWZkLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpCiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYwppbmRleCBlZDNkOTJlODYyZDg3Li45YjcyNGFmNjZlOTM4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMKQEAgLTI2LDcgJiM0MzsyNiw2IEBACiAjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIERFRkFVTFRfTEVOR1RIX01CIDEwVUwKICNkZWZpbmUgTUJfVE9fQllURVMoeCkgKHggKiAxMDI0ICogMTAyNCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jCmluZGV4IDNmZjdmMDYyYjdlYjQuLmY0NTE0ZGE0OWUxZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uYwpAQCAtMjksNyAmIzQzOzI5LDYgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYwppbmRleCA0YWY5ZDNkYjdiNWI2Li5kOTU2NTIxOTM3OGFhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmMKQEAgLTIyLDEwICYjNDM7MjIsMTAgQEAKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9zdGF0ZnMuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjaWZuZGVmIE1BRFZfU09GVF9PRkZMSU5FCiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMQpAQCAtODUsOCAmIzQzOzg1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgb3JpZ19lbmFibGVfc29mdF9vZmZsaW5lID0gLTFVTDsKIAogLyoKICAqIFJ1bnMgZnJvbSBhbiBhdGV4aXQgaGFuZGxlciwgc28gaXQgbXVzdCBub3QgY2FsbCBhbnl0aGluZyB0aGF0Ci0gKiBleGl0cyBvbiBmYWlsdXJlOiB3cml0ZV9udW0oKSB3b3VsZCByZS1lbnRlciBleGl0KCkgdGhyb3VnaAotICoga3NmdF9leGl0X2ZhaWxfbXNnKCkuCiYjNDM7ICogZXhpdHMgb24gZmFpbHVyZS4KICAqLwogc3RhdGljIHZvaWQgcmVzdG9yZV9lbmFibGVfc29mdF9vZmZsaW5lKHZvaWQpCiB7CkBAIC0xNTIsNyAmIzQzOzE1MSwxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvZnRfb2ZmbGluZV9jb21tb24oaW50IGVuYWJsZV9zb2Z0X29mZmxpbmUpCiAJaHVnZXBhZ2VzaXplX2tiID0gZmlsZV9zdGF0LmZfYnNpemUgLyAxMDI0OwogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7SHVnZXBhZ2VzaXplIGlzICVsZGtCXG4mIzM0OywgaHVnZXBhZ2VzaXplX2tiKTsKIAotCXdyaXRlX251bShFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIGVuYWJsZV9zb2Z0X29mZmxpbmUpOwomIzQzOwlyZXQgPSB3cml0ZV9udW0oRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRILCBlbmFibGVfc29mdF9vZmZsaW5lKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byB3cml0ZSB0byAlczogJXNcbiYjMzQ7LAomIzQzOwkJCQkgICBFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIHN0cmVycm9yKC1yZXQpKTsKIAogCW5yX2h1Z2VwYWdlc19iZWZvcmUgPSBodWdldGxiX25yX2RlZmF1bHRfcGFnZXMoKTsKIApAQCAtMTg5LDYgJiM0MzsxOTEsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvZnRfb2ZmbGluZV9jb21tb24oaW50IGVuYWJsZV9zb2Z0X29mZmxpbmUpCiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKJiM0MzsJaW50IHJldDsKJiM0MzsKIAlrc2Z0X3ByaW50X2hlYWRlcigpOwogCiAJaWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoOCkpCkBAIC0xOTYsNyAmIzQzOzIwMCwxMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKIAlrc2Z0X3NldF9wbGFuKDIpOwogCi0Jb3JpZ19lbmFibGVfc29mdF9vZmZsaW5lID0gcmVhZF9udW0oRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRIKTsKJiM0MzsJcmV0ID0gcmVhZF9udW0oRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRILCAmYW1wO29yaWdfZW5hYmxlX3NvZnRfb2ZmbGluZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gcmVhZCAlczogJXNcbiYjMzQ7LAomIzQzOwkJCQkgICBFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIHN0cmVycm9yKC1yZXQpKTsKJiM0MzsKIAlhdGV4aXQocmVzdG9yZV9lbmFibGVfc29mdF9vZmZsaW5lKTsKIAogCXRlc3Rfc29mdF9vZmZsaW5lX2NvbW1vbigxKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jCmluZGV4IGZiNDYwMDU3MGUxMzEuLjk0OTU5NzRlY2NiZWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uYwpAQCAtMjAsNyAmIzQzOzIwLDYgQEAKICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjaWZuZGVmIFNUQVRYX0RJT0FMSUdOCiAjZGVmaW5lIFNUQVRYX0RJT0FMSUdOCQkweDAwMDAyMDAwVQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwppbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYwpAQCAtMTAsNyAmIzQzOzEwLDYgQEAKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMAogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMKaW5kZXggZjk0NTQ5ZWZjYzZmZi4uMjUzMmE0MmI5OGRmZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuYwpAQCAtMjUsNyAmIzQzOzI1LDYgQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogI2RlZmluZSBJTkxPT1BfSVRFUiAxMDAKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCmluZGV4IGY4MjY3M2Y1ZjZiNDcuLjUyNTEwOGNhY2U1NGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMKQEAgLTIyLDcgJiM0MzsyMiw2IEBACiAjaW5jbHVkZSAmIzM0O2xpbnV4L21hZ2ljLmgmIzM0OwogCiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIEJBU0VfQUREUiAoKHZvaWQgKikoMVVMICZsdDsmbHQ7IDMwKSkKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplOwpAQCAtMTIyLDYgJiM0MzsxMjEsNyBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKQogCWNoYXIgYnVmWzEgJmx0OyZsdDsgMTBdOwogCWNoYXIgcGF0aFtQQVRIX01BWF07CiAJY2hhciAqc3RyLCAqZW5kOwomIzQzOwlpbnQgcmV0OwogCiAJZmluZm8uZGlyID0gZGlyOwogCWlmIChzdGF0KGZpbmZvLmRpciwgJmFtcDtwYXRoX3N0YXQpKQpAQCAtMTQyLDggJiM0MzsxNDIsOSBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKQogCQkgICAgIG1ham9yKHBhdGhfc3RhdC5zdF9kZXYpLCBtaW5vcihwYXRoX3N0YXQuc3RfZGV2KSkKIAkgICAgJmd0Oz0gc2l6ZW9mKHBhdGgpKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcbiYjMzQ7LCBfX2Z1bmNfXyk7Ci0JaWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpCi0JCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O3JlYWRfZmlsZSh1ZXZlbnQpJiMzNDspOwomIzQzOwlyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkX2ZpbGUoJXMpOiAlc1xuJiMzNDssIHBhdGgsIHN0cmVycm9yKC1yZXQpKTsKIAlpZiAoc3Ryc3RyKGJ1ZiwgJiMzNDtERVZUWVBFPWRpc2smIzM0OykpIHsKIAkJLyogRm91bmQgaXQgKi8KIAkJaWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsCkBAIC0zMjQsNyAmIzQzOzMyNSw3IEBAIHN0YXRpYyB2b2lkICpmaWxlX3NldHVwX2FyZWFfY29tbW9uKGludCBucl9ocGFnZXMsIGVudW0gZmlsZV9zZXR1cF9vcHMgc2V0dXApCiB7CiAJY29uc3QgaW50IG9wZW5fb3B0ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBPX1JET05MWSA6IE9fUkRXUjsKIAljb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0JaW50IGZkOwomIzQzOwlpbnQgZmQsIHJldDsKIAl2b2lkICpwOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIApAQCAtMzYyLDcgJiM0MzszNjMsMTEgQEAgc3RhdGljIHZvaWQgKmZpbGVfc2V0dXBfYXJlYV9jb21tb24oaW50IG5yX2hwYWdlcywgZW51bSBmaWxlX3NldHVwX29wcyBzZXR1cCkKIAkJa3NmdF9leGl0X2ZhaWxfcGVycm9yKCYjMzQ7bW1hcCgpJiMzNDspOwogCiAJLyogRHJvcCBwYWdlIGNhY2hlICovCi0Jd3JpdGVfZmlsZSgmIzM0Oy9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcyYjMzQ7LCAmIzM0OzMmIzM0OywgMik7CiYjNDM7CXJldCA9IHdyaXRlX2ZpbGUoJiMzNDsvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMmIzM0OywgJiMzNDszJiMzNDssIDIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7d3JpdGVfZmlsZShkcm9wX2NhY2hlcyk6ICVzXG4mIzM0OywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCkpOwomIzQzOwogCXN1Y2Nlc3MoJiMzNDtPSyYjMzQ7KTsKIAlyZXR1cm4gcDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKaW5kZXggNWZkNzc5MmEwZDQ3OS4uNjcxMWY0YzYxMzcxMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKQEAgLTE1LDcgJiM0MzsxNSw2IEBACiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICZsdDtpbmNsdWRlL3Zkc28vdGltZTY0LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIEtTTV9TWVNGU19QQVRIICYjMzQ7L3N5cy9rZXJuZWwvbW0va3NtLyYjMzQ7CiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMKaW5kZXggZjE5ZDUzYzY5NTc2NC4uYTM1ZTJiNTdlMDViMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMKQEAgLTUsNyAmIzQzOzUsNiBAQAogICovCiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwpAQCAtMTYsNiAmIzQzOzE1LDcgQEAKICNpbmNsdWRlICZsdDtzeXMvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtzaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CiYjNDM7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAKICNkZWZpbmUgVFdPTUVHCQkoMiZsdDsmbHQ7MjApCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMKaW5kZXggZDlhNGZiNzgyZWNmZS4uMDM4OThiNGY2Y2RhYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYwpAQCAtMjQsNyAmIzQzOzI0LDYgQEAKIAogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFBBR0VNQVBfQklUU19BTEwJCShQQUdFX0lTX1dQQUxMT1dFRCB8IFBBR0VfSVNfV1JJVFRFTiB8CVwKIAkJCQkJIFBBR0VfSVNfRklMRSB8IFBBR0VfSVNfUFJFU0VOVCB8CVwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jCmluZGV4IDgyYzZlOTZlYTZlYjMuLmY5ZWMxNDA4YTZlMzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYwpAQCAtMTQsNyAmIzQzOzE0LDYgQEAKICNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKIAogI2lmbmRlZiBQUl9USFBfRElTQUJMRV9FWENFUFRfQURWSVNFRApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwppbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwpAQCAtNDUsOCAmIzQzOzQ1LDggQEAKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvcHRyYWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c2V0am1wLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2h1Z2VwYWdlX3NldHRpbmdzLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3BrZXktaGVscGVycy5oJiMzNDsKIAogdTY0IHNoYWRvd19wa2V5X3JlZzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKaW5kZXggZDA5ZjlmNmEzODRlZS4uYWUwYWI1ZWZhYmFlNiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKQEAgLTEzMCwzMCAmIzQzOzEzMCw2IEBAIHRlc3Rfc2VsZWN0ZWQoKSB7CiAJZmkKIH0KIAotcnVuX2d1cF9tYXRyaXgoKSB7Ci0gICAgIyAtdDogdGhwPW9uLCAtVDogdGhwPW9mZiwgLUg6IGh1Z2V0bGI9b24KLSAgICBsb2NhbCBodWdldGxiX21iPTI1NgotCi0gICAgZm9yIGh1Z2UgaW4gLXQgLVQgJiMzNDstSCAtbSAkaHVnZXRsYl9tYiYjMzQ7OyBkbwotICAgICAgICAjIC11OiBndXAtZmFzdCwgLVU6IGd1cC1iYXNpYywgLWE6IHBpbi1mYXN0LCAtYjogcGluLWJhc2ljLCAtTDogcGluLWxvbmd0ZXJtCi0gICAgICAgIGZvciB0ZXN0X2NtZCBpbiAtdSAtVSAtYSAtYiAtTDsgZG8KLSAgICAgICAgICAgICMgLXc6IHdyaXRlPTEsIC1XOiB3cml0ZT0wCi0gICAgICAgICAgICBmb3Igd3JpdGUgaW4gLXcgLVc7IGRvCi0gICAgICAgICAgICAgICAgIyAtUzogc2hhcmVkCi0gICAgICAgICAgICAgICAgZm9yIHNoYXJlIGluIC1TICYjMzQ7ICYjMzQ7OyBkbwotICAgICAgICAgICAgICAgICAgICAjIC1uOiBIb3cgbWFueSBwYWdlcyB0byBmZXRjaCB0b2dldGhlcj8gIDUxMiBpcyBzcGVjaWFsCi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCYjMzk7cyBkZWZhdWx0IHRocCBzaXplIChvciAyTSBvbiB4ODYpLCAxMjMgdG8KLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm0KLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiAmIzM0Oy1uIDEmIzM0OyAmIzM0Oy1uIDUxMiYjMzQ7ICYjMzQ7LW4gMTIzJiMzNDsgJiMzNDstbiAtMSYjMzQ7OyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHVnZSAkdGVzdF9jbWQgJHdyaXRlICRzaGFyZSAkbnVtCi0gICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICBkb25lCi0gICAgICAgIGRvbmUKLSAgICBkb25lCi19Ci0KICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXMKIEFSQ0g2NFNUUj0mIzM0O2FybTY0IG1pcHM2NCBwYXJpc2M2NCBwcGM2NCBwcGM2NGxlIHJpc2N2NjQgczM5MHggc3BhcmM2NCB4ODZfNjQmIzM0OwogaWYgWyAteiAmIzM0OyRBUkNIJiMzNDsgXTsgdGhlbgpAQCAtMjc1LDE4ICYjNDM7MjUxLDcgQEAgZmkKIAogQ0FURUdPUlk9JiMzNDttbWFwJiMzNDsgcnVuX3Rlc3QgLi9tYXBfZml4ZWRfbm9yZXBsYWNlCiAKLWlmICRSVU5fQUxMOyB0aGVuCi0gICAgcnVuX2d1cF9tYXRyaXgKLWVsc2UKLSAgICAjIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmsKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAxCi0gICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gLTEKLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmsKLSAgICBDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAxCi0gICAgQ0FURUdPUlk9JiMzNDtndXBfdGVzdCYjMzQ7IHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gLTEKLWZpCi0jIER1bXAgcGFnZXMgMCwgMTksIGFuZCA0MDk2LCB1c2luZyBwaW5fdXNlcl9wYWdlczoKLUNBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cF90ZXN0IC1jdCAtRiAweDEgMCAxOSAweDEwMDAKJiM0MztDQVRFR09SWT0mIzM0O2d1cF90ZXN0JiMzNDsgcnVuX3Rlc3QgLi9ndXAKIENBVEVHT1JZPSYjMzQ7Z3VwX3Rlc3QmIzM0OyBydW5fdGVzdCAuL2d1cF9sb25ndGVybQogCiBDQVRFR09SWT0mIzM0O3VzZXJmYXVsdGZkJiMzNDsgcnVuX3Rlc3QgLi91ZmZkLXVuaXQtdGVzdHMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYwppbmRleCA1ZjI3ODkxM2M0ZDc1Li43ZjY0OWI2NzMzNTUzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jCkBAIC05LDcgJiM0Mzs5LDYgQEAKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIICYjMzQ7L3Byb2Mvc2VsZi9wYWdlbWFwJiMzNDsKICNkZWZpbmUgVEVTVF9JVEVSQVRJT05TIDEwMDAwCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuYwppbmRleCBjMDFkMjI3ZDdmZDZkLi42OGY1MDhjOWEzNTVmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMKQEAgLTIxLDcgJiM0MzsyMSw2IEBACiAjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwogI2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiB1aW50NjRfdCBwYWdlc2l6ZTsKIHVuc2lnbmVkIGludCBwYWdlc2hpZnQ7CkBAIC0xNDUsNyAmIzQzOzE0NCwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCWlmIChyZXQgJmd0Oz0gSU5QVVRfTUFYKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDslczogRGVidWdmcyBpbnB1dCBpcyB0b28gbG9uZ1xuJiMzNDssIF9fZnVuY19fKTsKIAotCXdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCAmIzQzOyAxKTsKJiM0MzsJcmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICYjNDM7IDEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7d3JpdGVfZmlsZSglcyk6ICVzXG4mIzM0OywgU1BMSVRfREVCVUdGUywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCkpOwogfQogCiBzdGF0aWMgY2hhciAqYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2Uoc2l6ZV90IGxlbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMKaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMKQEAgLTE0LDcgJiM0MzsxNCw2IEBACiAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKLSNpbmNsdWRlICYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaCYjMzQ7CiAKICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQikKICNkZWZpbmUgTUFQX0hVR0VUTEIJMHg0MDAwMApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jCmluZGV4IDhlYjBjNTYzMGU3ZTMuLjk2ZjcyODk4ZWJlMGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMKQEAgLTE3LDcgJiM0MzsxNyw2IEBACiAjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogaW50IGJhY2tpbmdfZmQgPSAtMTsKIGludCBtbWFwX2ZsYWdzID0gTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkUgfCBNQVBfUFJJVkFURTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oCmluZGV4IDkyYTIxYjk3Zjc0NWEuLjA3MjM4NDNhNzYyNmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaApAQCAtMzcsNyAmIzQzOzM3LDYgQEAKIAogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZtX3V0aWwuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCiAjZGVmaW5lIFVGRkRfRkxBR1MJKE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0sgfCBVRkZEX1VTRVJfTU9ERV9PTkxZKQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuYwppbmRleCA1NzJjMjUxNmU4NzRkLi5jNDhlYWFiOGU3NWNmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmMKQEAgLTcsOCAmIzQzOzcsOCBAQAogI2luY2x1ZGUgJmx0O2Fzc2VydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tYW4uaCZndDsKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDttbS9odWdlcGFnZV9zZXR0aW5ncy5oJmd0OwogI2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7Ci0jaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt1ZmZkLWNvbW1vbi5oJiMzNDsKIAogc3RhdGljIGludCBwYWdlbWFwX2ZkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jCmluZGV4IGUyNGQ3YmEwMGI0NDEuLjVhMzU0YTY2NGQxZjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMKQEAgLTExLDcgJiM0MzsxMSw2IEBACiAKICNpbmNsdWRlICYjMzQ7dm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwotI2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKIAogLyoKICAqIFRoZSBoaW50IGFkZHIgdmFsdWUgaXMgdXNlZCB0byBhbGxvY2F0ZSBhZGRyZXNzZXMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwppbmRleCA4MGJjOWY1OTdiNTIxLi40NzUxZGI3OThjM2FjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCkBAIC04ODksMTExICYjNDM7ODg5LDU0IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pCiAJcmV0dXJuIHJldCAmZ3Q7IDAgPyAwIDogLWVycm5vOwogfQogCi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKLXsKLQlpbnQgZmQ7Ci0Jc3NpemVfdCBudW1yZWFkOwotCi0JZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKLQlpZiAoZmQgPT0gLTEpCi0JCXJldHVybiAwOwotCi0JbnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7Ci0JaWYgKG51bXJlYWQgJmx0OyAxKSB7Ci0JCWNsb3NlKGZkKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JYnVmW251bXJlYWRdID0gJiMzOTtcMCYjMzk7OwotCWNsb3NlKGZkKTsKLQotCXJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkOwotfQotCi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpCi17Ci0JaW50IGZkLCBzYXZlZF9lcnJubzsKLQlzc2l6ZV90IG51bXdyaXR0ZW47Ci0KLQlpZiAoYnVmbGVuICZsdDsgMikKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7SW5jb3JyZWN0IGJ1ZmZlciBsZW46ICV6dVxuJiMzNDssIGJ1Zmxlbik7Ci0KLQlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpOwotCWlmIChmZCA9PSAtMSkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgb3BlbiBmYWlsZWQ6ICVzXG4mIzM0OywgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKLQotCW51bXdyaXR0ZW4gPSB3cml0ZShmZCwgYnVmLCBidWZsZW4gLSAxKTsKLQlzYXZlZF9lcnJubyA9IGVycm5vOwotCWNsb3NlKGZkKTsKLQllcnJubyA9IHNhdmVkX2Vycm5vOwotCWlmIChudW13cml0dGVuICZsdDsgMCkgewotCQlpZiAoaWdub3JlX2VpbnZhbCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCkKLQkJCXJldHVybjsKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgd3JpdGUoJS4qcykgZmFpbGVkOiAlc1xuJiMzNDssIHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLAotCQkJCWJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKLQl9Ci0JaWYgKG51bXdyaXR0ZW4gIT0gYnVmbGVuIC0gMSkKLQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7JXMgd3JpdGUoJS4qcykgaXMgdHJ1bmNhdGVkLCBleHBlY3RlZCAlenUgYnl0ZXMsIGdvdCAlemQgYnl0ZXNcbiYjMzQ7LAotCQkJCXBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLCBidWYsIGJ1ZmxlbiAtIDEsIG51bXdyaXR0ZW4pOwotfQotCi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQotewotCV9fd3JpdGVfZmlsZShwYXRoLCBidWYsIGJ1ZmxlbiwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTsKLX0KLQotdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKQotewotCWNoYXIgYnVmWzIxXTsKLQotCWlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQotCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDtyZWFkX2ZpbGUoKSYjMzQ7KTsKLQotCXJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotfQotCi1zdGF0aWMgdm9pZCBfX3dyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSwgYm9vbCBpZ25vcmVfZWludmFsKQotewotCWNoYXIgYnVmWzIxXTsKLQotCXNwcmludGYoYnVmLCAmIzM0OyVsdSYjMzQ7LCBudW0pOwotCV9fd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICYjNDM7IDEsIGlnbm9yZV9laW52YWwpOwotfQotCi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSkKLXsKLQlyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpOwotfQotCi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKQotewotCXJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyB0cnVlKTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htYWxsLCBzaG1tYXg7CiAKIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCkKIHsKLQlpZiAoc2htbWF4KQotCQl3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7LCBzaG1tYXgpOwotCWlmIChzaG1hbGwpCi0JCXdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htYWxsJiMzNDssIHNobWFsbCk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChzaG1tYXgpIHsKJiM0MzsJCXJldCA9IHdyaXRlX251bSgmIzM0Oy9wcm9jL3N5cy9rZXJuZWwvc2htbWF4JiMzNDssIHNobW1heCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBzaG1tYXg6ICVzXG4mIzM0OywKJiM0MzsJCQkJCSAgIHN0cmVycm9yKC1yZXQpKTsKJiM0MzsJfQomIzQzOwlpZiAoc2htYWxsKSB7CiYjNDM7CQlyZXQgPSB3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCBzaG1hbGwpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgc2htYWxsOiAlc1xuJiMzNDssCiYjNDM7CQkJCQkgICBzdHJlcnJvcigtcmV0KSk7CiYjNDM7CX0KIH0KIAogdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpCiB7CiAJdW5zaWduZWQgbG9uZyBuciA9IGxlbmd0aCAvIHBzaXplKCk7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0OywgJmFtcDt2YWwpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byByZWFkIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xuJiMzNDssCiYjNDM7CQkJCSAgIHN0cmVycm9yKC1yZXQpKTsKIAotCXZhbCA9IHJlYWRfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0Oyk7CiAJaWYgKHZhbCAmbHQ7IGxlbmd0aCkgewotCQl3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobW1heCYjMzQ7LCBsZW5ndGgpOwomIzQzOwkJcmV0ID0gd3JpdGVfbnVtKCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXgmIzM0OywgbGVuZ3RoKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O0ZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXG4mIzM0OywKJiM0MzsJCQkJCSAgIGxlbmd0aCwgc3RyZXJyb3IoLXJldCkpOwogCQlzaG1tYXggPSB2YWw7CiAJfQogCi0JdmFsID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7KTsKJiM0MzsJcmV0ID0gcmVhZF9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7RmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXG4mIzM0OywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCkpOwogCWlmICh2YWwgJmx0OyBucikgewotCQl3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCBucik7CiYjNDM7CQlyZXQgPSB3cml0ZV9udW0oJiMzNDsvcHJvYy9zeXMva2VybmVsL3NobWFsbCYjMzQ7LCBucik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtGYWlsZWQgdG8gd3JpdGUgJWx1IHRvIC9wcm9jL3N5cy9rZXJuZWwvc2htYWxsOiAlc1xuJiMzNDssCiYjNDM7CQkJCQkgICBuciwgc3RyZXJyb3IoLXJldCkpOwogCQlzaG1hbGwgPSB2YWw7CiAJfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCmluZGV4IDlhNDlhZjg4NzAyZTQuLjY0YTg2ZThhMGM0MWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKQEAgLTgsNiAmIzQzOzgsOCBAQAogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OyAvKiBfU0NfUEFHRVNJWkUgKi8KICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O21tL2ZpbGVfdXRpbHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCZndDsKIAogI2RlZmluZSBCSVRfVUxMKG5yKSAgICAgICAgICAgICAgICAgICAoMVVMTCAmbHQ7Jmx0OyAobnIpKQogI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KQpAQCAtMTY2LDEyICYjNDM7MTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7CiAjZGVmaW5lIFBBR0VNQVBfUFJFU0VOVChlbnQpCSgoKGVudCkgJmFtcDsgKDF1bGwgJmx0OyZsdDsgNjMpKSAhPSAwKQogI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpCSgoZW50KSAmYW1wOyAoKDF1bGwgJmx0OyZsdDsgNTUpIC0gMSkpCiAKLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwotaW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOwotdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTsKLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTsKLXZvaWQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pOwotCiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aCk7CiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTE1CgkJCQkJCQlvdXRwdXQ6IDEwMgoJCQkJCQkJdGhvdWdodHM6IDE1OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZyBFdmFsdWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24uIFRoZSB1c2VyJiMzOTtzIGdpdmVuIG1lIGEgZGlmZiwgYW5kIG15IGluaXRpYWwgc2NhbiBoaWdobGlnaHRzIGEgZmV3IGtleSBhcmVhcyBvZiBtb2RpZmljYXRpb24uIEZpcnN0LCBJIHNlZSBhIHNsZXcgb2YgY2hhbmdlcyB1bmRlciB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5IOKAkyBhIHNpZ25pZmljYW50IGNsdWUuIFNwZWNpZmljYWxseSwgYHRvb2xzL2xpYi9tbS9gLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCwgYW5kIGB0b29scy9tbS9gLiBUaGVyZSYjMzk7cyBhbHNvIHNvbWUgZG9jdW1lbnRhdGlvbiAoYERvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0YCkgYW5kIGEgYE1BSU5UQUlORVJTYCB1cGRhdGUuIEZpbmFsbHksIHRoZXJlJiMzOTtzIGEgdG91Y2ggaW4gYG1tL0tjb25maWdgLgoKTm93LCBhY2NvcmRpbmcgdG8gdGhlICYjMzQ7V0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkmIzM0OyBydWxlcywgdGhpcyBpcyB0aGUgY3J1Y2lhbCBwYXJ0LiBUaGUgcnVsZXMgZXhwbGljaXRseSBzdGF0ZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gdXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgYW5kIHRvb2xzIHRoYXQgKmRvbiYjMzk7dCogYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIG1vZHVsZXMgYXJlIGEgYmlnIHJlZCBmbGFnIGZvciAqbm90KiBmdXp6aW5nLiBXZSYjMzk7cmUgYWxzbyBsb29raW5nIGZvciBwdXJlbHkgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzIGFuZCBLY29uZmlnIGNoYW5nZXMgdGhhdCAqZG9uJiMzOTt0KiBpbXBhY3QgdGhlIGNvbXBpbGVkIEMgbG9naWMuCgpMb29raW5nIGF0IHRoZSBLY29uZmlnIGNoYW5nZSBjbG9zZWx5LCBpdCBzZWVtcyB0byBtb2RpZnkgdGhlIHRpdGxlIGFuZCBoZWxwIHRleHQgZm9yIGBDT05GSUdfR1VQX1RFU1RgOgoKYGBgZGlmZgotCWJvb2wgJiMzNDtFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzJiMzNDsKJiM0MzsJYm9vbCAmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHMgYW5kIGJlbmNobWFya3MmIzM0OwpgYGAKClRoZSBoZWxwIHRleHQgaXMgdXBkYXRlZDogdGhlIGtleSBoZXJlIGlzLCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IGNoYW5nZSB0byBjb25maWcgbG9naWMgb3IgdGhlIGNvbXBpbGVkIEMgbG9naWMuIEhlcmUsIGl0IGRvZXMgKm5vdCogYWx0ZXIgYW55IGNvbmZpZyBsb2dpYywgZGVwZW5kZW5jaWVzLCBzZWxlY3QsIG9yIGFueXRoaW5nIHRoYXQgYWx0ZXJzIGNvbXBpbGVkIEMgbG9naWMuIEluIG90aGVyIHdvcmRzLCBpdCYjMzk7cyBhIGNvc21ldGljIGNoYW5nZSDigJMgb25seSB0aGUgaGVscCB0ZXh0IGlzIGNoYW5nZWQsIGl0IGRvZXNuJiMzOTt0IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBhbiBleHBsaWNpdCBleGNlcHRpb24uIFRoZSBvdGhlciBjaGFuZ2VzIGFyZSBzdHJpY3RseSB1bmRlciB0aGUgYHRvb2xzL2AsIGBEb2N1bWVudGF0aW9uL2AsIGFuZCBgTUFJTlRBSU5FUlNgLgoKTGV0IG1lIGNvbmZpcm0gdGhlIGNyaXRpY2FsIHBvaW50OiBJcyBhbnkga2VybmVsIEMgc291cmNlIGNvZGUgbW9kaWZpZWQsIGVzcGVjaWFsbHkgaW4gdGhlIGBtbS9gIGRpcmVjdG9yeT8gUXVpY2sgc2Nhbi4uLiBubywgaXQgaXNuJiMzOTt0LiBOb3QgZXZlbiBgaW5jbHVkZS9gLiBUaGUgaW1hZ2UgZmlsZXMgcmVtYWluIHVudG91Y2hlZC4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgKm9ubHkqIHRvdWNoZXMgYHRvb2xzL2AsIGRvY3VtZW50YXRpb24sIGBNQUlOVEFJTkVSU2AsIGFuZCB0aGUgS2NvbmZpZyBoZWxwIHRleHQuIEl0IGZhbGxzICpzcXVhcmVseSogd2l0aGluIHRoZSBkZWZpbmVkIG5lZ2F0aXZlIGNyaXRlcmlhLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgZGVhbGluZyB3aXRoIHNlbGZ0ZXN0cywgdG9vbHMsIGFuZCBkb2N1bWVudGF0aW9uLiBObyBrZXJuZWwtc3BhY2UgY29kZSBpcyBtb2RpZmllZC4KCk15IGNvbmNsdXNpb24gaXM6IGBXb3J0aEZ1enppbmcgPSBmYWxzZWAuCgpOb3csIHRvIHNldCB0aGUgcmVzdWx0cyBjb3JyZWN0bHk6CgoqICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWAKKiAgIGBSZWFzb25pbmdgOiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzL3Rvb2xzIChgdG9vbHMvbGliL21tL2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLCBgdG9vbHMvbW0vYCksIGBEb2N1bWVudGF0aW9uL2AsIGBNQUlOVEFJTkVSU2AsIGFuZCB0aGUgaGVscCB0ZXh0IG9mIGBDT05GSUdfR1VQX1RFU1RgIGluIGBtbS9LY29uZmlnYC4gTm8ga2VybmVsLXNwYWNlIGV4ZWN1dGFibGUgQyBjb2RlIG9yIGtlcm5lbCBpbWFnZSBsb2dpYyBpcyBtb2RpZmllZC4mIzM0OwoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIChlbXB0eSBsaXN0LCBiZWNhdXNlIG5vIGNvbmZpZ3MgYXJlIHJlbGV2YW50KQoqICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGxpc3QsIGJlY2F1c2Ugbm8gc3ltYm9scyBhcmUgcmVsZXZhbnQpCgpSZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXJzcGFjZSB0b29scyBhbmQgc2VsZnRlc3RzICh0b29scy9saWIvbW0vLCB0b29scy9tbS8sIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyksIGRvY3VtZW50YXRpb24gKERvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0KSwgTUFJTlRBSU5FUlMsIGFuZCBLY29uZmlnIGhlbHAgdGV4dCAobW0vS2NvbmZpZykuIE5vIGNvbXBpbGVkIGtlcm5lbCBDIGxvZ2ljIGlzIGFmZmVjdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvbGliL21tLywgdG9vbHMvbW0vLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBkb2N1bWVudGF0aW9uIChEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCksIE1BSU5UQUlORVJTLCBhbmQgS2NvbmZpZyBoZWxwIHRleHQgKG1tL0tjb25maWcpLiBObyBjb21waWxlZCBrZXJuZWwgQyBsb2dpYyBpcyBhZmZlY3RlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ2OjU4LjE2NTg3NjU5OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDMxMzk2NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvbGliL21tLywgdG9vbHMvbW0vLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBkb2N1bWVudGF0aW9uIChEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCksIE1BSU5UQUlORVJTLCBhbmQgS2NvbmZpZyBoZWxwIHRleHQgKG1tL0tjb25maWcpLiBObyBjb21waWxlZCBrZXJuZWwgQyBsb2dpYyBpcyBhZmZlY3RlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ2OjU4LjE2NTg4MjA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzI3NTM0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MTMwZDc1MjcxZDc0M2EyYjIxZGJjYjRhNmIzNjViYTA0Zjc0MGQ0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjQ2OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcXG5pbmRleCBjMTZjYTE2M2I1NWUzLi5lMGFjZWRiZDFkNDg2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3RcXG5AQCAtMjI2LDE1ICsyMjYsNiBAQCB3aWxsIGJlIHBpbm5lZCBsb25ndGVybSwgYW5kIHdob3NlIGRhdGEgd2lsbCBiZSBhY2Nlc3NlZC5cXG4gXFxuIFVuaXQgdGVzdGluZ1xcbiA9PT09PT09PT09PT1cXG4tVGhpcyBmaWxlOjpcXG4tXFxuLSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxuLVxcbi1oYXMgdGhlIGZvbGxvd2luZyBuZXcgY2FsbHMgdG8gZXhlcmNpc2UgdGhlIG5ldyBwaW4qKCkgd3JhcHBlciBmdW5jdGlvbnM6XFxuLVxcbi0qIFBJTl9GQVNUX0JFTkNITUFSSyAoLi9ndXBfdGVzdCAtYSlcXG4tKiBQSU5fQkFTSUNfVEVTVCAoLi9ndXBfdGVzdCAtYilcXG4tXFxuIFlvdSBjYW4gbW9uaXRvciBob3cgbWFueSB0b3RhbCBkbWEtcGlubmVkIHBhZ2VzIGhhdmUgYmVlbiBhY3F1aXJlZCBhbmQgcmVsZWFzZWRcXG4gc2luY2UgdGhlIHN5c3RlbSB3YXMgYm9vdGVkLCB2aWEgdHdvIG5ldyAvcHJvYy92bXN0YXQgZW50cmllczogOjpcXG4gXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAzNTI2MmFhM2U2N2VmLi5jNDdlNjU1YzQxMTEyIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMTcxODcsOCArMTcxODcsOSBAQCBUOlxcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbVxcbiBGOlxcdG1tL2d1cC5jXFxuIEY6XFx0bW0vZ3VwX3Rlc3QuY1xcbiBGOlxcdG1tL2d1cF90ZXN0LmhcXG4rRjpcXHR0b29scy9tbS9ndXBfYmVuY2guY1xcbitGOlxcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXFxuIEY6XFx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG4tRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXFxuIFxcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIEtTTSAoS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcpXFxuIE06XFx0QW5kcmV3IE1vcnRvbiBcXHUwMDNjYWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZ1xcdTAwM2VcXG5AQCAtMTcyOTUsNiArMTcyOTYsNyBAQCBGOlxcdG1tL21lbW9yeS10aWVycy5jXFxuIEY6XFx0bW0vcGFnZV9pZGxlLmNcXG4gRjpcXHRtbS9wZ2FsbG9jLXRyYWNrLmhcXG4gRjpcXHRtbS9wcm9jZXNzX3ZtX2FjY2Vzcy5jXFxuK0Y6XFx0dG9vbHMvbGliL21tL1xcbiBGOlxcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL1xcbiBcXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT05cXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcXG5pbmRleCBjMTgwZDQwY2Q2NzEyLi42MWFiMWI4YTJlYmRmIDEwMDY0NFxcbi0tLSBhL21tL0tjb25maWdcXG4rKysgYi9tbS9LY29uZmlnXFxuQEAgLTEyOTEsMjQgKzEyOTEsMTkgQEAgY29uZmlnIFBFUkNQVV9TVEFUU1xcbiBcXHQgIGJlIHVzZWQgdG8gaGVscCB1bmRlcnN0YW5kIHBlcmNwdSBtZW1vcnkgdXNhZ2UuXFxuIFxcbiBjb25maWcgR1VQX1RFU1RcXG4tXFx0Ym9vbCBcXFwiRW5hYmxlIGluZnJhc3RydWN0dXJlIGZvciBnZXRfdXNlcl9wYWdlcygpLXJlbGF0ZWQgdW5pdCB0ZXN0c1xcXCJcXG4rXFx0Ym9vbCBcXFwiRW5hYmxlIGluZnJhc3RydWN0dXJlIGZvciBnZXRfdXNlcl9wYWdlcygpLXJlbGF0ZWQgdW5pdCB0ZXN0cyBhbmQgYmVuY2htYXJrc1xcXCJcXG4gXFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbiBcXHRoZWxwXFxuIFxcdCAgUHJvdmlkZXMgL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYSB3YXlcXG4tXFx0ICB0byBtYWtlIGlvY3RsIGNhbGxzIHRoYXQgY2FuIGxhdW5jaCBrZXJuZWwtYmFzZWQgdW5pdCB0ZXN0cyBmb3JcXG4tXFx0ICB0aGUgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpIGZhbWlseSBvZiBBUEkgY2FsbHMuXFxuK1xcdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgYW5kXFxuK1xcdCAgYmVuY2htYXJrcyBmb3IgdGhlIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSBmYW1pbGllc1xcbitcXHQgIG9mIEFQSSBjYWxscy5cXG4gXFxuLVxcdCAgVGhlc2UgdGVzdHMgaW5jbHVkZSBiZW5jaG1hcmsgdGVzdGluZyBvZiB0aGUgX2Zhc3QgdmFyaWFudHMgb2ZcXG4tXFx0ICBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCksIGFzIHdlbGwgYXMgc21va2UgdGVzdHMgb2ZcXG4rXFx0ICBUaGVzZSBpbmNsdWRlIGJlbmNobWFyayB0ZXN0aW5nIG9mIHRoZSBfZmFzdCB2YXJpYW50cyBvZlxcbitcXHQgIGdldF91c2VyX3BhZ2VzKigpIGFuZCBwaW5fdXNlcl9wYWdlcyooKSwgYXMgd2VsbCBhcyB0ZXN0cyBvZlxcbiBcXHQgIHRoZSBub24tX2Zhc3QgdmFyaWFudHMuXFxuIFxcbi1cXHQgIFRoZXJlIGlzIGFsc28gYSBzdWItdGVzdCB0aGF0IGFsbG93cyBydW5uaW5nIGR1bXBfcGFnZSgpIG9uIGFueVxcbi1cXHQgIG9mIHVwIHRvIGVpZ2h0IHBhZ2VzIChzZWxlY3RlZCBieSBjb21tYW5kIGxpbmUgYXJncykgd2l0aGluIHRoZVxcbi1cXHQgIHJhbmdlIG9mIHVzZXItc3BhY2UgYWRkcmVzc2VzLiBUaGVzZSBwYWdlcyBhcmUgZWl0aGVyIHBpbm5lZCB2aWFcXG4tXFx0ICBwaW5fdXNlcl9wYWdlcyooKSwgb3IgcGlubmVkIHZpYSBnZXRfdXNlcl9wYWdlcyooKSwgYXMgc3BlY2lmaWVkXFxuLVxcdCAgYnkgb3RoZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cXG4tXFxuLVxcdCAgU2VlIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4rXFx0ICBTZWUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmMgYW5kIHRvb2xzL21tL2d1cF9iZW5jaC5jLlxcbiBcXG4gY29tbWVudCBcXFwiR1VQX1RFU1QgbmVlZHMgdG8gaGF2ZSBERUJVR19GUyBlbmFibGVkXFxcIlxcbiBcXHRkZXBlbmRzIG9uICFHVVBfVEVTVCBcXHUwMDI2XFx1MDAyNiAhREVCVUdfRlNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjliMjIzN2U5ODIzZTlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuY1xcbkBAIC0wLDAgKzEsMTA2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiZmlsZV91dGlscy5oXFxcIlxcbitcXG4raW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXFxuK3tcXG4rXFx0aW50IGZkLCBlcnI7XFxuK1xcdHNzaXplX3QgbnVtcmVhZDtcXG4rXFxuK1xcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XFxuK1xcdGlmIChmZCA9PSAtMSlcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdG51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xcbitcXHRpZiAobnVtcmVhZCBcXHUwMDNjIDEpIHtcXG4rXFx0XFx0ZXJyID0gbnVtcmVhZCA/IGVycm5vIDogRU5PREFUQTtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gLWVycjtcXG4rXFx0fVxcbitcXG4rXFx0YnVmW251bXJlYWRdID0gJ1xcXFwwJztcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcXG4re1xcbitcXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xcbitcXHRzc2l6ZV90IG51bXdyaXR0ZW47XFxuK1xcbitcXHRpZiAoYnVmbGVuIFxcdTAwM2MgMilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xcbitcXHRpZiAoZmQgPT0gLTEpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XFxuK1xcdHNhdmVkX2Vycm5vID0gZXJybm87XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFxuK1xcdGlmIChudW13cml0dGVuIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1zYXZlZF9lcnJubztcXG4rXFxuK1xcdGlmIChudW13cml0dGVuICE9IChzc2l6ZV90KShidWZsZW4gLSAxKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFx0Y2hhciBidWZbMjFdO1xcbitcXHRjaGFyICplbmQ7XFxuK1xcbitcXHRpZiAoIW51bSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBSZWplY3Qgc2lnbnMgYW5kIGxlYWRpbmcgd2hpdGVzcGFjZSB0aGF0IGFyZSBhY2NlcHRlZCBieSBzdHJ0b3VsKCkgKi9cXG4rXFx0aWYgKGJ1ZlswXSBcXHUwMDNjICcwJyB8fCBidWZbMF0gXFx1MDAzZSAnOScpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0ZXJybm8gPSAwO1xcbitcXHR2YWwgPSBzdHJ0b3VsKGJ1ZiwgXFx1MDAyNmVuZCwgMTApO1xcbitcXHRpZiAoZXJybm8pXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHQvKiBPbmx5IGFsbG93IGEgbmV3bGluZSBhZnRlciB0aGUgbnVtYmVyICovXFxuK1xcdGlmICgqZW5kID09ICdcXFxcbicpXFxuK1xcdFxcdGVuZCsrO1xcbitcXG4rXFx0aWYgKCplbmQgIT0gJ1xcXFwwJylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQqbnVtID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcXG4re1xcbitcXHRjaGFyIGJ1ZlsyMV07XFxuK1xcbitcXHRzcHJpbnRmKGJ1ZiwgXFxcIiVsdVxcXCIsIG51bSk7XFxuK1xcdHJldHVybiB3cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgKyAxKTtcXG4rfVxcbitcXG4raW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcXG4rXFx0cmV0dXJuIHJldCA9PSAtRUlOVkFMID8gMCA6IHJldDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTBkYWE4MmMyYjJiNFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5oXFxuQEAgLTAsMCArMSwxMyBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisjaWZuZGVmIF9fTU1fRklMRV9VVElMU19IX19cXG4rI2RlZmluZSBfX01NX0ZJTEVfVVRJTFNfSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjc3RkZGVmLmhcXHUwMDNlXFxuK1xcbitpbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XFxuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XFxuK2ludCByZWFkX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpudW0pO1xcbitpbnQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcXG4raW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5zaW1pbGFyaXR5IGluZGV4IDg3JVxcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG5pbmRleCBkNzkxN2RjZTNhYmFjLi5hYmQ5ZjcxODJmODhmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcXG4rKysgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbkBAIC04LDEyICs4LDE4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbiBcXG4tI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImZpbGVfdXRpbHMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFRIUF9TWVNGUyBcXFwiL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvXFxcIlxcbiAjZGVmaW5lIE1BWF9TRVRUSU5HU19ERVBUSCA0XFxuK1xcbisjaWZuZGVmIEFSUkFZX1NJWkVcXG4rI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSlcXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5nc19zdGFja1tNQVhfU0VUVElOR1NfREVQVEhdO1xcbiBzdGF0aWMgaW50IHNldHRpbmdzX2luZGV4O1xcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzYXZlZF9zZXR0aW5ncztcXG5AQCAtNDgsNiArNTQsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzaG1lbV9lbmFibGVkX3N0cmluZ3NbXSA9IHtcXG4gXFx0TlVMTFxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgcHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoY29uc3QgY2hhciAqcGF0aCwgaW50IHJldClcXG4re1xcbitcXHRwcmludGYoXFxcIiMgJXM6ICVzICglZClcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKC1yZXQpLCAtcmV0KTtcXG4rfVxcbitcXG4gaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuQEAgLTYxLDggKzcyLDkgQEAgaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxcbiBcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7XFxuLVxcdFxcdHBlcnJvcihwYXRoKTtcXG4rXFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XFxuIFxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTAzLDEyICsxMTUsMTcgQEAgdm9pZCB0aHBfd3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbClcXG4gXFx0XFx0cHJpbnRmKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuLVxcdHdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSArIDEpO1xcbitcXHRyZXQgPSB3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgKyAxKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcXG4ge1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHR1bnNpZ25lZCBsb25nIG51bTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHJldCA9IHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCBUSFBfU1lTRlMgXFxcIiVzXFxcIiwgbmFtZSk7XFxuQEAgLTExNiw3ICsxMzMsMTMgQEAgdW5zaWduZWQgbG9uZyB0aHBfcmVhZF9udW0oY29uc3QgY2hhciAqbmFtZSlcXG4gXFx0XFx0cHJpbnRmKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbiBcXHR9XFxuLVxcdHJldHVybiByZWFkX251bShwYXRoKTtcXG4rXFx0cmV0ID0gcmVhZF9udW0ocGF0aCwgXFx1MDAyNm51bSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbnVtO1xcbiB9XFxuIFxcbiB2b2lkIHRocF93cml0ZV9udW0oY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBudW0pXFxuQEAgLTEyOSw3ICsxNTIsMTEgQEAgdm9pZCB0aHBfd3JpdGVfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgbnVtKVxcbiBcXHRcXHRwcmludGYoXFxcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuIFxcdH1cXG4tXFx0d3JpdGVfbnVtKHBhdGgsIG51bSk7XFxuK1xcdHJldCA9IHdyaXRlX251bShwYXRoLCBudW0pO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XFxuK1xcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxcbkBAIC0xNTcsOCArMTg0LDE1IEBAIHZvaWQgdGhwX3JlYWRfc2V0dGluZ3Moc3RydWN0IHRocF9zZXR0aW5ncyAqc2V0dGluZ3MpXFxuIFxcdFxcdC5tYXhfcHRlc19zaGFyZWQgPSB0aHBfcmVhZF9udW0oXFxcImtodWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXFxcIiksXFxuIFxcdFxcdC5wYWdlc190b19zY2FuID0gdGhwX3JlYWRfbnVtKFxcXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cXFwiKSxcXG4gXFx0fTtcXG4tXFx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXFxuLVxcdFxcdHNldHRpbmdzLVxcdTAwM2VyZWFkX2FoZWFkX2tiID0gcmVhZF9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCk7XFxuK1xcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XFxuK1xcdFxcdGludCByZXQgPSByZWFkX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxcbitcXHRcXHRcXHRcXHQgICBcXHUwMDI2c2V0dGluZ3MtXFx1MDAzZXJlYWRfYWhlYWRfa2IpO1xcbitcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpO1xcbitcXHRcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX09SREVSUzsgaSsrKSB7XFxuIFxcdFxcdGlmICghKCgxIFxcdTAwM2NcXHUwMDNjIGkpIFxcdTAwMjYgb3JkZXJzKSkge1xcbkBAIC0yMDgsOCArMjQyLDE1IEBAIHZvaWQgdGhwX3dyaXRlX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxcbiBcXHR0aHBfd3JpdGVfbnVtKFxcXCJraHVnZXBhZ2VkL21heF9wdGVzX3NoYXJlZFxcXCIsIGtodWdlcGFnZWQtXFx1MDAzZW1heF9wdGVzX3NoYXJlZCk7XFxuIFxcdHRocF93cml0ZV9udW0oXFxcImtodWdlcGFnZWQvcGFnZXNfdG9fc2NhblxcXCIsIGtodWdlcGFnZWQtXFx1MDAzZXBhZ2VzX3RvX3NjYW4pO1xcbiBcXG4tXFx0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pXFxuLVxcdFxcdHdyaXRlX251bShkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCBzZXR0aW5ncy1cXHUwMDNlcmVhZF9haGVhZF9rYik7XFxuK1xcdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKSB7XFxuK1xcdFxcdGludCByZXQgPSB3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCxcXG4rXFx0XFx0XFx0XFx0ICAgIHNldHRpbmdzLVxcdTAwM2VyZWFkX2FoZWFkX2tiKTtcXG4rXFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgcmV0KTtcXG4rXFx0XFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9PUkRFUlM7IGkrKykge1xcbiBcXHRcXHRpZiAoISgoMSBcXHUwMDNjXFx1MDAzYyBpKSBcXHUwMDI2IG9yZGVycykpXFxuQEAgLTMwNyw4ICszNDgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX190aHBfc3VwcG9ydGVkX29yZGVycyhib29sIGlzX3NobWVtKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XFxuLVxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdG9yZGVycyB8PSAxVUwgXFx1MDAzY1xcdTAwM2MgaTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRpZiAocmV0ICE9IC1FTk9FTlQpIHtcXG4rXFx0XFx0XFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0XFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvcmRlcnMgfD0gMVVMIFxcdTAwM2NcXHUwMDNjIGk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBvcmRlcnM7XFxuQEAgLTM4Miw4ICs0MzAsNyBAQCBpbnQgZGV0ZWN0X2h1Z2V0bGJfcGFnZV9zaXplcyh1bnNpZ25lZCBsb25nIHNpemVzW10sIGludCBtYXgpXFxuIFxcdFxcdGlmIChzc2NhbmYoZW50cnktXFx1MDAzZWRfbmFtZSwgXFxcImh1Z2VwYWdlcy0lenVrQlxcXCIsIFxcdTAwMjZrYikgIT0gMSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdHNpemVzW2NvdW50KytdID0ga2IgKiAxMDI0O1xcbi1cXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgICAga2IpO1xcbitcXHRcXHRwcmludGYoXFxcIiMgW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxcXG5cXFwiLCBrYik7XFxuIFxcdH1cXG4gXFx0Y2xvc2VkaXIoZGlyKTtcXG4gXFx0cmV0dXJuIGNvdW50O1xcbkBAIC00MjUsMjggKzQ3Miw0OSBAQCBzdGF0aWMgdm9pZCBodWdldGxiX3N5c2ZzX3BhdGgoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLFxcbiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcXFwibnJfaHVnZXBhZ2VzXFxcIik7XFxuIFxcbi1cXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XFxuK1xcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFxcdTAwMjZucik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbnI7XFxuIH1cXG4gXFxuIHZvaWQgaHVnZXRsYl9zZXRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcXFwibnJfaHVnZXBhZ2VzXFxcIik7XFxuIFxcbi1cXHR3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7XFxuK1xcdHJldCA9IHdyaXRlX251bV9pZ25vcmVfZWludmFsKHBhdGgsIG5yKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxcbiB7XFxuIFxcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRodWdldGxiX3N5c2ZzX3BhdGgocGF0aCwgc2l6ZW9mKHBhdGgpLCBzaXplLCBcXFwiZnJlZV9odWdlcGFnZXNcXFwiKTtcXG4gXFxuLVxcdHJldHVybiByZWFkX251bShwYXRoKTtcXG4rXFx0cmV0ID0gcmVhZF9udW0ocGF0aCwgXFx1MDAyNm5yKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBucjtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgX19odWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcXG5AQCAtNTAyLDcgKzU3MCw4IEBAIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9zZXR1cCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHNpemVzW10sXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aWYgKG5yX2VuYWJsZWQgXFx1MDAzZSBtYXgpIHtcXG4tXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXFxcblxcXCIsIG5yX2VuYWJsZWQsIG1heCk7XFxuK1xcdFxcdHByaW50ZihcXFwiIyBkZXRlY3RlZCAlZCBodWdlIHBhZ2Ugc2l6ZXMsIHdpbGwgb25seSB0ZXN0ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgICAgbnJfZW5hYmxlZCwgbWF4KTtcXG4gXFx0XFx0bnJfZW5hYmxlZCA9IG1heDtcXG4gXFx0fVxcbiBcXG5AQCAtNTc0LDggKzY0MywxMCBAQCBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCh2b2lkKVxcbiBcXG4gc3RhdGljIHZvaWQgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19zaWdoYW5kbGVyKGludCBzaWcpXFxuIHtcXG4rXFx0KHZvaWQpc2lnO1xcbitcXG4gXFx0LyogZXhpdCgpIHdpbGwgaW52b2tlIHRoZSBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCBoYW5kbGVyLiAqL1xcbi1cXHRleGl0KEtTRlRfRkFJTCk7XFxuK1xcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4gfVxcbiBcXG4gdm9pZCBodWdlcGFnZV9zYXZlX3NldHRpbmdzKGJvb2wgdGhwLCBib29sIGh1Z2V0bGIpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmggYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcbnNpbWlsYXJpdHkgaW5kZXggMTAwJVxcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL21tLy5naXRpZ25vcmVcXG5pbmRleCAxNDQ2YTY1OWU1NDA4Li4xNTRkNzQwYmUwMmU4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL21tLy5naXRpZ25vcmVcXG4rKysgYi90b29scy9tbS8uZ2l0aWdub3JlXFxuQEAgLTMsMyArMyw0IEBAIHNsYWJpbmZvXFxuIHBhZ2UtdHlwZXNcXG4gcGFnZV9vd25lcl9zb3J0XFxuIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XFxuK2d1cF9iZW5jaFxcbmRpZmYgLS1naXQgYS90b29scy9tbS9NYWtlZmlsZSBiL3Rvb2xzL21tL01ha2VmaWxlXFxuaW5kZXggODU4MTg2YTZlZWZkYi4uZjIwYTMyZDhjYzIyZSAxMDA2NDRcXG4tLS0gYS90b29scy9tbS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL21tL01ha2VmaWxlXFxuQEAgLTMsMTMgKzMsMTUgQEBcXG4gI1xcbiBpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZVxcbiBcXG4tQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitCVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyXFxuK0JVSUxEX1RBUkdFVFMgKz0gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXFxuIElOU1RBTExfVEFSR0VUUyA9ICQoQlVJTERfVEFSR0VUUykgdGhwbWFwc1xcbiBcXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcXG4gTElCUyA9ICQoTElCX0RJUikvbGliYXBpLmFcXG4rR1VQX0JFTkNIX09CSlMgPSBndXBfYmVuY2guYyAuLi9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyAuLi9saWIvbW0vZmlsZV91dGlscy5jXFxuIFxcbi1DRkxBR1MgKz0gLVdhbGwgLVdleHRyYSAtSS4uL2xpYi8gLXB0aHJlYWRcXG4rQ0ZMQUdTICs9IC1XYWxsIC1XZXh0cmEgLUkuLi9saWIvIC1JLi4vLi4gLXB0aHJlYWRcXG4gTERGTEFHUyArPSAkKExJQlMpIC1wdGhyZWFkXFxuIFxcbiBhbGw6ICQoQlVJTERfVEFSR0VUUylcXG5AQCAtMjIsOCArMjQsMTEgQEAgJChMSUJTKTpcXG4gJTogJS5jXFxuIFxcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXFx1MDAzYyAkKExERkxBR1MpXFxuIFxcbitndXBfYmVuY2g6ICQoR1VQX0JFTkNIX09CSlMpICQoTElCUylcXG4rXFx0JChDQykgJChDRkxBR1MpIC1vICRAICQoR1VQX0JFTkNIX09CSlMpICQoTERGTEFHUylcXG4rXFxuIGNsZWFuOlxcbi1cXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxcbitcXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdCBndXBfYmVuY2hcXG4gXFx0bWFrZSAtQyAkKExJQl9ESVIpIGNsZWFuXFxuIFxcbiBzYmluZGlyID89IC91c3Ivc2JpblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jIGIvdG9vbHMvbW0vZ3VwX2JlbmNoLmNcXG5zaW1pbGFyaXR5IGluZGV4IDUwJVxcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG5yZW5hbWUgdG8gdG9vbHMvbW0vZ3VwX2JlbmNoLmNcXG5pbmRleCAzZjg0MWE5NmY4NzA2Li5mZjZlNDY2NTQ2ODEzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcXG4rKysgYi90b29scy9tbS9ndXBfYmVuY2guY1xcbkBAIC0xMCwxMSArMTAsMTAgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zdGF0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3B0aHJlYWQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2Fzc2VydC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NtbS9ndXBfdGVzdC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgTUIgKDFVTCBcXHUwMDNjXFx1MDAzYyAyMClcXG4gXFxuQEAgLTM4LDEyICszNyw2IEBAIHN0YXRpYyBjaGFyICpjbWRfdG9fc3RyKHVuc2lnbmVkIGxvbmcgY21kKVxcbiBcXHRcXHRyZXR1cm4gXFxcIlBJTl9GQVNUX0JFTkNITUFSS1xcXCI7XFxuIFxcdGNhc2UgUElOX0xPTkdURVJNX0JFTkNITUFSSzpcXG4gXFx0XFx0cmV0dXJuIFxcXCJQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLXFxcIjtcXG4tXFx0Y2FzZSBHVVBfQkFTSUNfVEVTVDpcXG4tXFx0XFx0cmV0dXJuIFxcXCJHVVBfQkFTSUNfVEVTVFxcXCI7XFxuLVxcdGNhc2UgUElOX0JBU0lDX1RFU1Q6XFxuLVxcdFxcdHJldHVybiBcXFwiUElOX0JBU0lDX1RFU1RcXFwiO1xcbi1cXHRjYXNlIERVTVBfVVNFUl9QQUdFU19URVNUOlxcbi1cXHRcXHRyZXR1cm4gXFxcIkRVTVBfVVNFUl9QQUdFU19URVNUXFxcIjtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gXFxcIlVua25vd24gY29tbWFuZFxcXCI7XFxuIH1cXG5AQCAtNTMsMzkgKzQ2LDI5IEBAIHZvaWQgKmd1cF90aHJlYWQodm9pZCAqZGF0YSlcXG4gXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTtcXG4gXFx0aW50IGksIHN0YXR1cztcXG4gXFxuLVxcdC8qIE9ubHkgcmVwb3J0IHRpbWluZyBpbmZvcm1hdGlvbiBvbiB0aGUgKl9CRU5DSE1BUksgY29tbWFuZHM6ICovXFxuLVxcdGlmICgoY21kID09IFBJTl9GQVNUX0JFTkNITUFSSykgfHwgKGNtZCA9PSBHVVBfRkFTVF9CRU5DSE1BUkspIHx8XFxuLVxcdCAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkge1xcbi1cXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmVwZWF0czsgaSsrKSB7XFxuLVxcdFxcdFxcdGd1cC5zaXplID0gc2l6ZTtcXG4tXFx0XFx0XFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFxcdTAwMjZndXApO1xcbi1cXHRcXHRcXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJlcGVhdHM7IGkrKykge1xcbitcXHRcXHRndXAuc2l6ZSA9IHNpemU7XFxuK1xcdFxcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcXHUwMDI2Z3VwKTtcXG4rXFx0XFx0aWYgKHN0YXR1cykge1xcbitcXHRcXHRcXHRpbnQgZXJyID0gZXJybm87XFxuIFxcbiBcXHRcXHRcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNnByaW50X211dGV4KTtcXG4tXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIiVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1xcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGd1cC5wdXRfZGVsdGFfdXNlYyk7XFxuLVxcdFxcdFxcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxcbi1cXHRcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiLCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxcIiwgZ3VwLnNpemUpO1xcbi1cXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCIlcyBpb2N0bCBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBjbWRfdG9fc3RyKGNtZCksXFxuK1xcdFxcdFxcdFxcdHN0cmVycm9yKGVycikpO1xcbiBcXHRcXHRcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2cHJpbnRfbXV0ZXgpO1xcbitcXHRcXHRcXHRyZXR1cm4gZGF0YTtcXG4gXFx0XFx0fVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRndXAuc2l6ZSA9IHNpemU7XFxuLVxcdFxcdHN0YXR1cyA9IGlvY3RsKGd1cF9mZCwgY21kLCBcXHUwMDI2Z3VwKTtcXG4tXFx0XFx0aWYgKHN0YXR1cylcXG4tXFx0XFx0XFx0Z290byByZXR1cm5fO1xcbiBcXG4gXFx0XFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZwcmludF9tdXRleCk7XFxuLVxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCIlczogZG9uZVxcXFxuXFxcIiwgY21kX3RvX3N0cihjbWQpKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCIlczogVGltZTogZ2V0OiVsbGQgcHV0OiVsbGQgdXNcXFwiLFxcbitcXHRcXHRcXHRjbWRfdG9fc3RyKGNtZCksIGd1cC5nZXRfZGVsdGFfdXNlYyxcXG4rXFx0XFx0XFx0Z3VwLnB1dF9kZWx0YV91c2VjKTtcXG4gXFx0XFx0aWYgKGd1cC5zaXplICE9IHNpemUpXFxuLVxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJUcnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxcXG5cXFwiLCBndXAuc2l6ZSk7XFxuK1xcdFxcdFxcdHByaW50ZihcXFwiLCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXFxcIiwgZ3VwLnNpemUpO1xcbitcXHRcXHRwcmludGYoXFxcIlxcXFxuXFxcIik7XFxuIFxcdFxcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFxcdTAwMjZwcmludF9tdXRleCk7XFxuIFxcdH1cXG4gXFxuLXJldHVybl86XFxuLVxcdGtzZnRfdGVzdF9yZXN1bHQoIXN0YXR1cywgXFxcImlvY3RsIHN0YXR1cyAlZFxcXFxuXFxcIiwgc3RhdHVzKTtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuQEAgLTkzLDM4ICs3NiwyMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIHtcXG4gXFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9IHsgMCB9O1xcbiBcXHRpbnQgZmlsZWQsIGksIG9wdCwgbnJfcGFnZXMgPSAxLCB0aHAgPSAtMSwgd3JpdGUgPSAxLCBudGhyZWFkcyA9IDEsIHJldDtcXG4tXFx0aW50IGZsYWdzID0gTUFQX1BSSVZBVEU7XFxuK1xcdGludCBmbGFncyA9IE1BUF9QUklWQVRFLCBzdGFydGVkX3RocmVhZHMgPSAwLCBleGl0X3N0YXR1cyA9IDE7XFxuIFxcdGNoYXIgKmZpbGUgPSBcXFwiL2Rldi96ZXJvXFxcIjtcXG4tXFx0Ym9vbCBodWdldGxiID0gZmFsc2U7XFxuK1xcdGJvb2wgaHVnZXRsYiA9IGZhbHNlLCB0aHJlYWRfZXJyb3IgPSBmYWxzZTtcXG4rXFx0dm9pZCAqdGhyZWFkX3Jlc3VsdDtcXG4gXFx0cHRocmVhZF90ICp0aWQ7XFxuIFxcdGNoYXIgKnA7XFxuIFxcbi1cXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwibTpyOm46RjpmOmFiY2o6dFRMVXV3V1NIcHpcXFwiKSkgIT0gLTEpIHtcXG4rXFx0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXFxcIm06cjpuOkY6Zjphajp0VEx1d1dTSFxcXCIpKSAhPSAtMSkge1xcbiBcXHRcXHRzd2l0Y2ggKG9wdCkge1xcbiBcXHRcXHRjYXNlICdhJzpcXG4gXFx0XFx0XFx0Y21kID0gUElOX0ZBU1RfQkVOQ0hNQVJLO1xcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAnYic6XFxuLVxcdFxcdFxcdGNtZCA9IFBJTl9CQVNJQ19URVNUO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAnTCc6XFxuIFxcdFxcdFxcdGNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlICdjJzpcXG4tXFx0XFx0XFx0Y21kID0gRFVNUF9VU0VSX1BBR0VTX1RFU1Q7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIER1bXAgcGFnZSAwIChpbmRleCAxKS4gTWF5IGJlIG92ZXJyaWRkZW4gbGF0ZXIsIGJ5XFxuLVxcdFxcdFxcdCAqIHVzZXIncyBub24tb3B0aW9uIGFyZ3VtZW50cy5cXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogLndoaWNoX3BhZ2VzIGlzIHplcm8tYmFzZWQsIHNvIHRoYXQgemVybyBjYW4gbWVhbiBcXFwiZG9cXG4tXFx0XFx0XFx0ICogbm90aGluZ1xcXCIuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRndXAud2hpY2hfcGFnZXNbMF0gPSAxO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAncCc6XFxuLVxcdFxcdFxcdC8qIHdvcmtzIG9ubHkgd2l0aCBEVU1QX1VTRVJfUEFHRVNfVEVTVCAqL1xcbi1cXHRcXHRcXHRndXAudGVzdF9mbGFncyB8PSBHVVBfVEVTVF9GTEFHX0RVTVBfUEFHRVNfVVNFX1BJTjtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ0YnOlxcbiBcXHRcXHRcXHQvKiBzdHJ0b2wsIHNvIHlvdSBjYW4gcGFzcyBmbGFncyBpbiBoZXggZm9ybSAqL1xcbiBcXHRcXHRcXHRndXAuZ3VwX2ZsYWdzID0gc3RydG9sKG9wdGFyZywgMCwgMCk7XFxuQEAgLTE0MSw3ICsxMDcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdGNhc2UgJ24nOlxcbiBcXHRcXHRcXHRucl9wYWdlcyA9IGF0b2kob3B0YXJnKTtcXG4gXFx0XFx0XFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0XFx0bnJfcGFnZXMgPSBzaXplIC8gcHNpemUoKTtcXG4rXFx0XFx0XFx0XFx0bnJfcGFnZXMgPSBzaXplIC8gZ2V0cGFnZXNpemUoKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ3QnOlxcbiBcXHRcXHRcXHR0aHAgPSAxO1xcbkBAIC0xNDksOSArMTE1LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRjYXNlICdUJzpcXG4gXFx0XFx0XFx0dGhwID0gMDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgJ1UnOlxcbi1cXHRcXHRcXHRjbWQgPSBHVVBfQkFTSUNfVEVTVDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgJ3UnOlxcbiBcXHRcXHRcXHRjbWQgPSBHVVBfRkFTVF9CRU5DSE1BUks7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xNzMsNTIgKzEzNiw0MSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcdGh1Z2V0bGIgPSB0cnVlO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJXcm9uZyBhcmd1bWVudFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV3JvbmcgYXJndW1lbnRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRleGl0KDEpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChvcHRpbmQgXFx1MDAzYyBhcmdjKSB7XFxuLVxcdFxcdGludCBleHRyYV9hcmdfY291bnQgPSAwO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBGb3IgZXhhbXBsZTpcXG4tXFx0XFx0ICpcXG4tXFx0XFx0ICogICAuL2d1cF90ZXN0IC1jIDAgMSAweDEwMDFcXG4tXFx0XFx0ICpcXG4tXFx0XFx0ICogLi4udG8gZHVtcCBwYWdlcyAwLCAxLCBhbmQgNDA5N1xcbi1cXHRcXHQgKi9cXG4tXFxuLVxcdFxcdHdoaWxlICgob3B0aW5kIFxcdTAwM2MgYXJnYykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICAgIChleHRyYV9hcmdfY291bnQgXFx1MDAzYyBHVVBfVEVTVF9NQVhfUEFHRVNfVE9fRFVNUCkpIHtcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogRG8gdGhlIDEtYmFzZWQgaW5kZXhpbmcgaGVyZSwgc28gdGhhdCB0aGUgdXNlciBjYW5cXG4tXFx0XFx0XFx0ICogdXNlIG5vcm1hbCAwLWJhc2VkIGluZGV4aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRsb25nIHBhZ2VfaW5kZXggPSBzdHJ0b2woYXJndltvcHRpbmRdLCAwLCAwKSArIDE7XFxuLVxcbi1cXHRcXHRcXHRndXAud2hpY2hfcGFnZXNbZXh0cmFfYXJnX2NvdW50XSA9IHBhZ2VfaW5kZXg7XFxuLVxcdFxcdFxcdGV4dHJhX2FyZ19jb3VudCsrO1xcbi1cXHRcXHRcXHRvcHRpbmQrKztcXG4tXFx0XFx0fVxcbitcXHRpZiAob3B0aW5kICE9IGFyZ2MpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJVbmV4cGVjdGVkIGFyZ3VtZW50ICclcydcXFxcblxcXCIsIGFyZ3Zbb3B0aW5kXSk7XFxuK1xcdFxcdGV4aXQoMSk7XFxuIFxcdH1cXG4gXFxuLVxcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuK1xcdGlmIChnZXRldWlkKCkpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxcXG5cXFwiKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGh1Z2V0bGIpIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBocF9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xcbiBcXG4tXFx0XFx0aWYgKCFocF9zaXplKVxcbi1cXHRcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiSHVnZVRMQiBpcyB1bmF2YWlsYWJsZVxcXFxuXFxcIik7XFxuK1xcdFxcdGlmICghaHBfc2l6ZSkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkNvdWxkIG5vdCBkZXRlcm1pbmUgaHVnZSBwYWdlIHNpemVcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0c2l6ZSA9IChzaXplICsgaHBfc2l6ZSAtIDEpIFxcdTAwMjYgfihocF9zaXplIC0gMSk7XFxuLVxcdFxcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSlcXG4tXFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcXFxuXFxcIik7XFxuK1xcdFxcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSkge1xcbitcXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGtzZnRfc2V0X3BsYW4obnRocmVhZHMpO1xcbi1cXG4gXFx0ZmlsZWQgPSBvcGVuKGZpbGUsIE9fUkRXUnxPX0NSRUFULCAwNjY0KTtcXG4tXFx0aWYgKGZpbGVkIFxcdTAwM2MgMClcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdGlmIChmaWxlZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIGZpbGUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuIFxcbiBcXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlcztcXG4gXFx0aWYgKHdyaXRlKVxcbkBAIC0yMjcsMjYgKzE3OSwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdGd1cF9mZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcXG4gXFx0aWYgKGd1cF9mZCA9PSAtMSkge1xcbiBcXHRcXHRzd2l0Y2ggKGVycm5vKSB7XFxuLVxcdFxcdGNhc2UgRUFDQ0VTOlxcbi1cXHRcXHRcXHRpZiAoZ2V0dWlkKCkpXFxuLVxcdFxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgRU5PRU5UOlxcbiBcXHRcXHRcXHRpZiAob3BlbmRpcihcXFwiL3N5cy9rZXJuZWwvZGVidWdcXFwiKSA9PSBOVUxMKVxcbi1cXHRcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwibW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcXFxuXFxcIik7XFxuLVxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJtb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJmYWlsZWQgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxcXG5cXFwiLCBHVVBfVEVTVF9GSUxFLFxcbitcXHRcXHRcXHRcXHRzdHJlcnJvcihlcnJubykpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbi1cXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXFxcblxcXCIpO1xcbi1cXHRcXHRrc2Z0X2V4aXRfcGFzcygpO1xcbitcXHRcXHRnb3RvIGVycl9jbG9zZV9maWxlZDtcXG4gXFx0fVxcbiBcXG4gXFx0cCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIGZpbGVkLCAwKTtcXG4tXFx0aWYgKHAgPT0gTUFQX0ZBSUxFRClcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJtbWFwOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0aWYgKHAgPT0gTUFQX0ZBSUxFRCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIm1tYXA6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHRnb3RvIGVycl9jbG9zZV9ndXBfZmQ7XFxuK1xcdH1cXG4gXFx0Z3VwLmFkZHIgPSAodW5zaWduZWQgbG9uZylwO1xcbiBcXG4gXFx0aWYgKHRocCA9PSAxKVxcbkBAIC0yNTUsMjEgKzIwNSw0MyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcXG4gXFxuIFxcdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xcbi1cXHRmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCBcXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBwc2l6ZSgpKVxcbitcXHRmb3IgKDsgKHVuc2lnbmVkIGxvbmcpcCBcXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBnZXRwYWdlc2l6ZSgpKVxcbiBcXHRcXHRwWzBdID0gMDtcXG4gXFxuIFxcdHRpZCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIG50aHJlYWRzKTtcXG4tXFx0YXNzZXJ0KHRpZCk7XFxuK1xcdGlmICghdGlkKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlICVkIHRocmVhZHM6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRudGhyZWFkcywgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0XFx0Z290byBlcnJfdW5tYXA7XFxuK1xcdH1cXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudGhyZWFkczsgaSsrKSB7XFxuIFxcdFxcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsIFxcdTAwMjZndXApO1xcbi1cXHRcXHRhc3NlcnQocmV0ID09IDApO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwicHRocmVhZF9jcmVhdGUgZmFpbGVkOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IocmV0KSk7XFxuK1xcdFxcdFxcdHRocmVhZF9lcnJvciA9IHRydWU7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdHN0YXJ0ZWRfdGhyZWFkcysrO1xcbiBcXHR9XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudGhyZWFkczsgaSsrKSB7XFxuLVxcdFxcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpO1xcbi1cXHRcXHRhc3NlcnQocmV0ID09IDApO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3RhcnRlZF90aHJlYWRzOyBpKyspIHtcXG4rXFx0XFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgXFx1MDAyNnRocmVhZF9yZXN1bHQpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwicHRocmVhZF9qb2luIGZhaWxlZDogJXNcXFxcblxcXCIsIHN0cmVycm9yKHJldCkpO1xcbitcXHRcXHRcXHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xcbitcXHRcXHR9IGVsc2UgaWYgKHRocmVhZF9yZXN1bHQpXFxuK1xcdFxcdFxcdHRocmVhZF9lcnJvciA9IHRydWU7XFxuIFxcdH1cXG4gXFxuIFxcdGZyZWUodGlkKTtcXG4tXFxuLVxcdGtzZnRfZXhpdF9wYXNzKCk7XFxuK1xcdGlmICghdGhyZWFkX2Vycm9yKVxcbitcXHRcXHRleGl0X3N0YXR1cyA9IDA7XFxuK1xcbitlcnJfdW5tYXA6XFxuK1xcdG11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTtcXG4rZXJyX2Nsb3NlX2d1cF9mZDpcXG4rXFx0Y2xvc2UoZ3VwX2ZkKTtcXG4rZXJyX2Nsb3NlX2ZpbGVkOlxcbitcXHRjbG9zZShmaWxlZCk7XFxuK1xcdHJldHVybiBleGl0X3N0YXR1cztcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuaW5kZXggMmQ1MzY2MTk2ZTMwOS4uOWMwMzYyNGZkMjkzNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuQEAgLTM3LDcgKzM3LDggQEAgZW5kaWZcXG4gIyBMRExJQlMuXFxuIE1BS0VGTEFHUyArPSAtLW5vLWJ1aWx0aW4tcnVsZXNcXG4gXFxuLUNGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXFxuK0NGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpIC1JICQodG9wX3NyY2RpcikvdG9vbHMvbGliXFxuK0NGTEFHUyArPSAkKEVYVFJBX0NGTEFHUykgJChLSERSX0lOQ0xVREVTKSAkKFRPT0xTX0lOQ0xVREVTKVxcbiBDRkxBR1MgKz0gLVd1bnJlYWNoYWJsZS1jb2RlXFxuIExETElCUyA9IC1scnQgLWxwdGhyZWFkIC1sbVxcbiBcXG5AQCAtNTcsOCArNTgsOCBAQCBlbmRpZlxcbiBcXG4gVEVTVF9HRU5fRklMRVMgPSBjb3dcXG4gVEVTVF9HRU5fRklMRVMgKz0gY29tcGFjdGlvbl90ZXN0XFxuK1RFU1RfR0VOX0ZJTEVTICs9IGd1cFxcbiBURVNUX0dFTl9GSUxFUyArPSBndXBfbG9uZ3Rlcm1cXG4tVEVTVF9HRU5fRklMRVMgKz0gZ3VwX3Rlc3RcXG4gVEVTVF9HRU5fRklMRVMgKz0gaG1tLXRlc3RzXFxuIFRFU1RfR0VOX0ZJTEVTICs9IGh1Z2V0bGItbWFkdmlzZVxcbiBURVNUX0dFTl9GSUxFUyArPSBodWdldGxiLW1tYXBcXG5AQCAtMTg3LDggKzE4OCwxMCBAQCBURVNUX0ZJTEVTICs9IHdyaXRlX2h1Z2V0bGJfbWVtb3J5LnNoXFxuIFxcbiBpbmNsdWRlIC4uL2xpYi5ta1xcbiBcXG4tJChURVNUX0dFTl9QUk9HUyk6IHZtX3V0aWwuYyBodWdlcGFnZV9zZXR0aW5ncy5jXFxuLSQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuY1xcbiskKFRFU1RfR0VOX1BST0dTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXFxcXFxcbitcXHRcXHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcXG4rJChURVNUX0dFTl9GSUxFUyk6IHZtX3V0aWwuYyAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIFxcXFxcXG4rXFx0XFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXFxuIFxcbiAkKE9VVFBVVCkvdWZmZC1zdHJlc3M6IHVmZmQtY29tbW9uLmNcXG4gJChPVVRQVVQpL3VmZmQtdW5pdC10ZXN0czogdWZmZC1jb21tb24uY1xcbkBAIC0yMTcsNyArMjIwLDcgQEAgJChCSU5BUklFU18zMik6IENGTEFHUyArPSAtbTMyIC1teHNhdmVcXG4gJChCSU5BUklFU18zMik6IExETElCUyArPSAtbHJ0IC1sZGwgLWxtXFxuICQoQklOQVJJRVNfMzIpOiAkKE9VVFBVVCkvJV8zMjogJS5jXFxuIFxcdCQoY2FsbCBtc2csQ0MsLCRAKVxcbi1cXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXFxuK1xcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQFxcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtMzIsJCh0KSkpKVxcbiBlbmRpZlxcbiBcXG5AQCAtMjI2LDcgKzIyOSw3IEBAICQoQklOQVJJRVNfNjQpOiBDRkxBR1MgKz0gLW02NCAtbXhzYXZlXFxuICQoQklOQVJJRVNfNjQpOiBMRExJQlMgKz0gLWxydCAtbGRsXFxuICQoQklOQVJJRVNfNjQpOiAkKE9VVFBVVCkvJV82NDogJS5jXFxuIFxcdCQoY2FsbCBtc2csQ0MsLCRAKVxcbi1cXHQkKFEpJChDQykgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAkKG5vdGRpciAkXikgJChMRExJQlMpIC1vICRAXFxuK1xcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQFxcbiAkKGZvcmVhY2ggdCwkKFZNVEFSR0VUUyksJChldmFsICQoY2FsbCBnZW4tdGFyZ2V0LXJ1bGUtNjQsJCh0KSkpKVxcbiBlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xcbmluZGV4IDMwZDRhY2U3MTU1YWUuLmIzZjUzNzcxMTljYjggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuY1xcbkBAIC0xNSw5ICsxNSw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NlcnJuby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBNQVBfU0laRV9NQlxcdDEwMFxcbiAjZGVmaW5lIE1BUF9TSVpFXFx0KE1BUF9TSVpFX01CICogMTAyNCAqIDEwMjQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG5pbmRleCA4YWE1MjQ5ZDliZWY2Li4zMjY0YTgyODU3NWJkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG5AQCAtMjksNyArMjksNiBAQFxcbiAjaW5jbHVkZSBcXFwiLi4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XFxuIHN0YXRpYyBpbnQgcGFnZW1hcF9mZDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xcbmluZGV4IDE5NjA2MzVhOTUzZWIuLmU0NjYwYmY4OWI2MjQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xcbkBAIC0yNSw3ICsyNSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuIHVpbnQ2NF90IHBhZ2Vfc2l6ZTtcXG4gdWludDY0X3QgcG1kX3BhZ2VzaXplO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcXG5pbmRleCA1YzhlYzNjYTc1ZDdkLi5hZjVjZDliMzAzMzk1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xcbkBAIC0yMSw3ICsyMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdWlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXFwiLi4vcGlkZmQvcGlkZmQuaFxcXCJcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjMxYWUzOGUwOTEzNmRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmNcXG5AQCAtMCwwICsxLDI2MyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyAvLyBVc2UgbGw2NFxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRib29sLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZGlyZW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvaW9jdGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NtbS9ndXBfdGVzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4rXFxuKyNkZWZpbmUgTUIgKDFVTCBcXHUwMDNjXFx1MDAzYyAyMClcXG4rXFxuKy8qIEp1c3QgdGhlIGZsYWdzIHdlIG5lZWQsIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgaW50ZXJuYWxzLiAqL1xcbisjZGVmaW5lIEZPTExfV1JJVEVcXHQweDAxXFx0LyogY2hlY2sgcHRlIGlzIHdyaXRhYmxlICovXFxuK1xcbisvKiBQYWdlIGNvdW50cyBleGVyY2lzaW5nIHNpbmdsZSwgVEhQLWJhdGNoLCBwYXJ0aWFsLCBhbmQgZnVsbC1tYXBwaW5nIEdVUC4gKi9cXG4rc3RhdGljIGNvbnN0IGludCBucl9wYWdlc19saXN0W10gPSB7IDEsIDUxMiwgMTIzLCAtMSB9O1xcbitcXG4rI2RlZmluZSBHVVBfVEVTVF9GSUxFIFxcXCIvc3lzL2tlcm5lbC9kZWJ1Zy9ndXBfdGVzdFxcXCJcXG4rI2RlZmluZSBOUl9IVUdFX1BBR0VTIDJcXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGhwX3NpemU7XFxuK1xcbitGSVhUVVJFKGd1cF90ZXN0KVxcbit7XFxuK1xcdGludCBndXBfZmQ7XFxuK1xcdGNoYXIgKmFkZHI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVChndXBfdGVzdClcXG4re1xcbitcXHRib29sIHRocDtcXG4rXFx0Ym9vbCBodWdldGxiO1xcbitcXHRib29sIHdyaXRlO1xcbitcXHRib29sIHNoYXJlZDtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGUpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSB0cnVlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3JlYWQpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSBmYWxzZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZV90aHApXFxuK3tcXG4rXFx0LnRocCA9IHRydWUsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF90aHApXFxuK3tcXG4rXFx0LnRocCA9IHRydWUsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gZmFsc2UsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX2h1Z2V0bGIpXFxuK3tcXG4rXFx0LnRocCA9IGZhbHNlLFxcbitcXHQuaHVnZXRsYiA9IHRydWUsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSBmYWxzZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZF9odWdldGxiKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSB0cnVlLFxcbitcXHQud3JpdGUgPSBmYWxzZSxcXG4rXFx0LnNoYXJlZCA9IGZhbHNlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSBmYWxzZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZClcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IGZhbHNlLFxcbitcXHQuc2hhcmVkID0gdHJ1ZSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV90aHApXFxuK3tcXG4rXFx0LnRocCA9IHRydWUsXFxuK1xcdC5odWdldGxiID0gZmFsc2UsXFxuK1xcdC53cml0ZSA9IHRydWUsXFxuK1xcdC5zaGFyZWQgPSB0cnVlLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3JlYWRfdGhwKVxcbit7XFxuK1xcdC50aHAgPSB0cnVlLFxcbitcXHQuaHVnZXRsYiA9IGZhbHNlLFxcbitcXHQud3JpdGUgPSBmYWxzZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGVfaHVnZXRsYilcXG4re1xcbitcXHQudGhwID0gZmFsc2UsXFxuK1xcdC5odWdldGxiID0gdHJ1ZSxcXG4rXFx0LndyaXRlID0gdHJ1ZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF9odWdldGxiKVxcbit7XFxuK1xcdC50aHAgPSBmYWxzZSxcXG4rXFx0Lmh1Z2V0bGIgPSB0cnVlLFxcbitcXHQud3JpdGUgPSBmYWxzZSxcXG4rXFx0LnNoYXJlZCA9IHRydWUsXFxuK307XFxuK1xcbitGSVhUVVJFX1NFVFVQKGd1cF90ZXN0KVxcbit7XFxuK1xcdGludCBtbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTO1xcbitcXHRjaGFyICpwO1xcbitcXG4rXFx0c2VsZi1cXHUwMDNlc2l6ZSA9IDEyOCAqIE1CO1xcbitcXG4rXFx0aWYgKHZhcmlhbnQtXFx1MDAzZWh1Z2V0bGIpIHtcXG4rXFx0XFx0aWYgKCFocF9zaXplKVxcbitcXHRcXHRcXHRTS0lQKHJldHVybiwgXFxcIkh1Z2VUTEIgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuK1xcbitcXHRcXHRpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSBcXHUwMDNjIE5SX0hVR0VfUEFHRVMpXFxuK1xcdFxcdFxcdFNLSVAocmV0dXJuLCBcXFwiTm90IGVub3VnaCBodWdlIHBhZ2VzXFxcXG5cXFwiKTtcXG4rXFxuK1xcdFxcdHNlbGYtXFx1MDAzZXNpemUgPSBOUl9IVUdFX1BBR0VTICogaHBfc2l6ZTtcXG4rXFx0XFx0bW1hcF9mbGFncyB8PSBNQVBfSFVHRVRMQjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZhcmlhbnQtXFx1MDAzZXNoYXJlZClcXG4rXFx0XFx0bW1hcF9mbGFncyA9IChtbWFwX2ZsYWdzIFxcdTAwMjYgfk1BUF9QUklWQVRFKSB8IE1BUF9TSEFSRUQ7XFxuK1xcbitcXHQvKiBndXBfZmQgaGFzIHRvIGJlIFxcdTAwM2U9IDAuIEFscmVhZHkgY2hlY2tlZCBpbiBtYWluKCkgKi9cXG4rXFx0c2VsZi1cXHUwMDNlZ3VwX2ZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xcbitcXHRBU1NFUlRfR0Uoc2VsZi1cXHUwMDNlZ3VwX2ZkLCAwKTtcXG4rXFxuK1xcdHNlbGYtXFx1MDAzZWFkZHIgPSBtbWFwKE5VTEwsIHNlbGYtXFx1MDAzZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdFxcdCAgbW1hcF9mbGFncywgLTEsIDApO1xcbitcXG4rXFx0QVNTRVJUX05FKHNlbGYtXFx1MDAzZWFkZHIsIE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0aW50IGVyciA9IGVycm5vO1xcbitcXG4rXFx0XFx0Y2xvc2Uoc2VsZi1cXHUwMDNlZ3VwX2ZkKTtcXG4rXFx0XFx0VEhfTE9HKFxcXCJtbWFwIGZhaWxlZDogJXNcXFwiLCBzdHJlcnJvcihlcnIpKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZhcmlhbnQtXFx1MDAzZXRocClcXG4rXFx0XFx0bWFkdmlzZShzZWxmLVxcdTAwM2VhZGRyLCBzZWxmLVxcdTAwM2VzaXplLCBNQURWX0hVR0VQQUdFKTtcXG4rXFx0ZWxzZSBpZiAoIXZhcmlhbnQtXFx1MDAzZWh1Z2V0bGIpXFxuK1xcdFxcdG1hZHZpc2Uoc2VsZi1cXHUwMDNlYWRkciwgc2VsZi1cXHUwMDNlc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcXG4rXFxuK1xcdGZvciAocCA9IHNlbGYtXFx1MDAzZWFkZHI7ICh1bnNpZ25lZCBsb25nKXAgXFx1MDAzYyAodW5zaWduZWQgbG9uZylzZWxmLVxcdTAwM2VhZGRyXFxuK1xcdFxcdFxcdCsgc2VsZi1cXHUwMDNlc2l6ZTsgcCArPSBwc2l6ZSgpKVxcbitcXHRcXHRwWzBdID0gMDtcXG4rfVxcbitcXG4rRklYVFVSRV9URUFSRE9XTihndXBfdGVzdClcXG4re1xcbitcXHRtdW5tYXAoc2VsZi1cXHUwMDNlYWRkciwgc2VsZi1cXHUwMDNlc2l6ZSk7XFxuK1xcdGNsb3NlKHNlbGYtXFx1MDAzZWd1cF9mZCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9ndXBfY21kKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSxcXG4rXFx0XFx0XFx0IEZJWFRVUkVfREFUQShndXBfdGVzdCkgKnNlbGYsXFxuK1xcdFxcdFxcdCBjb25zdCBGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpICp2YXJpYW50LFxcbitcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBjb21tYW5kKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIChpbnQpQVJSQVlfU0laRShucl9wYWdlc19saXN0KTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7XFxuK1xcdFxcdFxcdC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cXHUwMDNlYWRkcixcXG4rXFx0XFx0XFx0LnNpemUgPSBzZWxmLVxcdTAwM2VzaXplLFxcbitcXHRcXHRcXHQubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlc19saXN0W2ldIFxcdTAwM2MgMCA/XFxuK1xcdFxcdFxcdFxcdHNlbGYtXFx1MDAzZXNpemUgLyBwc2l6ZSgpIDogbnJfcGFnZXNfbGlzdFtpXSxcXG4rXFx0XFx0XFx0Lmd1cF9mbGFncyA9IHZhcmlhbnQtXFx1MDAzZXdyaXRlID8gRk9MTF9XUklURSA6IDAsXFxuK1xcdFxcdH07XFxuK1xcbitcXHRcXHRUSF9MT0coXFxcIm5yX3BhZ2VzX3Blcl9jYWxsPSV1XFxcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXFx1MDAzZWd1cF9mZCwgY29tbWFuZCwgXFx1MDAyNmd1cCksIDApO1xcbitcXHRcXHRBU1NFUlRfRVEoZ3VwLnNpemUsIHNlbGYtXFx1MDAzZXNpemUpO1xcbitcXHR9XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXMpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfQkFTSUNfVEVTVCk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXMpXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fQkFTSUNfVEVTVCk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgZ2V0X3VzZXJfcGFnZXNfZmFzdClcXG4re1xcbitcXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIEdVUF9GQVNUX0JFTkNITUFSSyk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfZmFzdClcXG4re1xcbitcXHRydW5fZ3VwX2NtZChfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFBJTl9GQVNUX0JFTkNITUFSSyk7XFxuK31cXG4rXFxuK1RFU1RfRihndXBfdGVzdCwgcGluX3VzZXJfcGFnZXNfbG9uZ3Rlcm0pXFxuK3tcXG4rXFx0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKTtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbit7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gb3BlbihHVVBfVEVTVF9GSUxFLCBPX1JEV1IpO1xcbitcXHRpZiAoZmQgPT0gLTEpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4rXFx0XFx0aWYgKGVycm5vID09IEVBQ0NFUylcXG4rXFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXFxcblxcXCIpO1xcbitcXHRcXHRpZiAoZXJybm8gPT0gRU5PRU5UKSB7XFxuK1xcdFxcdFxcdERJUiAqZGVidWdmcyA9IG9wZW5kaXIoXFxcIi9zeXMva2VybmVsL2RlYnVnXFxcIik7XFxuK1xcbitcXHRcXHRcXHRpZiAoIWRlYnVnZnMpXFxuK1xcdFxcdFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJNb3VudCBkZWJ1Z2ZzIGF0IC9zeXMva2VybmVsL2RlYnVnXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Y2xvc2VkaXIoZGVidWdmcyk7XFxuK1xcdFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJDaGVjayBDT05GSUdfR1VQX1RFU1QgaW4ga2VybmVsIGNvbmZpZ1xcXFxuXFxcIik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gb3BlbiAlczogJXNcXFxcblxcXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0aHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcXG4rXFx0aWYgKGhwX3NpemUpXFxuK1xcdFxcdGh1Z2V0bGJfc2V0dXBfZGVmYXVsdChOUl9IVUdFX1BBR0VTKTtcXG4rXFxuK1xcdHJldHVybiB0ZXN0X2hhcm5lc3NfcnVuKGFyZ2MsIGFyZ3YpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG5pbmRleCA1MTBkZTkzYmU2ODE0Li5jOWQ4YjQ0OTEyNjM4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcXG5AQCAtMjksNyArMjksNiBAQFxcbiAjaW5jbHVkZSBcXFwiLi4vLi4vLi4vLi4vbW0vZ3VwX3Rlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XFxuIHN0YXRpYyBpbnQgbnJfaHVnZXRsYnNpemVzO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXFxuaW5kZXggZTI2NDJlY2EwZDAyYi4uZmExYTY1MTk2M2ZkMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXFxuQEAgLTEwLDkgKzEwLDYgQEBcXG4gICogYnVncy5cXG4gICovXFxuIFxcbi0jaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuLVxcbiAjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbkBAIC0zMyw2ICszMCw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvZXZlbnRmZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdXNlcmZhdWx0ZmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3BvbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4gXFxuIC8qXFxuICAqIFRoaXMgaXMgYSBwcml2YXRlIFVBUEkgdG8gdGhlIGtlcm5lbCB0ZXN0IG1vZHVsZSBzbyBpdCBpc24ndCBleHBvcnRlZFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXFxuaW5kZXggNTU1YjRiM2QxNDMwNy4uNTdjZjc5MGNhNDc4ZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXFxuQEAgLTE0LDcgKzE0LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIE1JTl9GUkVFX1BBR0VTXFx0MjBcXG4gI2RlZmluZSBOUl9IVUdFX1BBR0VTXFx0MTBcXHQvKiBjb21tb24gbnVtYmVyIG9mIHBhZ2VzIHRvIG1hcC9hbGxvY2F0ZSAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXFxuaW5kZXggMGYyYWFkMWI3ZGJkNi4uYTQ1OGJlY2Y1ODMyNyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXFxuQEAgLTE4LDcgKzE4LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWZkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KVxcbiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXFxuaW5kZXggZWQzZDkyZTg2MmQ4Ny4uOWI3MjRhZjY2ZTkzOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuY1xcbkBAIC0yNiw3ICsyNiw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRib29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIERFRkFVTFRfTEVOR1RIX01CIDEwVUxcXG4gI2RlZmluZSBNQl9UT19CWVRFUyh4KSAoeCAqIDEwMjQgKiAxMDI0KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xcbmluZGV4IDNmZjdmMDYyYjdlYjQuLmY0NTE0ZGE0OWUxZGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcXG5AQCAtMjksNyArMjksNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNClcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXFxuaW5kZXggNGFmOWQzZGI3YjViNi4uZDk1NjUyMTkzNzhhYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuY1xcbkBAIC0yMiwxMCArMjIsMTAgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdGZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2lmbmRlZiBNQURWX1NPRlRfT0ZGTElORVxcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxcbkBAIC04NSw4ICs4NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9yaWdfZW5hYmxlX3NvZnRfb2ZmbGluZSA9IC0xVUw7XFxuIFxcbiAvKlxcbiAgKiBSdW5zIGZyb20gYW4gYXRleGl0IGhhbmRsZXIsIHNvIGl0IG11c3Qgbm90IGNhbGwgYW55dGhpbmcgdGhhdFxcbi0gKiBleGl0cyBvbiBmYWlsdXJlOiB3cml0ZV9udW0oKSB3b3VsZCByZS1lbnRlciBleGl0KCkgdGhyb3VnaFxcbi0gKiBrc2Z0X2V4aXRfZmFpbF9tc2coKS5cXG4rICogZXhpdHMgb24gZmFpbHVyZS5cXG4gICovXFxuIHN0YXRpYyB2b2lkIHJlc3RvcmVfZW5hYmxlX3NvZnRfb2ZmbGluZSh2b2lkKVxcbiB7XFxuQEAgLTE1Miw3ICsxNTEsMTAgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2Z0X29mZmxpbmVfY29tbW9uKGludCBlbmFibGVfc29mdF9vZmZsaW5lKVxcbiBcXHRodWdlcGFnZXNpemVfa2IgPSBmaWxlX3N0YXQuZl9ic2l6ZSAvIDEwMjQ7XFxuIFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJIdWdlcGFnZXNpemUgaXMgJWxka0JcXFxcblxcXCIsIGh1Z2VwYWdlc2l6ZV9rYik7XFxuIFxcbi1cXHR3cml0ZV9udW0oRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRILCBlbmFibGVfc29mdF9vZmZsaW5lKTtcXG4rXFx0cmV0ID0gd3JpdGVfbnVtKEVOQUJMRV9TT0ZUX09GRkxJTkVfUEFUSCwgZW5hYmxlX3NvZnRfb2ZmbGluZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiRmFpbGVkIHRvIHdyaXRlIHRvICVzOiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRILCBzdHJlcnJvcigtcmV0KSk7XFxuIFxcbiBcXHRucl9odWdlcGFnZXNfYmVmb3JlID0gaHVnZXRsYl9ucl9kZWZhdWx0X3BhZ2VzKCk7XFxuIFxcbkBAIC0xODksNiArMTkxLDggQEAgc3RhdGljIHZvaWQgdGVzdF9zb2Z0X29mZmxpbmVfY29tbW9uKGludCBlbmFibGVfc29mdF9vZmZsaW5lKVxcbiBcXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiB7XFxuK1xcdGludCByZXQ7XFxuK1xcbiBcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbiBcXG4gXFx0aWYgKCFodWdldGxiX3NldHVwX2RlZmF1bHQoOCkpXFxuQEAgLTE5Niw3ICsyMDAsMTEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXG4gXFx0a3NmdF9zZXRfcGxhbigyKTtcXG4gXFxuLVxcdG9yaWdfZW5hYmxlX3NvZnRfb2ZmbGluZSA9IHJlYWRfbnVtKEVOQUJMRV9TT0ZUX09GRkxJTkVfUEFUSCk7XFxuK1xcdHJldCA9IHJlYWRfbnVtKEVOQUJMRV9TT0ZUX09GRkxJTkVfUEFUSCwgXFx1MDAyNm9yaWdfZW5hYmxlX3NvZnRfb2ZmbGluZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiRmFpbGVkIHRvIHJlYWQgJXM6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIHN0cmVycm9yKC1yZXQpKTtcXG4rXFxuIFxcdGF0ZXhpdChyZXN0b3JlX2VuYWJsZV9zb2Z0X29mZmxpbmUpO1xcbiBcXG4gXFx0dGVzdF9zb2Z0X29mZmxpbmVfY29tbW9uKDEpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbmluZGV4IGZiNDYwMDU3MGUxMzEuLjk0OTU5NzRlY2NiZWEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmNcXG5AQCAtMjAsNyArMjAsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpZm5kZWYgU1RBVFhfRElPQUxJR05cXG4gI2RlZmluZSBTVEFUWF9ESU9BTElHTlxcdFxcdDB4MDAwMDIwMDBVXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcXG5pbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcXG5AQCAtMTAsNyArMTAsNiBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfbWFkdl92c19tYXAuY1xcbkBAIC0yNSw3ICsyNSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBJTkxPT1BfSVRFUiAxMDBcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbmluZGV4IGY4MjY3M2Y1ZjZiNDcuLjUyNTEwOGNhY2U1NGEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXFxuQEAgLTIyLDcgKzIyLDYgQEBcXG4gI2luY2x1ZGUgXFxcImxpbnV4L21hZ2ljLmhcXFwiXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgQkFTRV9BRERSICgodm9pZCAqKSgxVUwgXFx1MDAzY1xcdTAwM2MgMzApKVxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBocGFnZV9wbWRfc2l6ZTtcXG5AQCAtMTIyLDYgKzEyMSw3IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXFxuIFxcdGNoYXIgYnVmWzEgXFx1MDAzY1xcdTAwM2MgMTBdO1xcbiBcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbiBcXHRjaGFyICpzdHIsICplbmQ7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRmaW5mby5kaXIgPSBkaXI7XFxuIFxcdGlmIChzdGF0KGZpbmZvLmRpciwgXFx1MDAyNnBhdGhfc3RhdCkpXFxuQEAgLTE0Miw4ICsxNDIsOSBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKVxcbiBcXHRcXHQgICAgIG1ham9yKHBhdGhfc3RhdC5zdF9kZXYpLCBtaW5vcihwYXRoX3N0YXQuc3RfZGV2KSlcXG4gXFx0ICAgIFxcdTAwM2U9IHNpemVvZihwYXRoKSlcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4tXFx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwicmVhZF9maWxlKHVldmVudClcXFwiKTtcXG4rXFx0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRfZmlsZSglcyk6ICVzXFxcXG5cXFwiLCBwYXRoLCBzdHJlcnJvcigtcmV0KSk7XFxuIFxcdGlmIChzdHJzdHIoYnVmLCBcXFwiREVWVFlQRT1kaXNrXFxcIikpIHtcXG4gXFx0XFx0LyogRm91bmQgaXQgKi9cXG4gXFx0XFx0aWYgKHNucHJpbnRmKGZpbmZvLmRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXFxuQEAgLTMyNCw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxcbiB7XFxuIFxcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XFxuIFxcdGNvbnN0IGludCBtbWFwX3Byb3QgPSBzZXR1cCA9PSBGSUxFX1NFVFVQX1JFQURfT05MWV9GUyA/IFBST1RfUkVBRCA6IChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTtcXG4tXFx0aW50IGZkO1xcbitcXHRpbnQgZmQsIHJldDtcXG4gXFx0dm9pZCAqcDtcXG4gXFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbiBcXG5AQCAtMzYyLDcgKzM2MywxMSBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcIm1tYXAoKVxcXCIpO1xcbiBcXG4gXFx0LyogRHJvcCBwYWdlIGNhY2hlICovXFxuLVxcdHdyaXRlX2ZpbGUoXFxcIi9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1xcXCIsIFxcXCIzXFxcIiwgMik7XFxuK1xcdHJldCA9IHdyaXRlX2ZpbGUoXFxcIi9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1xcXCIsIFxcXCIzXFxcIiwgMik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwid3JpdGVfZmlsZShkcm9wX2NhY2hlcyk6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBzdHJlcnJvcigtcmV0KSk7XFxuK1xcbiBcXHRzdWNjZXNzKFxcXCJPS1xcXCIpO1xcbiBcXHRyZXR1cm4gcDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuaW5kZXggNWZkNzc5MmEwZDQ3OS4uNjcxMWY0YzYxMzcxMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuQEAgLTE1LDcgKzE1LDYgQEBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiAjaW5jbHVkZSBcXHUwMDNjaW5jbHVkZS92ZHNvL3RpbWU2NC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNkZWZpbmUgS1NNX1NZU0ZTX1BBVEggXFxcIi9zeXMva2VybmVsL21tL2tzbS9cXFwiXFxuICNkZWZpbmUgS1NNX0ZQKHMpIChLU01fU1lTRlNfUEFUSCBzKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuaW5kZXggZjE5ZDUzYzY5NTc2NC4uYTM1ZTJiNTdlMDViMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXFxuQEAgLTUsNyArNSw2IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbkBAIC0xNiw2ICsxNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdGltZS5oXFx1MDAzZVxcbitcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gXFxuICNkZWZpbmUgVFdPTUVHXFx0XFx0KDJcXHUwMDNjXFx1MDAzYzIwKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlbWFwX2lvY3RsLmNcXG5pbmRleCBkOWE0ZmI3ODJlY2ZlLi4wMzg5OGI0ZjZjZGFiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xcbkBAIC0yNCw3ICsyNCw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gI2RlZmluZSBQQUdFTUFQX0JJVFNfQUxMXFx0XFx0KFBBR0VfSVNfV1BBTExPV0VEIHwgUEFHRV9JU19XUklUVEVOIHxcXHRcXFxcXFxuIFxcdFxcdFxcdFxcdFxcdCBQQUdFX0lTX0ZJTEUgfCBQQUdFX0lTX1BSRVNFTlQgfFxcdFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG5pbmRleCA4MmM2ZTk2ZWE2ZWIzLi5mOWVjMTQwOGE2ZTMwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXFxuQEAgLTE0LDcgKzE0LDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuIFxcbiAjaWZuZGVmIFBSX1RIUF9ESVNBQkxFX0VYQ0VQVF9BRFZJU0VEXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG5pbmRleCBhZTZlMTUzMGIzNTQ4Li5iNzg4MmFiOTc2ODNmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG5AQCAtNDUsOCArNDUsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvcHRyYWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzZXRqbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuIFxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInBrZXktaGVscGVycy5oXFxcIlxcbiBcXG4gdTY0IHNoYWRvd19wa2V5X3JlZztcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbmluZGV4IGQwOWY5ZjZhMzg0ZWUuLmFlMGFiNWVmYWJhZTYgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbkBAIC0xMzAsMzAgKzEzMCw2IEBAIHRlc3Rfc2VsZWN0ZWQoKSB7XFxuIFxcdGZpXFxuIH1cXG4gXFxuLXJ1bl9ndXBfbWF0cml4KCkge1xcbi0gICAgIyAtdDogdGhwPW9uLCAtVDogdGhwPW9mZiwgLUg6IGh1Z2V0bGI9b25cXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XFxuLVxcbi0gICAgZm9yIGh1Z2UgaW4gLXQgLVQgXFxcIi1IIC1tICRodWdldGxiX21iXFxcIjsgZG9cXG4tICAgICAgICAjIC11OiBndXAtZmFzdCwgLVU6IGd1cC1iYXNpYywgLWE6IHBpbi1mYXN0LCAtYjogcGluLWJhc2ljLCAtTDogcGluLWxvbmd0ZXJtXFxuLSAgICAgICAgZm9yIHRlc3RfY21kIGluIC11IC1VIC1hIC1iIC1MOyBkb1xcbi0gICAgICAgICAgICAjIC13OiB3cml0ZT0xLCAtVzogd3JpdGU9MFxcbi0gICAgICAgICAgICBmb3Igd3JpdGUgaW4gLXcgLVc7IGRvXFxuLSAgICAgICAgICAgICAgICAjIC1TOiBzaGFyZWRcXG4tICAgICAgICAgICAgICAgIGZvciBzaGFyZSBpbiAtUyBcXFwiIFxcXCI7IGRvXFxuLSAgICAgICAgICAgICAgICAgICAgIyAtbjogSG93IG1hbnkgcGFnZXMgdG8gZmV0Y2ggdG9nZXRoZXI/ICA1MTIgaXMgc3BlY2lhbFxcbi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCdzIGRlZmF1bHQgdGhwIHNpemUgKG9yIDJNIG9uIHg4NiksIDEyMyB0b1xcbi0gICAgICAgICAgICAgICAgICAgICMganVzdCB0ZXN0IHBhcnRpYWwgZ3VwIHdoZW4gaGl0IGEgaHVnZSBpbiB3aGF0ZXZlciBmb3JtXFxuLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSBpbiBcXFwiLW4gMVxcXCIgXFxcIi1uIDUxMlxcXCIgXFxcIi1uIDEyM1xcXCIgXFxcIi1uIC0xXFxcIjsgZG9cXG4tICAgICAgICAgICAgICAgICAgICAgICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IFxcXFxcXG4tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaHVnZSAkdGVzdF9jbWQgJHdyaXRlICRzaGFyZSAkbnVtXFxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxcbi0gICAgICAgICAgICAgICAgZG9uZVxcbi0gICAgICAgICAgICBkb25lXFxuLSAgICAgICAgZG9uZVxcbi0gICAgZG9uZVxcbi19XFxuLVxcbiAjIGZpbHRlciA2NGJpdCBhcmNoaXRlY3R1cmVzXFxuIEFSQ0g2NFNUUj1cXFwiYXJtNjQgbWlwczY0IHBhcmlzYzY0IHBwYzY0IHBwYzY0bGUgcmlzY3Y2NCBzMzkweCBzcGFyYzY0IHg4Nl82NFxcXCJcXG4gaWYgWyAteiBcXFwiJEFSQ0hcXFwiIF07IHRoZW5cXG5AQCAtMjc1LDE4ICsyNTEsNyBAQCBmaVxcbiBcXG4gQ0FURUdPUlk9XFxcIm1tYXBcXFwiIHJ1bl90ZXN0IC4vbWFwX2ZpeGVkX25vcmVwbGFjZVxcbiBcXG4taWYgJFJVTl9BTEw7IHRoZW5cXG4tICAgIHJ1bl9ndXBfbWF0cml4XFxuLWVsc2VcXG4tICAgICMgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIGJlbmNobWFya1xcbi0gICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC11IC1uIDFcXG4tICAgIENBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAtMVxcbi0gICAgIyBwaW5fdXNlcl9wYWdlc19mYXN0KCkgYmVuY2htYXJrXFxuLSAgICBDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gMVxcbi0gICAgQ0FURUdPUlk9XFxcImd1cF90ZXN0XFxcIiBydW5fdGVzdCAuL2d1cF90ZXN0IC1hIC1uIC0xXFxuLWZpXFxuLSMgRHVtcCBwYWdlcyAwLCAxOSwgYW5kIDQwOTYsIHVzaW5nIHBpbl91c2VyX3BhZ2VzOlxcbi1DQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMFxcbitDQVRFR09SWT1cXFwiZ3VwX3Rlc3RcXFwiIHJ1bl90ZXN0IC4vZ3VwXFxuIENBVEVHT1JZPVxcXCJndXBfdGVzdFxcXCIgcnVuX3Rlc3QgLi9ndXBfbG9uZ3Rlcm1cXG4gXFxuIENBVEVHT1JZPVxcXCJ1c2VyZmF1bHRmZFxcXCIgcnVuX3Rlc3QgLi91ZmZkLXVuaXQtdGVzdHNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXFxuaW5kZXggNWYyNzg5MTNjNGQ3NS4uN2Y2NDliNjczMzU1MyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zb2Z0LWRpcnR5LmNcXG5AQCAtOSw3ICs5LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIIFxcXCIvcHJvYy9zZWxmL3BhZ2VtYXBcXFwiXFxuICNkZWZpbmUgVEVTVF9JVEVSQVRJT05TIDEwMDAwXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuaW5kZXggYzAxZDIyN2Q3ZmQ2ZC4uNjhmNTA4YzlhMzU1ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xcbkBAIC0yMSw3ICsyMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJ2bV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiB1aW50NjRfdCBwYWdlc2l6ZTtcXG4gdW5zaWduZWQgaW50IHBhZ2VzaGlmdDtcXG5AQCAtMTQ1LDcgKzE0NCwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9kZWJ1Z2ZzKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiBcXHRpZiAocmV0IFxcdTAwM2U9IElOUFVUX01BWClcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlczogRGVidWdmcyBpbnB1dCBpcyB0b28gbG9uZ1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbiBcXG4tXFx0d3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICsgMSk7XFxuK1xcdHJldCA9IHdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCArIDEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIndyaXRlX2ZpbGUoJXMpOiAlc1xcXFxuXFxcIiwgU1BMSVRfREVCVUdGUyxcXG4rXFx0XFx0XFx0XFx0ICAgc3RyZXJyb3IoLXJldCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY2hhciAqYWxsb2NhdGVfemVyb19maWxsZWRfaHVnZXBhZ2Uoc2l6ZV90IGxlbilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xcbmluZGV4IDUwZDA4MDViNjVkYjkuLmEwNGY1ODhkZjc4MGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xcbkBAIC0xNCw3ICsxNCw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQilcXG4gI2RlZmluZSBNQVBfSFVHRVRMQlxcdDB4NDAwMDBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXFxuaW5kZXggOGViMGM1NjMwZTdlMy4uOTZmNzI4OThlYmUwYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcXG5AQCAtMTcsNyArMTcsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbi0jaW5jbHVkZSBcXFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcXCJcXG4gXFxuIGludCBiYWNraW5nX2ZkID0gLTE7XFxuIGludCBtbWFwX2ZsYWdzID0gTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkUgfCBNQVBfUFJJVkFURTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcXG5pbmRleCA5MmEyMWI5N2Y3NDVhLi4wNzIzODQzYTc2MjZiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXFxuQEAgLTM3LDcgKzM3LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFVGRkRfRkxBR1NcXHQoT19DTE9FWEVDIHwgT19OT05CTE9DSyB8IFVGRkRfVVNFUl9NT0RFX09OTFkpXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xcbmluZGV4IDU3MmMyNTE2ZTg3NGQuLmM0OGVhYWI4ZTc1Y2YgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcXG5AQCAtNyw4ICs3LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2Fzc2VydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrc2VsZnRlc3QuaFxcXCJcXG4tI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ1ZmZkLWNvbW1vbi5oXFxcIlxcbiBcXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92YV9oaWdoX2FkZHJfc3dpdGNoLmNcXG5pbmRleCBlMjRkN2JhMDBiNDQxLi41YTM1NGE2NjRkMWY3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xcbkBAIC0xMSw3ICsxMSw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwidm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJodWdlcGFnZV9zZXR0aW5ncy5oXFxcIlxcbiBcXG4gLypcXG4gICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3Nlc1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5pbmRleCA4MGJjOWY1OTdiNTIxLi40NzUxZGI3OThjM2FjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xcbkBAIC04ODksMTExICs4ODksNTQgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcXG4gXFx0cmV0dXJuIHJldCBcXHUwMDNlIDAgPyAwIDogLWVycm5vO1xcbiB9XFxuIFxcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbilcXG4te1xcbi1cXHRpbnQgZmQ7XFxuLVxcdHNzaXplX3QgbnVtcmVhZDtcXG4tXFxuLVxcdGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7XFxuLVxcdGlmIChmZCA9PSAtMSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcXG4tXFx0aWYgKG51bXJlYWQgXFx1MDAzYyAxKSB7XFxuLVxcdFxcdGNsb3NlKGZkKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuLVxcdGJ1ZltudW1yZWFkXSA9ICdcXFxcMCc7XFxuLVxcdGNsb3NlKGZkKTtcXG4tXFxuLVxcdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpXFxuLXtcXG4tXFx0aW50IGZkLCBzYXZlZF9lcnJubztcXG4tXFx0c3NpemVfdCBudW13cml0dGVuO1xcbi1cXG4tXFx0aWYgKGJ1ZmxlbiBcXHUwMDNjIDIpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiSW5jb3JyZWN0IGJ1ZmZlciBsZW46ICV6dVxcXFxuXFxcIiwgYnVmbGVuKTtcXG4tXFxuLVxcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XFxuLVxcdGlmIChmZCA9PSAtMSlcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlcyBvcGVuIGZhaWxlZDogJXNcXFxcblxcXCIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7XFxuLVxcbi1cXHRudW13cml0dGVuID0gd3JpdGUoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7XFxuLVxcdHNhdmVkX2Vycm5vID0gZXJybm87XFxuLVxcdGNsb3NlKGZkKTtcXG4tXFx0ZXJybm8gPSBzYXZlZF9lcnJubztcXG4tXFx0aWYgKG51bXdyaXR0ZW4gXFx1MDAzYyAwKSB7XFxuLVxcdFxcdGlmIChpZ25vcmVfZWludmFsIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVJTlZBTClcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIiVzIHdyaXRlKCUuKnMpIGZhaWxlZDogJXNcXFxcblxcXCIsIHBhdGgsIChpbnQpKGJ1ZmxlbiAtIDEpLFxcbi1cXHRcXHRcXHRcXHRidWYsIHN0cmVycm9yKGVycm5vKSk7XFxuLVxcdH1cXG4tXFx0aWYgKG51bXdyaXR0ZW4gIT0gYnVmbGVuIC0gMSlcXG4tXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCIlcyB3cml0ZSglLipzKSBpcyB0cnVuY2F0ZWQsIGV4cGVjdGVkICV6dSBieXRlcywgZ290ICV6ZCBieXRlc1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0cGF0aCwgKGludCkoYnVmbGVuIC0gMSksIGJ1ZiwgYnVmbGVuIC0gMSwgbnVtd3JpdHRlbik7XFxuLX1cXG4tXFxuLXZvaWQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXFxuLXtcXG4tXFx0X193cml0ZV9maWxlKHBhdGgsIGJ1ZiwgYnVmbGVuLCAvKiBpZ25vcmVfZWludmFsID0gKi8gZmFsc2UpO1xcbi19XFxuLVxcbi11bnNpZ25lZCBsb25nIHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgpXFxuLXtcXG4tXFx0Y2hhciBidWZbMjFdO1xcbi1cXG4tXFx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpXFxuLVxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwicmVhZF9maWxlKClcXFwiKTtcXG4tXFxuLVxcdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBfX3dyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSwgYm9vbCBpZ25vcmVfZWludmFsKVxcbi17XFxuLVxcdGNoYXIgYnVmWzIxXTtcXG4tXFxuLVxcdHNwcmludGYoYnVmLCBcXFwiJWx1XFxcIiwgbnVtKTtcXG4tXFx0X193cml0ZV9maWxlKHBhdGgsIGJ1Ziwgc3RybGVuKGJ1ZikgKyAxLCBpZ25vcmVfZWludmFsKTtcXG4tfVxcbi1cXG4tdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXFxuLXtcXG4tXFx0cmV0dXJuIF9fd3JpdGVfbnVtKHBhdGgsIG51bSwgLyogaWdub3JlX2VpbnZhbCA9ICovIGZhbHNlKTtcXG4tfVxcbi1cXG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcXG4te1xcbi1cXHRyZXR1cm4gX193cml0ZV9udW0ocGF0aCwgbnVtLCAvKiBpZ25vcmVfZWludmFsID0gKi8gdHJ1ZSk7XFxuLX1cXG4tXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWFsbCwgc2htbWF4O1xcbiBcXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKVxcbiB7XFxuLVxcdGlmIChzaG1tYXgpXFxuLVxcdFxcdHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiLCBzaG1tYXgpO1xcbi1cXHRpZiAoc2htYWxsKVxcbi1cXHRcXHR3cml0ZV9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXFxcIiwgc2htYWxsKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChzaG1tYXgpIHtcXG4rXFx0XFx0cmV0ID0gd3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIHNobW1heCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byByZXN0b3JlIHNobW1heDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cmVycm9yKC1yZXQpKTtcXG4rXFx0fVxcbitcXHRpZiAoc2htYWxsKSB7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBzaG1hbGwpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gcmVzdG9yZSBzaG1hbGw6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJlcnJvcigtcmV0KSk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuciA9IGxlbmd0aCAvIHBzaXplKCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmFsO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XFxcIiwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byByZWFkIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgc3RyZXJyb3IoLXJldCkpO1xcbiBcXG4tXFx0dmFsID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htbWF4XFxcIik7XFxuIFxcdGlmICh2YWwgXFx1MDAzYyBsZW5ndGgpIHtcXG4tXFx0XFx0d3JpdGVfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFxcXCIsIGxlbmd0aCk7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcXFwiLCBsZW5ndGgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gd3JpdGUgJWx1IHRvIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgbGVuZ3RoLCBzdHJlcnJvcigtcmV0KSk7XFxuIFxcdFxcdHNobW1heCA9IHZhbDtcXG4gXFx0fVxcbiBcXG4tXFx0dmFsID0gcmVhZF9udW0oXFxcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXFxcIik7XFxuK1xcdHJldCA9IHJlYWRfbnVtKFxcXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFxcXCIsIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJGYWlsZWQgdG8gcmVhZCAvcHJvYy9zeXMva2VybmVsL3NobWFsbDogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cmVycm9yKC1yZXQpKTtcXG4gXFx0aWYgKHZhbCBcXHUwMDNjIG5yKSB7XFxuLVxcdFxcdHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBucik7XFxuK1xcdFxcdHJldCA9IHdyaXRlX251bShcXFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGxcXFwiLCBucik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIkZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBuciwgc3RyZXJyb3IoLXJldCkpO1xcbiBcXHRcXHRzaG1hbGwgPSB2YWw7XFxuIFxcdH1cXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li42NGE4NmU4YTBjNDFiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbkBAIC04LDYgKzgsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlIC8qIF9TQ19QQUdFU0laRSAqL1xcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vZmlsZV91dGlscy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgQklUX1VMTChucikgICAgICAgICAgICAgICAgICAgKDFVTEwgXFx1MDAzY1xcdTAwM2MgKG5yKSlcXG4gI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KVxcbkBAIC0xNjYsMTIgKzE2OCw2IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pO1xcbiAjZGVmaW5lIFBBR0VNQVBfUFJFU0VOVChlbnQpXFx0KCgoZW50KSBcXHUwMDI2ICgxdWxsIFxcdTAwM2NcXHUwMDNjIDYzKSkgIT0gMClcXG4gI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpXFx0KChlbnQpIFxcdTAwMjYgKCgxdWxsIFxcdTAwM2NcXHUwMDNjIDU1KSAtIDEpKVxcbiBcXG4tdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XFxuLWludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcXG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcXG4tdm9pZCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pO1xcbi12b2lkIHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcXG4tXFxuIHZvaWQgc2htX2xpbWl0c19wcmVwYXJlKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTtcXG4gdm9pZCBfX3NobV9saW1pdHNfcmVzdG9yZSh2b2lkKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ2OjU5LjA5OTM1NDIyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTA5NzkwNzYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvbGliL21tLywgdG9vbHMvbW0vLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBkb2N1bWVudGF0aW9uIChEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCksIE1BSU5UQUlORVJTLCBhbmQgS2NvbmZpZyBoZWxwIHRleHQgKG1tL0tjb25maWcpLiBObyBjb21waWxlZCBrZXJuZWwgQyBsb2dpYyBpcyBhZmZlY3RlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODEzMGQ3NTI3MWQ3NDNhMmIyMWRiY2I0YTZiMzY1YmEwNGY3NDBkNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjQ2OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuaW5kZXggYzE2Y2ExNjNiNTVlMy4uZTBhY2VkYmQxZDQ4NiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdFxuQEAgLTIyNiwxNSArMjI2LDYgQEAgd2lsbCBiZSBwaW5uZWQgbG9uZ3Rlcm0sIGFuZCB3aG9zZSBkYXRhIHdpbGwgYmUgYWNjZXNzZWQuXG4gXG4gVW5pdCB0ZXN0aW5nXG4gPT09PT09PT09PT09XG4tVGhpcyBmaWxlOjpcbi1cbi0gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX3Rlc3QuY1xuLVxuLWhhcyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFwcGVyIGZ1bmN0aW9uczpcbi1cbi0qIFBJTl9GQVNUX0JFTkNITUFSSyAoLi9ndXBfdGVzdCAtYSlcbi0qIFBJTl9CQVNJQ19URVNUICguL2d1cF90ZXN0IC1iKVxuLVxuIFlvdSBjYW4gbW9uaXRvciBob3cgbWFueSB0b3RhbCBkbWEtcGlubmVkIHBhZ2VzIGhhdmUgYmVlbiBhY3F1aXJlZCBhbmQgcmVsZWFzZWRcbiBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIHZpYSB0d28gbmV3IC9wcm9jL3Ztc3RhdCBlbnRyaWVzOiA6OlxuIFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDM1MjYyYWEzZTY3ZWYuLmM0N2U2NTVjNDExMTIgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xNzE4Nyw4ICsxNzE4Nyw5IEBAIFQ6XHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW1cbiBGOlx0bW0vZ3VwLmNcbiBGOlx0bW0vZ3VwX3Rlc3QuY1xuIEY6XHRtbS9ndXBfdGVzdC5oXG4rRjpcdHRvb2xzL21tL2d1cF9iZW5jaC5jXG4rRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG4gRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jXG4tRjpcdHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbiBcbiBNRU1PUlkgTUFOQUdFTUVOVCAtIEtTTSAoS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcpXG4gTTpcdEFuZHJldyBNb3J0b24gXHUwMDNjYWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZ1x1MDAzZVxuQEAgLTE3Mjk1LDYgKzE3Mjk2LDcgQEAgRjpcdG1tL21lbW9yeS10aWVycy5jXG4gRjpcdG1tL3BhZ2VfaWRsZS5jXG4gRjpcdG1tL3BnYWxsb2MtdHJhY2suaFxuIEY6XHRtbS9wcm9jZXNzX3ZtX2FjY2Vzcy5jXG4rRjpcdHRvb2xzL2xpYi9tbS9cbiBGOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vXG4gXG4gTUVNT1JZIE1BTkFHRU1FTlQgLSBOVU1BIE1FTUJMT0NLUyBBTkQgTlVNQSBFTVVMQVRJT05cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggYzE4MGQ0MGNkNjcxMi4uNjFhYjFiOGEyZWJkZiAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbisrKyBiL21tL0tjb25maWdcbkBAIC0xMjkxLDI0ICsxMjkxLDE5IEBAIGNvbmZpZyBQRVJDUFVfU1RBVFNcbiBcdCAgYmUgdXNlZCB0byBoZWxwIHVuZGVyc3RhbmQgcGVyY3B1IG1lbW9yeSB1c2FnZS5cbiBcbiBjb25maWcgR1VQX1RFU1Rcbi1cdGJvb2wgXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzXCJcbitcdGJvb2wgXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzIGFuZCBiZW5jaG1hcmtzXCJcbiBcdGRlcGVuZHMgb24gREVCVUdfRlNcbiBcdGhlbHBcbiBcdCAgUHJvdmlkZXMgL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3QsIHdoaWNoIGluIHR1cm4gcHJvdmlkZXMgYSB3YXlcbi1cdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgZm9yXG4tXHQgIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWx5IG9mIEFQSSBjYWxscy5cbitcdCAgdG8gbWFrZSBpb2N0bCBjYWxscyB0aGF0IGNhbiBsYXVuY2gga2VybmVsLWJhc2VkIHVuaXQgdGVzdHMgYW5kXG4rXHQgIGJlbmNobWFya3MgZm9yIHRoZSBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCkgZmFtaWxpZXNcbitcdCAgb2YgQVBJIGNhbGxzLlxuIFxuLVx0ICBUaGVzZSB0ZXN0cyBpbmNsdWRlIGJlbmNobWFyayB0ZXN0aW5nIG9mIHRoZSBfZmFzdCB2YXJpYW50cyBvZlxuLVx0ICBnZXRfdXNlcl9wYWdlcyooKSBhbmQgcGluX3VzZXJfcGFnZXMqKCksIGFzIHdlbGwgYXMgc21va2UgdGVzdHMgb2ZcbitcdCAgVGhlc2UgaW5jbHVkZSBiZW5jaG1hcmsgdGVzdGluZyBvZiB0aGUgX2Zhc3QgdmFyaWFudHMgb2ZcbitcdCAgZ2V0X3VzZXJfcGFnZXMqKCkgYW5kIHBpbl91c2VyX3BhZ2VzKigpLCBhcyB3ZWxsIGFzIHRlc3RzIG9mXG4gXHQgIHRoZSBub24tX2Zhc3QgdmFyaWFudHMuXG4gXG4tXHQgIFRoZXJlIGlzIGFsc28gYSBzdWItdGVzdCB0aGF0IGFsbG93cyBydW5uaW5nIGR1bXBfcGFnZSgpIG9uIGFueVxuLVx0ICBvZiB1cCB0byBlaWdodCBwYWdlcyAoc2VsZWN0ZWQgYnkgY29tbWFuZCBsaW5lIGFyZ3MpIHdpdGhpbiB0aGVcbi1cdCAgcmFuZ2Ugb2YgdXNlci1zcGFjZSBhZGRyZXNzZXMuIFRoZXNlIHBhZ2VzIGFyZSBlaXRoZXIgcGlubmVkIHZpYVxuLVx0ICBwaW5fdXNlcl9wYWdlcyooKSwgb3IgcGlubmVkIHZpYSBnZXRfdXNlcl9wYWdlcyooKSwgYXMgc3BlY2lmaWVkXG4tXHQgIGJ5IG90aGVyIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXG4tXG4tXHQgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfdGVzdC5jXG4rXHQgIFNlZSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYyBhbmQgdG9vbHMvbW0vZ3VwX2JlbmNoLmMuXG4gXG4gY29tbWVudCBcIkdVUF9URVNUIG5lZWRzIHRvIGhhdmUgREVCVUdfRlMgZW5hYmxlZFwiXG4gXHRkZXBlbmRzIG9uICFHVVBfVEVTVCBcdTAwMjZcdTAwMjYgIURFQlVHX0ZTXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuYyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45YjIyMzdlOTgyM2U5XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG5AQCAtMCwwICsxLDEwNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJmaWxlX3V0aWxzLmhcIlxuK1xuK2ludCByZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKVxuK3tcbitcdGludCBmZCwgZXJyO1xuK1x0c3NpemVfdCBudW1yZWFkO1xuK1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbitcdGlmIChmZCA9PSAtMSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdG51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xuK1x0aWYgKG51bXJlYWQgXHUwMDNjIDEpIHtcbitcdFx0ZXJyID0gbnVtcmVhZCA/IGVycm5vIDogRU5PREFUQTtcbitcdFx0Y2xvc2UoZmQpO1xuK1x0XHRyZXR1cm4gLWVycjtcbitcdH1cbitcbitcdGJ1ZltudW1yZWFkXSA9ICdcXDAnO1xuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbilcbit7XG4rXHRpbnQgZmQsIHNhdmVkX2Vycm5vO1xuK1x0c3NpemVfdCBudW13cml0dGVuO1xuK1xuK1x0aWYgKGJ1ZmxlbiBcdTAwM2MgMilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpO1xuK1x0aWYgKGZkID09IC0xKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0bnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xuK1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGNsb3NlKGZkKTtcbitcbitcdGlmIChudW13cml0dGVuIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLXNhdmVkX2Vycm5vO1xuK1xuK1x0aWYgKG51bXdyaXR0ZW4gIT0gKHNzaXplX3QpKGJ1ZmxlbiAtIDEpKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqbnVtKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdmFsO1xuK1x0aW50IHJldDtcbitcdGNoYXIgYnVmWzIxXTtcbitcdGNoYXIgKmVuZDtcbitcbitcdGlmICghbnVtKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBSZWplY3Qgc2lnbnMgYW5kIGxlYWRpbmcgd2hpdGVzcGFjZSB0aGF0IGFyZSBhY2NlcHRlZCBieSBzdHJ0b3VsKCkgKi9cbitcdGlmIChidWZbMF0gXHUwMDNjICcwJyB8fCBidWZbMF0gXHUwMDNlICc5JylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRlcnJubyA9IDA7XG4rXHR2YWwgPSBzdHJ0b3VsKGJ1ZiwgXHUwMDI2ZW5kLCAxMCk7XG4rXHRpZiAoZXJybm8pXG4rXHRcdHJldHVybiAtZXJybm87XG4rXG4rXHQvKiBPbmx5IGFsbG93IGEgbmV3bGluZSBhZnRlciB0aGUgbnVtYmVyICovXG4rXHRpZiAoKmVuZCA9PSAnXFxuJylcbitcdFx0ZW5kKys7XG4rXG4rXHRpZiAoKmVuZCAhPSAnXFwwJylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQqbnVtID0gdmFsO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB3cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4re1xuK1x0Y2hhciBidWZbMjFdO1xuK1xuK1x0c3ByaW50ZihidWYsIFwiJWx1XCIsIG51bSk7XG4rXHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICsgMSk7XG4rfVxuK1xuK2ludCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gd3JpdGVfbnVtKHBhdGgsIG51bSk7XG4rXHRyZXR1cm4gcmV0ID09IC1FSU5WQUwgPyAwIDogcmV0O1xuK31cbmRpZmYgLS1naXQgYS90b29scy9saWIvbW0vZmlsZV91dGlscy5oIGIvdG9vbHMvbGliL21tL2ZpbGVfdXRpbHMuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUwZGFhODJjMmIyYjRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmhcbkBAIC0wLDAgKzEsMTMgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyNpZm5kZWYgX19NTV9GSUxFX1VUSUxTX0hfX1xuKyNkZWZpbmUgX19NTV9GSUxFX1VUSUxTX0hfX1xuK1xuKyNpbmNsdWRlIFx1MDAzY3N0ZGRlZi5oXHUwMDNlXG4rXG4raW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pO1xuK2ludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4raW50IHJlYWRfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgKm51bSk7XG4raW50IHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4raW50IHdyaXRlX251bV9pZ25vcmVfZWludmFsKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKTtcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jIGIvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbnNpbWlsYXJpdHkgaW5kZXggODclXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG5yZW5hbWUgdG8gdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmNcbmluZGV4IGQ3OTE3ZGNlM2FiYWMuLmFiZDlmNzE4MmY4OGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdlcGFnZV9zZXR0aW5ncy5jXG4rKysgYi90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuQEAgLTgsMTIgKzgsMTggQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuKyNpbmNsdWRlIFwiZmlsZV91dGlscy5oXCJcbiAjaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgVEhQX1NZU0ZTIFwiL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvXCJcbiAjZGVmaW5lIE1BWF9TRVRUSU5HU19ERVBUSCA0XG4rXG4rI2lmbmRlZiBBUlJBWV9TSVpFXG4rI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSlcbisjZW5kaWZcbitcbiBzdGF0aWMgc3RydWN0IHRocF9zZXR0aW5ncyBzZXR0aW5nc19zdGFja1tNQVhfU0VUVElOR1NfREVQVEhdO1xuIHN0YXRpYyBpbnQgc2V0dGluZ3NfaW5kZXg7XG4gc3RhdGljIHN0cnVjdCB0aHBfc2V0dGluZ3Mgc2F2ZWRfc2V0dGluZ3M7XG5AQCAtNDgsNiArNTQsMTEgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzaG1lbV9lbmFibGVkX3N0cmluZ3NbXSA9IHtcbiBcdE5VTExcbiB9O1xuIFxuK3N0YXRpYyB2b2lkIHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGNvbnN0IGNoYXIgKnBhdGgsIGludCByZXQpXG4re1xuK1x0cHJpbnRmKFwiIyAlczogJXMgKCVkKVxcblwiLCBwYXRoLCBzdHJlcnJvcigtcmV0KSwgLXJldCk7XG4rfVxuK1xuIGludCB0aHBfcmVhZF9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqIGNvbnN0IHN0cmluZ3NbXSlcbiB7XG4gXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuQEAgLTYxLDggKzcyLDkgQEAgaW50IHRocF9yZWFkX3N0cmluZyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICogY29uc3Qgc3RyaW5nc1tdKVxuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4gXG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSkge1xuLVx0XHRwZXJyb3IocGF0aCk7XG4rXHRyZXQgPSByZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbiBcbkBAIC0xMDMsMTIgKzExNSwxNyBAQCB2b2lkIHRocF93cml0ZV9zdHJpbmcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsKVxuIFx0XHRwcmludGYoXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuIFx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4gXHR9XG4tXHR3cml0ZV9maWxlKHBhdGgsIHZhbCwgc3RybGVuKHZhbCkgKyAxKTtcbitcdHJldCA9IHdyaXRlX2ZpbGUocGF0aCwgdmFsLCBzdHJsZW4odmFsKSArIDEpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbitcdHVuc2lnbmVkIGxvbmcgbnVtO1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IHNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCBUSFBfU1lTRlMgXCIlc1wiLCBuYW1lKTtcbkBAIC0xMTYsNyArMTMzLDEzIEBAIHVuc2lnbmVkIGxvbmcgdGhwX3JlYWRfbnVtKGNvbnN0IGNoYXIgKm5hbWUpXG4gXHRcdHByaW50ZihcIiVzOiBQYXRobmFtZSBpcyB0b28gbG9uZ1xcblwiLCBfX2Z1bmNfXyk7XG4gXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiBcdH1cbi1cdHJldHVybiByZWFkX251bShwYXRoKTtcbitcdHJldCA9IHJlYWRfbnVtKHBhdGgsIFx1MDAyNm51bSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdH1cbitcbitcdHJldHVybiBudW07XG4gfVxuIFxuIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcbkBAIC0xMjksNyArMTUyLDExIEBAIHZvaWQgdGhwX3dyaXRlX251bShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIG51bSlcbiBcdFx0cHJpbnRmKFwiJXM6IFBhdGhuYW1lIGlzIHRvbyBsb25nXFxuXCIsIF9fZnVuY19fKTtcbiBcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuIFx0fVxuLVx0d3JpdGVfbnVtKHBhdGgsIG51bSk7XG4rXHRyZXQgPSB3cml0ZV9udW0ocGF0aCwgbnVtKTtcbitcdGlmIChyZXQpIHtcbitcdFx0cHJpbnRfZmlsZV9hY2Nlc3NfZXJyb3IocGF0aCwgcmV0KTtcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0fVxuIH1cbiBcbiB2b2lkIHRocF9yZWFkX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuQEAgLTE1Nyw4ICsxODQsMTUgQEAgdm9pZCB0aHBfcmVhZF9zZXR0aW5ncyhzdHJ1Y3QgdGhwX3NldHRpbmdzICpzZXR0aW5ncylcbiBcdFx0Lm1heF9wdGVzX3NoYXJlZCA9IHRocF9yZWFkX251bShcImtodWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXCIpLFxuIFx0XHQucGFnZXNfdG9fc2NhbiA9IHRocF9yZWFkX251bShcImtodWdlcGFnZWQvcGFnZXNfdG9fc2NhblwiKSxcbiBcdH07XG4tXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSlcbi1cdFx0c2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYiA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgpO1xuK1x0aWYgKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGhbMF0pIHtcbitcdFx0aW50IHJldCA9IHJlYWRfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG4rXHRcdFx0XHQgICBcdTAwMjZzZXR0aW5ncy1cdTAwM2VyZWFkX2FoZWFkX2tiKTtcbitcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsIHJldCk7XG4rXHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9PUkRFUlM7IGkrKykge1xuIFx0XHRpZiAoISgoMSBcdTAwM2NcdTAwM2MgaSkgXHUwMDI2IG9yZGVycykpIHtcbkBAIC0yMDgsOCArMjQyLDE1IEBAIHZvaWQgdGhwX3dyaXRlX3NldHRpbmdzKHN0cnVjdCB0aHBfc2V0dGluZ3MgKnNldHRpbmdzKVxuIFx0dGhwX3dyaXRlX251bShcImtodWdlcGFnZWQvbWF4X3B0ZXNfc2hhcmVkXCIsIGtodWdlcGFnZWQtXHUwMDNlbWF4X3B0ZXNfc2hhcmVkKTtcbiBcdHRocF93cml0ZV9udW0oXCJraHVnZXBhZ2VkL3BhZ2VzX3RvX3NjYW5cIiwga2h1Z2VwYWdlZC1cdTAwM2VwYWdlc190b19zY2FuKTtcbiBcbi1cdGlmIChkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoWzBdKVxuLVx0XHR3cml0ZV9udW0oZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aCwgc2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4rXHRpZiAoZGV2X3F1ZXVlX3JlYWRfYWhlYWRfcGF0aFswXSkge1xuK1x0XHRpbnQgcmV0ID0gd3JpdGVfbnVtKGRldl9xdWV1ZV9yZWFkX2FoZWFkX3BhdGgsXG4rXHRcdFx0XHQgICAgc2V0dGluZ3MtXHUwMDNlcmVhZF9haGVhZF9rYik7XG4rXG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihkZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLCByZXQpO1xuK1x0XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfT1JERVJTOyBpKyspIHtcbiBcdFx0aWYgKCEoKDEgXHUwMDNjXHUwMDNjIGkpIFx1MDAyNiBvcmRlcnMpKVxuQEAgLTMwNyw4ICszNDgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX190aHBfc3VwcG9ydGVkX29yZGVycyhib29sIGlzX3NobWVtKVxuIFx0XHR9XG4gXG4gXHRcdHJldCA9IHJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRvcmRlcnMgfD0gMVVMIFx1MDAzY1x1MDAzYyBpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0aWYgKHJldCAhPSAtRU5PRU5UKSB7XG4rXHRcdFx0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0XHRcdH1cbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRvcmRlcnMgfD0gMVVMIFx1MDAzY1x1MDAzYyBpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIG9yZGVycztcbkBAIC0zODIsOCArNDMwLDcgQEAgaW50IGRldGVjdF9odWdldGxiX3BhZ2Vfc2l6ZXModW5zaWduZWQgbG9uZyBzaXplc1tdLCBpbnQgbWF4KVxuIFx0XHRpZiAoc3NjYW5mKGVudHJ5LVx1MDAzZWRfbmFtZSwgXCJodWdlcGFnZXMtJXp1a0JcIiwgXHUwMDI2a2IpICE9IDEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdHNpemVzW2NvdW50KytdID0ga2IgKiAxMDI0O1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcIltJTkZPXSBkZXRlY3RlZCBodWdldGxiIHBhZ2Ugc2l6ZTogJXp1IEtpQlxcblwiLFxuLVx0XHRcdCAgICAgICBrYik7XG4rXHRcdHByaW50ZihcIiMgW0lORk9dIGRldGVjdGVkIGh1Z2V0bGIgcGFnZSBzaXplOiAlenUgS2lCXFxuXCIsIGtiKTtcbiBcdH1cbiBcdGNsb3NlZGlyKGRpcik7XG4gXHRyZXR1cm4gY291bnQ7XG5AQCAtNDI1LDI4ICs0NzIsNDkgQEAgc3RhdGljIHZvaWQgaHVnZXRsYl9zeXNmc19wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbixcbiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHR1bnNpZ25lZCBsb25nIG5yO1xuK1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwibnJfaHVnZXBhZ2VzXCIpO1xuIFxuLVx0cmV0dXJuIHJlYWRfbnVtKHBhdGgpO1xuK1x0cmV0ID0gcmVhZF9udW0ocGF0aCwgXHUwMDI2bnIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRwcmludF9maWxlX2FjY2Vzc19lcnJvcihwYXRoLCByZXQpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbnI7XG4gfVxuIFxuIHZvaWQgaHVnZXRsYl9zZXRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG5yKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHRpbnQgcmV0O1xuIFxuIFx0aHVnZXRsYl9zeXNmc19wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgc2l6ZSwgXCJucl9odWdlcGFnZXNcIik7XG4gXG4tXHR3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7XG4rXHRyZXQgPSB3cml0ZV9udW1faWdub3JlX2VpbnZhbChwYXRoLCBucik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdH1cbiB9XG4gXG4gdW5zaWduZWQgbG9uZyBodWdldGxiX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHR1bnNpZ25lZCBsb25nIG5yO1xuK1x0aW50IHJldDtcbiBcbiBcdGh1Z2V0bGJfc3lzZnNfcGF0aChwYXRoLCBzaXplb2YocGF0aCksIHNpemUsIFwiZnJlZV9odWdlcGFnZXNcIik7XG4gXG4tXHRyZXR1cm4gcmVhZF9udW0ocGF0aCk7XG4rXHRyZXQgPSByZWFkX251bShwYXRoLCBcdTAwMjZucik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdHByaW50X2ZpbGVfYWNjZXNzX2Vycm9yKHBhdGgsIHJldCk7XG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdH1cbitcbitcdHJldHVybiBucjtcbiB9XG4gXG4gc3RhdGljIGJvb2wgX19odWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBucilcbkBAIC01MDIsNyArNTcwLDggQEAgdW5zaWduZWQgbG9uZyBodWdldGxiX3NldHVwKHVuc2lnbmVkIGxvbmcgbnIsIHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSxcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAobnJfZW5hYmxlZCBcdTAwM2UgbWF4KSB7XG4tXHRcdGtzZnRfcHJpbnRfbXNnKFwiZGV0ZWN0ZWQgJWQgaHVnZSBwYWdlIHNpemVzLCB3aWxsIG9ubHkgdGVzdCAlZFxcblwiLCBucl9lbmFibGVkLCBtYXgpO1xuK1x0XHRwcmludGYoXCIjIGRldGVjdGVkICVkIGh1Z2UgcGFnZSBzaXplcywgd2lsbCBvbmx5IHRlc3QgJWRcXG5cIixcbitcdFx0ICAgICAgIG5yX2VuYWJsZWQsIG1heCk7XG4gXHRcdG5yX2VuYWJsZWQgPSBtYXg7XG4gXHR9XG4gXG5AQCAtNTc0LDggKzY0MywxMCBAQCBzdGF0aWMgdm9pZCBodWdlcGFnZV9yZXN0b3JlX3NldHRpbmdzX2F0ZXhpdCh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGh1Z2VwYWdlX3Jlc3RvcmVfc2V0dGluZ3Nfc2lnaGFuZGxlcihpbnQgc2lnKVxuIHtcbitcdCh2b2lkKXNpZztcbitcbiBcdC8qIGV4aXQoKSB3aWxsIGludm9rZSB0aGUgaHVnZXBhZ2VfcmVzdG9yZV9zZXR0aW5nc19hdGV4aXQgaGFuZGxlci4gKi9cbi1cdGV4aXQoS1NGVF9GQUlMKTtcbitcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiB9XG4gXG4gdm9pZCBodWdlcGFnZV9zYXZlX3NldHRpbmdzKGJvb2wgdGhwLCBib29sIGh1Z2V0bGIpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaCBiL3Rvb2xzL2xpYi9tbS9odWdlcGFnZV9zZXR0aW5ncy5oXG5zaW1pbGFyaXR5IGluZGV4IDEwMCVcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcbnJlbmFtZSB0byB0b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tLy5naXRpZ25vcmUgYi90b29scy9tbS8uZ2l0aWdub3JlXG5pbmRleCAxNDQ2YTY1OWU1NDA4Li4xNTRkNzQwYmUwMmU4IDEwMDY0NFxuLS0tIGEvdG9vbHMvbW0vLmdpdGlnbm9yZVxuKysrIGIvdG9vbHMvbW0vLmdpdGlnbm9yZVxuQEAgLTMsMyArMyw0IEBAIHNsYWJpbmZvXG4gcGFnZS10eXBlc1xuIHBhZ2Vfb3duZXJfc29ydFxuIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4rZ3VwX2JlbmNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vTWFrZWZpbGUgYi90b29scy9tbS9NYWtlZmlsZVxuaW5kZXggODU4MTg2YTZlZWZkYi4uZjIwYTMyZDhjYzIyZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL01ha2VmaWxlXG4rKysgYi90b29scy9tbS9NYWtlZmlsZVxuQEAgLTMsMTMgKzMsMTUgQEBcbiAjXG4gaW5jbHVkZSAuLi9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGVcbiBcbi1CVUlMRF9UQVJHRVRTPXBhZ2UtdHlwZXMgc2xhYmluZm8gcGFnZV9vd25lcl9zb3J0IHBhZ2Vfb3duZXJfZmlsdGVyIHRocF9zd2FwX2FsbG9jYXRvcl90ZXN0XG4rQlVJTERfVEFSR0VUUz1wYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlclxuK0JVSUxEX1RBUkdFVFMgKz0gdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXG4gSU5TVEFMTF9UQVJHRVRTID0gJChCVUlMRF9UQVJHRVRTKSB0aHBtYXBzXG4gXG4gTElCX0RJUiA9IC4uL2xpYi9hcGlcbiBMSUJTID0gJChMSUJfRElSKS9saWJhcGkuYVxuK0dVUF9CRU5DSF9PQkpTID0gZ3VwX2JlbmNoLmMgLi4vbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgLi4vbGliL21tL2ZpbGVfdXRpbHMuY1xuIFxuLUNGTEFHUyArPSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtcHRocmVhZFxuK0NGTEFHUyArPSAtV2FsbCAtV2V4dHJhIC1JLi4vbGliLyAtSS4uLy4uIC1wdGhyZWFkXG4gTERGTEFHUyArPSAkKExJQlMpIC1wdGhyZWFkXG4gXG4gYWxsOiAkKEJVSUxEX1RBUkdFVFMpXG5AQCAtMjIsOCArMjQsMTEgQEAgJChMSUJTKTpcbiAlOiAlLmNcbiBcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXHUwMDNjICQoTERGTEFHUylcbiBcbitndXBfYmVuY2g6ICQoR1VQX0JFTkNIX09CSlMpICQoTElCUylcbitcdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKEdVUF9CRU5DSF9PQkpTKSAkKExERkxBR1MpXG4rXG4gY2xlYW46XG4tXHQkKFJNKSBwYWdlLXR5cGVzIHNsYWJpbmZvIHBhZ2Vfb3duZXJfc29ydCBwYWdlX293bmVyX2ZpbHRlciB0aHBfc3dhcF9hbGxvY2F0b3JfdGVzdFxuK1x0JChSTSkgcGFnZS10eXBlcyBzbGFiaW5mbyBwYWdlX293bmVyX3NvcnQgcGFnZV9vd25lcl9maWx0ZXIgdGhwX3N3YXBfYWxsb2NhdG9yX3Rlc3QgZ3VwX2JlbmNoXG4gXHRtYWtlIC1DICQoTElCX0RJUikgY2xlYW5cbiBcbiBzYmluZGlyID89IC91c3Ivc2JpblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmMgYi90b29scy9tbS9ndXBfYmVuY2guY1xuc2ltaWxhcml0eSBpbmRleCA1MCVcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbnJlbmFtZSB0byB0b29scy9tbS9ndXBfYmVuY2guY1xuaW5kZXggM2Y4NDFhOTZmODcwNi4uZmY2ZTQ2NjU0NjgxMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF90ZXN0LmNcbisrKyBiL3Rvb2xzL21tL2d1cF9iZW5jaC5jXG5AQCAtMTAsMTEgKzEwLDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYXNzZXJ0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRib29sLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY21tL2d1cF90ZXN0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbisjaW5jbHVkZSBcdTAwM2NtbS9odWdlcGFnZV9zZXR0aW5ncy5oXHUwMDNlXG4gXG4gI2RlZmluZSBNQiAoMVVMIFx1MDAzY1x1MDAzYyAyMClcbiBcbkBAIC0zOCwxMiArMzcsNiBAQCBzdGF0aWMgY2hhciAqY21kX3RvX3N0cih1bnNpZ25lZCBsb25nIGNtZClcbiBcdFx0cmV0dXJuIFwiUElOX0ZBU1RfQkVOQ0hNQVJLXCI7XG4gXHRjYXNlIFBJTl9MT05HVEVSTV9CRU5DSE1BUks6XG4gXHRcdHJldHVybiBcIlBJTl9MT05HVEVSTV9CRU5DSE1BUktcIjtcbi1cdGNhc2UgR1VQX0JBU0lDX1RFU1Q6XG4tXHRcdHJldHVybiBcIkdVUF9CQVNJQ19URVNUXCI7XG4tXHRjYXNlIFBJTl9CQVNJQ19URVNUOlxuLVx0XHRyZXR1cm4gXCJQSU5fQkFTSUNfVEVTVFwiO1xuLVx0Y2FzZSBEVU1QX1VTRVJfUEFHRVNfVEVTVDpcbi1cdFx0cmV0dXJuIFwiRFVNUF9VU0VSX1BBR0VTX1RFU1RcIjtcbiBcdH1cbiBcdHJldHVybiBcIlVua25vd24gY29tbWFuZFwiO1xuIH1cbkBAIC01MywzOSArNDYsMjkgQEAgdm9pZCAqZ3VwX3RocmVhZCh2b2lkICpkYXRhKVxuIFx0c3RydWN0IGd1cF90ZXN0IGd1cCA9ICooc3RydWN0IGd1cF90ZXN0ICopZGF0YTtcbiBcdGludCBpLCBzdGF0dXM7XG4gXG4tXHQvKiBPbmx5IHJlcG9ydCB0aW1pbmcgaW5mb3JtYXRpb24gb24gdGhlICpfQkVOQ0hNQVJLIGNvbW1hbmRzOiAqL1xuLVx0aWYgKChjbWQgPT0gUElOX0ZBU1RfQkVOQ0hNQVJLKSB8fCAoY21kID09IEdVUF9GQVNUX0JFTkNITUFSSykgfHxcbi1cdCAgICAgKGNtZCA9PSBQSU5fTE9OR1RFUk1fQkVOQ0hNQVJLKSkge1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXBlYXRzOyBpKyspIHtcbi1cdFx0XHRndXAuc2l6ZSA9IHNpemU7XG4tXHRcdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4tXHRcdFx0aWYgKHN0YXR1cylcbi1cdFx0XHRcdGJyZWFrO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVwZWF0czsgaSsrKSB7XG4rXHRcdGd1cC5zaXplID0gc2l6ZTtcbitcdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4rXHRcdGlmIChzdGF0dXMpIHtcbitcdFx0XHRpbnQgZXJyID0gZXJybm87XG4gXG4gXHRcdFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNnByaW50X211dGV4KTtcbi1cdFx0XHRrc2Z0X3ByaW50X21zZyhcIiVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1wiLFxuLVx0XHRcdFx0ICAgICAgIGNtZF90b19zdHIoY21kKSwgZ3VwLmdldF9kZWx0YV91c2VjLFxuLVx0XHRcdFx0ICAgICAgIGd1cC5wdXRfZGVsdGFfdXNlYyk7XG4tXHRcdFx0aWYgKGd1cC5zaXplICE9IHNpemUpXG4tXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcIiwgdHJ1bmNhdGVkIChzaXplOiAlbGxkKVwiLCBndXAuc2l6ZSk7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCJcXG5cIik7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiJXMgaW9jdGwgZmFpbGVkOiAlc1xcblwiLCBjbWRfdG9fc3RyKGNtZCksXG4rXHRcdFx0XHRzdHJlcnJvcihlcnIpKTtcbiBcdFx0XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4rXHRcdFx0cmV0dXJuIGRhdGE7XG4gXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGd1cC5zaXplID0gc2l6ZTtcbi1cdFx0c3RhdHVzID0gaW9jdGwoZ3VwX2ZkLCBjbWQsIFx1MDAyNmd1cCk7XG4tXHRcdGlmIChzdGF0dXMpXG4tXHRcdFx0Z290byByZXR1cm5fO1xuIFxuIFx0XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2cHJpbnRfbXV0ZXgpO1xuLVx0XHRrc2Z0X3ByaW50X21zZyhcIiVzOiBkb25lXFxuXCIsIGNtZF90b19zdHIoY21kKSk7XG4rXHRcdHByaW50ZihcIiVzOiBUaW1lOiBnZXQ6JWxsZCBwdXQ6JWxsZCB1c1wiLFxuK1x0XHRcdGNtZF90b19zdHIoY21kKSwgZ3VwLmdldF9kZWx0YV91c2VjLFxuK1x0XHRcdGd1cC5wdXRfZGVsdGFfdXNlYyk7XG4gXHRcdGlmIChndXAuc2l6ZSAhPSBzaXplKVxuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiVHJ1bmNhdGVkIChzaXplOiAlbGxkKVxcblwiLCBndXAuc2l6ZSk7XG4rXHRcdFx0cHJpbnRmKFwiLCB0cnVuY2F0ZWQgKHNpemU6ICVsbGQpXCIsIGd1cC5zaXplKTtcbitcdFx0cHJpbnRmKFwiXFxuXCIpO1xuIFx0XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZwcmludF9tdXRleCk7XG4gXHR9XG4gXG4tcmV0dXJuXzpcbi1cdGtzZnRfdGVzdF9yZXN1bHQoIXN0YXR1cywgXCJpb2N0bCBzdGF0dXMgJWRcXG5cIiwgc3RhdHVzKTtcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbkBAIC05MywzOCArNzYsMjEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIHtcbiBcdHN0cnVjdCBndXBfdGVzdCBndXAgPSB7IDAgfTtcbiBcdGludCBmaWxlZCwgaSwgb3B0LCBucl9wYWdlcyA9IDEsIHRocCA9IC0xLCB3cml0ZSA9IDEsIG50aHJlYWRzID0gMSwgcmV0O1xuLVx0aW50IGZsYWdzID0gTUFQX1BSSVZBVEU7XG4rXHRpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURSwgc3RhcnRlZF90aHJlYWRzID0gMCwgZXhpdF9zdGF0dXMgPSAxO1xuIFx0Y2hhciAqZmlsZSA9IFwiL2Rldi96ZXJvXCI7XG4tXHRib29sIGh1Z2V0bGIgPSBmYWxzZTtcbitcdGJvb2wgaHVnZXRsYiA9IGZhbHNlLCB0aHJlYWRfZXJyb3IgPSBmYWxzZTtcbitcdHZvaWQgKnRocmVhZF9yZXN1bHQ7XG4gXHRwdGhyZWFkX3QgKnRpZDtcbiBcdGNoYXIgKnA7XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcIm06cjpuOkY6ZjphYmNqOnRUTFV1d1dTSHB6XCIpKSAhPSAtMSkge1xuK1x0d2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgXCJtOnI6bjpGOmY6YWo6dFRMdXdXU0hcIikpICE9IC0xKSB7XG4gXHRcdHN3aXRjaCAob3B0KSB7XG4gXHRcdGNhc2UgJ2EnOlxuIFx0XHRcdGNtZCA9IFBJTl9GQVNUX0JFTkNITUFSSztcbiBcdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAnYic6XG4tXHRcdFx0Y21kID0gUElOX0JBU0lDX1RFU1Q7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ0wnOlxuIFx0XHRcdGNtZCA9IFBJTl9MT05HVEVSTV9CRU5DSE1BUks7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ2MnOlxuLVx0XHRcdGNtZCA9IERVTVBfVVNFUl9QQUdFU19URVNUO1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogRHVtcCBwYWdlIDAgKGluZGV4IDEpLiBNYXkgYmUgb3ZlcnJpZGRlbiBsYXRlciwgYnlcbi1cdFx0XHQgKiB1c2VyJ3Mgbm9uLW9wdGlvbiBhcmd1bWVudHMuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAud2hpY2hfcGFnZXMgaXMgemVyby1iYXNlZCwgc28gdGhhdCB6ZXJvIGNhbiBtZWFuIFwiZG9cbi1cdFx0XHQgKiBub3RoaW5nXCIuXG4tXHRcdFx0ICovXG4tXHRcdFx0Z3VwLndoaWNoX3BhZ2VzWzBdID0gMTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAncCc6XG4tXHRcdFx0Lyogd29ya3Mgb25seSB3aXRoIERVTVBfVVNFUl9QQUdFU19URVNUICovXG4tXHRcdFx0Z3VwLnRlc3RfZmxhZ3MgfD0gR1VQX1RFU1RfRkxBR19EVU1QX1BBR0VTX1VTRV9QSU47XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ0YnOlxuIFx0XHRcdC8qIHN0cnRvbCwgc28geW91IGNhbiBwYXNzIGZsYWdzIGluIGhleCBmb3JtICovXG4gXHRcdFx0Z3VwLmd1cF9mbGFncyA9IHN0cnRvbChvcHRhcmcsIDAsIDApO1xuQEAgLTE0MSw3ICsxMDcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGNhc2UgJ24nOlxuIFx0XHRcdG5yX3BhZ2VzID0gYXRvaShvcHRhcmcpO1xuIFx0XHRcdGlmIChucl9wYWdlcyBcdTAwM2MgMClcbi1cdFx0XHRcdG5yX3BhZ2VzID0gc2l6ZSAvIHBzaXplKCk7XG4rXHRcdFx0XHRucl9wYWdlcyA9IHNpemUgLyBnZXRwYWdlc2l6ZSgpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICd0JzpcbiBcdFx0XHR0aHAgPSAxO1xuQEAgLTE0OSw5ICsxMTUsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGNhc2UgJ1QnOlxuIFx0XHRcdHRocCA9IDA7XG4gXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgJ1UnOlxuLVx0XHRcdGNtZCA9IEdVUF9CQVNJQ19URVNUO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlICd1JzpcbiBcdFx0XHRjbWQgPSBHVVBfRkFTVF9CRU5DSE1BUks7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTczLDUyICsxMzYsNDEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdGh1Z2V0bGIgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIldyb25nIGFyZ3VtZW50XFxuXCIpO1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIldyb25nIGFyZ3VtZW50XFxuXCIpO1xuK1x0XHRcdGV4aXQoMSk7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChvcHRpbmQgXHUwMDNjIGFyZ2MpIHtcbi1cdFx0aW50IGV4dHJhX2FyZ19jb3VudCA9IDA7XG4tXHRcdC8qXG4tXHRcdCAqIEZvciBleGFtcGxlOlxuLVx0XHQgKlxuLVx0XHQgKiAgIC4vZ3VwX3Rlc3QgLWMgMCAxIDB4MTAwMVxuLVx0XHQgKlxuLVx0XHQgKiAuLi50byBkdW1wIHBhZ2VzIDAsIDEsIGFuZCA0MDk3XG4tXHRcdCAqL1xuLVxuLVx0XHR3aGlsZSAoKG9wdGluZCBcdTAwM2MgYXJnYykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgICAoZXh0cmFfYXJnX2NvdW50IFx1MDAzYyBHVVBfVEVTVF9NQVhfUEFHRVNfVE9fRFVNUCkpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIERvIHRoZSAxLWJhc2VkIGluZGV4aW5nIGhlcmUsIHNvIHRoYXQgdGhlIHVzZXIgY2FuXG4tXHRcdFx0ICogdXNlIG5vcm1hbCAwLWJhc2VkIGluZGV4aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0bG9uZyBwYWdlX2luZGV4ID0gc3RydG9sKGFyZ3Zbb3B0aW5kXSwgMCwgMCkgKyAxO1xuLVxuLVx0XHRcdGd1cC53aGljaF9wYWdlc1tleHRyYV9hcmdfY291bnRdID0gcGFnZV9pbmRleDtcbi1cdFx0XHRleHRyYV9hcmdfY291bnQrKztcbi1cdFx0XHRvcHRpbmQrKztcbi1cdFx0fVxuK1x0aWYgKG9wdGluZCAhPSBhcmdjKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIlVuZXhwZWN0ZWQgYXJndW1lbnQgJyVzJ1xcblwiLCBhcmd2W29wdGluZF0pO1xuK1x0XHRleGl0KDEpO1xuIFx0fVxuIFxuLVx0a3NmdF9wcmludF9oZWFkZXIoKTtcbitcdGlmIChnZXRldWlkKCkpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwiKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbiBcbiBcdGlmIChodWdldGxiKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgaHBfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcbiBcbi1cdFx0aWYgKCFocF9zaXplKVxuLVx0XHRcdGtzZnRfZXhpdF9za2lwKFwiSHVnZVRMQiBpcyB1bmF2YWlsYWJsZVxcblwiKTtcbitcdFx0aWYgKCFocF9zaXplKSB7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiQ291bGQgbm90IGRldGVybWluZSBodWdlIHBhZ2Ugc2l6ZVxcblwiKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuIFxuIFx0XHRzaXplID0gKHNpemUgKyBocF9zaXplIC0gMSkgXHUwMDI2IH4oaHBfc2l6ZSAtIDEpO1xuLVx0XHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdChzaXplIC8gaHBfc2l6ZSkpXG4tXHRcdFx0a3NmdF9leGl0X3NraXAoXCJOb3QgZW5vdWdoIGh1Z2UgcGFnZXNcXG5cIik7XG4rXHRcdGlmICghaHVnZXRsYl9zZXR1cF9kZWZhdWx0KHNpemUgLyBocF9zaXplKSkge1xuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwiKTtcbitcdFx0XHRyZXR1cm4gMTtcbitcdFx0fVxuIFx0fVxuIFxuLVx0a3NmdF9zZXRfcGxhbihudGhyZWFkcyk7XG4tXG4gXHRmaWxlZCA9IG9wZW4oZmlsZSwgT19SRFdSfE9fQ1JFQVQsIDA2NjQpO1xuLVx0aWYgKGZpbGVkIFx1MDAzYyAwKVxuLVx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdGlmIChmaWxlZCBcdTAwM2MgMCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJVbmFibGUgdG8gb3BlbiAlczogJXNcXG5cIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4gXG4gXHRndXAubnJfcGFnZXNfcGVyX2NhbGwgPSBucl9wYWdlcztcbiBcdGlmICh3cml0ZSlcbkBAIC0yMjcsMjYgKzE3OSwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4gXHRpZiAoZ3VwX2ZkID09IC0xKSB7XG4gXHRcdHN3aXRjaCAoZXJybm8pIHtcbi1cdFx0Y2FzZSBFQUNDRVM6XG4tXHRcdFx0aWYgKGdldHVpZCgpKVxuLVx0XHRcdFx0a3NmdF9wcmludF9tc2coXCJQbGVhc2UgcnVuIHRoaXMgdGVzdCBhcyByb290XFxuXCIpO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEVOT0VOVDpcbiBcdFx0XHRpZiAob3BlbmRpcihcIi9zeXMva2VybmVsL2RlYnVnXCIpID09IE5VTEwpXG4tXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcIm1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cIik7XG4tXHRcdFx0a3NmdF9wcmludF9tc2coXCJjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXFxuXCIpO1xuK1x0XHRcdFx0ZnByaW50ZihzdGRlcnIsIFwibW91bnQgZGVidWdmcyBhdCAvc3lzL2tlcm5lbC9kZWJ1Z1xcblwiKTtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJjaGVjayBpZiBDT05GSUdfR1VQX1RFU1QgaXMgZW5hYmxlZCBpbiBrZXJuZWwgY29uZmlnXFxuXCIpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdGtzZnRfcHJpbnRfbXNnKFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCIsIEdVUF9URVNUX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIG9wZW4gJXM6ICVzXFxuXCIsIEdVUF9URVNUX0ZJTEUsXG4rXHRcdFx0XHRzdHJlcnJvcihlcnJubykpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4tXHRcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcIlBsZWFzZSBydW4gdGhpcyB0ZXN0IGFzIHJvb3RcXG5cIik7XG4tXHRcdGtzZnRfZXhpdF9wYXNzKCk7XG4rXHRcdGdvdG8gZXJyX2Nsb3NlX2ZpbGVkO1xuIFx0fVxuIFxuIFx0cCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIGZpbGVkLCAwKTtcbi1cdGlmIChwID09IE1BUF9GQUlMRUQpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm1tYXA6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRpZiAocCA9PSBNQVBfRkFJTEVEKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1tYXA6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdGdvdG8gZXJyX2Nsb3NlX2d1cF9mZDtcbitcdH1cbiBcdGd1cC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcDtcbiBcbiBcdGlmICh0aHAgPT0gMSlcbkBAIC0yNTUsMjEgKzIwNSw0MyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdG1hZHZpc2UocCwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbiBcbiBcdC8qIEZhdWx0IHRoZW0gaW4gaGVyZSwgZnJvbSB1c2VyIHNwYWNlLiAqL1xuLVx0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBwc2l6ZSgpKVxuK1x0Zm9yICg7ICh1bnNpZ25lZCBsb25nKXAgXHUwMDNjIGd1cC5hZGRyICsgc2l6ZTsgcCArPSBnZXRwYWdlc2l6ZSgpKVxuIFx0XHRwWzBdID0gMDtcbiBcbiBcdHRpZCA9IG1hbGxvYyhzaXplb2YocHRocmVhZF90KSAqIG50aHJlYWRzKTtcbi1cdGFzc2VydCh0aWQpO1xuK1x0aWYgKCF0aWQpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiRmFpbGVkIHRvIGFsbG9jYXRlICVkIHRocmVhZHM6ICVzXFxuXCIsXG4rXHRcdFx0bnRocmVhZHMsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdGdvdG8gZXJyX3VubWFwO1xuK1x0fVxuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRocmVhZHM7IGkrKykge1xuIFx0XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aWRbaV0sIE5VTEwsIGd1cF90aHJlYWQsIFx1MDAyNmd1cCk7XG4tXHRcdGFzc2VydChyZXQgPT0gMCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6ICVzXFxuXCIsIHN0cmVycm9yKHJldCkpO1xuK1x0XHRcdHRocmVhZF9lcnJvciA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0c3RhcnRlZF90aHJlYWRzKys7XG4gXHR9XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudGhyZWFkczsgaSsrKSB7XG4tXHRcdHJldCA9IHB0aHJlYWRfam9pbih0aWRbaV0sIE5VTEwpO1xuLVx0XHRhc3NlcnQocmV0ID09IDApO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhcnRlZF90aHJlYWRzOyBpKyspIHtcbitcdFx0cmV0ID0gcHRocmVhZF9qb2luKHRpZFtpXSwgXHUwMDI2dGhyZWFkX3Jlc3VsdCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJwdGhyZWFkX2pvaW4gZmFpbGVkOiAlc1xcblwiLCBzdHJlcnJvcihyZXQpKTtcbitcdFx0XHR0aHJlYWRfZXJyb3IgPSB0cnVlO1xuK1x0XHR9IGVsc2UgaWYgKHRocmVhZF9yZXN1bHQpXG4rXHRcdFx0dGhyZWFkX2Vycm9yID0gdHJ1ZTtcbiBcdH1cbiBcbiBcdGZyZWUodGlkKTtcbi1cbi1cdGtzZnRfZXhpdF9wYXNzKCk7XG4rXHRpZiAoIXRocmVhZF9lcnJvcilcbitcdFx0ZXhpdF9zdGF0dXMgPSAwO1xuK1xuK2Vycl91bm1hcDpcbitcdG11bm1hcCgodm9pZCAqKWd1cC5hZGRyLCBzaXplKTtcbitlcnJfY2xvc2VfZ3VwX2ZkOlxuK1x0Y2xvc2UoZ3VwX2ZkKTtcbitlcnJfY2xvc2VfZmlsZWQ6XG4rXHRjbG9zZShmaWxlZCk7XG4rXHRyZXR1cm4gZXhpdF9zdGF0dXM7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IDJkNTM2NjE5NmUzMDkuLjljMDM2MjRmZDI5MzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbkBAIC0zNyw3ICszNyw4IEBAIGVuZGlmXG4gIyBMRExJQlMuXG4gTUFLRUZMQUdTICs9IC0tbm8tYnVpbHRpbi1ydWxlc1xuIFxuLUNGTEFHUyA9IC1XYWxsIC1PMiAtSSAkKHRvcF9zcmNkaXIpICQoRVhUUkFfQ0ZMQUdTKSAkKEtIRFJfSU5DTFVERVMpICQoVE9PTFNfSU5DTFVERVMpXG4rQ0ZMQUdTID0gLVdhbGwgLU8yIC1JICQodG9wX3NyY2RpcikgLUkgJCh0b3Bfc3JjZGlyKS90b29scy9saWJcbitDRkxBR1MgKz0gJChFWFRSQV9DRkxBR1MpICQoS0hEUl9JTkNMVURFUykgJChUT09MU19JTkNMVURFUylcbiBDRkxBR1MgKz0gLVd1bnJlYWNoYWJsZS1jb2RlXG4gTERMSUJTID0gLWxydCAtbHB0aHJlYWQgLWxtXG4gXG5AQCAtNTcsOCArNTgsOCBAQCBlbmRpZlxuIFxuIFRFU1RfR0VOX0ZJTEVTID0gY293XG4gVEVTVF9HRU5fRklMRVMgKz0gY29tcGFjdGlvbl90ZXN0XG4rVEVTVF9HRU5fRklMRVMgKz0gZ3VwXG4gVEVTVF9HRU5fRklMRVMgKz0gZ3VwX2xvbmd0ZXJtXG4tVEVTVF9HRU5fRklMRVMgKz0gZ3VwX3Rlc3RcbiBURVNUX0dFTl9GSUxFUyArPSBobW0tdGVzdHNcbiBURVNUX0dFTl9GSUxFUyArPSBodWdldGxiLW1hZHZpc2VcbiBURVNUX0dFTl9GSUxFUyArPSBodWdldGxiLW1tYXBcbkBAIC0xODcsOCArMTg4LDEwIEBAIFRFU1RfRklMRVMgKz0gd3JpdGVfaHVnZXRsYl9tZW1vcnkuc2hcbiBcbiBpbmNsdWRlIC4uL2xpYi5ta1xuIFxuLSQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuLSQoVEVTVF9HRU5fRklMRVMpOiB2bV91dGlsLmMgaHVnZXBhZ2Vfc2V0dGluZ3MuY1xuKyQoVEVTVF9HRU5fUFJPR1MpOiB2bV91dGlsLmMgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuYyBcXFxuK1x0XHQgICAkKHRvcF9zcmNkaXIpL3Rvb2xzL2xpYi9tbS9maWxlX3V0aWxzLmNcbiskKFRFU1RfR0VOX0ZJTEVTKTogdm1fdXRpbC5jICQodG9wX3NyY2RpcikvdG9vbHMvbGliL21tL2h1Z2VwYWdlX3NldHRpbmdzLmMgXFxcbitcdFx0ICAgJCh0b3Bfc3JjZGlyKS90b29scy9saWIvbW0vZmlsZV91dGlscy5jXG4gXG4gJChPVVRQVVQpL3VmZmQtc3RyZXNzOiB1ZmZkLWNvbW1vbi5jXG4gJChPVVRQVVQpL3VmZmQtdW5pdC10ZXN0czogdWZmZC1jb21tb24uY1xuQEAgLTIxNyw3ICsyMjAsNyBAQCAkKEJJTkFSSUVTXzMyKTogQ0ZMQUdTICs9IC1tMzIgLW14c2F2ZVxuICQoQklOQVJJRVNfMzIpOiBMRExJQlMgKz0gLWxydCAtbGRsIC1sbVxuICQoQklOQVJJRVNfMzIpOiAkKE9VVFBVVCkvJV8zMjogJS5jXG4gXHQkKGNhbGwgbXNnLENDLCwkQClcbi1cdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEBcbitcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQFxuICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS0zMiwkKHQpKSkpXG4gZW5kaWZcbiBcbkBAIC0yMjYsNyArMjI5LDcgQEAgJChCSU5BUklFU182NCk6IENGTEFHUyArPSAtbTY0IC1teHNhdmVcbiAkKEJJTkFSSUVTXzY0KTogTERMSUJTICs9IC1scnQgLWxkbFxuICQoQklOQVJJRVNfNjQpOiAkKE9VVFBVVCkvJV82NDogJS5jXG4gXHQkKGNhbGwgbXNnLENDLCwkQClcbi1cdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICQobm90ZGlyICReKSAkKExETElCUykgLW8gJEBcbitcdCQoUSkkKENDKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpICReICQoTERMSUJTKSAtbyAkQFxuICQoZm9yZWFjaCB0LCQoVk1UQVJHRVRTKSwkKGV2YWwgJChjYWxsIGdlbi10YXJnZXQtcnVsZS02NCwkKHQpKSkpXG4gZW5kaWZcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb21wYWN0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG5pbmRleCAzMGQ0YWNlNzE1NWFlLi5iM2Y1Mzc3MTE5Y2I4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29tcGFjdGlvbl90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbXBhY3Rpb25fdGVzdC5jXG5AQCAtMTUsOSArMTUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBNQVBfU0laRV9NQlx0MTAwXG4gI2RlZmluZSBNQVBfU0laRVx0KE1BUF9TSVpFX01CICogMTAyNCAqIDEwMjQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuaW5kZXggOGFhNTI0OWQ5YmVmNi4uMzI2NGE4Mjg1NzViZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuQEAgLTI5LDcgKzI5LDYgQEBcbiAjaW5jbHVkZSBcIi4uLy4uLy4uLy4uL21tL2d1cF90ZXN0LmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIHN0YXRpYyBzaXplX3QgcGFnZXNpemU7XG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2ZvbGlvX3NwbGl0X3JhY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbmluZGV4IDE5NjA2MzVhOTUzZWIuLmU0NjYwYmY4OWI2MjQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9mb2xpb19zcGxpdF9yYWNlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZm9saW9fc3BsaXRfcmFjZV90ZXN0LmNcbkBAIC0yNSw3ICsyNSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiB1aW50NjRfdCBwYWdlX3NpemU7XG4gdWludDY0X3QgcG1kX3BhZ2VzaXplO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuaW5kZXggNWM4ZWMzY2E3NWQ3ZC4uYWY1Y2Q5YjMwMzM5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5AQCAtMjEsNyArMjEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy91aW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2luY2x1ZGUgXCIuLi9waWRmZC9waWRmZC5oXCJcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzFhZTM4ZTA5MTM2ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwLmNcbkBAIC0wLDAgKzEsMjYzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyAvLyBVc2UgbGw2NFxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2RpcmVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vZ3VwX3Rlc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuK1xuKyNkZWZpbmUgTUIgKDFVTCBcdTAwM2NcdTAwM2MgMjApXG4rXG4rLyogSnVzdCB0aGUgZmxhZ3Mgd2UgbmVlZCwgY29waWVkIGZyb20gdGhlIGtlcm5lbCBpbnRlcm5hbHMuICovXG4rI2RlZmluZSBGT0xMX1dSSVRFXHQweDAxXHQvKiBjaGVjayBwdGUgaXMgd3JpdGFibGUgKi9cbitcbisvKiBQYWdlIGNvdW50cyBleGVyY2lzaW5nIHNpbmdsZSwgVEhQLWJhdGNoLCBwYXJ0aWFsLCBhbmQgZnVsbC1tYXBwaW5nIEdVUC4gKi9cbitzdGF0aWMgY29uc3QgaW50IG5yX3BhZ2VzX2xpc3RbXSA9IHsgMSwgNTEyLCAxMjMsIC0xIH07XG4rXG4rI2RlZmluZSBHVVBfVEVTVF9GSUxFIFwiL3N5cy9rZXJuZWwvZGVidWcvZ3VwX3Rlc3RcIlxuKyNkZWZpbmUgTlJfSFVHRV9QQUdFUyAyXG4rXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBfc2l6ZTtcbitcbitGSVhUVVJFKGd1cF90ZXN0KVxuK3tcbitcdGludCBndXBfZmQ7XG4rXHRjaGFyICphZGRyO1xuK1x0dW5zaWduZWQgbG9uZyBzaXplO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UKGd1cF90ZXN0KVxuK3tcbitcdGJvb2wgdGhwO1xuK1x0Ym9vbCBodWdldGxiO1xuK1x0Ym9vbCB3cml0ZTtcbitcdGJvb2wgc2hhcmVkO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV93cml0ZSlcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gdHJ1ZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfcmVhZClcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBwcml2YXRlX3dyaXRlX3RocClcbit7XG4rXHQudGhwID0gdHJ1ZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX3RocClcbit7XG4rXHQudGhwID0gdHJ1ZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSBmYWxzZSxcbitcdC5zaGFyZWQgPSBmYWxzZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHByaXZhdGVfd3JpdGVfaHVnZXRsYilcbit7XG4rXHQudGhwID0gZmFsc2UsXG4rXHQuaHVnZXRsYiA9IHRydWUsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IGZhbHNlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgcHJpdmF0ZV9yZWFkX2h1Z2V0bGIpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSB0cnVlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gZmFsc2UsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfd3JpdGUpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSBmYWxzZSxcbitcdC53cml0ZSA9IHRydWUsXG4rXHQuc2hhcmVkID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSBmYWxzZSxcbitcdC5zaGFyZWQgPSB0cnVlLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERChndXBfdGVzdCwgc2hhcmVkX3dyaXRlX3RocClcbit7XG4rXHQudGhwID0gdHJ1ZSxcbitcdC5odWdldGxiID0gZmFsc2UsXG4rXHQud3JpdGUgPSB0cnVlLFxuK1x0LnNoYXJlZCA9IHRydWUsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKGd1cF90ZXN0LCBzaGFyZWRfcmVhZF90aHApXG4re1xuK1x0LnRocCA9IHRydWUsXG4rXHQuaHVnZXRsYiA9IGZhbHNlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF93cml0ZV9odWdldGxiKVxuK3tcbitcdC50aHAgPSBmYWxzZSxcbitcdC5odWdldGxiID0gdHJ1ZSxcbitcdC53cml0ZSA9IHRydWUsXG4rXHQuc2hhcmVkID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoZ3VwX3Rlc3QsIHNoYXJlZF9yZWFkX2h1Z2V0bGIpXG4re1xuK1x0LnRocCA9IGZhbHNlLFxuK1x0Lmh1Z2V0bGIgPSB0cnVlLFxuK1x0LndyaXRlID0gZmFsc2UsXG4rXHQuc2hhcmVkID0gdHJ1ZSxcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAoZ3VwX3Rlc3QpXG4re1xuK1x0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVM7XG4rXHRjaGFyICpwO1xuK1xuK1x0c2VsZi1cdTAwM2VzaXplID0gMTI4ICogTUI7XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2VodWdldGxiKSB7XG4rXHRcdGlmICghaHBfc2l6ZSlcbitcdFx0XHRTS0lQKHJldHVybiwgXCJIdWdlVExCIG5vdCBhdmFpbGFibGVcXG5cIik7XG4rXG4rXHRcdGlmIChodWdldGxiX2ZyZWVfZGVmYXVsdF9wYWdlcygpIFx1MDAzYyBOUl9IVUdFX1BBR0VTKVxuK1x0XHRcdFNLSVAocmV0dXJuLCBcIk5vdCBlbm91Z2ggaHVnZSBwYWdlc1xcblwiKTtcbitcbitcdFx0c2VsZi1cdTAwM2VzaXplID0gTlJfSFVHRV9QQUdFUyAqIGhwX3NpemU7XG4rXHRcdG1tYXBfZmxhZ3MgfD0gTUFQX0hVR0VUTEI7XG4rXHR9XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2VzaGFyZWQpXG4rXHRcdG1tYXBfZmxhZ3MgPSAobW1hcF9mbGFncyBcdTAwMjYgfk1BUF9QUklWQVRFKSB8IE1BUF9TSEFSRUQ7XG4rXG4rXHQvKiBndXBfZmQgaGFzIHRvIGJlIFx1MDAzZT0gMC4gQWxyZWFkeSBjaGVja2VkIGluIG1haW4oKSAqL1xuK1x0c2VsZi1cdTAwM2VndXBfZmQgPSBvcGVuKEdVUF9URVNUX0ZJTEUsIE9fUkRXUik7XG4rXHRBU1NFUlRfR0Uoc2VsZi1cdTAwM2VndXBfZmQsIDApO1xuK1xuK1x0c2VsZi1cdTAwM2VhZGRyID0gbW1hcChOVUxMLCBzZWxmLVx1MDAzZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdFx0ICBtbWFwX2ZsYWdzLCAtMSwgMCk7XG4rXG4rXHRBU1NFUlRfTkUoc2VsZi1cdTAwM2VhZGRyLCBNQVBfRkFJTEVEKSB7XG4rXHRcdGludCBlcnIgPSBlcnJubztcbitcbitcdFx0Y2xvc2Uoc2VsZi1cdTAwM2VndXBfZmQpO1xuK1x0XHRUSF9MT0coXCJtbWFwIGZhaWxlZDogJXNcIiwgc3RyZXJyb3IoZXJyKSk7XG4rXHR9XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2V0aHApXG4rXHRcdG1hZHZpc2Uoc2VsZi1cdTAwM2VhZGRyLCBzZWxmLVx1MDAzZXNpemUsIE1BRFZfSFVHRVBBR0UpO1xuK1x0ZWxzZSBpZiAoIXZhcmlhbnQtXHUwMDNlaHVnZXRsYilcbitcdFx0bWFkdmlzZShzZWxmLVx1MDAzZWFkZHIsIHNlbGYtXHUwMDNlc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKTtcbitcbitcdGZvciAocCA9IHNlbGYtXHUwMDNlYWRkcjsgKHVuc2lnbmVkIGxvbmcpcCBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyXG4rXHRcdFx0KyBzZWxmLVx1MDAzZXNpemU7IHAgKz0gcHNpemUoKSlcbitcdFx0cFswXSA9IDA7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04oZ3VwX3Rlc3QpXG4re1xuK1x0bXVubWFwKHNlbGYtXHUwMDNlYWRkciwgc2VsZi1cdTAwM2VzaXplKTtcbitcdGNsb3NlKHNlbGYtXHUwMDNlZ3VwX2ZkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX2d1cF9jbWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuK1x0XHRcdCBGSVhUVVJFX0RBVEEoZ3VwX3Rlc3QpICpzZWxmLFxuK1x0XHRcdCBjb25zdCBGSVhUVVJFX1ZBUklBTlQoZ3VwX3Rlc3QpICp2YXJpYW50LFxuK1x0XHRcdCB1bnNpZ25lZCBsb25nIGNvbW1hbmQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoaW50KUFSUkFZX1NJWkUobnJfcGFnZXNfbGlzdCk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgZ3VwX3Rlc3QgZ3VwID0ge1xuK1x0XHRcdC5hZGRyID0gKHVuc2lnbmVkIGxvbmcpc2VsZi1cdTAwM2VhZGRyLFxuK1x0XHRcdC5zaXplID0gc2VsZi1cdTAwM2VzaXplLFxuK1x0XHRcdC5ucl9wYWdlc19wZXJfY2FsbCA9IG5yX3BhZ2VzX2xpc3RbaV0gXHUwMDNjIDAgP1xuK1x0XHRcdFx0c2VsZi1cdTAwM2VzaXplIC8gcHNpemUoKSA6IG5yX3BhZ2VzX2xpc3RbaV0sXG4rXHRcdFx0Lmd1cF9mbGFncyA9IHZhcmlhbnQtXHUwMDNld3JpdGUgPyBGT0xMX1dSSVRFIDogMCxcbitcdFx0fTtcbitcbitcdFx0VEhfTE9HKFwibnJfcGFnZXNfcGVyX2NhbGw9JXVcIiwgZ3VwLm5yX3BhZ2VzX3Blcl9jYWxsKTtcbitcdFx0QVNTRVJUX0VRKGlvY3RsKHNlbGYtXHUwMDNlZ3VwX2ZkLCBjb21tYW5kLCBcdTAwMjZndXApLCAwKTtcbitcdFx0QVNTRVJUX0VRKGd1cC5zaXplLCBzZWxmLVx1MDAzZXNpemUpO1xuK1x0fVxuK31cbitcbitURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzKVxuK3tcbitcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgR1VQX0JBU0lDX1RFU1QpO1xuK31cbitcbitURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzKVxuK3tcbitcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgUElOX0JBU0lDX1RFU1QpO1xuK31cbitcbitURVNUX0YoZ3VwX3Rlc3QsIGdldF91c2VyX3BhZ2VzX2Zhc3QpXG4re1xuK1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBHVVBfRkFTVF9CRU5DSE1BUkspO1xuK31cbitcbitURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2Zhc3QpXG4re1xuK1x0cnVuX2d1cF9jbWQoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBQSU5fRkFTVF9CRU5DSE1BUkspO1xuK31cbitcbitURVNUX0YoZ3VwX3Rlc3QsIHBpbl91c2VyX3BhZ2VzX2xvbmd0ZXJtKVxuK3tcbitcdHJ1bl9ndXBfY21kKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgUElOX0xPTkdURVJNX0JFTkNITUFSSyk7XG4rfVxuK1xuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbit7XG4rXHRpbnQgZmQ7XG4rXG4rXHRmZCA9IG9wZW4oR1VQX1RFU1RfRklMRSwgT19SRFdSKTtcbitcdGlmIChmZCA9PSAtMSkge1xuK1x0XHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0XHRpZiAoZXJybm8gPT0gRUFDQ0VTKVxuK1x0XHRcdGtzZnRfZXhpdF9za2lwKFwiUGxlYXNlIHJ1biB0aGlzIHRlc3QgYXMgcm9vdFxcblwiKTtcbitcdFx0aWYgKGVycm5vID09IEVOT0VOVCkge1xuK1x0XHRcdERJUiAqZGVidWdmcyA9IG9wZW5kaXIoXCIvc3lzL2tlcm5lbC9kZWJ1Z1wiKTtcbitcbitcdFx0XHRpZiAoIWRlYnVnZnMpXG4rXHRcdFx0XHRrc2Z0X2V4aXRfc2tpcChcIk1vdW50IGRlYnVnZnMgYXQgL3N5cy9rZXJuZWwvZGVidWdcXG5cIik7XG4rXHRcdFx0Y2xvc2VkaXIoZGVidWdmcyk7XG4rXHRcdFx0a3NmdF9leGl0X3NraXAoXCJDaGVjayBDT05GSUdfR1VQX1RFU1QgaW4ga2VybmVsIGNvbmZpZ1xcblwiKTtcbitcdFx0fVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJGYWlsZWQgdG8gb3BlbiAlczogJXNcXG5cIiwgR1VQX1RFU1RfRklMRSwgc3RyZXJyb3IoZXJybm8pKTtcbitcdH1cbitcdGNsb3NlKGZkKTtcbitcbitcdGhwX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XG4rXHRpZiAoaHBfc2l6ZSlcbitcdFx0aHVnZXRsYl9zZXR1cF9kZWZhdWx0KE5SX0hVR0VfUEFHRVMpO1xuK1xuK1x0cmV0dXJuIHRlc3RfaGFybmVzc19ydW4oYXJnYywgYXJndik7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1cF9sb25ndGVybS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbmluZGV4IDUxMGRlOTNiZTY4MTQuLmM5ZDhiNDQ5MTI2MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndXBfbG9uZ3Rlcm0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VwX2xvbmd0ZXJtLmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXCIuLi8uLi8uLi8uLi9tbS9ndXBfdGVzdC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplO1xuIHN0YXRpYyBpbnQgbnJfaHVnZXRsYnNpemVzO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IGUyNjQyZWNhMGQwMmIuLmZhMWE2NTE5NjNmZDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbkBAIC0xMCw5ICsxMCw2IEBAXG4gICogYnVncy5cbiAgKi9cbiBcbi0jaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4tXG4gI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG5AQCAtMzMsNiArMzAsOSBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9ldmVudGZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4gXG4gLypcbiAgKiBUaGlzIGlzIGEgcHJpdmF0ZSBVQVBJIHRvIHRoZSBrZXJuZWwgdGVzdCBtb2R1bGUgc28gaXQgaXNuJ3QgZXhwb3J0ZWRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1hZHZpc2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5pbmRleCA1NTViNGIzZDE0MzA3Li41N2NmNzkwY2E0NzhkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tYWR2aXNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbWFkdmlzZS5jXG5AQCAtMTQsNyArMTQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIE1JTl9GUkVFX1BBR0VTXHQyMFxuICNkZWZpbmUgTlJfSFVHRV9QQUdFU1x0MTBcdC8qIGNvbW1vbiBudW1iZXIgb2YgcGFnZXMgdG8gbWFwL2FsbG9jYXRlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tbWFwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuaW5kZXggMGYyYWFkMWI3ZGJkNi4uYTQ1OGJlY2Y1ODMyNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1tYXAuY1xuQEAgLTE4LDcgKzE4LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1mZC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNClcbiAjZGVmaW5lIFBST1RFQ1RJT04gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1tcmVtYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItbXJlbWFwLmNcbmluZGV4IGVkM2Q5MmU4NjJkODcuLjliNzI0YWY2NmU5MzggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLW1yZW1hcC5jXG5AQCAtMjYsNyArMjYsNiBAQFxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgREVGQVVMVF9MRU5HVEhfTUIgMTBVTFxuICNkZWZpbmUgTUJfVE9fQllURVMoeCkgKHggKiAxMDI0ICogMTAyNClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNobS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zaG0uY1xuaW5kZXggM2ZmN2YwNjJiN2ViNC4uZjQ1MTRkYTQ5ZTFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc2htLmNcbkBAIC0yOSw3ICsyOSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1zb2Z0LW9mZmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItc29mdC1vZmZsaW5lLmNcbmluZGV4IDRhZjlkM2RiN2I1YjYuLmQ5NTY1MjE5Mzc4YWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXNvZnQtb2ZmbGluZS5jXG5AQCAtMjIsMTAgKzIyLDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0ZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpZm5kZWYgTUFEVl9TT0ZUX09GRkxJTkVcbiAjZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxuQEAgLTg1LDggKzg1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgb3JpZ19lbmFibGVfc29mdF9vZmZsaW5lID0gLTFVTDtcbiBcbiAvKlxuICAqIFJ1bnMgZnJvbSBhbiBhdGV4aXQgaGFuZGxlciwgc28gaXQgbXVzdCBub3QgY2FsbCBhbnl0aGluZyB0aGF0XG4tICogZXhpdHMgb24gZmFpbHVyZTogd3JpdGVfbnVtKCkgd291bGQgcmUtZW50ZXIgZXhpdCgpIHRocm91Z2hcbi0gKiBrc2Z0X2V4aXRfZmFpbF9tc2coKS5cbisgKiBleGl0cyBvbiBmYWlsdXJlLlxuICAqL1xuIHN0YXRpYyB2b2lkIHJlc3RvcmVfZW5hYmxlX3NvZnRfb2ZmbGluZSh2b2lkKVxuIHtcbkBAIC0xNTIsNyArMTUxLDEwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29mdF9vZmZsaW5lX2NvbW1vbihpbnQgZW5hYmxlX3NvZnRfb2ZmbGluZSlcbiBcdGh1Z2VwYWdlc2l6ZV9rYiA9IGZpbGVfc3RhdC5mX2JzaXplIC8gMTAyNDtcbiBcdGtzZnRfcHJpbnRfbXNnKFwiSHVnZXBhZ2VzaXplIGlzICVsZGtCXFxuXCIsIGh1Z2VwYWdlc2l6ZV9rYik7XG4gXG4tXHR3cml0ZV9udW0oRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRILCBlbmFibGVfc29mdF9vZmZsaW5lKTtcbitcdHJldCA9IHdyaXRlX251bShFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIGVuYWJsZV9zb2Z0X29mZmxpbmUpO1xuK1x0aWYgKHJldClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHdyaXRlIHRvICVzOiAlc1xcblwiLFxuK1x0XHRcdFx0ICAgRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRILCBzdHJlcnJvcigtcmV0KSk7XG4gXG4gXHRucl9odWdlcGFnZXNfYmVmb3JlID0gaHVnZXRsYl9ucl9kZWZhdWx0X3BhZ2VzKCk7XG4gXG5AQCAtMTg5LDYgKzE5MSw4IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29mdF9vZmZsaW5lX2NvbW1vbihpbnQgZW5hYmxlX3NvZnRfb2ZmbGluZSlcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4ge1xuK1x0aW50IHJldDtcbitcbiBcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4gXG4gXHRpZiAoIWh1Z2V0bGJfc2V0dXBfZGVmYXVsdCg4KSlcbkBAIC0xOTYsNyArMjAwLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcbiBcdGtzZnRfc2V0X3BsYW4oMik7XG4gXG4tXHRvcmlnX2VuYWJsZV9zb2Z0X29mZmxpbmUgPSByZWFkX251bShFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgpO1xuK1x0cmV0ID0gcmVhZF9udW0oRU5BQkxFX1NPRlRfT0ZGTElORV9QQVRILCBcdTAwMjZvcmlnX2VuYWJsZV9zb2Z0X29mZmxpbmUpO1xuK1x0aWYgKHJldClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHJlYWQgJXM6ICVzXFxuXCIsXG4rXHRcdFx0XHQgICBFTkFCTEVfU09GVF9PRkZMSU5FX1BBVEgsIHN0cmVycm9yKC1yZXQpKTtcbitcbiBcdGF0ZXhpdChyZXN0b3JlX2VuYWJsZV9zb2Z0X29mZmxpbmUpO1xuIFxuIFx0dGVzdF9zb2Z0X29mZmxpbmVfY29tbW9uKDEpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZGlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2Rpby5jXG5pbmRleCBmYjQ2MDA1NzBlMTMxLi45NDk1OTc0ZWNjYmVhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9kaW8uY1xuQEAgLTIwLDcgKzIwLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2lmbmRlZiBTVEFUWF9ESU9BTElHTlxuICNkZWZpbmUgU1RBVFhfRElPQUxJR05cdFx0MHgwMDAwMjAwMFVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5pbmRleCAyZGMxNTgwNTRmNjY2Li41NmM1YTg1MzNlOWQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9mYXVsdF9hZnRlcl9tYWR2LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdi5jXG5AQCAtMTAsNyArMTAsNiBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgSU5MT09QX0lURVIgMTAwXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG5pbmRleCBmOTQ1NDllZmNjNmZmLi4yNTMyYTQyYjk4ZGZmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9tYWR2X3ZzX21hcC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX21hZHZfdnNfbWFwLmNcbkBAIC0yNSw3ICsyNSw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIElOTE9PUF9JVEVSIDEwMFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuaW5kZXggZjgyNjczZjVmNmI0Ny4uNTI1MTA4Y2FjZTU0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMjIsNyArMjIsNiBAQFxuICNpbmNsdWRlIFwibGludXgvbWFnaWMuaFwiXG4gXG4gI2luY2x1ZGUgXCJ2bV91dGlsLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2RlZmluZSBCQVNFX0FERFIgKCh2b2lkICopKDFVTCBcdTAwM2NcdTAwM2MgMzApKVxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwYWdlX3BtZF9zaXplO1xuQEAgLTEyMiw2ICsxMjEsNyBAQCBzdGF0aWMgdm9pZCBnZXRfZmluZm8oY29uc3QgY2hhciAqZGlyKVxuIFx0Y2hhciBidWZbMSBcdTAwM2NcdTAwM2MgMTBdO1xuIFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiBcdGNoYXIgKnN0ciwgKmVuZDtcbitcdGludCByZXQ7XG4gXG4gXHRmaW5mby5kaXIgPSBkaXI7XG4gXHRpZiAoc3RhdChmaW5mby5kaXIsIFx1MDAyNnBhdGhfc3RhdCkpXG5AQCAtMTQyLDggKzE0Miw5IEBAIHN0YXRpYyB2b2lkIGdldF9maW5mbyhjb25zdCBjaGFyICpkaXIpXG4gXHRcdCAgICAgbWFqb3IocGF0aF9zdGF0LnN0X2RldiksIG1pbm9yKHBhdGhfc3RhdC5zdF9kZXYpKVxuIFx0ICAgIFx1MDAzZT0gc2l6ZW9mKHBhdGgpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCIlczogUGF0aG5hbWUgaXMgdG9vIGxvbmdcXG5cIiwgX19mdW5jX18pO1xuLVx0aWYgKCFyZWFkX2ZpbGUocGF0aCwgYnVmLCBzaXplb2YoYnVmKSkpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcInJlYWRfZmlsZSh1ZXZlbnQpXCIpO1xuK1x0cmV0ID0gcmVhZF9maWxlKHBhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuK1x0aWYgKHJldClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZF9maWxlKCVzKTogJXNcXG5cIiwgcGF0aCwgc3RyZXJyb3IoLXJldCkpO1xuIFx0aWYgKHN0cnN0cihidWYsIFwiREVWVFlQRT1kaXNrXCIpKSB7XG4gXHRcdC8qIEZvdW5kIGl0ICovXG4gXHRcdGlmIChzbnByaW50ZihmaW5mby5kZXZfcXVldWVfcmVhZF9haGVhZF9wYXRoLFxuQEAgLTMyNCw3ICszMjUsNyBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIHtcbiBcdGNvbnN0IGludCBvcGVuX29wdCA9IHNldHVwID09IEZJTEVfU0VUVVBfUkVBRF9PTkxZX0ZTID8gT19SRE9OTFkgOiBPX1JEV1I7XG4gXHRjb25zdCBpbnQgbW1hcF9wcm90ID0gc2V0dXAgPT0gRklMRV9TRVRVUF9SRUFEX09OTFlfRlMgPyBQUk9UX1JFQUQgOiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7XG4tXHRpbnQgZmQ7XG4rXHRpbnQgZmQsIHJldDtcbiBcdHZvaWQgKnA7XG4gXHR1bnNpZ25lZCBsb25nIHNpemU7XG4gXG5AQCAtMzYyLDcgKzM2MywxMSBAQCBzdGF0aWMgdm9pZCAqZmlsZV9zZXR1cF9hcmVhX2NvbW1vbihpbnQgbnJfaHBhZ2VzLCBlbnVtIGZpbGVfc2V0dXBfb3BzIHNldHVwKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJtbWFwKClcIik7XG4gXG4gXHQvKiBEcm9wIHBhZ2UgY2FjaGUgKi9cbi1cdHdyaXRlX2ZpbGUoXCIvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXNcIiwgXCIzXCIsIDIpO1xuK1x0cmV0ID0gd3JpdGVfZmlsZShcIi9wcm9jL3N5cy92bS9kcm9wX2NhY2hlc1wiLCBcIjNcIiwgMik7XG4rXHRpZiAocmV0KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJ3cml0ZV9maWxlKGRyb3BfY2FjaGVzKTogJXNcXG5cIixcbitcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbitcbiBcdHN1Y2Nlc3MoXCJPS1wiKTtcbiBcdHJldHVybiBwO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li42NzExZjRjNjEzNzExIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5AQCAtMTUsNyArMTUsNiBAQFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFx1MDAzY2luY2x1ZGUvdmRzby90aW1lNjQuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgS1NNX1NZU0ZTX1BBVEggXCIvc3lzL2tlcm5lbC9tbS9rc20vXCJcbiAjZGVmaW5lIEtTTV9GUChzKSAoS1NNX1NZU0ZTX1BBVEggcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5pbmRleCBmMTlkNTNjNjk1NzY0Li5hMzVlMmI1N2UwNWIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5AQCAtNSw3ICs1LDYgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbkBAIC0xNiw2ICsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuK1xuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiBcbiAjZGVmaW5lIFRXT01FR1x0XHQoMlx1MDAzY1x1MDAzYzIwKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuaW5kZXggZDlhNGZiNzgyZWNmZS4uMDM4OThiNGY2Y2RhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VtYXBfaW9jdGwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGFnZW1hcF9pb2N0bC5jXG5AQCAtMjQsNyArMjQsNiBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNkZWZpbmUgUEFHRU1BUF9CSVRTX0FMTFx0XHQoUEFHRV9JU19XUEFMTE9XRUQgfCBQQUdFX0lTX1dSSVRURU4gfFx0XFxcbiBcdFx0XHRcdFx0IFBBR0VfSVNfRklMRSB8IFBBR0VfSVNfUFJFU0VOVCB8XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ByY3RsX3RocF9kaXNhYmxlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcmN0bF90aHBfZGlzYWJsZS5jXG5pbmRleCA4MmM2ZTk2ZWE2ZWIzLi5mOWVjMTQwOGE2ZTMwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJjdGxfdGhwX2Rpc2FibGUuY1xuQEAgLTE0LDcgKzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiBcbiAjaWZuZGVmIFBSX1RIUF9ESVNBQkxFX0VYQ0VQVF9BRFZJU0VEXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuaW5kZXggYWU2ZTE1MzBiMzU0OC4uYjc4ODJhYjk3NjgzZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuQEAgLTQ1LDggKzQ1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9wdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuLSNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4gI2luY2x1ZGUgXCJwa2V5LWhlbHBlcnMuaFwiXG4gXG4gdTY0IHNoYWRvd19wa2V5X3JlZztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCBkMDlmOWY2YTM4NGVlLi5hZTBhYjVlZmFiYWU2IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5AQCAtMTMwLDMwICsxMzAsNiBAQCB0ZXN0X3NlbGVjdGVkKCkge1xuIFx0ZmlcbiB9XG4gXG4tcnVuX2d1cF9tYXRyaXgoKSB7XG4tICAgICMgLXQ6IHRocD1vbiwgLVQ6IHRocD1vZmYsIC1IOiBodWdldGxiPW9uXG4tICAgIGxvY2FsIGh1Z2V0bGJfbWI9MjU2XG4tXG4tICAgIGZvciBodWdlIGluIC10IC1UIFwiLUggLW0gJGh1Z2V0bGJfbWJcIjsgZG9cbi0gICAgICAgICMgLXU6IGd1cC1mYXN0LCAtVTogZ3VwLWJhc2ljLCAtYTogcGluLWZhc3QsIC1iOiBwaW4tYmFzaWMsIC1MOiBwaW4tbG9uZ3Rlcm1cbi0gICAgICAgIGZvciB0ZXN0X2NtZCBpbiAtdSAtVSAtYSAtYiAtTDsgZG9cbi0gICAgICAgICAgICAjIC13OiB3cml0ZT0xLCAtVzogd3JpdGU9MFxuLSAgICAgICAgICAgIGZvciB3cml0ZSBpbiAtdyAtVzsgZG9cbi0gICAgICAgICAgICAgICAgIyAtUzogc2hhcmVkXG4tICAgICAgICAgICAgICAgIGZvciBzaGFyZSBpbiAtUyBcIiBcIjsgZG9cbi0gICAgICAgICAgICAgICAgICAgICMgLW46IEhvdyBtYW55IHBhZ2VzIHRvIGZldGNoIHRvZ2V0aGVyPyAgNTEyIGlzIHNwZWNpYWxcbi0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCdzIGRlZmF1bHQgdGhwIHNpemUgKG9yIDJNIG9uIHg4NiksIDEyMyB0b1xuLSAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgcGFydGlhbCBndXAgd2hlbiBoaXQgYSBodWdlIGluIHdoYXRldmVyIGZvcm1cbi0gICAgICAgICAgICAgICAgICAgIGZvciBudW0gaW4gXCItbiAxXCIgXCItbiA1MTJcIiBcIi1uIDEyM1wiIFwiLW4gLTFcIjsgZG9cbi0gICAgICAgICAgICAgICAgICAgICAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCBcXFxuLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGh1Z2UgJHRlc3RfY21kICR3cml0ZSAkc2hhcmUgJG51bVxuLSAgICAgICAgICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgICAgICAgICBkb25lXG4tICAgICAgICAgICAgZG9uZVxuLSAgICAgICAgZG9uZVxuLSAgICBkb25lXG4tfVxuLVxuICMgZmlsdGVyIDY0Yml0IGFyY2hpdGVjdHVyZXNcbiBBUkNINjRTVFI9XCJhcm02NCBtaXBzNjQgcGFyaXNjNjQgcHBjNjQgcHBjNjRsZSByaXNjdjY0IHMzOTB4IHNwYXJjNjQgeDg2XzY0XCJcbiBpZiBbIC16IFwiJEFSQ0hcIiBdOyB0aGVuXG5AQCAtMjc1LDE4ICsyNTEsNyBAQCBmaVxuIFxuIENBVEVHT1JZPVwibW1hcFwiIHJ1bl90ZXN0IC4vbWFwX2ZpeGVkX25vcmVwbGFjZVxuIFxuLWlmICRSVU5fQUxMOyB0aGVuXG4tICAgIHJ1bl9ndXBfbWF0cml4XG4tZWxzZVxuLSAgICAjIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcbi0gICAgQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLXUgLW4gMVxuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtdSAtbiAtMVxuLSAgICAjIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKSBiZW5jaG1hcmtcbi0gICAgQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWEgLW4gMVxuLSAgICBDQVRFR09SWT1cImd1cF90ZXN0XCIgcnVuX3Rlc3QgLi9ndXBfdGVzdCAtYSAtbiAtMVxuLWZpXG4tIyBEdW1wIHBhZ2VzIDAsIDE5LCBhbmQgNDA5NiwgdXNpbmcgcGluX3VzZXJfcGFnZXM6XG4tQ0FURUdPUlk9XCJndXBfdGVzdFwiIHJ1bl90ZXN0IC4vZ3VwX3Rlc3QgLWN0IC1GIDB4MSAwIDE5IDB4MTAwMFxuK0NBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cFxuIENBVEVHT1JZPVwiZ3VwX3Rlc3RcIiBydW5fdGVzdCAuL2d1cF9sb25ndGVybVxuIFxuIENBVEVHT1JZPVwidXNlcmZhdWx0ZmRcIiBydW5fdGVzdCAuL3VmZmQtdW5pdC10ZXN0c1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuaW5kZXggNWYyNzg5MTNjNGQ3NS4uN2Y2NDliNjczMzU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NvZnQtZGlydHkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc29mdC1kaXJ0eS5jXG5AQCAtOSw3ICs5LDYgQEBcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIFBBR0VNQVBfRklMRV9QQVRIIFwiL3Byb2Mvc2VsZi9wYWdlbWFwXCJcbiAjZGVmaW5lIFRFU1RfSVRFUkFUSU9OUyAxMDAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3NwbGl0X2h1Z2VfcGFnZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9zcGxpdF9odWdlX3BhZ2VfdGVzdC5jXG5pbmRleCBjMDFkMjI3ZDdmZDZkLi42OGY1MDhjOWEzNTVmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vc3BsaXRfaHVnZV9wYWdlX3Rlc3QuY1xuQEAgLTIxLDcgKzIxLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiB1aW50NjRfdCBwYWdlc2l6ZTtcbiB1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0O1xuQEAgLTE0NSw3ICsxNDQsMTAgQEAgc3RhdGljIHZvaWQgd3JpdGVfZGVidWdmcyhjb25zdCBjaGFyICpmbXQsIC4uLilcbiBcdGlmIChyZXQgXHUwMDNlPSBJTlBVVF9NQVgpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzOiBEZWJ1Z2ZzIGlucHV0IGlzIHRvbyBsb25nXFxuXCIsIF9fZnVuY19fKTtcbiBcbi1cdHdyaXRlX2ZpbGUoU1BMSVRfREVCVUdGUywgaW5wdXQsIHJldCArIDEpO1xuK1x0cmV0ID0gd3JpdGVfZmlsZShTUExJVF9ERUJVR0ZTLCBpbnB1dCwgcmV0ICsgMSk7XG4rXHRpZiAocmV0KVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJ3cml0ZV9maWxlKCVzKTogJXNcXG5cIiwgU1BMSVRfREVCVUdGUyxcbitcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpKTtcbiB9XG4gXG4gc3RhdGljIGNoYXIgKmFsbG9jYXRlX3plcm9fZmlsbGVkX2h1Z2VwYWdlKHNpemVfdCBsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGh1Z2UtZ2VuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuaW5kZXggNTBkMDgwNWI2NWRiOS4uYTA0ZjU4OGRmNzgwZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RodWdlLWdlbi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90aHVnZS1nZW4uY1xuQEAgLTE0LDcgKzE0LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuICNpZiAhZGVmaW5lZChNQVBfSFVHRVRMQilcbiAjZGVmaW5lIE1BUF9IVUdFVExCXHQweDQwMDAwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG5pbmRleCA4ZWIwYzU2MzBlN2UzLi45NmY3Mjg5OGViZTBhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbkBAIC0xNyw3ICsxNyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIGludCBiYWNraW5nX2ZkID0gLTE7XG4gaW50IG1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLWNvbW1vbi5oXG5pbmRleCA5MmEyMWI5N2Y3NDVhLi4wNzIzODQzYTc2MjZiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC1jb21tb24uaFxuQEAgLTM3LDcgKzM3LDYgQEBcbiBcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4tI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbiAjZGVmaW5lIFVGRkRfRkxBR1NcdChPX0NMT0VYRUMgfCBPX05PTkJMT0NLIHwgVUZGRF9VU0VSX01PREVfT05MWSlcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXdwLW1yZW1hcC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC13cC1tcmVtYXAuY1xuaW5kZXggNTcyYzI1MTZlODc0ZC4uYzQ4ZWFhYjhlNzVjZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtd3AtbXJlbWFwLmNcbkBAIC03LDggKzcsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2Fzc2VydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY21tL2h1Z2VwYWdlX3NldHRpbmdzLmhcdTAwM2VcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuICNpbmNsdWRlIFwidWZmZC1jb21tb24uaFwiXG4gXG4gc3RhdGljIGludCBwYWdlbWFwX2ZkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xuaW5kZXggZTI0ZDdiYTAwYjQ0MS4uNWEzNTRhNjY0ZDFmNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZhX2hpZ2hfYWRkcl9zd2l0Y2guY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdmFfaGlnaF9hZGRyX3N3aXRjaC5jXG5AQCAtMTEsNyArMTEsNiBAQFxuIFxuICNpbmNsdWRlIFwidm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbi0jaW5jbHVkZSBcImh1Z2VwYWdlX3NldHRpbmdzLmhcIlxuIFxuIC8qXG4gICogVGhlIGhpbnQgYWRkciB2YWx1ZSBpcyB1c2VkIHRvIGFsbG9jYXRlIGFkZHJlc3Nlc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggODBiYzlmNTk3YjUyMS4uNDc1MWRiNzk4YzNhYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtODg5LDExMSArODg5LDU0IEBAIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRyZXR1cm4gcmV0IFx1MDAzZSAwID8gMCA6IC1lcnJubztcbiB9XG4gXG4taW50IHJlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pXG4te1xuLVx0aW50IGZkO1xuLVx0c3NpemVfdCBudW1yZWFkO1xuLVxuLVx0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTtcbi1cdGlmIChmZCA9PSAtMSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRudW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTtcbi1cdGlmIChudW1yZWFkIFx1MDAzYyAxKSB7XG4tXHRcdGNsb3NlKGZkKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRidWZbbnVtcmVhZF0gPSAnXFwwJztcbi1cdGNsb3NlKGZkKTtcbi1cbi1cdHJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBib29sIGlnbm9yZV9laW52YWwpXG4te1xuLVx0aW50IGZkLCBzYXZlZF9lcnJubztcbi1cdHNzaXplX3QgbnVtd3JpdHRlbjtcbi1cbi1cdGlmIChidWZsZW4gXHUwMDNjIDIpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkluY29ycmVjdCBidWZmZXIgbGVuOiAlenVcXG5cIiwgYnVmbGVuKTtcbi1cbi1cdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7XG4tXHRpZiAoZmQgPT0gLTEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzIG9wZW4gZmFpbGVkOiAlc1xcblwiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpO1xuLVxuLVx0bnVtd3JpdHRlbiA9IHdyaXRlKGZkLCBidWYsIGJ1ZmxlbiAtIDEpO1xuLVx0c2F2ZWRfZXJybm8gPSBlcnJubztcbi1cdGNsb3NlKGZkKTtcbi1cdGVycm5vID0gc2F2ZWRfZXJybm87XG4tXHRpZiAobnVtd3JpdHRlbiBcdTAwM2MgMCkge1xuLVx0XHRpZiAoaWdub3JlX2VpbnZhbCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiJXMgd3JpdGUoJS4qcykgZmFpbGVkOiAlc1xcblwiLCBwYXRoLCAoaW50KShidWZsZW4gLSAxKSxcbi1cdFx0XHRcdGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdH1cbi1cdGlmIChudW13cml0dGVuICE9IGJ1ZmxlbiAtIDEpXG4tXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIiVzIHdyaXRlKCUuKnMpIGlzIHRydW5jYXRlZCwgZXhwZWN0ZWQgJXp1IGJ5dGVzLCBnb3QgJXpkIGJ5dGVzXFxuXCIsXG4tXHRcdFx0XHRwYXRoLCAoaW50KShidWZsZW4gLSAxKSwgYnVmLCBidWZsZW4gLSAxLCBudW13cml0dGVuKTtcbi19XG4tXG4tdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbilcbi17XG4tXHRfX3dyaXRlX2ZpbGUocGF0aCwgYnVmLCBidWZsZW4sIC8qIGlnbm9yZV9laW52YWwgPSAqLyBmYWxzZSk7XG4tfVxuLVxuLXVuc2lnbmVkIGxvbmcgcmVhZF9udW0oY29uc3QgY2hhciAqcGF0aClcbi17XG4tXHRjaGFyIGJ1ZlsyMV07XG4tXG4tXHRpZiAoIXJlYWRfZmlsZShwYXRoLCBidWYsIHNpemVvZihidWYpKSlcbi1cdFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFwicmVhZF9maWxlKClcIik7XG4tXG4tXHRyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDEwKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgX193cml0ZV9udW0oY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0sIGJvb2wgaWdub3JlX2VpbnZhbClcbi17XG4tXHRjaGFyIGJ1ZlsyMV07XG4tXG4tXHRzcHJpbnRmKGJ1ZiwgXCIlbHVcIiwgbnVtKTtcbi1cdF9fd3JpdGVfZmlsZShwYXRoLCBidWYsIHN0cmxlbihidWYpICsgMSwgaWdub3JlX2VpbnZhbCk7XG4tfVxuLVxuLXZvaWQgd3JpdGVfbnVtKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgbnVtKVxuLXtcbi1cdHJldHVybiBfX3dyaXRlX251bShwYXRoLCBudW0sIC8qIGlnbm9yZV9laW52YWwgPSAqLyBmYWxzZSk7XG4tfVxuLVxuLXZvaWQgd3JpdGVfbnVtX2lnbm9yZV9laW52YWwoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBudW0pXG4te1xuLVx0cmV0dXJuIF9fd3JpdGVfbnVtKHBhdGgsIG51bSwgLyogaWdub3JlX2VpbnZhbCA9ICovIHRydWUpO1xuLX1cbi1cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1hbGwsIHNobW1heDtcbiBcbiB2b2lkIF9fc2htX2xpbWl0c19yZXN0b3JlKHZvaWQpXG4ge1xuLVx0aWYgKHNobW1heClcbi1cdFx0d3JpdGVfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcIiwgc2htbWF4KTtcbi1cdGlmIChzaG1hbGwpXG4tXHRcdHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIHNobWFsbCk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHNobW1heCkge1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBzaG1tYXgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byByZXN0b3JlIHNobW1heDogJXNcXG5cIixcbitcdFx0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuK1x0fVxuK1x0aWYgKHNobWFsbCkge1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFwiLCBzaG1hbGwpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byByZXN0b3JlIHNobWFsbDogJXNcXG5cIixcbitcdFx0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuK1x0fVxuIH1cbiBcbiB2b2lkIHNobV9saW1pdHNfcHJlcGFyZSh1bnNpZ25lZCBsb25nIGxlbmd0aClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yID0gbGVuZ3RoIC8gcHNpemUoKTtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlYWRfbnVtKFwiL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXhcIiwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byByZWFkIC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4OiAlc1xcblwiLFxuK1x0XHRcdFx0ICAgc3RyZXJyb3IoLXJldCkpO1xuIFxuLVx0dmFsID0gcmVhZF9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiKTtcbiBcdGlmICh2YWwgXHUwMDNjIGxlbmd0aCkge1xuLVx0XHR3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBsZW5ndGgpO1xuK1x0XHRyZXQgPSB3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobW1heFwiLCBsZW5ndGgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIkZhaWxlZCB0byB3cml0ZSAlbHUgdG8gL3Byb2Mvc3lzL2tlcm5lbC9zaG1tYXg6ICVzXFxuXCIsXG4rXHRcdFx0XHRcdCAgIGxlbmd0aCwgc3RyZXJyb3IoLXJldCkpO1xuIFx0XHRzaG1tYXggPSB2YWw7XG4gXHR9XG4gXG4tXHR2YWwgPSByZWFkX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIpO1xuK1x0cmV0ID0gcmVhZF9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFwiLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiRmFpbGVkIHRvIHJlYWQgL3Byb2Mvc3lzL2tlcm5lbC9zaG1hbGw6ICVzXFxuXCIsXG4rXHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSk7XG4gXHRpZiAodmFsIFx1MDAzYyBucikge1xuLVx0XHR3cml0ZV9udW0oXCIvcHJvYy9zeXMva2VybmVsL3NobWFsbFwiLCBucik7XG4rXHRcdHJldCA9IHdyaXRlX251bShcIi9wcm9jL3N5cy9rZXJuZWwvc2htYWxsXCIsIG5yKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJGYWlsZWQgdG8gd3JpdGUgJWx1IHRvIC9wcm9jL3N5cy9rZXJuZWwvc2htYWxsOiAlc1xcblwiLFxuK1x0XHRcdFx0XHQgICBuciwgc3RyZXJyb3IoLXJldCkpO1xuIFx0XHRzaG1hbGwgPSB2YWw7XG4gXHR9XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuaW5kZXggOWE0OWFmODg3MDJlNC4uNjRhODZlOGEwYzQxYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5AQCAtOCw2ICs4LDggQEBcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZSAvKiBfU0NfUEFHRVNJWkUgKi9cbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vZmlsZV91dGlscy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbW0vaHVnZXBhZ2Vfc2V0dGluZ3MuaFx1MDAzZVxuIFxuICNkZWZpbmUgQklUX1VMTChucikgICAgICAgICAgICAgICAgICAgKDFVTEwgXHUwMDNjXHUwMDNjIChucikpXG4gI2RlZmluZSBQTV9TT0ZUX0RJUlRZICAgICAgICAgICAgICAgICBCSVRfVUxMKDU1KVxuQEAgLTE2NiwxMiArMTY4LDYgQEAgaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVx0KCgoZW50KSBcdTAwMjYgKDF1bGwgXHUwMDNjXHUwMDNjIDYzKSkgIT0gMClcbiAjZGVmaW5lIFBBR0VNQVBfUEZOKGVudClcdCgoZW50KSBcdTAwMjYgKCgxdWxsIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSlcbiBcbi12b2lkIHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTtcbi1pbnQgcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7XG4tdW5zaWduZWQgbG9uZyByZWFkX251bShjb25zdCBjaGFyICpwYXRoKTtcbi12b2lkIHdyaXRlX251bShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tdm9pZCB3cml0ZV9udW1faWdub3JlX2VpbnZhbChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIG51bSk7XG4tXG4gdm9pZCBzaG1fbGltaXRzX3ByZXBhcmUodW5zaWduZWQgbG9uZyBsZW5ndGgpO1xuIHZvaWQgX19zaG1fbGltaXRzX3Jlc3RvcmUodm9pZCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0Njo1OS4wOTkzNTU5MDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDk3ODg1MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBXb3J0aEZ1enppbmcgRXZhbHVhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gVGhlIHVzZXIncyBnaXZlbiBtZSBhIGRpZmYsIGFuZCBteSBpbml0aWFsIHNjYW4gaGlnaGxpZ2h0cyBhIGZldyBrZXkgYXJlYXMgb2YgbW9kaWZpY2F0aW9uLiBGaXJzdCwgSSBzZWUgYSBzbGV3IG9mIGNoYW5nZXMgdW5kZXIgdGhlIGB0b29scy9gIGRpcmVjdG9yeSDigJMgYSBzaWduaWZpY2FudCBjbHVlLiBTcGVjaWZpY2FsbHksIGB0b29scy9saWIvbW0vYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AsIGFuZCBgdG9vbHMvbW0vYC4gVGhlcmUncyBhbHNvIHNvbWUgZG9jdW1lbnRhdGlvbiAoYERvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0YCkgYW5kIGEgYE1BSU5UQUlORVJTYCB1cGRhdGUuIEZpbmFsbHksIHRoZXJlJ3MgYSB0b3VjaCBpbiBgbW0vS2NvbmZpZ2AuXG5cbk5vdywgYWNjb3JkaW5nIHRvIHRoZSBcIldIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXCIgcnVsZXMsIHRoaXMgaXMgdGhlIGNydWNpYWwgcGFydC4gVGhlIHJ1bGVzIGV4cGxpY2l0bHkgc3RhdGUgdGhhdCBtb2RpZmljYXRpb25zIHRvIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIGFuZCB0b29scyB0aGF0ICpkb24ndCogYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIG1vZHVsZXMgYXJlIGEgYmlnIHJlZCBmbGFnIGZvciAqbm90KiBmdXp6aW5nLiBXZSdyZSBhbHNvIGxvb2tpbmcgZm9yIHB1cmVseSBkb2N1bWVudGF0aW9uIGNoYW5nZXMgYW5kIEtjb25maWcgY2hhbmdlcyB0aGF0ICpkb24ndCogaW1wYWN0IHRoZSBjb21waWxlZCBDIGxvZ2ljLlxuXG5Mb29raW5nIGF0IHRoZSBLY29uZmlnIGNoYW5nZSBjbG9zZWx5LCBpdCBzZWVtcyB0byBtb2RpZnkgdGhlIHRpdGxlIGFuZCBoZWxwIHRleHQgZm9yIGBDT05GSUdfR1VQX1RFU1RgOlxuXG5gYGBkaWZmXG4tXHRib29sIFwiRW5hYmxlIGluZnJhc3RydWN0dXJlIGZvciBnZXRfdXNlcl9wYWdlcygpLXJlbGF0ZWQgdW5pdCB0ZXN0c1wiXG4rXHRib29sIFwiRW5hYmxlIGluZnJhc3RydWN0dXJlIGZvciBnZXRfdXNlcl9wYWdlcygpLXJlbGF0ZWQgdW5pdCB0ZXN0cyBhbmQgYmVuY2htYXJrc1wiXG5gYGBcblxuVGhlIGhlbHAgdGV4dCBpcyB1cGRhdGVkOiB0aGUga2V5IGhlcmUgaXMsIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbnkgY2hhbmdlIHRvIGNvbmZpZyBsb2dpYyBvciB0aGUgY29tcGlsZWQgQyBsb2dpYy4gSGVyZSwgaXQgZG9lcyAqbm90KiBhbHRlciBhbnkgY29uZmlnIGxvZ2ljLCBkZXBlbmRlbmNpZXMsIHNlbGVjdCwgb3IgYW55dGhpbmcgdGhhdCBhbHRlcnMgY29tcGlsZWQgQyBsb2dpYy4gSW4gb3RoZXIgd29yZHMsIGl0J3MgYSBjb3NtZXRpYyBjaGFuZ2Ug4oCTIG9ubHkgdGhlIGhlbHAgdGV4dCBpcyBjaGFuZ2VkLCBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBhbiBleHBsaWNpdCBleGNlcHRpb24uIFRoZSBvdGhlciBjaGFuZ2VzIGFyZSBzdHJpY3RseSB1bmRlciB0aGUgYHRvb2xzL2AsIGBEb2N1bWVudGF0aW9uL2AsIGFuZCBgTUFJTlRBSU5FUlNgLlxuXG5MZXQgbWUgY29uZmlybSB0aGUgY3JpdGljYWwgcG9pbnQ6IElzIGFueSBrZXJuZWwgQyBzb3VyY2UgY29kZSBtb2RpZmllZCwgZXNwZWNpYWxseSBpbiB0aGUgYG1tL2AgZGlyZWN0b3J5PyBRdWljayBzY2FuLi4uIG5vLCBpdCBpc24ndC4gTm90IGV2ZW4gYGluY2x1ZGUvYC4gVGhlIGltYWdlIGZpbGVzIHJlbWFpbiB1bnRvdWNoZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgKm9ubHkqIHRvdWNoZXMgYHRvb2xzL2AsIGRvY3VtZW50YXRpb24sIGBNQUlOVEFJTkVSU2AsIGFuZCB0aGUgS2NvbmZpZyBoZWxwIHRleHQuIEl0IGZhbGxzICpzcXVhcmVseSogd2l0aGluIHRoZSBkZWZpbmVkIG5lZ2F0aXZlIGNyaXRlcmlhLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgbm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlcywgZGVhbGluZyB3aXRoIHNlbGZ0ZXN0cywgdG9vbHMsIGFuZCBkb2N1bWVudGF0aW9uLiBObyBrZXJuZWwtc3BhY2UgY29kZSBpcyBtb2RpZmllZC5cblxuTXkgY29uY2x1c2lvbiBpczogYFdvcnRoRnV6emluZyA9IGZhbHNlYC5cblxuTm93LCB0byBzZXQgdGhlIHJlc3VsdHMgY29ycmVjdGx5OlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWBcbiogICBgUmVhc29uaW5nYDogXCJUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cy90b29scyAoYHRvb2xzL2xpYi9tbS9gLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCwgYHRvb2xzL21tL2ApLCBgRG9jdW1lbnRhdGlvbi9gLCBgTUFJTlRBSU5FUlNgLCBhbmQgdGhlIGhlbHAgdGV4dCBvZiBgQ09ORklHX0dVUF9URVNUYCBpbiBgbW0vS2NvbmZpZ2AuIE5vIGtlcm5lbC1zcGFjZSBleGVjdXRhYmxlIEMgY29kZSBvciBrZXJuZWwgaW1hZ2UgbG9naWMgaXMgbW9kaWZpZWQuXCJcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKGVtcHR5IGxpc3QsIGJlY2F1c2Ugbm8gY29uZmlncyBhcmUgcmVsZXZhbnQpXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGxpc3QsIGJlY2F1c2Ugbm8gc3ltYm9scyBhcmUgcmVsZXZhbnQpXG5cblJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MTUsIk91dHB1dFRva2VucyI6MTAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjQ3OjA4LjE5NzI0Mzk3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2Vyc3BhY2UgdG9vbHMgYW5kIHNlbGZ0ZXN0cyAodG9vbHMvbGliL21tLywgdG9vbHMvbW0vLCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8pLCBkb2N1bWVudGF0aW9uIChEb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdCksIE1BSU5UQUlORVJTLCBhbmQgS2NvbmZpZyBoZWxwIHRleHQgKG1tL0tjb25maWcpLiBObyBjb21waWxlZCBrZXJuZWwgQyBsb2dpYyBpcyBhZmZlY3RlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlcnNwYWNlIHRvb2xzIGFuZCBzZWxmdGVzdHMgKHRvb2xzL2xpYi9tbS8sIHRvb2xzL21tLywgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vKSwgZG9jdW1lbnRhdGlvbiAoRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QpLCBNQUlOVEFJTkVSUywgYW5kIEtjb25maWcgaGVscCB0ZXh0IChtbS9LY29uZmlnKS4gTm8gY29tcGlsZWQga2VybmVsIEMgbG9naWMgaXMgYWZmZWN0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjo0NzowOC4xOTcyNjMzODhaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow9vs2x[1] Phase: Running StartedAt: 2026-09-11 12:47:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vs2x[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-11 12:47:20 +0000 UTC FinishedAt: 2026-09-11 12:47:26 +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,}