Name: series-workflow9pjwd Phase: Failed StartedAt: 2026-07-02 02:26:34 +0000 UTC FinishedAt: 2026-07-02 02:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pjwd[0] Phase: Succeeded StartedAt: 2026-07-02 02:26:34 +0000 UTC FinishedAt: 2026-07-02 02:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pjwd[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 02:26:34 +0000 UTC FinishedAt: 2026-07-02 02:39:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBzZWxmdGVzdCBhbmQgbW9kaWZpZXMgc2VsZnRlc3QgbGlicmFyeSBjb2RlLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTVmYmNhZjQxYmU5ZjAxNTI5YmE2ODc2NTJlNTQ4MTUzNzBkYmM5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDI6Mzc6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcbmluZGV4IGU2ZThjYjUyYWIwMzAxLi45ZjYyMGM1ZWY2YWI5MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcbkBAIC04LDYgJiM0Mzs4LDcgQEAgZWxzZVxuIENGTEFHUyA9ICQoS0hEUl9JTkNMVURFUylcbiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdmZpb19kbWFfbWFwcGluZ190ZXN0XG4gVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHZmaW9fZG1hX21hcHBpbmdfbW1pb190ZXN0XG4mIzQzO1RFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdFxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX2lvbW11ZmRfc2V0dXBfdGVzdFxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX3BjaV9kZXZpY2VfdGVzdFxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX3BjaV9kZXZpY2VfaW5pdF9wZXJmX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXG5pbmRleCBlOWEzMzg2YTQ3MTkzYS4uZWVlZjU5OTAyOTJjZmIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcbkBAIC0zNSw2ICYjNDM7MzUsMTMgQEAgc3RydWN0IGlvbW11IHtcbiBzdHJ1Y3QgaW9tbXUgKmlvbW11X2luaXQoY29uc3QgY2hhciAqaW9tbXVfbW9kZSk7XG4gdm9pZCBpb21tdV9jbGVhbnVwKHN0cnVjdCBpb21tdSAqaW9tbXUpO1xuIFxuJiM0MztpbnQgX19pb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpXG4mIzQzO3tcbiYjNDM7XHRWRklPX0FTU0VSVF9FUShfX2lvbW11ZmRfbWFwX2ZpbGUoaW9tbXUsIHJlZ2lvbiwgZmQpLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgX19pb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGlvbW11X21hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG5pbmRleCAwMzVkYWMwNjlkNjAxNi4uNjczMGIzOTA2MGNhMTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG5AQCAtOTcsNiAmIzQzOzk3LDMwIEBAIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcilcbiBcdHJldHVybiBpb3ZhO1xuIH1cbiBcbiYjNDM7aW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpXG4mIzQzO3tcbiYjNDM7XHRWRklPX0FTU0VSVF9UUlVFKGlvbW11LVx1MDAzZWlvbW11ZmQsIFwmIzM0O0lPTU1VX0lPQVNfTUFQX0ZJTEUgaXMgYW4gSU9NTVVGRCBJT0NUTC5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgaW9tbXVfaW9hc19tYXBfZmlsZSBhcmdzID0ge1xuJiM0MztcdFx0LnNpemUgPSBzaXplb2YoYXJncyksXG4mIzQzO1x0XHQuZmxhZ3MgPSBJT01NVV9JT0FTX01BUF9SRUFEQUJMRSB8XG4mIzQzO1x0XHRcdElPTU1VX0lPQVNfTUFQX1dSSVRFQUJMRSB8XG4mIzQzO1x0XHRcdElPTU1VX0lPQVNfTUFQX0ZJWEVEX0lPVkEsXG4mIzQzO1x0XHQuaW9hc19pZCA9IGlvbW11LVx1MDAzZWlvYXNfaWQsXG4mIzQzO1x0XHQuZmQgPSBmZCxcbiYjNDM7XHRcdC5zdGFydCA9IDAsXG4mIzQzO1x0XHQuaW92YSA9IHJlZ2lvbi1cdTAwM2Vpb3ZhLFxuJiM0MztcdFx0Lmxlbmd0aCA9IHJlZ2lvbi1cdTAwM2VzaXplLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGlmIChpb2N0bChpb21tdS1cdTAwM2Vpb21tdWZkLCBJT01NVV9JT0FTX01BUF9GSUxFLCBcdTAwMjZhcmdzKSlcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdGxpc3RfYWRkKFx1MDAyNnJlZ2lvbi1cdTAwM2VsaW5rLCBcdTAwMjZpb21tdS1cdTAwM2VkbWFfcmVnaW9ucyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdmZpb19pb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcbiB7XG4gXHRzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfbWFwIGFyZ3MgPSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgwMzJmNTFjMWEzZTViXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0LmNcbkBAIC0wLDAgJiM0MzsxLDM4MCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjd29yZGV4cC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdWZkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtZmQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC92ZmlvLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpYnZmaW8uaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmRldmljZV9iZGY7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgdGVzdF9wYXJhbXMge1xuJiM0MztcdHU2NCBzaXplO1xuJiM0MztcdGludCBtbWFwX2ZsYWdzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHRlc3RfcGFyYW1zIHRlc3RfcGFyYW1zO1xuJiM0MztcbiYjNDM7c3RydWN0IGlvbW11X21hcHBpbmcge1xuJiM0MztcdHU2NCBwZ2Q7XG4mIzQzO1x0dTY0IHA0ZDtcbiYjNDM7XHR1NjQgcHVkO1xuJiM0MztcdHU2NCBwbWQ7XG4mIzQzO1x0dTY0IHB0ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRpbWVyX3N0YXJ0KHN0cnVjdCB0aW1lc3BlYyAqc3RhcnQpIHtcbiYjNDM7XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgc3RhcnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgZG91YmxlIHRpbWVyX2VsYXBzZWRfbXMoc3RydWN0IHRpbWVzcGVjIHN0YXJ0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjIGVuZDtcbiYjNDM7XG4mIzQzO1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNmVuZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAoZG91YmxlKShlbmQudHZfc2VjIC0gc3RhcnQudHZfc2VjKSAqIE1TRUNfUEVSX1NFQyAmIzQzO1xuJiM0MztcdCAgICAgICAoZG91YmxlKShlbmQudHZfbnNlYyAtIHN0YXJ0LnR2X25zZWMpIC8gTlNFQ19QRVJfTVNFQztcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRSh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCkge1xuJiM0MztcdHN0cnVjdCBpb21tdSAqaW9tbXU7XG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlO1xuJiM0MztcdHN0cnVjdCBpb3ZhX2FsbG9jYXRvciAqaW92YV9hbGxvY2F0b3I7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlQodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpIHtcbiYjNDM7XHRjb25zdCBjaGFyICppb21tdV9tb2RlO1xuJiM0MztcdGludCBtbWFwX2ZsYWdzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoX2lvbW11X21vZGUsIF9uYW1lLCBfbW1hcF9mbGFncylcdCAgICAgICBcXFxuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0LCBfaW9tbXVfbW9kZSAjIyBfICMjIF9uYW1lKSB7ICAgXFxcbiYjNDM7XHQuaW9tbXVfbW9kZSA9ICNfaW9tbXVfbW9kZSxcdFx0XHRcdFx0ICAgICAgIFxcXG4mIzQzO1x0Lm1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCAoX21tYXBfZmxhZ3MpLFx0ICAgICAgIFxcXG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91cywgMCk7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91c19odWdldGxiXzJtYiwgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIpO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8xZ2IsIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMUdCKTtcbiYjNDM7XG4mIzQzOyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREVcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2YXJpYW50LVx1MDAzZWlvbW11X21vZGUpO1xuJiM0MztcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4mIzQzO1x0c2VsZi1cdTAwM2Vpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi1cdTAwM2Vpb21tdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IpO1xuJiM0MztcdHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHNlbGYtXHUwMDNlZGV2aWNlKTtcbiYjNDM7XHRpb21tdV9jbGVhbnVwKHNlbGYtXHUwMDNlaW9tbXUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIGRtYV9tYXBfdW5tYXApXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1NjQgc2l6ZSA9IHRlc3RfcGFyYW1zLnNpemU7XG4mIzQzO1x0Y29uc3QgaW50IGZsYWdzID0gdmFyaWFudC1cdTAwM2VtbWFwX2ZsYWdzIHwgdGVzdF9wYXJhbXMubW1hcF9mbGFncztcbiYjNDM7XHRzdHJ1Y3QgZG1hX3JlZ2lvbiByZWdpb247XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjIHN0YXJ0O1xuJiM0MztcdHU2NCB1bm1hcHBlZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbiYjNDM7XHRyZWdpb24udmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCAtMSwgMCk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O0NvbXBsZXRlZCBtbWFwKCkgaW4gJS4ybGZtc1xcblwmIzM0OywgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xuJiM0MztcbiYjNDM7XHQvKiBTa2lwIHRoZSB0ZXN0IGlmIHRoZXJlIGFyZW4mIzM5O3QgZW5vdWdoIEh1Z2VUTEIgcGFnZXMgYXZhaWxhYmxlLiAqL1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgTUFQX0hVR0VUTEIgXHUwMDI2XHUwMDI2IHJlZ2lvbi52YWRkciA9PSBNQVBfRkFJTEVEKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O21tYXAoKSBmYWlsZWQ6ICVzICglZClcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSwgZXJybm8pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdEFTU0VSVF9ORShyZWdpb24udmFkZHIsIE1BUF9GQUlMRUQpO1xuJiM0MztcbiYjNDM7XHRyZWdpb24uaW92YSA9IGlvdmFfYWxsb2NhdG9yX2FsbG9jKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IsIHNpemUpO1xuJiM0MztcdHJlZ2lvbi5zaXplID0gc2l6ZTtcbiYjNDM7XG4mIzQzO1x0dGltZXJfc3RhcnQoXHUwMDI2c3RhcnQpO1xuJiM0MztcdGlvbW11X21hcChzZWxmLVx1MDAzZWlvbW11LCBcdTAwMjZyZWdpb24pO1xuJiM0MztcdHByaW50ZihcJiMzNDtNYXBwZWQgSFZBICVwIChzaXplICVsdUcpIGF0IElPVkEgMHglbHggaW4gJS4ybGZtc1xcblwmIzM0OyxcbiYjNDM7XHQgICAgICAgcmVnaW9uLnZhZGRyLCBzaXplIC8gU1pfMUcsIHJlZ2lvbi5pb3ZhLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XG4mIzQzO1x0QVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24udmFkZHIpKTtcbiYjNDM7XG4mIzQzO1x0dGltZXJfc3RhcnQoXHUwMDI2c3RhcnQpO1xuJiM0MztcdHJjID0gX19pb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCBcdTAwMjZyZWdpb24sIFx1MDAyNnVubWFwcGVkKTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7VW5tYXBwZWQgSU9WQSAweCVseCBpbiAlLjJsZm1zXFxuXCYjMzQ7LCByZWdpb24uaW92YSwgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xuJiM0MztcdEFTU0VSVF9FUShyYywgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHVubWFwcGVkLCByZWdpb24uc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghbXVubWFwKHJlZ2lvbi52YWRkciwgc2l6ZSkpO1xuJiM0MztcdHByaW50ZihcJiMzNDtDb21wbGV0ZWQgbXVubWFwKCkgaW4gJS4ybGZtc1xcblwmIzM0OywgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KSB7XG4mIzQzO1x0c3RydWN0IGlvbW11ICppb21tdTtcbiYjNDM7XHRzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2U7XG4mIzQzO1x0c3RydWN0IGlvdmFfYWxsb2NhdG9yICppb3ZhX2FsbG9jYXRvcjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCkge1xuJiM0MztcdGNvbnN0IGNoYXIgKmlvbW11X21vZGU7XG4mIzQzO1x0aW50IG1tYXBfZmxhZ3M7XG4mIzQzO1x0aW50IG1lbWZkX2ZsYWdzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoX2lvbW11X21vZGUsIF9uYW1lLCBfbW1hcF9mbGFncywgX21lbWZkX2ZsYWdzKSBcXFxuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0LCBfaW9tbXVfbW9kZSAjIyBfICMjIF9uYW1lKSB7ICAgIFxcXG4mIzQzO1x0LmlvbW11X21vZGUgPSAjX2lvbW11X21vZGUsXHRcdFx0XHRcdFx0ICAgICAgXFxcbiYjNDM7XHQubW1hcF9mbGFncyA9IE1BUF9TSEFSRUQgfCAoX21tYXBfZmxhZ3MpLFx0XHRcdFx0ICAgICAgXFxcbiYjNDM7XHQubWVtZmRfZmxhZ3MgPSBNQVBfU0hBUkVEIHwgKF9tZW1mZF9mbGFncyksXHRcdFx0XHQgICAgICBcXFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhtZW1mZCwgMCwgMCk7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKG1lbWZkX2h1Z2V0bGJfMm1iLFxuJiM0MztcdFx0XHRcdCAgICBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzJNQixcbiYjNDM7XHRcdFx0XHQgICAgTUZEX0hVR0VUTEIgfCBNRkRfSFVHRV8yTUIpO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhtZW1mZF9odWdldGxiXzFnYixcbiYjNDM7XHRcdFx0XHQgICAgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8xR0IsXG4mIzQzO1x0XHRcdFx0ICAgIE1GRF9IVUdFVExCIHwgTUZEX0hVR0VfMUdCKTtcbiYjNDM7XG4mIzQzOyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREVcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2YXJpYW50LVx1MDAzZWlvbW11X21vZGUpO1xuJiM0MztcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4mIzQzO1x0c2VsZi1cdTAwM2Vpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi1cdTAwM2Vpb21tdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IpO1xuJiM0MztcdHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHNlbGYtXHUwMDNlZGV2aWNlKTtcbiYjNDM7XHRpb21tdV9jbGVhbnVwKHNlbGYtXHUwMDNlaW9tbXUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqc2V0dXBfbWVtZmQoaW50ICpmZCwgdTY0IHNpemUsIGludCBtbWFwX2ZsYWdzLCBpbnQgbWZkX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqYnVmID0gTUFQX0ZBSUxFRDtcbiYjNDM7XHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7XG4mIzQzO1xuJiM0MztcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbiYjNDM7XHQqZmQgPSBtZW1mZF9jcmVhdGUoXCYjMzQ7dmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3RcJiMzNDssIG1mZF9mbGFncyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O0NvbXBsZXRlZCBtZW1mZF9jcmVhdGUoKSBpbiAlLjJsZm1zXFxuXCYjMzQ7LCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XG4mIzQzO1x0aWYgKCpmZCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gTUFQX0ZBSUxFRDtcbiYjNDM7XG4mIzQzO1x0aWYgKGZ0cnVuY2F0ZSgqZmQsIHNpemUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbiYjNDM7XHRidWYgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIG1tYXBfZmxhZ3MsICpmZCwgMCk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O0NvbXBsZXRlZCBtbWFwKCkgZm9yIG1lbWZkIGluICUuMmxmbXNcXG5cJiMzNDssIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAoYnVmID09IE1BUF9GQUlMRUQpXG4mIzQzO1x0XHRjbG9zZSgqZmQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYnVmO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZWFyZG93bl9tZW1mZChpbnQgZmQsIHU2NCBzaXplLCB2b2lkICp2YWRkcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYyBzdGFydDtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhZGRyICE9IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbiYjNDM7XHRcdG11bm1hcCh2YWRkciwgc2l6ZSk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7Q29tcGxldGVkIG11bm1hcCgpIGluICUuMmxmbXNcXG5cJiMzNDssIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChmZCAhPSAtMSkge1xuJiM0MztcdFx0dGltZXJfc3RhcnQoXHUwMDI2c3RhcnQpO1xuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O0NvbXBsZXRlZCBjbG9zZSgpIGluICUuMmxmbXNcXG5cJiMzNDssIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCwgZG1hX21hcF91bm1hcF9mcm9tX2ZpbGUpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1NjQgc2l6ZSA9IHRlc3RfcGFyYW1zLnNpemU7XG4mIzQzO1x0c3RydWN0IGRtYV9yZWdpb24gcmVnaW9uO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYyBzdGFydDtcbiYjNDM7XHR1NjQgdW5tYXBwZWQ7XG4mIzQzO1x0aW50IHJjLCBmZDtcbiYjNDM7XG4mIzQzO1x0cmVnaW9uLnZhZGRyID0gc2V0dXBfbWVtZmQoXHUwMDI2ZmQsIHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgdmFyaWFudC1cdTAwM2VtbWFwX2ZsYWdzIHwgdGVzdF9wYXJhbXMubW1hcF9mbGFncyxcbiYjNDM7XHRcdFx0XHQgICB2YXJpYW50LVx1MDAzZW1lbWZkX2ZsYWdzKTtcbiYjNDM7XHRBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTtcbiYjNDM7XG4mIzQzO1x0cmVnaW9uLmlvdmEgPSBpb3ZhX2FsbG9jYXRvcl9hbGxvYyhzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yLCBzaXplKTtcbiYjNDM7XHRyZWdpb24uc2l6ZSA9IHNpemU7XG4mIzQzO1xuJiM0MztcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbiYjNDM7XHRpZiAoc3RyY21wKHZhcmlhbnQtXHUwMDNlaW9tbXVfbW9kZSwgTU9ERV9JT01NVUZEKSA9PSAwKSB7XG4mIzQzO1x0XHRpb21tdWZkX21hcF9maWxlKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbiwgZmQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpb21tdV9tYXAoc2VsZi1cdTAwM2Vpb21tdSwgXHUwMDI2cmVnaW9uKTtcbiYjNDM7XHR9XG4mIzQzO1x0cHJpbnRmKFwmIzM0O01hcHBlZCBIVkEgJXAgKHNpemUgJWx1RykgYXQgSU9WQSAweCVseCBpbiAlLjJsZm1zXFxuXCYjMzQ7LFxuJiM0MztcdCAgICAgICByZWdpb24udmFkZHIsIHNpemUgLyBTWl8xRywgcmVnaW9uLmlvdmEsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbiYjNDM7XHRBU1NFUlRfRVEocmVnaW9uLmlvdmEsIHRvX2lvdmEoc2VsZi1cdTAwM2VkZXZpY2UsIHJlZ2lvbi52YWRkcikpO1xuJiM0MztcbiYjNDM7XHR0aW1lcl9zdGFydChcdTAwMjZzdGFydCk7XG4mIzQzO1x0cmMgPSBfX2lvbW11X3VubWFwKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbiwgXHUwMDI2dW5tYXBwZWQpO1xuJiM0MztcdHByaW50ZihcJiMzNDtVbm1hcHBlZCBJT1ZBIDB4JWx4IGluICUuMmxmbXNcXG5cJiMzNDssIHJlZ2lvbi5pb3ZhLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XG4mIzQzO1x0QVNTRVJUX0VRKHJjLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi5zaXplKTtcbiYjNDM7XG4mIzQzO1x0dGVhcmRvd25fbWVtZmQoZmQsIHNpemUsIHJlZ2lvbi52YWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFBhcnNlcyBcJiMzNDtbMC05XSYjNDM7W2ttZ3RdP1wmIzM0Oy5cbiYjNDM7ICovXG4mIzQzO3NpemVfdCBwYXJzZV9zaXplKGNvbnN0IGNoYXIgKnNpemUpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgYmFzZTtcbiYjNDM7XHRjaGFyICpzY2FsZTtcbiYjNDM7XHRpbnQgc2hpZnQgPSAwO1xuJiM0MztcbiYjNDM7XHRWRklPX0FTU0VSVF9UUlVFKHNpemUgXHUwMDI2XHUwMDI2IGlzZGlnaXQoc2l6ZVswXSksXG4mIzQzO1x0XHRcdCBcJiMzNDtOZWVkIGF0IGxlYXN0IG9uZSBkaWdpdCBpbiAmIzM5OyVzJiMzOTsuXCYjMzQ7LCBzaXplKTtcbiYjNDM7XG4mIzQzO1x0YmFzZSA9IHN0cnRvdWxsKHNpemUsIFx1MDAyNnNjYWxlLCAwKTtcbiYjNDM7XG4mIzQzO1x0VkZJT19BU1NFUlRfVFJVRShiYXNlICE9IFVMTE9OR19NQVgsIFwmIzM0O092ZXJmbG93IHBhcnNpbmcgc2l6ZSFcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHRvbG93ZXIoKnNjYWxlKSkge1xuJiM0MztcdGNhc2UgJiMzOTt0JiMzOTs6XG4mIzQzO1x0XHRzaGlmdCA9IDQwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAmIzM5O2cmIzM5OzpcbiYjNDM7XHRcdHNoaWZ0ID0gMzA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlICYjMzk7bSYjMzk7OlxuJiM0MztcdFx0c2hpZnQgPSAyMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgJiMzOTtrJiMzOTs6XG4mIzQzO1x0XHRzaGlmdCA9IDEwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAmIzM5O2ImIzM5OzpcbiYjNDM7XHRjYXNlICYjMzk7XFwwJiMzOTs6XG4mIzQzO1x0XHRzaGlmdCA9IDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0VkZJT19GQUlMKFwmIzM0O1Vua25vd24gc2l6ZSBsZXR0ZXIgJiMzOTslYyYjMzk7LlwmIzM0OywgKnNjYWxlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdFZGSU9fQVNTRVJUX1RSVUUoKGJhc2UgXHUwMDNjXHUwMDNjIHNoaWZ0KSBcdTAwM2VcdTAwM2Ugc2hpZnQgPT0gYmFzZSxcbiYjNDM7XHRcdFx0IFwmIzM0O092ZXJmbG93IHNjYWxpbmcgc2l6ZSFcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYmFzZSBcdTAwM2NcdTAwM2Mgc2hpZnQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGhlbHAoY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHB1dHMoXCYjMzQ7XCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7dXNhZ2U6ICVzIFstaHwtcF0gWy1iIGJ5dGVzXSBbLWEgXFxcJiMzNDt0ZXN0IGhhcm5lc3MgYXJnc1xcXCYjMzQ7XVxcblwmIzM0OywgbmFtZSk7XG4mIzQzO1x0cHV0cyhcJiMzNDtcJiMzNDspO1xuJiM0MztcdHByaW50ZihcJiMzNDsgLWg6IERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UuXFxuXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0OyAtYjogU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgRE1BIHJlZ2lvbiB0byBiZSBtYXBwZWRcXG5cJiMzNDtcbiYjNDM7XHQgICAgICAgXCYjMzQ7ICAgICBhbmQgdW5tYXBwZWQuIGUuZy4gMTZNIG9yIDhHLCAoZGVmYXVsdDogMUcpXFxuXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0OyAtcDogQXBwZW5kICYjMzk7TUFQX1BPUFVMQVRFJiMzOTsgdG8gdGhlIG1tYXAoKSBmbGFncyB0byBhdm9pZFxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgIHByZWZhdWx0aW5nIHdoaWxlIG1hcHBpbmcgRE1BIHJlZ2lvbnMuIEluc3RlYWQsIGFueVxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgIGFuZCBhbGwgcHJlZmF1bHRpbmcgbmVlZGVkIHdpbGwgaGFwcGVuIGR1cmluZyB0aGVcXG5cJiMzNDtcbiYjNDM7XHQgICAgICAgXCYjMzQ7ICAgICBtbWFwKCkgY2FsbC4gVGhpcyB3aWxsIG1ha2UgbWFwcGluZyBETUEgcmVnaW9uc1xcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgIG1vcmUgY29uc2lzdGVudC5cXG5cJiMzNDtcbiYjNDM7XHQgICAgICAgXCYjMzQ7IC1hOiBBcmdzIHRoYXQgYXJlIGZvcndhcmRlZCB0byB0aGUgdGVzdCBoYXJuZXNzLFxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgIGUuZy4gLWEgXFxcJiMzNDstdCBkbWFfbWFwX3VubWFwX2Zyb21fZmlsZVxcXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IGhhcm5lc3NfYXJnc1xuJiM0Mzt7XG4mIzQzO1x0aW50IGFyZ2M7XG4mIzQzO1x0Y2hhciAqKmFyZ3Y7XG4mIzQzO1x0d29yZGV4cF90IGV4cDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBvcHVsYXRlX2hhcm5lc3NfYXJncyhzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzLCBjb25zdCBjaGFyICphcmd2XzAsXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBjaGFyICpjbWRsbmUpXG4mIzQzO3tcbiYjNDM7XHRpZiAod29yZGV4cChhcmd2XzAsIFx1MDAyNmFyZ3MtXHUwMDNlZXhwLCBXUkRFX05PQ01EKSA9PSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB3b3JkZXhwKGNtZGxuZSwgXHUwMDI2YXJncy1cdTAwM2VleHAsIFdSREVfQVBQRU5EIHwgV1JERV9OT0NNRCkgPT0gMCkge1xuJiM0MztcdFx0YXJncy1cdTAwM2VhcmdjID0gYXJncy1cdTAwM2VleHAud2Vfd29yZGM7XG4mIzQzO1x0XHRhcmdzLVx1MDAzZWFyZ3YgPSBhcmdzLVx1MDAzZWV4cC53ZV93b3JkdjtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwX3Rlc3Qoc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiYjNDM7e1xuJiM0MztcdGludCBvcHQ7XG4mIzQzO1xuJiM0MztcdHRlc3RfcGFyYW1zID0gKHN0cnVjdCB0ZXN0X3BhcmFtcykge1xuJiM0MztcdFx0LnNpemUgPSBTWl8xRyxcbiYjNDM7XHRcdC5tbWFwX2ZsYWdzID0gMCxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDthOmI6cGhcJiMzNDspKSAhPSAtMSkge1xuJiM0MztcdFx0c3dpdGNoIChvcHQpIHtcbiYjNDM7XHRcdGNhc2UgJiMzOTthJiMzOTs6XG4mIzQzO1x0XHRcdHBvcHVsYXRlX2hhcm5lc3NfYXJncyhhcmdzLCBhcmd2WzBdLCBvcHRhcmcpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtiJiMzOTs6XG4mIzQzO1x0XHRcdHRlc3RfcGFyYW1zLnNpemUgPSBwYXJzZV9zaXplKG9wdGFyZyk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O3AmIzM5OzpcbiYjNDM7XHRcdFx0dGVzdF9wYXJhbXMubW1hcF9mbGFncyA9IE1BUF9QT1BVTEFURTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7aCYjMzk7OlxuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0aGVscChhcmd2WzBdKTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdC8vIFJlc2V0IGdldG9wdCgpIHN0YXRlIHRvIGFsbG93IHRoZSB0ZXN0IGhhcm5lc3MgdG8gdXNlIGl0LlxuJiM0MztcdG9wdGluZCA9IDE7IFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZWFyZG93bl90ZXN0KHN0cnVjdCBoYXJuZXNzX2FyZ3MgKmFyZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYXJncy1cdTAwM2Vhcmd2KSB7XG4mIzQzO1x0XHRhcmdzLVx1MDAzZWFyZ2MgPSAwO1xuJiM0MztcdFx0YXJncy1cdTAwM2Vhcmd2ID0gTlVMTDtcbiYjNDM7XHRcdHdvcmRmcmVlKFx1MDAyNmFyZ3MtXHUwMDNlZXhwKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGFybmVzc19hcmdzIGFyZ3MgPSAoc3RydWN0IGhhcm5lc3NfYXJncykge1xuJiM0MztcdFx0LmFyZ2MgPSAwLFxuJiM0MztcdFx0LmFyZ3YgPSBOVUxMLFxuJiM0MztcdH07XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdHNldHVwX3Rlc3QoXHUwMDI2YXJncywgYXJnYywgYXJndik7XG4mIzQzO1x0ZGV2aWNlX2JkZiA9IHZmaW9fc2VsZnRlc3RzX2dldF9iZGYoXHUwMDI2YXJnYywgYXJndik7XG4mIzQzO1x0ciA9IHRlc3RfaGFybmVzc19ydW4oYXJncy5hcmdjLCBhcmdzLmFyZ3YpO1xuJiM0MztcdHRlYXJkb3duX3Rlc3QoXHUwMDI2YXJncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHNlbGZ0ZXN0IGFuZCBtb2RpZmllcyBzZWxmdGVzdCBsaWJyYXJ5IGNvZGUuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU1ZmJjYWY0MWJlOWYwMTUyOWJhNjg3NjUyZTU0ODE1MzcwZGJjOWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyIDAyOjM3OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGUKaW5kZXggZTZlOGNiNTJhYjAzMDEuLjlmNjIwYzVlZjZhYjkxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGUKQEAgLTgsNiAmIzQzOzgsNyBAQCBlbHNlCiBDRkxBR1MgPSAkKEtIRFJfSU5DTFVERVMpCiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdmZpb19kbWFfbWFwcGluZ190ZXN0CiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdmZpb19kbWFfbWFwcGluZ19tbWlvX3Rlc3QKJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QKIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX2lvbW11ZmRfc2V0dXBfdGVzdAogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHZmaW9fcGNpX2RldmljZV90ZXN0CiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdmZpb19wY2lfZGV2aWNlX2luaXRfcGVyZl90ZXN0CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oCmluZGV4IGU5YTMzODZhNDcxOTNhLi5lZWVmNTk5MDI5MmNmYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmgKQEAgLTM1LDYgJiM0MzszNSwxMyBAQCBzdHJ1Y3QgaW9tbXUgewogc3RydWN0IGlvbW11ICppb21tdV9pbml0KGNvbnN0IGNoYXIgKmlvbW11X21vZGUpOwogdm9pZCBpb21tdV9jbGVhbnVwKHN0cnVjdCBpb21tdSAqaW9tbXUpOwogCiYjNDM7aW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZCkKJiM0Mzt7CiYjNDM7CVZGSU9fQVNTRVJUX0VRKF9faW9tbXVmZF9tYXBfZmlsZShpb21tdSwgcmVnaW9uLCBmZCksIDApOwomIzQzO30KJiM0MzsKIGludCBfX2lvbW11X21hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGlvbW11X21hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMKaW5kZXggMDM1ZGFjMDY5ZDYwMTYuLjY3MzBiMzkwNjBjYTE2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMKQEAgLTk3LDYgJiM0Mzs5NywzMCBAQCBpb3ZhX3QgaW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIpCiAJcmV0dXJuIGlvdmE7CiB9CiAKJiM0MztpbnQgX19pb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZCkKJiM0Mzt7CiYjNDM7CVZGSU9fQVNTRVJUX1RSVUUoaW9tbXUtJmd0O2lvbW11ZmQsICYjMzQ7SU9NTVVfSU9BU19NQVBfRklMRSBpcyBhbiBJT01NVUZEIElPQ1RMLiYjMzQ7KTsKJiM0MzsKJiM0MzsJc3RydWN0IGlvbW11X2lvYXNfbWFwX2ZpbGUgYXJncyA9IHsKJiM0MzsJCS5zaXplID0gc2l6ZW9mKGFyZ3MpLAomIzQzOwkJLmZsYWdzID0gSU9NTVVfSU9BU19NQVBfUkVBREFCTEUgfAomIzQzOwkJCUlPTU1VX0lPQVNfTUFQX1dSSVRFQUJMRSB8CiYjNDM7CQkJSU9NTVVfSU9BU19NQVBfRklYRURfSU9WQSwKJiM0MzsJCS5pb2FzX2lkID0gaW9tbXUtJmd0O2lvYXNfaWQsCiYjNDM7CQkuZmQgPSBmZCwKJiM0MzsJCS5zdGFydCA9IDAsCiYjNDM7CQkuaW92YSA9IHJlZ2lvbi0mZ3Q7aW92YSwKJiM0MzsJCS5sZW5ndGggPSByZWdpb24tJmd0O3NpemUsCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChpb2N0bChpb21tdS0mZ3Q7aW9tbXVmZCwgSU9NTVVfSU9BU19NQVBfRklMRSwgJmFtcDthcmdzKSkKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CWxpc3RfYWRkKCZhbXA7cmVnaW9uLSZndDtsaW5rLCAmYW1wO2lvbW11LSZndDtkbWFfcmVnaW9ucyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdmZpb19pb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbikKIHsKIAlzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfbWFwIGFyZ3MgPSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgwMzJmNTFjMWEzZTViCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jCkBAIC0wLDAgJiM0MzsxLDM4MCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjaW5jbHVkZSAmbHQ7bGltaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3dvcmRleHAuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9tbXVmZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtZmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lNjQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdmZpby5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaWJ2ZmlvLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqZGV2aWNlX2JkZjsKJiM0MzsKJiM0MztzdHJ1Y3QgdGVzdF9wYXJhbXMgewomIzQzOwl1NjQgc2l6ZTsKJiM0MzsJaW50IG1tYXBfZmxhZ3M7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgdGVzdF9wYXJhbXMgdGVzdF9wYXJhbXM7CiYjNDM7CiYjNDM7c3RydWN0IGlvbW11X21hcHBpbmcgewomIzQzOwl1NjQgcGdkOwomIzQzOwl1NjQgcDRkOwomIzQzOwl1NjQgcHVkOwomIzQzOwl1NjQgcG1kOwomIzQzOwl1NjQgcHRlOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGltZXJfc3RhcnQoc3RydWN0IHRpbWVzcGVjICpzdGFydCkgewomIzQzOwljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgc3RhcnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgZG91YmxlIHRpbWVyX2VsYXBzZWRfbXMoc3RydWN0IHRpbWVzcGVjIHN0YXJ0KQomIzQzO3sKJiM0MzsJc3RydWN0IHRpbWVzcGVjIGVuZDsKJiM0MzsKJiM0MzsJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7ZW5kKTsKJiM0MzsKJiM0MzsJcmV0dXJuIChkb3VibGUpKGVuZC50dl9zZWMgLSBzdGFydC50dl9zZWMpICogTVNFQ19QRVJfU0VDICYjNDM7CiYjNDM7CSAgICAgICAoZG91YmxlKShlbmQudHZfbnNlYyAtIHN0YXJ0LnR2X25zZWMpIC8gTlNFQ19QRVJfTVNFQzsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRSh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCkgewomIzQzOwlzdHJ1Y3QgaW9tbXUgKmlvbW11OwomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2U7CiYjNDM7CXN0cnVjdCBpb3ZhX2FsbG9jYXRvciAqaW92YV9hbGxvY2F0b3I7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlQodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpIHsKJiM0MzsJY29uc3QgY2hhciAqaW9tbXVfbW9kZTsKJiM0MzsJaW50IG1tYXBfZmxhZ3M7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShfaW9tbXVfbW9kZSwgX25hbWUsIF9tbWFwX2ZsYWdzKQkgICAgICAgXAomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIF9pb21tdV9tb2RlICMjIF8gIyMgX25hbWUpIHsgICBcCiYjNDM7CS5pb21tdV9tb2RlID0gI19pb21tdV9tb2RlLAkJCQkJICAgICAgIFwKJiM0MzsJLm1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCAoX21tYXBfZmxhZ3MpLAkgICAgICAgXAomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXMsIDApOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91c19odWdldGxiXzJtYiwgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIpOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91c19odWdldGxiXzFnYiwgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8xR0IpOwomIzQzOwomIzQzOyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KQomIzQzO3sKJiM0MzsJc2VsZi0mZ3Q7aW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtJmd0O2lvbW11X21vZGUpOwomIzQzOwlzZWxmLSZndDtkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLSZndDtpb21tdSk7CiYjNDM7CXNlbGYtJmd0O2lvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLSZndDtpb21tdSk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpCiYjNDM7ewomIzQzOwlpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtJmd0O2lvdmFfYWxsb2NhdG9yKTsKJiM0MzsJdmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc2VsZi0mZ3Q7ZGV2aWNlKTsKJiM0MzsJaW9tbXVfY2xlYW51cChzZWxmLSZndDtpb21tdSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCwgZG1hX21hcF91bm1hcCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHU2NCBzaXplID0gdGVzdF9wYXJhbXMuc2l6ZTsKJiM0MzsJY29uc3QgaW50IGZsYWdzID0gdmFyaWFudC0mZ3Q7bW1hcF9mbGFncyB8IHRlc3RfcGFyYW1zLm1tYXBfZmxhZ3M7CiYjNDM7CXN0cnVjdCBkbWFfcmVnaW9uIHJlZ2lvbjsKJiM0MzsJc3RydWN0IHRpbWVzcGVjIHN0YXJ0OwomIzQzOwl1NjQgdW5tYXBwZWQ7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJdGltZXJfc3RhcnQoJmFtcDtzdGFydCk7CiYjNDM7CXJlZ2lvbi52YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIC0xLCAwKTsKJiM0MzsJcHJpbnRmKCYjMzQ7Q29tcGxldGVkIG1tYXAoKSBpbiAlLjJsZm1zXG4mIzM0OywgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpOwomIzQzOwomIzQzOwkvKiBTa2lwIHRoZSB0ZXN0IGlmIHRoZXJlIGFyZW4mIzM5O3QgZW5vdWdoIEh1Z2VUTEIgcGFnZXMgYXZhaWxhYmxlLiAqLwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgTUFQX0hVR0VUTEIgJmFtcDsmYW1wOyByZWdpb24udmFkZHIgPT0gTUFQX0ZBSUxFRCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O21tYXAoKSBmYWlsZWQ6ICVzICglZClcbiYjMzQ7LCBzdHJlcnJvcihlcnJubyksIGVycm5vKTsKJiM0MzsJZWxzZQomIzQzOwkJQVNTRVJUX05FKHJlZ2lvbi52YWRkciwgTUFQX0ZBSUxFRCk7CiYjNDM7CiYjNDM7CXJlZ2lvbi5pb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2Moc2VsZi0mZ3Q7aW92YV9hbGxvY2F0b3IsIHNpemUpOwomIzQzOwlyZWdpb24uc2l6ZSA9IHNpemU7CiYjNDM7CiYjNDM7CXRpbWVyX3N0YXJ0KCZhbXA7c3RhcnQpOwomIzQzOwlpb21tdV9tYXAoc2VsZi0mZ3Q7aW9tbXUsICZhbXA7cmVnaW9uKTsKJiM0MzsJcHJpbnRmKCYjMzQ7TWFwcGVkIEhWQSAlcCAoc2l6ZSAlbHVHKSBhdCBJT1ZBIDB4JWx4IGluICUuMmxmbXNcbiYjMzQ7LAomIzQzOwkgICAgICAgcmVnaW9uLnZhZGRyLCBzaXplIC8gU1pfMUcsIHJlZ2lvbi5pb3ZhLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7CiYjNDM7CUFTU0VSVF9FUShyZWdpb24uaW92YSwgdG9faW92YShzZWxmLSZndDtkZXZpY2UsIHJlZ2lvbi52YWRkcikpOwomIzQzOwomIzQzOwl0aW1lcl9zdGFydCgmYW1wO3N0YXJ0KTsKJiM0MzsJcmMgPSBfX2lvbW11X3VubWFwKHNlbGYtJmd0O2lvbW11LCAmYW1wO3JlZ2lvbiwgJmFtcDt1bm1hcHBlZCk7CiYjNDM7CXByaW50ZigmIzM0O1VubWFwcGVkIElPVkEgMHglbHggaW4gJS4ybGZtc1xuJiMzNDssIHJlZ2lvbi5pb3ZhLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7CiYjNDM7CUFTU0VSVF9FUShyYywgMCk7CiYjNDM7CUFTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLnNpemUpOwomIzQzOwomIzQzOwl0aW1lcl9zdGFydCgmYW1wO3N0YXJ0KTsKJiM0MzsJQVNTRVJUX1RSVUUoIW11bm1hcChyZWdpb24udmFkZHIsIHNpemUpKTsKJiM0MzsJcHJpbnRmKCYjMzQ7Q29tcGxldGVkIG11bm1hcCgpIGluICUuMmxmbXNcbiYjMzQ7LCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkUodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpIHsKJiM0MzsJc3RydWN0IGlvbW11ICppb21tdTsKJiM0MzsJc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlOwomIzQzOwlzdHJ1Y3QgaW92YV9hbGxvY2F0b3IgKmlvdmFfYWxsb2NhdG9yOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KSB7CiYjNDM7CWNvbnN0IGNoYXIgKmlvbW11X21vZGU7CiYjNDM7CWludCBtbWFwX2ZsYWdzOwomIzQzOwlpbnQgbWVtZmRfZmxhZ3M7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShfaW9tbXVfbW9kZSwgX25hbWUsIF9tbWFwX2ZsYWdzLCBfbWVtZmRfZmxhZ3MpIFwKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0LCBfaW9tbXVfbW9kZSAjIyBfICMjIF9uYW1lKSB7ICAgIFwKJiM0MzsJLmlvbW11X21vZGUgPSAjX2lvbW11X21vZGUsCQkJCQkJICAgICAgXAomIzQzOwkubW1hcF9mbGFncyA9IE1BUF9TSEFSRUQgfCAoX21tYXBfZmxhZ3MpLAkJCQkgICAgICBcCiYjNDM7CS5tZW1mZF9mbGFncyA9IE1BUF9TSEFSRUQgfCAoX21lbWZkX2ZsYWdzKSwJCQkJICAgICAgXAomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhtZW1mZCwgMCwgMCk7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMobWVtZmRfaHVnZXRsYl8ybWIsCiYjNDM7CQkJCSAgICBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzJNQiwKJiM0MzsJCQkJICAgIE1GRF9IVUdFVExCIHwgTUZEX0hVR0VfMk1CKTsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhtZW1mZF9odWdldGxiXzFnYiwKJiM0MzsJCQkJICAgIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMUdCLAomIzQzOwkJCQkgICAgTUZEX0hVR0VUTEIgfCBNRkRfSFVHRV8xR0IpOwomIzQzOwomIzQzOyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KQomIzQzO3sKJiM0MzsJc2VsZi0mZ3Q7aW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtJmd0O2lvbW11X21vZGUpOwomIzQzOwlzZWxmLSZndDtkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLSZndDtpb21tdSk7CiYjNDM7CXNlbGYtJmd0O2lvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLSZndDtpb21tdSk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpCiYjNDM7ewomIzQzOwlpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtJmd0O2lvdmFfYWxsb2NhdG9yKTsKJiM0MzsJdmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc2VsZi0mZ3Q7ZGV2aWNlKTsKJiM0MzsJaW9tbXVfY2xlYW51cChzZWxmLSZndDtpb21tdSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICpzZXR1cF9tZW1mZChpbnQgKmZkLCB1NjQgc2l6ZSwgaW50IG1tYXBfZmxhZ3MsIGludCBtZmRfZmxhZ3MpCiYjNDM7ewomIzQzOwl2b2lkICpidWYgPSBNQVBfRkFJTEVEOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7CiYjNDM7CiYjNDM7CXRpbWVyX3N0YXJ0KCZhbXA7c3RhcnQpOwomIzQzOwkqZmQgPSBtZW1mZF9jcmVhdGUoJiMzNDt2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCYjMzQ7LCBtZmRfZmxhZ3MpOwomIzQzOwlwcmludGYoJiMzNDtDb21wbGV0ZWQgbWVtZmRfY3JlYXRlKCkgaW4gJS4ybGZtc1xuJiMzNDssIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTsKJiM0MzsJaWYgKCpmZCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIE1BUF9GQUlMRUQ7CiYjNDM7CiYjNDM7CWlmIChmdHJ1bmNhdGUoKmZkLCBzaXplKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl0aW1lcl9zdGFydCgmYW1wO3N0YXJ0KTsKJiM0MzsJYnVmID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBtbWFwX2ZsYWdzLCAqZmQsIDApOwomIzQzOwlwcmludGYoJiMzNDtDb21wbGV0ZWQgbW1hcCgpIGZvciBtZW1mZCBpbiAlLjJsZm1zXG4mIzM0OywgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpOwomIzQzOwomIzQzO291dDoKJiM0MzsJaWYgKGJ1ZiA9PSBNQVBfRkFJTEVEKQomIzQzOwkJY2xvc2UoKmZkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJ1ZjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVhcmRvd25fbWVtZmQoaW50IGZkLCB1NjQgc2l6ZSwgdm9pZCAqdmFkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7CiYjNDM7CiYjNDM7CWlmICh2YWRkciAhPSBNQVBfRkFJTEVEKSB7CiYjNDM7CQl0aW1lcl9zdGFydCgmYW1wO3N0YXJ0KTsKJiM0MzsJCW11bm1hcCh2YWRkciwgc2l6ZSk7CiYjNDM7CQlwcmludGYoJiMzNDtDb21wbGV0ZWQgbXVubWFwKCkgaW4gJS4ybGZtc1xuJiMzNDssIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZmQgIT0gLTEpIHsKJiM0MzsJCXRpbWVyX3N0YXJ0KCZhbXA7c3RhcnQpOwomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcHJpbnRmKCYjMzQ7Q29tcGxldGVkIGNsb3NlKCkgaW4gJS4ybGZtc1xuJiMzNDssIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztURVNUX0YodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QsIGRtYV9tYXBfdW5tYXBfZnJvbV9maWxlKQomIzQzO3sKJiM0MzsJY29uc3QgdTY0IHNpemUgPSB0ZXN0X3BhcmFtcy5zaXplOwomIzQzOwlzdHJ1Y3QgZG1hX3JlZ2lvbiByZWdpb247CiYjNDM7CXN0cnVjdCB0aW1lc3BlYyBzdGFydDsKJiM0MzsJdTY0IHVubWFwcGVkOwomIzQzOwlpbnQgcmMsIGZkOwomIzQzOwomIzQzOwlyZWdpb24udmFkZHIgPSBzZXR1cF9tZW1mZCgmYW1wO2ZkLCBzaXplLAomIzQzOwkJCQkgICB2YXJpYW50LSZndDttbWFwX2ZsYWdzIHwgdGVzdF9wYXJhbXMubW1hcF9mbGFncywKJiM0MzsJCQkJICAgdmFyaWFudC0mZ3Q7bWVtZmRfZmxhZ3MpOwomIzQzOwlBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJcmVnaW9uLmlvdmEgPSBpb3ZhX2FsbG9jYXRvcl9hbGxvYyhzZWxmLSZndDtpb3ZhX2FsbG9jYXRvciwgc2l6ZSk7CiYjNDM7CXJlZ2lvbi5zaXplID0gc2l6ZTsKJiM0MzsKJiM0MzsJdGltZXJfc3RhcnQoJmFtcDtzdGFydCk7CiYjNDM7CWlmIChzdHJjbXAodmFyaWFudC0mZ3Q7aW9tbXVfbW9kZSwgTU9ERV9JT01NVUZEKSA9PSAwKSB7CiYjNDM7CQlpb21tdWZkX21hcF9maWxlKHNlbGYtJmd0O2lvbW11LCAmYW1wO3JlZ2lvbiwgZmQpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaW9tbXVfbWFwKHNlbGYtJmd0O2lvbW11LCAmYW1wO3JlZ2lvbik7CiYjNDM7CX0KJiM0MzsJcHJpbnRmKCYjMzQ7TWFwcGVkIEhWQSAlcCAoc2l6ZSAlbHVHKSBhdCBJT1ZBIDB4JWx4IGluICUuMmxmbXNcbiYjMzQ7LAomIzQzOwkgICAgICAgcmVnaW9uLnZhZGRyLCBzaXplIC8gU1pfMUcsIHJlZ2lvbi5pb3ZhLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7CiYjNDM7CUFTU0VSVF9FUShyZWdpb24uaW92YSwgdG9faW92YShzZWxmLSZndDtkZXZpY2UsIHJlZ2lvbi52YWRkcikpOwomIzQzOwomIzQzOwl0aW1lcl9zdGFydCgmYW1wO3N0YXJ0KTsKJiM0MzsJcmMgPSBfX2lvbW11X3VubWFwKHNlbGYtJmd0O2lvbW11LCAmYW1wO3JlZ2lvbiwgJmFtcDt1bm1hcHBlZCk7CiYjNDM7CXByaW50ZigmIzM0O1VubWFwcGVkIElPVkEgMHglbHggaW4gJS4ybGZtc1xuJiMzNDssIHJlZ2lvbi5pb3ZhLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7CiYjNDM7CUFTU0VSVF9FUShyYywgMCk7CiYjNDM7CUFTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLnNpemUpOwomIzQzOwomIzQzOwl0ZWFyZG93bl9tZW1mZChmZCwgc2l6ZSwgcmVnaW9uLnZhZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQYXJzZXMgJiMzNDtbMC05XSYjNDM7W2ttZ3RdPyYjMzQ7LgomIzQzOyAqLwomIzQzO3NpemVfdCBwYXJzZV9zaXplKGNvbnN0IGNoYXIgKnNpemUpCiYjNDM7ewomIzQzOwlzaXplX3QgYmFzZTsKJiM0MzsJY2hhciAqc2NhbGU7CiYjNDM7CWludCBzaGlmdCA9IDA7CiYjNDM7CiYjNDM7CVZGSU9fQVNTRVJUX1RSVUUoc2l6ZSAmYW1wOyZhbXA7IGlzZGlnaXQoc2l6ZVswXSksCiYjNDM7CQkJICYjMzQ7TmVlZCBhdCBsZWFzdCBvbmUgZGlnaXQgaW4gJiMzOTslcyYjMzk7LiYjMzQ7LCBzaXplKTsKJiM0MzsKJiM0MzsJYmFzZSA9IHN0cnRvdWxsKHNpemUsICZhbXA7c2NhbGUsIDApOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9UUlVFKGJhc2UgIT0gVUxMT05HX01BWCwgJiMzNDtPdmVyZmxvdyBwYXJzaW5nIHNpemUhJiMzNDspOwomIzQzOwomIzQzOwlzd2l0Y2ggKHRvbG93ZXIoKnNjYWxlKSkgewomIzQzOwljYXNlICYjMzk7dCYjMzk7OgomIzQzOwkJc2hpZnQgPSA0MDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlICYjMzk7ZyYjMzk7OgomIzQzOwkJc2hpZnQgPSAzMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlICYjMzk7bSYjMzk7OgomIzQzOwkJc2hpZnQgPSAyMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlICYjMzk7ayYjMzk7OgomIzQzOwkJc2hpZnQgPSAxMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlICYjMzk7YiYjMzk7OgomIzQzOwljYXNlICYjMzk7XDAmIzM5OzoKJiM0MzsJCXNoaWZ0ID0gMDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJVkZJT19GQUlMKCYjMzQ7VW5rbm93biBzaXplIGxldHRlciAmIzM5OyVjJiMzOTsuJiMzNDssICpzY2FsZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJVkZJT19BU1NFUlRfVFJVRSgoYmFzZSAmbHQ7Jmx0OyBzaGlmdCkgJmd0OyZndDsgc2hpZnQgPT0gYmFzZSwKJiM0MzsJCQkgJiMzNDtPdmVyZmxvdyBzY2FsaW5nIHNpemUhJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gYmFzZSAmbHQ7Jmx0OyBzaGlmdDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGVscChjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJcHV0cygmIzM0OyYjMzQ7KTsKJiM0MzsJcHJpbnRmKCYjMzQ7dXNhZ2U6ICVzIFstaHwtcF0gWy1iIGJ5dGVzXSBbLWEgXCYjMzQ7dGVzdCBoYXJuZXNzIGFyZ3NcJiMzNDtdXG4mIzM0OywgbmFtZSk7CiYjNDM7CXB1dHMoJiMzNDsmIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0OyAtaDogRGlzcGxheSB0aGlzIGhlbHAgbWVzc2FnZS5cbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAtYjogU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgRE1BIHJlZ2lvbiB0byBiZSBtYXBwZWRcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgYW5kIHVubWFwcGVkLiBlLmcuIDE2TSBvciA4RywgKGRlZmF1bHQ6IDFHKVxuJiMzNDsKJiM0MzsJICAgICAgICYjMzQ7IC1wOiBBcHBlbmQgJiMzOTtNQVBfUE9QVUxBVEUmIzM5OyB0byB0aGUgbW1hcCgpIGZsYWdzIHRvIGF2b2lkXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgIHByZWZhdWx0aW5nIHdoaWxlIG1hcHBpbmcgRE1BIHJlZ2lvbnMuIEluc3RlYWQsIGFueVxuJiMzNDsKJiM0MzsJICAgICAgICYjMzQ7ICAgICBhbmQgYWxsIHByZWZhdWx0aW5nIG5lZWRlZCB3aWxsIGhhcHBlbiBkdXJpbmcgdGhlXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgIG1tYXAoKSBjYWxsLiBUaGlzIHdpbGwgbWFrZSBtYXBwaW5nIERNQSByZWdpb25zXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgIG1vcmUgY29uc2lzdGVudC5cbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAtYTogQXJncyB0aGF0IGFyZSBmb3J3YXJkZWQgdG8gdGhlIHRlc3QgaGFybmVzcyxcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgZS5nLiAtYSBcJiMzNDstdCBkbWFfbWFwX3VubWFwX2Zyb21fZmlsZVwmIzM0O1xuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgaGFybmVzc19hcmdzCiYjNDM7ewomIzQzOwlpbnQgYXJnYzsKJiM0MzsJY2hhciAqKmFyZ3Y7CiYjNDM7CXdvcmRleHBfdCBleHA7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwb3B1bGF0ZV9oYXJuZXNzX2FyZ3Moc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncywgY29uc3QgY2hhciAqYXJndl8wLAomIzQzOwkJCQkgIGNvbnN0IGNoYXIgKmNtZGxuZSkKJiM0Mzt7CiYjNDM7CWlmICh3b3JkZXhwKGFyZ3ZfMCwgJmFtcDthcmdzLSZndDtleHAsIFdSREVfTk9DTUQpID09IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgd29yZGV4cChjbWRsbmUsICZhbXA7YXJncy0mZ3Q7ZXhwLCBXUkRFX0FQUEVORCB8IFdSREVfTk9DTUQpID09IDApIHsKJiM0MzsJCWFyZ3MtJmd0O2FyZ2MgPSBhcmdzLSZndDtleHAud2Vfd29yZGM7CiYjNDM7CQlhcmdzLSZndDthcmd2ID0gYXJncy0mZ3Q7ZXhwLndlX3dvcmR2OwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldHVwX3Rlc3Qoc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CWludCBvcHQ7CiYjNDM7CiYjNDM7CXRlc3RfcGFyYW1zID0gKHN0cnVjdCB0ZXN0X3BhcmFtcykgewomIzQzOwkJLnNpemUgPSBTWl8xRywKJiM0MzsJCS5tbWFwX2ZsYWdzID0gMCwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDthOmI6cGgmIzM0OykpICE9IC0xKSB7CiYjNDM7CQlzd2l0Y2ggKG9wdCkgewomIzQzOwkJY2FzZSAmIzM5O2EmIzM5OzoKJiM0MzsJCQlwb3B1bGF0ZV9oYXJuZXNzX2FyZ3MoYXJncywgYXJndlswXSwgb3B0YXJnKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtiJiMzOTs6CiYjNDM7CQkJdGVzdF9wYXJhbXMuc2l6ZSA9IHBhcnNlX3NpemUob3B0YXJnKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtwJiMzOTs6CiYjNDM7CQkJdGVzdF9wYXJhbXMubW1hcF9mbGFncyA9IE1BUF9QT1BVTEFURTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtoJiMzOTs6CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWhlbHAoYXJndlswXSk7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MztvdXQ6CiYjNDM7CS8vIFJlc2V0IGdldG9wdCgpIHN0YXRlIHRvIGFsbG93IHRoZSB0ZXN0IGhhcm5lc3MgdG8gdXNlIGl0LgomIzQzOwlvcHRpbmQgPSAxOyAKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVhcmRvd25fdGVzdChzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzKQomIzQzO3sKJiM0MzsJaWYgKGFyZ3MtJmd0O2FyZ3YpIHsKJiM0MzsJCWFyZ3MtJmd0O2FyZ2MgPSAwOwomIzQzOwkJYXJncy0mZ3Q7YXJndiA9IE5VTEw7CiYjNDM7CQl3b3JkZnJlZSgmYW1wO2FyZ3MtJmd0O2V4cCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoYXJuZXNzX2FyZ3MgYXJncyA9IChzdHJ1Y3QgaGFybmVzc19hcmdzKSB7CiYjNDM7CQkuYXJnYyA9IDAsCiYjNDM7CQkuYXJndiA9IE5VTEwsCiYjNDM7CX07CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlzZXR1cF90ZXN0KCZhbXA7YXJncywgYXJnYywgYXJndik7CiYjNDM7CWRldmljZV9iZGYgPSB2ZmlvX3NlbGZ0ZXN0c19nZXRfYmRmKCZhbXA7YXJnYywgYXJndik7CiYjNDM7CXIgPSB0ZXN0X2hhcm5lc3NfcnVuKGFyZ3MuYXJnYywgYXJncy5hcmd2KTsKJiM0MzsJdGVhcmRvd25fdGVzdCgmYW1wO2FyZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gcjsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzgKCQkJCQkJCW91dHB1dDogNTgKCQkJCQkJCXRob3VnaHRzOiA0NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBuZXcgc2VsZnRlc3QsIGB2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdGAsIGFuZCB0d2Vha3MgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNgIHRvIGluY2x1ZGUgYF9faW9tbXVmZF9tYXBfZmlsZWAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIHN0cmljdGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AgZGlyZWN0b3J5LiBObyBjb3JlIGtlcm5lbCBjb2RlLCBubyBkcml2ZXIgbW9kaWZpY2F0aW9ucywgYW5kIGNlcnRhaW5seSBub3RoaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gSXQmIzM5O3MganVzdCBhZGRpbmcgYSB0ZXN0LCBhbmQgdGhhdCYjMzk7cyB0aGUgb25seSBzY29wZS4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gd2l0aCBhIGRpZmYgY2hlY2sgb2YgdGhlIGNoYW5nZWQgZmlsZXM6IGBNYWtlZmlsZWAsIGFuIGluY2x1ZGUgZmlsZSwgdGhlIG1vZGlmaWVkIEMgZmlsZSwgYW5kIHRoZSBuZXcgdGVzdC4gWWVwLCBhbGwgdW5kZXIgdGhlIGB2ZmlvYCBzZWxmdGVzdCBkaXJlY3RvcnkuCgpHaXZlbiB0aGlzLCB0aGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmIHRoYXQgYXJlIGFwcHJvcHJpYXRlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYXR0YWNrIHN1cmZhY2VzIGluIHRoZSBrZXJuZWwmIzM5O3MgY29yZSBsb2dpYy4gVGhlIGZ1enppbmcgZWZmb3J0cyBhcmUgdGFyZ2V0ZWQgdG93YXJkcyB0aGUga2VybmVsIGFuZCBpdHMgaW50ZXJmYWNlcyBhbmQgbm90IHRoZSB0ZXN0IHN1aXRlcy4KCkFscmlnaHQsIHRpbWUgdG8gZXZhbHVhdGUgdGhpcyBhZ2FpbnN0IHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGd1aWRlbGluZXMuIFRoZXkgc3BlY2lmaWNhbGx5IG1lbnRpb24gbW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgbG9nZ2luZywgY29uc3RhbnRzLCBhbmQgdW5yZWFjaGFibGUgY29kZSBwYXRocy4gV2hpbGUgc2VsZnRlc3RzIGFyZW4mIzM5O3QgZXhwbGljaXRseSBtZW50aW9uZWQsIHRoZXkgYXJlIG5vdCBrZXJuZWwgY29kZTsgdGhleSYjMzk7cmUgdXNlcnNwYWNlIHRvb2xzIHVzZWQgdG8gdGVzdCB0aGUga2VybmVsLiBGdXp6aW5nIHRoZSBrZXJuZWwgYmFzZWQgb24gY2hhbmdlcyAqd2l0aGluKiB0aGUgc2VsZnRlc3RzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUuIFdlIGZ1enogdGhlIGtlcm5lbC4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIE15IHJlYXNvbmluZyBpcyBjb25jaXNlOiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgc2VsZnRlc3QgYW5kIG1vZGlmaWVzIHNlbGZ0ZXN0IGxpYnJhcnkgY29kZS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgc2VsZnRlc3QgYW5kIG1vZGlmaWVzIHNlbGZ0ZXN0IGxpYnJhcnkgY29kZS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHNlbGZ0ZXN0IGFuZCBtb2RpZmllcyBzZWxmdGVzdCBsaWJyYXJ5IGNvZGUuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjozNzo0NS4wNDA1NTU2NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTk2MzIxMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgc2VsZnRlc3QgYW5kIG1vZGlmaWVzIHNlbGZ0ZXN0IGxpYnJhcnkgY29kZS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6Mzc6NDUuMDQwNTYwNzI4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM3OTI4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NWZiY2FmNDFiZTlmMDE1MjliYTY4NzY1MmU1NDgxNTM3MGRiYzlmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMDI6Mzc6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcXG5pbmRleCBlNmU4Y2I1MmFiMDMwMS4uOWY2MjBjNWVmNmFiOTEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcXG5AQCAtOCw2ICs4LDcgQEAgZWxzZVxcbiBDRkxBR1MgPSAkKEtIRFJfSU5DTFVERVMpXFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9fZG1hX21hcHBpbmdfdGVzdFxcbiBURVNUX0dFTl9QUk9HUyArPSB2ZmlvX2RtYV9tYXBwaW5nX21taW9fdGVzdFxcbitURVNUX0dFTl9QUk9HUyArPSB2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdFxcbiBURVNUX0dFTl9QUk9HUyArPSB2ZmlvX2lvbW11ZmRfc2V0dXBfdGVzdFxcbiBURVNUX0dFTl9QUk9HUyArPSB2ZmlvX3BjaV9kZXZpY2VfdGVzdFxcbiBURVNUX0dFTl9QUk9HUyArPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdF9wZXJmX3Rlc3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxcbmluZGV4IGU5YTMzODZhNDcxOTNhLi5lZWVmNTk5MDI5MmNmYiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXFxuQEAgLTM1LDYgKzM1LDEzIEBAIHN0cnVjdCBpb21tdSB7XFxuIHN0cnVjdCBpb21tdSAqaW9tbXVfaW5pdChjb25zdCBjaGFyICppb21tdV9tb2RlKTtcXG4gdm9pZCBpb21tdV9jbGVhbnVwKHN0cnVjdCBpb21tdSAqaW9tbXUpO1xcbiBcXG4raW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpO1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGlvbW11ZmRfbWFwX2ZpbGUoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwgaW50IGZkKVxcbit7XFxuK1xcdFZGSU9fQVNTRVJUX0VRKF9faW9tbXVmZF9tYXBfZmlsZShpb21tdSwgcmVnaW9uLCBmZCksIDApO1xcbit9XFxuK1xcbiBpbnQgX19pb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbik7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgaW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXFxuaW5kZXggMDM1ZGFjMDY5ZDYwMTYuLjY3MzBiMzkwNjBjYTE2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXFxuQEAgLTk3LDYgKzk3LDMwIEBAIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcilcXG4gXFx0cmV0dXJuIGlvdmE7XFxuIH1cXG4gXFxuK2ludCBfX2lvbW11ZmRfbWFwX2ZpbGUoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwgaW50IGZkKVxcbit7XFxuK1xcdFZGSU9fQVNTRVJUX1RSVUUoaW9tbXUtXFx1MDAzZWlvbW11ZmQsIFxcXCJJT01NVV9JT0FTX01BUF9GSUxFIGlzIGFuIElPTU1VRkQgSU9DVEwuXFxcIik7XFxuK1xcbitcXHRzdHJ1Y3QgaW9tbXVfaW9hc19tYXBfZmlsZSBhcmdzID0ge1xcbitcXHRcXHQuc2l6ZSA9IHNpemVvZihhcmdzKSxcXG4rXFx0XFx0LmZsYWdzID0gSU9NTVVfSU9BU19NQVBfUkVBREFCTEUgfFxcbitcXHRcXHRcXHRJT01NVV9JT0FTX01BUF9XUklURUFCTEUgfFxcbitcXHRcXHRcXHRJT01NVV9JT0FTX01BUF9GSVhFRF9JT1ZBLFxcbitcXHRcXHQuaW9hc19pZCA9IGlvbW11LVxcdTAwM2Vpb2FzX2lkLFxcbitcXHRcXHQuZmQgPSBmZCxcXG4rXFx0XFx0LnN0YXJ0ID0gMCxcXG4rXFx0XFx0LmlvdmEgPSByZWdpb24tXFx1MDAzZWlvdmEsXFxuK1xcdFxcdC5sZW5ndGggPSByZWdpb24tXFx1MDAzZXNpemUsXFxuK1xcdH07XFxuK1xcbitcXHRpZiAoaW9jdGwoaW9tbXUtXFx1MDAzZWlvbW11ZmQsIElPTU1VX0lPQVNfTUFQX0ZJTEUsIFxcdTAwMjZhcmdzKSlcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdGxpc3RfYWRkKFxcdTAwMjZyZWdpb24tXFx1MDAzZWxpbmssIFxcdTAwMjZpb21tdS1cXHUwMDNlZG1hX3JlZ2lvbnMpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdmZpb19pb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfbWFwIGFyZ3MgPSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgwMzJmNTFjMWEzZTViXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY1xcbkBAIC0wLDAgKzEsMzgwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3dvcmRleHAuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21tdWZkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWZkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZTY0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC92ZmlvLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGlidmZpby5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqZGV2aWNlX2JkZjtcXG4rXFxuK3N0cnVjdCB0ZXN0X3BhcmFtcyB7XFxuK1xcdHU2NCBzaXplO1xcbitcXHRpbnQgbW1hcF9mbGFncztcXG4rfTtcXG4rXFxuK3N0cnVjdCB0ZXN0X3BhcmFtcyB0ZXN0X3BhcmFtcztcXG4rXFxuK3N0cnVjdCBpb21tdV9tYXBwaW5nIHtcXG4rXFx0dTY0IHBnZDtcXG4rXFx0dTY0IHA0ZDtcXG4rXFx0dTY0IHB1ZDtcXG4rXFx0dTY0IHBtZDtcXG4rXFx0dTY0IHB0ZTtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHRpbWVyX3N0YXJ0KHN0cnVjdCB0aW1lc3BlYyAqc3RhcnQpIHtcXG4rXFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIHN0YXJ0KTtcXG4rfVxcbitcXG4rc3RhdGljIGRvdWJsZSB0aW1lcl9lbGFwc2VkX21zKHN0cnVjdCB0aW1lc3BlYyBzdGFydClcXG4re1xcbitcXHRzdHJ1Y3QgdGltZXNwZWMgZW5kO1xcbitcXG4rXFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFxcdTAwMjZlbmQpO1xcbitcXG4rXFx0cmV0dXJuIChkb3VibGUpKGVuZC50dl9zZWMgLSBzdGFydC50dl9zZWMpICogTVNFQ19QRVJfU0VDICtcXG4rXFx0ICAgICAgIChkb3VibGUpKGVuZC50dl9uc2VjIC0gc3RhcnQudHZfbnNlYykgLyBOU0VDX1BFUl9NU0VDO1xcbit9XFxuK1xcbitGSVhUVVJFKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KSB7XFxuK1xcdHN0cnVjdCBpb21tdSAqaW9tbXU7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZTtcXG4rXFx0c3RydWN0IGlvdmFfYWxsb2NhdG9yICppb3ZhX2FsbG9jYXRvcjtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCkge1xcbitcXHRjb25zdCBjaGFyICppb21tdV9tb2RlO1xcbitcXHRpbnQgbW1hcF9mbGFncztcXG4rfTtcXG4rXFxuKyNkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKF9pb21tdV9tb2RlLCBfbmFtZSwgX21tYXBfZmxhZ3MpXFx0ICAgICAgIFxcXFxcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCwgX2lvbW11X21vZGUgIyMgXyAjIyBfbmFtZSkgeyAgIFxcXFxcXG4rXFx0LmlvbW11X21vZGUgPSAjX2lvbW11X21vZGUsXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4rXFx0Lm1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCAoX21tYXBfZmxhZ3MpLFxcdCAgICAgICBcXFxcXFxuK31cXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91cywgMCk7XFxuK0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91c19odWdldGxiXzJtYiwgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIpO1xcbitGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8xZ2IsIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMUdCKTtcXG4rXFxuKyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREVcXG4rXFxuK0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXFxuK3tcXG4rXFx0c2VsZi1cXHUwMDNlaW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtXFx1MDAzZWlvbW11X21vZGUpO1xcbitcXHRzZWxmLVxcdTAwM2VkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLVxcdTAwM2Vpb21tdSk7XFxuK1xcdHNlbGYtXFx1MDAzZWlvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLVxcdTAwM2Vpb21tdSk7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXFxuK3tcXG4rXFx0aW92YV9hbGxvY2F0b3JfY2xlYW51cChzZWxmLVxcdTAwM2Vpb3ZhX2FsbG9jYXRvcik7XFxuK1xcdHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHNlbGYtXFx1MDAzZWRldmljZSk7XFxuK1xcdGlvbW11X2NsZWFudXAoc2VsZi1cXHUwMDNlaW9tbXUpO1xcbit9XFxuK1xcbitURVNUX0YodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIGRtYV9tYXBfdW5tYXApXFxuK3tcXG4rXFx0Y29uc3QgdTY0IHNpemUgPSB0ZXN0X3BhcmFtcy5zaXplO1xcbitcXHRjb25zdCBpbnQgZmxhZ3MgPSB2YXJpYW50LVxcdTAwM2VtbWFwX2ZsYWdzIHwgdGVzdF9wYXJhbXMubW1hcF9mbGFncztcXG4rXFx0c3RydWN0IGRtYV9yZWdpb24gcmVnaW9uO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7XFxuK1xcdHU2NCB1bm1hcHBlZDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0dGltZXJfc3RhcnQoXFx1MDAyNnN0YXJ0KTtcXG4rXFx0cmVnaW9uLnZhZGRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncywgLTEsIDApO1xcbitcXHRwcmludGYoXFxcIkNvbXBsZXRlZCBtbWFwKCkgaW4gJS4ybGZtc1xcXFxuXFxcIiwgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xcbitcXG4rXFx0LyogU2tpcCB0aGUgdGVzdCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIEh1Z2VUTEIgcGFnZXMgYXZhaWxhYmxlLiAqL1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNQVBfSFVHRVRMQiBcXHUwMDI2XFx1MDAyNiByZWdpb24udmFkZHIgPT0gTUFQX0ZBSUxFRClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJtbWFwKCkgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTtcXG4rXFxuK1xcdHJlZ2lvbi5pb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2Moc2VsZi1cXHUwMDNlaW92YV9hbGxvY2F0b3IsIHNpemUpO1xcbitcXHRyZWdpb24uc2l6ZSA9IHNpemU7XFxuK1xcbitcXHR0aW1lcl9zdGFydChcXHUwMDI2c3RhcnQpO1xcbitcXHRpb21tdV9tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIFxcdTAwMjZyZWdpb24pO1xcbitcXHRwcmludGYoXFxcIk1hcHBlZCBIVkEgJXAgKHNpemUgJWx1RykgYXQgSU9WQSAweCVseCBpbiAlLjJsZm1zXFxcXG5cXFwiLFxcbitcXHQgICAgICAgcmVnaW9uLnZhZGRyLCBzaXplIC8gU1pfMUcsIHJlZ2lvbi5pb3ZhLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XFxuK1xcdEFTU0VSVF9FUShyZWdpb24uaW92YSwgdG9faW92YShzZWxmLVxcdTAwM2VkZXZpY2UsIHJlZ2lvbi52YWRkcikpO1xcbitcXG4rXFx0dGltZXJfc3RhcnQoXFx1MDAyNnN0YXJ0KTtcXG4rXFx0cmMgPSBfX2lvbW11X3VubWFwKHNlbGYtXFx1MDAzZWlvbW11LCBcXHUwMDI2cmVnaW9uLCBcXHUwMDI2dW5tYXBwZWQpO1xcbitcXHRwcmludGYoXFxcIlVubWFwcGVkIElPVkEgMHglbHggaW4gJS4ybGZtc1xcXFxuXFxcIiwgcmVnaW9uLmlvdmEsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcXG4rXFx0QVNTRVJUX0VRKHJjLCAwKTtcXG4rXFx0QVNTRVJUX0VRKHVubWFwcGVkLCByZWdpb24uc2l6ZSk7XFxuK1xcbitcXHR0aW1lcl9zdGFydChcXHUwMDI2c3RhcnQpO1xcbitcXHRBU1NFUlRfVFJVRSghbXVubWFwKHJlZ2lvbi52YWRkciwgc2l6ZSkpO1xcbitcXHRwcmludGYoXFxcIkNvbXBsZXRlZCBtdW5tYXAoKSBpbiAlLjJsZm1zXFxcXG5cXFwiLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XFxuK31cXG4rXFxuK0ZJWFRVUkUodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpIHtcXG4rXFx0c3RydWN0IGlvbW11ICppb21tdTtcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlO1xcbitcXHRzdHJ1Y3QgaW92YV9hbGxvY2F0b3IgKmlvdmFfYWxsb2NhdG9yO1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KSB7XFxuK1xcdGNvbnN0IGNoYXIgKmlvbW11X21vZGU7XFxuK1xcdGludCBtbWFwX2ZsYWdzO1xcbitcXHRpbnQgbWVtZmRfZmxhZ3M7XFxuK307XFxuK1xcbisjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShfaW9tbXVfbW9kZSwgX25hbWUsIF9tbWFwX2ZsYWdzLCBfbWVtZmRfZmxhZ3MpIFxcXFxcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCwgX2lvbW11X21vZGUgIyMgXyAjIyBfbmFtZSkgeyAgICBcXFxcXFxuK1xcdC5pb21tdV9tb2RlID0gI19pb21tdV9tb2RlLFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4rXFx0Lm1tYXBfZmxhZ3MgPSBNQVBfU0hBUkVEIHwgKF9tbWFwX2ZsYWdzKSxcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuK1xcdC5tZW1mZF9mbGFncyA9IE1BUF9TSEFSRUQgfCAoX21lbWZkX2ZsYWdzKSxcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuK31cXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKG1lbWZkLCAwLCAwKTtcXG4rRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMobWVtZmRfaHVnZXRsYl8ybWIsXFxuK1xcdFxcdFxcdFxcdCAgICBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzJNQixcXG4rXFx0XFx0XFx0XFx0ICAgIE1GRF9IVUdFVExCIHwgTUZEX0hVR0VfMk1CKTtcXG4rRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMobWVtZmRfaHVnZXRsYl8xZ2IsXFxuK1xcdFxcdFxcdFxcdCAgICBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzFHQixcXG4rXFx0XFx0XFx0XFx0ICAgIE1GRF9IVUdFVExCIHwgTUZEX0hVR0VfMUdCKTtcXG4rXFxuKyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREVcXG4rXFxuK0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpXFxuK3tcXG4rXFx0c2VsZi1cXHUwMDNlaW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtXFx1MDAzZWlvbW11X21vZGUpO1xcbitcXHRzZWxmLVxcdTAwM2VkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLVxcdTAwM2Vpb21tdSk7XFxuK1xcdHNlbGYtXFx1MDAzZWlvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLVxcdTAwM2Vpb21tdSk7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpXFxuK3tcXG4rXFx0aW92YV9hbGxvY2F0b3JfY2xlYW51cChzZWxmLVxcdTAwM2Vpb3ZhX2FsbG9jYXRvcik7XFxuK1xcdHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHNlbGYtXFx1MDAzZWRldmljZSk7XFxuK1xcdGlvbW11X2NsZWFudXAoc2VsZi1cXHUwMDNlaW9tbXUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCAqc2V0dXBfbWVtZmQoaW50ICpmZCwgdTY0IHNpemUsIGludCBtbWFwX2ZsYWdzLCBpbnQgbWZkX2ZsYWdzKVxcbit7XFxuK1xcdHZvaWQgKmJ1ZiA9IE1BUF9GQUlMRUQ7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYyBzdGFydDtcXG4rXFxuK1xcdHRpbWVyX3N0YXJ0KFxcdTAwMjZzdGFydCk7XFxuK1xcdCpmZCA9IG1lbWZkX2NyZWF0ZShcXFwidmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3RcXFwiLCBtZmRfZmxhZ3MpO1xcbitcXHRwcmludGYoXFxcIkNvbXBsZXRlZCBtZW1mZF9jcmVhdGUoKSBpbiAlLjJsZm1zXFxcXG5cXFwiLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XFxuK1xcdGlmICgqZmQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIE1BUF9GQUlMRUQ7XFxuK1xcbitcXHRpZiAoZnRydW5jYXRlKCpmZCwgc2l6ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0dGltZXJfc3RhcnQoXFx1MDAyNnN0YXJ0KTtcXG4rXFx0YnVmID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBtbWFwX2ZsYWdzLCAqZmQsIDApO1xcbitcXHRwcmludGYoXFxcIkNvbXBsZXRlZCBtbWFwKCkgZm9yIG1lbWZkIGluICUuMmxmbXNcXFxcblxcXCIsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcXG4rXFxuK291dDpcXG4rXFx0aWYgKGJ1ZiA9PSBNQVBfRkFJTEVEKVxcbitcXHRcXHRjbG9zZSgqZmQpO1xcbitcXG4rXFx0cmV0dXJuIGJ1ZjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVhcmRvd25fbWVtZmQoaW50IGZkLCB1NjQgc2l6ZSwgdm9pZCAqdmFkZHIpXFxuK3tcXG4rXFx0c3RydWN0IHRpbWVzcGVjIHN0YXJ0O1xcbitcXG4rXFx0aWYgKHZhZGRyICE9IE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0dGltZXJfc3RhcnQoXFx1MDAyNnN0YXJ0KTtcXG4rXFx0XFx0bXVubWFwKHZhZGRyLCBzaXplKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJDb21wbGV0ZWQgbXVubWFwKCkgaW4gJS4ybGZtc1xcXFxuXFxcIiwgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZmQgIT0gLTEpIHtcXG4rXFx0XFx0dGltZXJfc3RhcnQoXFx1MDAyNnN0YXJ0KTtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRwcmludGYoXFxcIkNvbXBsZXRlZCBjbG9zZSgpIGluICUuMmxmbXNcXFxcblxcXCIsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcXG4rXFx0fVxcbit9XFxuK1xcbitURVNUX0YodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QsIGRtYV9tYXBfdW5tYXBfZnJvbV9maWxlKVxcbit7XFxuK1xcdGNvbnN0IHU2NCBzaXplID0gdGVzdF9wYXJhbXMuc2l6ZTtcXG4rXFx0c3RydWN0IGRtYV9yZWdpb24gcmVnaW9uO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7XFxuK1xcdHU2NCB1bm1hcHBlZDtcXG4rXFx0aW50IHJjLCBmZDtcXG4rXFxuK1xcdHJlZ2lvbi52YWRkciA9IHNldHVwX21lbWZkKFxcdTAwMjZmZCwgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgdmFyaWFudC1cXHUwMDNlbW1hcF9mbGFncyB8IHRlc3RfcGFyYW1zLm1tYXBfZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgIHZhcmlhbnQtXFx1MDAzZW1lbWZkX2ZsYWdzKTtcXG4rXFx0QVNTRVJUX05FKHJlZ2lvbi52YWRkciwgTUFQX0ZBSUxFRCk7XFxuK1xcbitcXHRyZWdpb24uaW92YSA9IGlvdmFfYWxsb2NhdG9yX2FsbG9jKHNlbGYtXFx1MDAzZWlvdmFfYWxsb2NhdG9yLCBzaXplKTtcXG4rXFx0cmVnaW9uLnNpemUgPSBzaXplO1xcbitcXG4rXFx0dGltZXJfc3RhcnQoXFx1MDAyNnN0YXJ0KTtcXG4rXFx0aWYgKHN0cmNtcCh2YXJpYW50LVxcdTAwM2Vpb21tdV9tb2RlLCBNT0RFX0lPTU1VRkQpID09IDApIHtcXG4rXFx0XFx0aW9tbXVmZF9tYXBfZmlsZShzZWxmLVxcdTAwM2Vpb21tdSwgXFx1MDAyNnJlZ2lvbiwgZmQpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpb21tdV9tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIFxcdTAwMjZyZWdpb24pO1xcbitcXHR9XFxuK1xcdHByaW50ZihcXFwiTWFwcGVkIEhWQSAlcCAoc2l6ZSAlbHVHKSBhdCBJT1ZBIDB4JWx4IGluICUuMmxmbXNcXFxcblxcXCIsXFxuK1xcdCAgICAgICByZWdpb24udmFkZHIsIHNpemUgLyBTWl8xRywgcmVnaW9uLmlvdmEsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcXG4rXFx0QVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtXFx1MDAzZWRldmljZSwgcmVnaW9uLnZhZGRyKSk7XFxuK1xcbitcXHR0aW1lcl9zdGFydChcXHUwMDI2c3RhcnQpO1xcbitcXHRyYyA9IF9faW9tbXVfdW5tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIFxcdTAwMjZyZWdpb24sIFxcdTAwMjZ1bm1hcHBlZCk7XFxuK1xcdHByaW50ZihcXFwiVW5tYXBwZWQgSU9WQSAweCVseCBpbiAlLjJsZm1zXFxcXG5cXFwiLCByZWdpb24uaW92YSwgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xcbitcXHRBU1NFUlRfRVEocmMsIDApO1xcbitcXHRBU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi5zaXplKTtcXG4rXFxuK1xcdHRlYXJkb3duX21lbWZkKGZkLCBzaXplLCByZWdpb24udmFkZHIpO1xcbit9XFxuK1xcbisvKlxcbisgKiBQYXJzZXMgXFxcIlswLTldK1trbWd0XT9cXFwiLlxcbisgKi9cXG4rc2l6ZV90IHBhcnNlX3NpemUoY29uc3QgY2hhciAqc2l6ZSlcXG4re1xcbitcXHRzaXplX3QgYmFzZTtcXG4rXFx0Y2hhciAqc2NhbGU7XFxuK1xcdGludCBzaGlmdCA9IDA7XFxuK1xcbitcXHRWRklPX0FTU0VSVF9UUlVFKHNpemUgXFx1MDAyNlxcdTAwMjYgaXNkaWdpdChzaXplWzBdKSxcXG4rXFx0XFx0XFx0IFxcXCJOZWVkIGF0IGxlYXN0IG9uZSBkaWdpdCBpbiAnJXMnLlxcXCIsIHNpemUpO1xcbitcXG4rXFx0YmFzZSA9IHN0cnRvdWxsKHNpemUsIFxcdTAwMjZzY2FsZSwgMCk7XFxuK1xcbitcXHRWRklPX0FTU0VSVF9UUlVFKGJhc2UgIT0gVUxMT05HX01BWCwgXFxcIk92ZXJmbG93IHBhcnNpbmcgc2l6ZSFcXFwiKTtcXG4rXFxuK1xcdHN3aXRjaCAodG9sb3dlcigqc2NhbGUpKSB7XFxuK1xcdGNhc2UgJ3QnOlxcbitcXHRcXHRzaGlmdCA9IDQwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAnZyc6XFxuK1xcdFxcdHNoaWZ0ID0gMzA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlICdtJzpcXG4rXFx0XFx0c2hpZnQgPSAyMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgJ2snOlxcbitcXHRcXHRzaGlmdCA9IDEwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAnYic6XFxuK1xcdGNhc2UgJ1xcXFwwJzpcXG4rXFx0XFx0c2hpZnQgPSAwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0VkZJT19GQUlMKFxcXCJVbmtub3duIHNpemUgbGV0dGVyICclYycuXFxcIiwgKnNjYWxlKTtcXG4rXFx0fVxcbitcXG4rXFx0VkZJT19BU1NFUlRfVFJVRSgoYmFzZSBcXHUwMDNjXFx1MDAzYyBzaGlmdCkgXFx1MDAzZVxcdTAwM2Ugc2hpZnQgPT0gYmFzZSxcXG4rXFx0XFx0XFx0IFxcXCJPdmVyZmxvdyBzY2FsaW5nIHNpemUhXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gYmFzZSBcXHUwMDNjXFx1MDAzYyBzaGlmdDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaGVscChjaGFyICpuYW1lKVxcbit7XFxuK1xcdHB1dHMoXFxcIlxcXCIpO1xcbitcXHRwcmludGYoXFxcInVzYWdlOiAlcyBbLWh8LXBdIFstYiBieXRlc10gWy1hIFxcXFxcXFwidGVzdCBoYXJuZXNzIGFyZ3NcXFxcXFxcIl1cXFxcblxcXCIsIG5hbWUpO1xcbitcXHRwdXRzKFxcXCJcXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCIgLWg6IERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UuXFxcXG5cXFwiXFxuK1xcdCAgICAgICBcXFwiIC1iOiBTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBETUEgcmVnaW9uIHRvIGJlIG1hcHBlZFxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgYW5kIHVubWFwcGVkLiBlLmcuIDE2TSBvciA4RywgKGRlZmF1bHQ6IDFHKVxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAtcDogQXBwZW5kICdNQVBfUE9QVUxBVEUnIHRvIHRoZSBtbWFwKCkgZmxhZ3MgdG8gYXZvaWRcXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgICAgIHByZWZhdWx0aW5nIHdoaWxlIG1hcHBpbmcgRE1BIHJlZ2lvbnMuIEluc3RlYWQsIGFueVxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgYW5kIGFsbCBwcmVmYXVsdGluZyBuZWVkZWQgd2lsbCBoYXBwZW4gZHVyaW5nIHRoZVxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgbW1hcCgpIGNhbGwuIFRoaXMgd2lsbCBtYWtlIG1hcHBpbmcgRE1BIHJlZ2lvbnNcXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgICAgIG1vcmUgY29uc2lzdGVudC5cXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgLWE6IEFyZ3MgdGhhdCBhcmUgZm9yd2FyZGVkIHRvIHRoZSB0ZXN0IGhhcm5lc3MsXFxcXG5cXFwiXFxuK1xcdCAgICAgICBcXFwiICAgICBlLmcuIC1hIFxcXFxcXFwiLXQgZG1hX21hcF91bm1hcF9mcm9tX2ZpbGVcXFxcXFxcIlxcXFxuXFxcIik7XFxuK31cXG4rXFxuK3N0cnVjdCBoYXJuZXNzX2FyZ3NcXG4re1xcbitcXHRpbnQgYXJnYztcXG4rXFx0Y2hhciAqKmFyZ3Y7XFxuK1xcdHdvcmRleHBfdCBleHA7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBwb3B1bGF0ZV9oYXJuZXNzX2FyZ3Moc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncywgY29uc3QgY2hhciAqYXJndl8wLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmNtZGxuZSlcXG4re1xcbitcXHRpZiAod29yZGV4cChhcmd2XzAsIFxcdTAwMjZhcmdzLVxcdTAwM2VleHAsIFdSREVfTk9DTUQpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHdvcmRleHAoY21kbG5lLCBcXHUwMDI2YXJncy1cXHUwMDNlZXhwLCBXUkRFX0FQUEVORCB8IFdSREVfTk9DTUQpID09IDApIHtcXG4rXFx0XFx0YXJncy1cXHUwMDNlYXJnYyA9IGFyZ3MtXFx1MDAzZWV4cC53ZV93b3JkYztcXG4rXFx0XFx0YXJncy1cXHUwMDNlYXJndiA9IGFyZ3MtXFx1MDAzZWV4cC53ZV93b3JkdjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXR1cF90ZXN0KHN0cnVjdCBoYXJuZXNzX2FyZ3MgKmFyZ3MsIGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0aW50IG9wdDtcXG4rXFxuK1xcdHRlc3RfcGFyYW1zID0gKHN0cnVjdCB0ZXN0X3BhcmFtcykge1xcbitcXHRcXHQuc2l6ZSA9IFNaXzFHLFxcbitcXHRcXHQubW1hcF9mbGFncyA9IDAsXFxuK1xcdH07XFxuK1xcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwiYTpiOnBoXFxcIikpICE9IC0xKSB7XFxuK1xcdFxcdHN3aXRjaCAob3B0KSB7XFxuK1xcdFxcdGNhc2UgJ2EnOlxcbitcXHRcXHRcXHRwb3B1bGF0ZV9oYXJuZXNzX2FyZ3MoYXJncywgYXJndlswXSwgb3B0YXJnKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ2InOlxcbitcXHRcXHRcXHR0ZXN0X3BhcmFtcy5zaXplID0gcGFyc2Vfc2l6ZShvcHRhcmcpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAncCc6XFxuK1xcdFxcdFxcdHRlc3RfcGFyYW1zLm1tYXBfZmxhZ3MgPSBNQVBfUE9QVUxBVEU7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdoJzpcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0aGVscChhcmd2WzBdKTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHQvLyBSZXNldCBnZXRvcHQoKSBzdGF0ZSB0byBhbGxvdyB0aGUgdGVzdCBoYXJuZXNzIHRvIHVzZSBpdC5cXG4rXFx0b3B0aW5kID0gMTsgXFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlYXJkb3duX3Rlc3Qoc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncylcXG4re1xcbitcXHRpZiAoYXJncy1cXHUwMDNlYXJndikge1xcbitcXHRcXHRhcmdzLVxcdTAwM2VhcmdjID0gMDtcXG4rXFx0XFx0YXJncy1cXHUwMDNlYXJndiA9IE5VTEw7XFxuK1xcdFxcdHdvcmRmcmVlKFxcdTAwMjZhcmdzLVxcdTAwM2VleHApO1xcbitcXHR9XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0c3RydWN0IGhhcm5lc3NfYXJncyBhcmdzID0gKHN0cnVjdCBoYXJuZXNzX2FyZ3MpIHtcXG4rXFx0XFx0LmFyZ2MgPSAwLFxcbitcXHRcXHQuYXJndiA9IE5VTEwsXFxuK1xcdH07XFxuK1xcdGludCByO1xcbitcXG4rXFx0c2V0dXBfdGVzdChcXHUwMDI2YXJncywgYXJnYywgYXJndik7XFxuK1xcdGRldmljZV9iZGYgPSB2ZmlvX3NlbGZ0ZXN0c19nZXRfYmRmKFxcdTAwMjZhcmdjLCBhcmd2KTtcXG4rXFx0ciA9IHRlc3RfaGFybmVzc19ydW4oYXJncy5hcmdjLCBhcmdzLmFyZ3YpO1xcbitcXHR0ZWFyZG93bl90ZXN0KFxcdTAwMjZhcmdzKTtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjM3OjQ1LjUyNTQxODkwOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcxMTQ1MDg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHNlbGZ0ZXN0IGFuZCBtb2RpZmllcyBzZWxmdGVzdCBsaWJyYXJ5IGNvZGUuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTVmYmNhZjQxYmU5ZjAxNTI5YmE2ODc2NTJlNTQ4MTUzNzBkYmM5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDI6Mzc6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuaW5kZXggZTZlOGNiNTJhYjAzMDEuLjlmNjIwYzVlZjZhYjkxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuQEAgLTgsNiArOCw3IEBAIGVsc2VcbiBDRkxBR1MgPSAkKEtIRFJfSU5DTFVERVMpXG4gVEVTVF9HRU5fUFJPR1MgKz0gdmZpb19kbWFfbWFwcGluZ190ZXN0XG4gVEVTVF9HRU5fUFJPR1MgKz0gdmZpb19kbWFfbWFwcGluZ19tbWlvX3Rlc3RcbitURVNUX0dFTl9QUk9HUyArPSB2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9faW9tbXVmZF9zZXR1cF90ZXN0XG4gVEVTVF9HRU5fUFJPR1MgKz0gdmZpb19wY2lfZGV2aWNlX3Rlc3RcbiBURVNUX0dFTl9QUk9HUyArPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdF9wZXJmX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXG5pbmRleCBlOWEzMzg2YTQ3MTkzYS4uZWVlZjU5OTAyOTJjZmIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcbkBAIC0zNSw2ICszNSwxMyBAQCBzdHJ1Y3QgaW9tbXUge1xuIHN0cnVjdCBpb21tdSAqaW9tbXVfaW5pdChjb25zdCBjaGFyICppb21tdV9tb2RlKTtcbiB2b2lkIGlvbW11X2NsZWFudXAoc3RydWN0IGlvbW11ICppb21tdSk7XG4gXG4raW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpO1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZClcbit7XG4rXHRWRklPX0FTU0VSVF9FUShfX2lvbW11ZmRfbWFwX2ZpbGUoaW9tbXUsIHJlZ2lvbiwgZmQpLCAwKTtcbit9XG4rXG4gaW50IF9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY1xuaW5kZXggMDM1ZGFjMDY5ZDYwMTYuLjY3MzBiMzkwNjBjYTE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY1xuQEAgLTk3LDYgKzk3LDMwIEBAIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcilcbiBcdHJldHVybiBpb3ZhO1xuIH1cbiBcbitpbnQgX19pb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZClcbit7XG4rXHRWRklPX0FTU0VSVF9UUlVFKGlvbW11LVx1MDAzZWlvbW11ZmQsIFwiSU9NTVVfSU9BU19NQVBfRklMRSBpcyBhbiBJT01NVUZEIElPQ1RMLlwiKTtcbitcbitcdHN0cnVjdCBpb21tdV9pb2FzX21hcF9maWxlIGFyZ3MgPSB7XG4rXHRcdC5zaXplID0gc2l6ZW9mKGFyZ3MpLFxuK1x0XHQuZmxhZ3MgPSBJT01NVV9JT0FTX01BUF9SRUFEQUJMRSB8XG4rXHRcdFx0SU9NTVVfSU9BU19NQVBfV1JJVEVBQkxFIHxcbitcdFx0XHRJT01NVV9JT0FTX01BUF9GSVhFRF9JT1ZBLFxuK1x0XHQuaW9hc19pZCA9IGlvbW11LVx1MDAzZWlvYXNfaWQsXG4rXHRcdC5mZCA9IGZkLFxuK1x0XHQuc3RhcnQgPSAwLFxuK1x0XHQuaW92YSA9IHJlZ2lvbi1cdTAwM2Vpb3ZhLFxuK1x0XHQubGVuZ3RoID0gcmVnaW9uLVx1MDAzZXNpemUsXG4rXHR9O1xuK1xuK1x0aWYgKGlvY3RsKGlvbW11LVx1MDAzZWlvbW11ZmQsIElPTU1VX0lPQVNfTUFQX0ZJTEUsIFx1MDAyNmFyZ3MpKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0bGlzdF9hZGQoXHUwMDI2cmVnaW9uLVx1MDAzZWxpbmssIFx1MDAyNmlvbW11LVx1MDAzZWRtYV9yZWdpb25zKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHZmaW9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXG4ge1xuIFx0c3RydWN0IHZmaW9faW9tbXVfdHlwZTFfZG1hX21hcCBhcmdzID0ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MDMyZjUxYzFhM2U1YlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jXG5AQCAtMCwwICsxLDM4MCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N3b3JkZXhwLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdWZkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC92ZmlvLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpkZXZpY2VfYmRmO1xuK1xuK3N0cnVjdCB0ZXN0X3BhcmFtcyB7XG4rXHR1NjQgc2l6ZTtcbitcdGludCBtbWFwX2ZsYWdzO1xuK307XG4rXG4rc3RydWN0IHRlc3RfcGFyYW1zIHRlc3RfcGFyYW1zO1xuK1xuK3N0cnVjdCBpb21tdV9tYXBwaW5nIHtcbitcdHU2NCBwZ2Q7XG4rXHR1NjQgcDRkO1xuK1x0dTY0IHB1ZDtcbitcdHU2NCBwbWQ7XG4rXHR1NjQgcHRlO1xuK307XG4rXG4rc3RhdGljIHZvaWQgdGltZXJfc3RhcnQoc3RydWN0IHRpbWVzcGVjICpzdGFydCkge1xuK1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIHN0YXJ0KTtcbit9XG4rXG4rc3RhdGljIGRvdWJsZSB0aW1lcl9lbGFwc2VkX21zKHN0cnVjdCB0aW1lc3BlYyBzdGFydClcbit7XG4rXHRzdHJ1Y3QgdGltZXNwZWMgZW5kO1xuK1xuK1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNmVuZCk7XG4rXG4rXHRyZXR1cm4gKGRvdWJsZSkoZW5kLnR2X3NlYyAtIHN0YXJ0LnR2X3NlYykgKiBNU0VDX1BFUl9TRUMgK1xuK1x0ICAgICAgIChkb3VibGUpKGVuZC50dl9uc2VjIC0gc3RhcnQudHZfbnNlYykgLyBOU0VDX1BFUl9NU0VDO1xuK31cbitcbitGSVhUVVJFKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KSB7XG4rXHRzdHJ1Y3QgaW9tbXUgKmlvbW11O1xuK1x0c3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlO1xuK1x0c3RydWN0IGlvdmFfYWxsb2NhdG9yICppb3ZhX2FsbG9jYXRvcjtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCkge1xuK1x0Y29uc3QgY2hhciAqaW9tbXVfbW9kZTtcbitcdGludCBtbWFwX2ZsYWdzO1xuK307XG4rXG4rI2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoX2lvbW11X21vZGUsIF9uYW1lLCBfbW1hcF9mbGFncylcdCAgICAgICBcXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIF9pb21tdV9tb2RlICMjIF8gIyMgX25hbWUpIHsgICBcXFxuK1x0LmlvbW11X21vZGUgPSAjX2lvbW11X21vZGUsXHRcdFx0XHRcdCAgICAgICBcXFxuK1x0Lm1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCAoX21tYXBfZmxhZ3MpLFx0ICAgICAgIFxcXG4rfVxuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91cywgMCk7XG4rRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoYW5vbnltb3VzX2h1Z2V0bGJfMm1iLCBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzJNQik7XG4rRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoYW5vbnltb3VzX2h1Z2V0bGJfMWdiLCBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzFHQik7XG4rXG4rI3VuZGVmIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERVxuK1xuK0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXG4re1xuK1x0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC1cdTAwM2Vpb21tdV9tb2RlKTtcbitcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4rXHRzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLVx1MDAzZWlvbW11KTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdClcbit7XG4rXHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IpO1xuK1x0dmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc2VsZi1cdTAwM2VkZXZpY2UpO1xuK1x0aW9tbXVfY2xlYW51cChzZWxmLVx1MDAzZWlvbW11KTtcbit9XG4rXG4rVEVTVF9GKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0LCBkbWFfbWFwX3VubWFwKVxuK3tcbitcdGNvbnN0IHU2NCBzaXplID0gdGVzdF9wYXJhbXMuc2l6ZTtcbitcdGNvbnN0IGludCBmbGFncyA9IHZhcmlhbnQtXHUwMDNlbW1hcF9mbGFncyB8IHRlc3RfcGFyYW1zLm1tYXBfZmxhZ3M7XG4rXHRzdHJ1Y3QgZG1hX3JlZ2lvbiByZWdpb247XG4rXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7XG4rXHR1NjQgdW5tYXBwZWQ7XG4rXHRpbnQgcmM7XG4rXG4rXHR0aW1lcl9zdGFydChcdTAwMjZzdGFydCk7XG4rXHRyZWdpb24udmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCAtMSwgMCk7XG4rXHRwcmludGYoXCJDb21wbGV0ZWQgbW1hcCgpIGluICUuMmxmbXNcXG5cIiwgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xuK1xuK1x0LyogU2tpcCB0aGUgdGVzdCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIEh1Z2VUTEIgcGFnZXMgYXZhaWxhYmxlLiAqL1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBNQVBfSFVHRVRMQiBcdTAwMjZcdTAwMjYgcmVnaW9uLnZhZGRyID09IE1BUF9GQUlMRUQpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm1tYXAoKSBmYWlsZWQ6ICVzICglZClcXG5cIiwgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XG4rXHRlbHNlXG4rXHRcdEFTU0VSVF9ORShyZWdpb24udmFkZHIsIE1BUF9GQUlMRUQpO1xuK1xuK1x0cmVnaW9uLmlvdmEgPSBpb3ZhX2FsbG9jYXRvcl9hbGxvYyhzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yLCBzaXplKTtcbitcdHJlZ2lvbi5zaXplID0gc2l6ZTtcbitcbitcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbitcdGlvbW11X21hcChzZWxmLVx1MDAzZWlvbW11LCBcdTAwMjZyZWdpb24pO1xuK1x0cHJpbnRmKFwiTWFwcGVkIEhWQSAlcCAoc2l6ZSAlbHVHKSBhdCBJT1ZBIDB4JWx4IGluICUuMmxmbXNcXG5cIixcbitcdCAgICAgICByZWdpb24udmFkZHIsIHNpemUgLyBTWl8xRywgcmVnaW9uLmlvdmEsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbitcdEFTU0VSVF9FUShyZWdpb24uaW92YSwgdG9faW92YShzZWxmLVx1MDAzZWRldmljZSwgcmVnaW9uLnZhZGRyKSk7XG4rXG4rXHR0aW1lcl9zdGFydChcdTAwMjZzdGFydCk7XG4rXHRyYyA9IF9faW9tbXVfdW5tYXAoc2VsZi1cdTAwM2Vpb21tdSwgXHUwMDI2cmVnaW9uLCBcdTAwMjZ1bm1hcHBlZCk7XG4rXHRwcmludGYoXCJVbm1hcHBlZCBJT1ZBIDB4JWx4IGluICUuMmxmbXNcXG5cIiwgcmVnaW9uLmlvdmEsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbitcdEFTU0VSVF9FUShyYywgMCk7XG4rXHRBU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi5zaXplKTtcbitcbitcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbitcdEFTU0VSVF9UUlVFKCFtdW5tYXAocmVnaW9uLnZhZGRyLCBzaXplKSk7XG4rXHRwcmludGYoXCJDb21wbGV0ZWQgbXVubWFwKCkgaW4gJS4ybGZtc1xcblwiLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XG4rfVxuK1xuK0ZJWFRVUkUodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpIHtcbitcdHN0cnVjdCBpb21tdSAqaW9tbXU7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2U7XG4rXHRzdHJ1Y3QgaW92YV9hbGxvY2F0b3IgKmlvdmFfYWxsb2NhdG9yO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KSB7XG4rXHRjb25zdCBjaGFyICppb21tdV9tb2RlO1xuK1x0aW50IG1tYXBfZmxhZ3M7XG4rXHRpbnQgbWVtZmRfZmxhZ3M7XG4rfTtcbitcbisjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShfaW9tbXVfbW9kZSwgX25hbWUsIF9tbWFwX2ZsYWdzLCBfbWVtZmRfZmxhZ3MpIFxcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCwgX2lvbW11X21vZGUgIyMgXyAjIyBfbmFtZSkgeyAgICBcXFxuK1x0LmlvbW11X21vZGUgPSAjX2lvbW11X21vZGUsXHRcdFx0XHRcdFx0ICAgICAgXFxcbitcdC5tbWFwX2ZsYWdzID0gTUFQX1NIQVJFRCB8IChfbW1hcF9mbGFncyksXHRcdFx0XHQgICAgICBcXFxuK1x0Lm1lbWZkX2ZsYWdzID0gTUFQX1NIQVJFRCB8IChfbWVtZmRfZmxhZ3MpLFx0XHRcdFx0ICAgICAgXFxcbit9XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMobWVtZmQsIDAsIDApO1xuK0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKG1lbWZkX2h1Z2V0bGJfMm1iLFxuK1x0XHRcdFx0ICAgIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMk1CLFxuK1x0XHRcdFx0ICAgIE1GRF9IVUdFVExCIHwgTUZEX0hVR0VfMk1CKTtcbitGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhtZW1mZF9odWdldGxiXzFnYixcbitcdFx0XHRcdCAgICBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzFHQixcbitcdFx0XHRcdCAgICBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzFHQik7XG4rXG4rI3VuZGVmIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERVxuK1xuK0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpXG4re1xuK1x0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC1cdTAwM2Vpb21tdV9tb2RlKTtcbitcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4rXHRzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLVx1MDAzZWlvbW11KTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdClcbit7XG4rXHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IpO1xuK1x0dmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc2VsZi1cdTAwM2VkZXZpY2UpO1xuK1x0aW9tbXVfY2xlYW51cChzZWxmLVx1MDAzZWlvbW11KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgKnNldHVwX21lbWZkKGludCAqZmQsIHU2NCBzaXplLCBpbnQgbW1hcF9mbGFncywgaW50IG1mZF9mbGFncylcbit7XG4rXHR2b2lkICpidWYgPSBNQVBfRkFJTEVEO1xuK1x0c3RydWN0IHRpbWVzcGVjIHN0YXJ0O1xuK1xuK1x0dGltZXJfc3RhcnQoXHUwMDI2c3RhcnQpO1xuK1x0KmZkID0gbWVtZmRfY3JlYXRlKFwidmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3RcIiwgbWZkX2ZsYWdzKTtcbitcdHByaW50ZihcIkNvbXBsZXRlZCBtZW1mZF9jcmVhdGUoKSBpbiAlLjJsZm1zXFxuXCIsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbitcdGlmICgqZmQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gTUFQX0ZBSUxFRDtcbitcbitcdGlmIChmdHJ1bmNhdGUoKmZkLCBzaXplKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR0aW1lcl9zdGFydChcdTAwMjZzdGFydCk7XG4rXHRidWYgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIG1tYXBfZmxhZ3MsICpmZCwgMCk7XG4rXHRwcmludGYoXCJDb21wbGV0ZWQgbW1hcCgpIGZvciBtZW1mZCBpbiAlLjJsZm1zXFxuXCIsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbitcbitvdXQ6XG4rXHRpZiAoYnVmID09IE1BUF9GQUlMRUQpXG4rXHRcdGNsb3NlKCpmZCk7XG4rXG4rXHRyZXR1cm4gYnVmO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZWFyZG93bl9tZW1mZChpbnQgZmQsIHU2NCBzaXplLCB2b2lkICp2YWRkcilcbit7XG4rXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7XG4rXG4rXHRpZiAodmFkZHIgIT0gTUFQX0ZBSUxFRCkge1xuK1x0XHR0aW1lcl9zdGFydChcdTAwMjZzdGFydCk7XG4rXHRcdG11bm1hcCh2YWRkciwgc2l6ZSk7XG4rXHRcdHByaW50ZihcIkNvbXBsZXRlZCBtdW5tYXAoKSBpbiAlLjJsZm1zXFxuXCIsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbitcdH1cbitcbitcdGlmIChmZCAhPSAtMSkge1xuK1x0XHR0aW1lcl9zdGFydChcdTAwMjZzdGFydCk7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0cHJpbnRmKFwiQ29tcGxldGVkIGNsb3NlKCkgaW4gJS4ybGZtc1xcblwiLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XG4rXHR9XG4rfVxuK1xuK1RFU1RfRih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCwgZG1hX21hcF91bm1hcF9mcm9tX2ZpbGUpXG4re1xuK1x0Y29uc3QgdTY0IHNpemUgPSB0ZXN0X3BhcmFtcy5zaXplO1xuK1x0c3RydWN0IGRtYV9yZWdpb24gcmVnaW9uO1xuK1x0c3RydWN0IHRpbWVzcGVjIHN0YXJ0O1xuK1x0dTY0IHVubWFwcGVkO1xuK1x0aW50IHJjLCBmZDtcbitcbitcdHJlZ2lvbi52YWRkciA9IHNldHVwX21lbWZkKFx1MDAyNmZkLCBzaXplLFxuK1x0XHRcdFx0ICAgdmFyaWFudC1cdTAwM2VtbWFwX2ZsYWdzIHwgdGVzdF9wYXJhbXMubW1hcF9mbGFncyxcbitcdFx0XHRcdCAgIHZhcmlhbnQtXHUwMDNlbWVtZmRfZmxhZ3MpO1xuK1x0QVNTRVJUX05FKHJlZ2lvbi52YWRkciwgTUFQX0ZBSUxFRCk7XG4rXG4rXHRyZWdpb24uaW92YSA9IGlvdmFfYWxsb2NhdG9yX2FsbG9jKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IsIHNpemUpO1xuK1x0cmVnaW9uLnNpemUgPSBzaXplO1xuK1xuK1x0dGltZXJfc3RhcnQoXHUwMDI2c3RhcnQpO1xuK1x0aWYgKHN0cmNtcCh2YXJpYW50LVx1MDAzZWlvbW11X21vZGUsIE1PREVfSU9NTVVGRCkgPT0gMCkge1xuK1x0XHRpb21tdWZkX21hcF9maWxlKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbiwgZmQpO1xuK1x0fSBlbHNlIHtcbitcdFx0aW9tbXVfbWFwKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbik7XG4rXHR9XG4rXHRwcmludGYoXCJNYXBwZWQgSFZBICVwIChzaXplICVsdUcpIGF0IElPVkEgMHglbHggaW4gJS4ybGZtc1xcblwiLFxuK1x0ICAgICAgIHJlZ2lvbi52YWRkciwgc2l6ZSAvIFNaXzFHLCByZWdpb24uaW92YSwgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xuK1x0QVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24udmFkZHIpKTtcbitcbitcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbitcdHJjID0gX19pb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCBcdTAwMjZyZWdpb24sIFx1MDAyNnVubWFwcGVkKTtcbitcdHByaW50ZihcIlVubWFwcGVkIElPVkEgMHglbHggaW4gJS4ybGZtc1xcblwiLCByZWdpb24uaW92YSwgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xuK1x0QVNTRVJUX0VRKHJjLCAwKTtcbitcdEFTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLnNpemUpO1xuK1xuK1x0dGVhcmRvd25fbWVtZmQoZmQsIHNpemUsIHJlZ2lvbi52YWRkcik7XG4rfVxuK1xuKy8qXG4rICogUGFyc2VzIFwiWzAtOV0rW2ttZ3RdP1wiLlxuKyAqL1xuK3NpemVfdCBwYXJzZV9zaXplKGNvbnN0IGNoYXIgKnNpemUpXG4re1xuK1x0c2l6ZV90IGJhc2U7XG4rXHRjaGFyICpzY2FsZTtcbitcdGludCBzaGlmdCA9IDA7XG4rXG4rXHRWRklPX0FTU0VSVF9UUlVFKHNpemUgXHUwMDI2XHUwMDI2IGlzZGlnaXQoc2l6ZVswXSksXG4rXHRcdFx0IFwiTmVlZCBhdCBsZWFzdCBvbmUgZGlnaXQgaW4gJyVzJy5cIiwgc2l6ZSk7XG4rXG4rXHRiYXNlID0gc3RydG91bGwoc2l6ZSwgXHUwMDI2c2NhbGUsIDApO1xuK1xuK1x0VkZJT19BU1NFUlRfVFJVRShiYXNlICE9IFVMTE9OR19NQVgsIFwiT3ZlcmZsb3cgcGFyc2luZyBzaXplIVwiKTtcbitcbitcdHN3aXRjaCAodG9sb3dlcigqc2NhbGUpKSB7XG4rXHRjYXNlICd0JzpcbitcdFx0c2hpZnQgPSA0MDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlICdnJzpcbitcdFx0c2hpZnQgPSAzMDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlICdtJzpcbitcdFx0c2hpZnQgPSAyMDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlICdrJzpcbitcdFx0c2hpZnQgPSAxMDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlICdiJzpcbitcdGNhc2UgJ1xcMCc6XG4rXHRcdHNoaWZ0ID0gMDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRWRklPX0ZBSUwoXCJVbmtub3duIHNpemUgbGV0dGVyICclYycuXCIsICpzY2FsZSk7XG4rXHR9XG4rXG4rXHRWRklPX0FTU0VSVF9UUlVFKChiYXNlIFx1MDAzY1x1MDAzYyBzaGlmdCkgXHUwMDNlXHUwMDNlIHNoaWZ0ID09IGJhc2UsXG4rXHRcdFx0IFwiT3ZlcmZsb3cgc2NhbGluZyBzaXplIVwiKTtcbitcbitcdHJldHVybiBiYXNlIFx1MDAzY1x1MDAzYyBzaGlmdDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaGVscChjaGFyICpuYW1lKVxuK3tcbitcdHB1dHMoXCJcIik7XG4rXHRwcmludGYoXCJ1c2FnZTogJXMgWy1ofC1wXSBbLWIgYnl0ZXNdIFstYSBcXFwidGVzdCBoYXJuZXNzIGFyZ3NcXFwiXVxcblwiLCBuYW1lKTtcbitcdHB1dHMoXCJcIik7XG4rXHRwcmludGYoXCIgLWg6IERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UuXFxuXCJcbitcdCAgICAgICBcIiAtYjogU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgRE1BIHJlZ2lvbiB0byBiZSBtYXBwZWRcXG5cIlxuK1x0ICAgICAgIFwiICAgICBhbmQgdW5tYXBwZWQuIGUuZy4gMTZNIG9yIDhHLCAoZGVmYXVsdDogMUcpXFxuXCJcbitcdCAgICAgICBcIiAtcDogQXBwZW5kICdNQVBfUE9QVUxBVEUnIHRvIHRoZSBtbWFwKCkgZmxhZ3MgdG8gYXZvaWRcXG5cIlxuK1x0ICAgICAgIFwiICAgICBwcmVmYXVsdGluZyB3aGlsZSBtYXBwaW5nIERNQSByZWdpb25zLiBJbnN0ZWFkLCBhbnlcXG5cIlxuK1x0ICAgICAgIFwiICAgICBhbmQgYWxsIHByZWZhdWx0aW5nIG5lZWRlZCB3aWxsIGhhcHBlbiBkdXJpbmcgdGhlXFxuXCJcbitcdCAgICAgICBcIiAgICAgbW1hcCgpIGNhbGwuIFRoaXMgd2lsbCBtYWtlIG1hcHBpbmcgRE1BIHJlZ2lvbnNcXG5cIlxuK1x0ICAgICAgIFwiICAgICBtb3JlIGNvbnNpc3RlbnQuXFxuXCJcbitcdCAgICAgICBcIiAtYTogQXJncyB0aGF0IGFyZSBmb3J3YXJkZWQgdG8gdGhlIHRlc3QgaGFybmVzcyxcXG5cIlxuK1x0ICAgICAgIFwiICAgICBlLmcuIC1hIFxcXCItdCBkbWFfbWFwX3VubWFwX2Zyb21fZmlsZVxcXCJcXG5cIik7XG4rfVxuK1xuK3N0cnVjdCBoYXJuZXNzX2FyZ3Ncbit7XG4rXHRpbnQgYXJnYztcbitcdGNoYXIgKiphcmd2O1xuK1x0d29yZGV4cF90IGV4cDtcbit9O1xuK1xuK3N0YXRpYyB2b2lkIHBvcHVsYXRlX2hhcm5lc3NfYXJncyhzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzLCBjb25zdCBjaGFyICphcmd2XzAsXG4rXHRcdFx0XHQgIGNvbnN0IGNoYXIgKmNtZGxuZSlcbit7XG4rXHRpZiAod29yZGV4cChhcmd2XzAsIFx1MDAyNmFyZ3MtXHUwMDNlZXhwLCBXUkRFX05PQ01EKSA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHdvcmRleHAoY21kbG5lLCBcdTAwMjZhcmdzLVx1MDAzZWV4cCwgV1JERV9BUFBFTkQgfCBXUkRFX05PQ01EKSA9PSAwKSB7XG4rXHRcdGFyZ3MtXHUwMDNlYXJnYyA9IGFyZ3MtXHUwMDNlZXhwLndlX3dvcmRjO1xuK1x0XHRhcmdzLVx1MDAzZWFyZ3YgPSBhcmdzLVx1MDAzZWV4cC53ZV93b3JkdjtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0dXBfdGVzdChzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzLCBpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK3tcbitcdGludCBvcHQ7XG4rXG4rXHR0ZXN0X3BhcmFtcyA9IChzdHJ1Y3QgdGVzdF9wYXJhbXMpIHtcbitcdFx0LnNpemUgPSBTWl8xRyxcbitcdFx0Lm1tYXBfZmxhZ3MgPSAwLFxuK1x0fTtcbitcbitcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwiYTpiOnBoXCIpKSAhPSAtMSkge1xuK1x0XHRzd2l0Y2ggKG9wdCkge1xuK1x0XHRjYXNlICdhJzpcbitcdFx0XHRwb3B1bGF0ZV9oYXJuZXNzX2FyZ3MoYXJncywgYXJndlswXSwgb3B0YXJnKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnYic6XG4rXHRcdFx0dGVzdF9wYXJhbXMuc2l6ZSA9IHBhcnNlX3NpemUob3B0YXJnKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAncCc6XG4rXHRcdFx0dGVzdF9wYXJhbXMubW1hcF9mbGFncyA9IE1BUF9QT1BVTEFURTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnaCc6XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0aGVscChhcmd2WzBdKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0fVxuK1xuK291dDpcbitcdC8vIFJlc2V0IGdldG9wdCgpIHN0YXRlIHRvIGFsbG93IHRoZSB0ZXN0IGhhcm5lc3MgdG8gdXNlIGl0LlxuK1x0b3B0aW5kID0gMTsgXG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlYXJkb3duX3Rlc3Qoc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncylcbit7XG4rXHRpZiAoYXJncy1cdTAwM2Vhcmd2KSB7XG4rXHRcdGFyZ3MtXHUwMDNlYXJnYyA9IDA7XG4rXHRcdGFyZ3MtXHUwMDNlYXJndiA9IE5VTEw7XG4rXHRcdHdvcmRmcmVlKFx1MDAyNmFyZ3MtXHUwMDNlZXhwKTtcbitcdH1cbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRzdHJ1Y3QgaGFybmVzc19hcmdzIGFyZ3MgPSAoc3RydWN0IGhhcm5lc3NfYXJncykge1xuK1x0XHQuYXJnYyA9IDAsXG4rXHRcdC5hcmd2ID0gTlVMTCxcbitcdH07XG4rXHRpbnQgcjtcbitcbitcdHNldHVwX3Rlc3QoXHUwMDI2YXJncywgYXJnYywgYXJndik7XG4rXHRkZXZpY2VfYmRmID0gdmZpb19zZWxmdGVzdHNfZ2V0X2JkZihcdTAwMjZhcmdjLCBhcmd2KTtcbitcdHIgPSB0ZXN0X2hhcm5lc3NfcnVuKGFyZ3MuYXJnYywgYXJncy5hcmd2KTtcbitcdHRlYXJkb3duX3Rlc3QoXHUwMDI2YXJncyk7XG4rXG4rXHRyZXR1cm4gcjtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjozNzo0NS41MjU0MjA5MzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzExNDIwNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIG5ldyBzZWxmdGVzdCwgYHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0YCwgYW5kIHR3ZWFrcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY2AgdG8gaW5jbHVkZSBgX19pb21tdWZkX21hcF9maWxlYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBzdHJpY3RseSBjb250YWluZWQgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gIGRpcmVjdG9yeS4gTm8gY29yZSBrZXJuZWwgY29kZSwgbm8gZHJpdmVyIG1vZGlmaWNhdGlvbnMsIGFuZCBjZXJ0YWlubHkgbm90aGluZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIEl0J3MganVzdCBhZGRpbmcgYSB0ZXN0LCBhbmQgdGhhdCdzIHRoZSBvbmx5IHNjb3BlLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gd2l0aCBhIGRpZmYgY2hlY2sgb2YgdGhlIGNoYW5nZWQgZmlsZXM6IGBNYWtlZmlsZWAsIGFuIGluY2x1ZGUgZmlsZSwgdGhlIG1vZGlmaWVkIEMgZmlsZSwgYW5kIHRoZSBuZXcgdGVzdC4gWWVwLCBhbGwgdW5kZXIgdGhlIGB2ZmlvYCBzZWxmdGVzdCBkaXJlY3RvcnkuXG5cbkdpdmVuIHRoaXMsIHRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYgdGhhdCBhcmUgYXBwcm9wcmlhdGUgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGF0dGFjayBzdXJmYWNlcyBpbiB0aGUga2VybmVsJ3MgY29yZSBsb2dpYy4gVGhlIGZ1enppbmcgZWZmb3J0cyBhcmUgdGFyZ2V0ZWQgdG93YXJkcyB0aGUga2VybmVsIGFuZCBpdHMgaW50ZXJmYWNlcyBhbmQgbm90IHRoZSB0ZXN0IHN1aXRlcy5cblxuQWxyaWdodCwgdGltZSB0byBldmFsdWF0ZSB0aGlzIGFnYWluc3QgdGhlIFwiV29ydGhGdXp6aW5nXCIgZ3VpZGVsaW5lcy4gVGhleSBzcGVjaWZpY2FsbHkgbWVudGlvbiBtb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBsb2dnaW5nLCBjb25zdGFudHMsIGFuZCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiBXaGlsZSBzZWxmdGVzdHMgYXJlbid0IGV4cGxpY2l0bHkgbWVudGlvbmVkLCB0aGV5IGFyZSBub3Qga2VybmVsIGNvZGU7IHRoZXkncmUgdXNlcnNwYWNlIHRvb2xzIHVzZWQgdG8gdGVzdCB0aGUga2VybmVsLiBGdXp6aW5nIHRoZSBrZXJuZWwgYmFzZWQgb24gY2hhbmdlcyAqd2l0aGluKiB0aGUgc2VsZnRlc3RzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUuIFdlIGZ1enogdGhlIGtlcm5lbC5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gTXkgcmVhc29uaW5nIGlzIGNvbmNpc2U6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBzZWxmdGVzdCBhbmQgbW9kaWZpZXMgc2VsZnRlc3QgbGlicmFyeSBjb2RlLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYuXCJcblxuXG4iLCJJbnB1dFRva2VucyI6NzIzOCwiT3V0cHV0VG9rZW5zIjo1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjM3OjUyLjIzNjg0MzI2M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHNlbGZ0ZXN0IGFuZCBtb2RpZmllcyBzZWxmdGVzdCBsaWJyYXJ5IGNvZGUuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBzZWxmdGVzdCBhbmQgbW9kaWZpZXMgc2VsZnRlc3QgbGlicmFyeSBjb2RlLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow9pjwd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 02:26:34 +0000 UTC FinishedAt: 2026-07-02 02:37:54 +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+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBzZWxmdGVzdCBhbmQgbW9kaWZpZXMgc2VsZnRlc3QgbGlicmFyeSBjb2RlLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTVmYmNhZjQxYmU5ZjAxNTI5YmE2ODc2NTJlNTQ4MTUzNzBkYmM5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDI6Mzc6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcbmluZGV4IGU2ZThjYjUyYWIwMzAxLi45ZjYyMGM1ZWY2YWI5MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcbkBAIC04LDYgJiM0Mzs4LDcgQEAgZWxzZVxuIENGTEFHUyA9ICQoS0hEUl9JTkNMVURFUylcbiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdmZpb19kbWFfbWFwcGluZ190ZXN0XG4gVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHZmaW9fZG1hX21hcHBpbmdfbW1pb190ZXN0XG4mIzQzO1RFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdFxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX2lvbW11ZmRfc2V0dXBfdGVzdFxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX3BjaV9kZXZpY2VfdGVzdFxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX3BjaV9kZXZpY2VfaW5pdF9wZXJmX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXG5pbmRleCBlOWEzMzg2YTQ3MTkzYS4uZWVlZjU5OTAyOTJjZmIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcbkBAIC0zNSw2ICYjNDM7MzUsMTMgQEAgc3RydWN0IGlvbW11IHtcbiBzdHJ1Y3QgaW9tbXUgKmlvbW11X2luaXQoY29uc3QgY2hhciAqaW9tbXVfbW9kZSk7XG4gdm9pZCBpb21tdV9jbGVhbnVwKHN0cnVjdCBpb21tdSAqaW9tbXUpO1xuIFxuJiM0MztpbnQgX19pb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpXG4mIzQzO3tcbiYjNDM7XHRWRklPX0FTU0VSVF9FUShfX2lvbW11ZmRfbWFwX2ZpbGUoaW9tbXUsIHJlZ2lvbiwgZmQpLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgX19pb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGlvbW11X21hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG5pbmRleCAwMzVkYWMwNjlkNjAxNi4uNjczMGIzOTA2MGNhMTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG5AQCAtOTcsNiAmIzQzOzk3LDMwIEBAIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcilcbiBcdHJldHVybiBpb3ZhO1xuIH1cbiBcbiYjNDM7aW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpXG4mIzQzO3tcbiYjNDM7XHRWRklPX0FTU0VSVF9UUlVFKGlvbW11LVx1MDAzZWlvbW11ZmQsIFwmIzM0O0lPTU1VX0lPQVNfTUFQX0ZJTEUgaXMgYW4gSU9NTVVGRCBJT0NUTC5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgaW9tbXVfaW9hc19tYXBfZmlsZSBhcmdzID0ge1xuJiM0MztcdFx0LnNpemUgPSBzaXplb2YoYXJncyksXG4mIzQzO1x0XHQuZmxhZ3MgPSBJT01NVV9JT0FTX01BUF9SRUFEQUJMRSB8XG4mIzQzO1x0XHRcdElPTU1VX0lPQVNfTUFQX1dSSVRFQUJMRSB8XG4mIzQzO1x0XHRcdElPTU1VX0lPQVNfTUFQX0ZJWEVEX0lPVkEsXG4mIzQzO1x0XHQuaW9hc19pZCA9IGlvbW11LVx1MDAzZWlvYXNfaWQsXG4mIzQzO1x0XHQuZmQgPSBmZCxcbiYjNDM7XHRcdC5zdGFydCA9IDAsXG4mIzQzO1x0XHQuaW92YSA9IHJlZ2lvbi1cdTAwM2Vpb3ZhLFxuJiM0MztcdFx0Lmxlbmd0aCA9IHJlZ2lvbi1cdTAwM2VzaXplLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGlmIChpb2N0bChpb21tdS1cdTAwM2Vpb21tdWZkLCBJT01NVV9JT0FTX01BUF9GSUxFLCBcdTAwMjZhcmdzKSlcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdGxpc3RfYWRkKFx1MDAyNnJlZ2lvbi1cdTAwM2VsaW5rLCBcdTAwMjZpb21tdS1cdTAwM2VkbWFfcmVnaW9ucyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdmZpb19pb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcbiB7XG4gXHRzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfbWFwIGFyZ3MgPSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgwMzJmNTFjMWEzZTViXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0LmNcbkBAIC0wLDAgJiM0MzsxLDM4MCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjd29yZGV4cC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdWZkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtZmQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC92ZmlvLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpYnZmaW8uaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmRldmljZV9iZGY7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgdGVzdF9wYXJhbXMge1xuJiM0MztcdHU2NCBzaXplO1xuJiM0MztcdGludCBtbWFwX2ZsYWdzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHRlc3RfcGFyYW1zIHRlc3RfcGFyYW1zO1xuJiM0MztcbiYjNDM7c3RydWN0IGlvbW11X21hcHBpbmcge1xuJiM0MztcdHU2NCBwZ2Q7XG4mIzQzO1x0dTY0IHA0ZDtcbiYjNDM7XHR1NjQgcHVkO1xuJiM0MztcdHU2NCBwbWQ7XG4mIzQzO1x0dTY0IHB0ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRpbWVyX3N0YXJ0KHN0cnVjdCB0aW1lc3BlYyAqc3RhcnQpIHtcbiYjNDM7XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgc3RhcnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgZG91YmxlIHRpbWVyX2VsYXBzZWRfbXMoc3RydWN0IHRpbWVzcGVjIHN0YXJ0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjIGVuZDtcbiYjNDM7XG4mIzQzO1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNmVuZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAoZG91YmxlKShlbmQudHZfc2VjIC0gc3RhcnQudHZfc2VjKSAqIE1TRUNfUEVSX1NFQyAmIzQzO1xuJiM0MztcdCAgICAgICAoZG91YmxlKShlbmQudHZfbnNlYyAtIHN0YXJ0LnR2X25zZWMpIC8gTlNFQ19QRVJfTVNFQztcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRSh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCkge1xuJiM0MztcdHN0cnVjdCBpb21tdSAqaW9tbXU7XG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlO1xuJiM0MztcdHN0cnVjdCBpb3ZhX2FsbG9jYXRvciAqaW92YV9hbGxvY2F0b3I7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlQodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpIHtcbiYjNDM7XHRjb25zdCBjaGFyICppb21tdV9tb2RlO1xuJiM0MztcdGludCBtbWFwX2ZsYWdzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoX2lvbW11X21vZGUsIF9uYW1lLCBfbW1hcF9mbGFncylcdCAgICAgICBcXFxuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0LCBfaW9tbXVfbW9kZSAjIyBfICMjIF9uYW1lKSB7ICAgXFxcbiYjNDM7XHQuaW9tbXVfbW9kZSA9ICNfaW9tbXVfbW9kZSxcdFx0XHRcdFx0ICAgICAgIFxcXG4mIzQzO1x0Lm1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCAoX21tYXBfZmxhZ3MpLFx0ICAgICAgIFxcXG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91cywgMCk7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91c19odWdldGxiXzJtYiwgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIpO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8xZ2IsIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMUdCKTtcbiYjNDM7XG4mIzQzOyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREVcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2YXJpYW50LVx1MDAzZWlvbW11X21vZGUpO1xuJiM0MztcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4mIzQzO1x0c2VsZi1cdTAwM2Vpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi1cdTAwM2Vpb21tdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IpO1xuJiM0MztcdHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHNlbGYtXHUwMDNlZGV2aWNlKTtcbiYjNDM7XHRpb21tdV9jbGVhbnVwKHNlbGYtXHUwMDNlaW9tbXUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIGRtYV9tYXBfdW5tYXApXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1NjQgc2l6ZSA9IHRlc3RfcGFyYW1zLnNpemU7XG4mIzQzO1x0Y29uc3QgaW50IGZsYWdzID0gdmFyaWFudC1cdTAwM2VtbWFwX2ZsYWdzIHwgdGVzdF9wYXJhbXMubW1hcF9mbGFncztcbiYjNDM7XHRzdHJ1Y3QgZG1hX3JlZ2lvbiByZWdpb247XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjIHN0YXJ0O1xuJiM0MztcdHU2NCB1bm1hcHBlZDtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbiYjNDM7XHRyZWdpb24udmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCAtMSwgMCk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O0NvbXBsZXRlZCBtbWFwKCkgaW4gJS4ybGZtc1xcblwmIzM0OywgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xuJiM0MztcbiYjNDM7XHQvKiBTa2lwIHRoZSB0ZXN0IGlmIHRoZXJlIGFyZW4mIzM5O3QgZW5vdWdoIEh1Z2VUTEIgcGFnZXMgYXZhaWxhYmxlLiAqL1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgTUFQX0hVR0VUTEIgXHUwMDI2XHUwMDI2IHJlZ2lvbi52YWRkciA9PSBNQVBfRkFJTEVEKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O21tYXAoKSBmYWlsZWQ6ICVzICglZClcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSwgZXJybm8pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdEFTU0VSVF9ORShyZWdpb24udmFkZHIsIE1BUF9GQUlMRUQpO1xuJiM0MztcbiYjNDM7XHRyZWdpb24uaW92YSA9IGlvdmFfYWxsb2NhdG9yX2FsbG9jKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IsIHNpemUpO1xuJiM0MztcdHJlZ2lvbi5zaXplID0gc2l6ZTtcbiYjNDM7XG4mIzQzO1x0dGltZXJfc3RhcnQoXHUwMDI2c3RhcnQpO1xuJiM0MztcdGlvbW11X21hcChzZWxmLVx1MDAzZWlvbW11LCBcdTAwMjZyZWdpb24pO1xuJiM0MztcdHByaW50ZihcJiMzNDtNYXBwZWQgSFZBICVwIChzaXplICVsdUcpIGF0IElPVkEgMHglbHggaW4gJS4ybGZtc1xcblwmIzM0OyxcbiYjNDM7XHQgICAgICAgcmVnaW9uLnZhZGRyLCBzaXplIC8gU1pfMUcsIHJlZ2lvbi5pb3ZhLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XG4mIzQzO1x0QVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24udmFkZHIpKTtcbiYjNDM7XG4mIzQzO1x0dGltZXJfc3RhcnQoXHUwMDI2c3RhcnQpO1xuJiM0MztcdHJjID0gX19pb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCBcdTAwMjZyZWdpb24sIFx1MDAyNnVubWFwcGVkKTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7VW5tYXBwZWQgSU9WQSAweCVseCBpbiAlLjJsZm1zXFxuXCYjMzQ7LCByZWdpb24uaW92YSwgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xuJiM0MztcdEFTU0VSVF9FUShyYywgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKHVubWFwcGVkLCByZWdpb24uc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbiYjNDM7XHRBU1NFUlRfVFJVRSghbXVubWFwKHJlZ2lvbi52YWRkciwgc2l6ZSkpO1xuJiM0MztcdHByaW50ZihcJiMzNDtDb21wbGV0ZWQgbXVubWFwKCkgaW4gJS4ybGZtc1xcblwmIzM0OywgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KSB7XG4mIzQzO1x0c3RydWN0IGlvbW11ICppb21tdTtcbiYjNDM7XHRzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2U7XG4mIzQzO1x0c3RydWN0IGlvdmFfYWxsb2NhdG9yICppb3ZhX2FsbG9jYXRvcjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCkge1xuJiM0MztcdGNvbnN0IGNoYXIgKmlvbW11X21vZGU7XG4mIzQzO1x0aW50IG1tYXBfZmxhZ3M7XG4mIzQzO1x0aW50IG1lbWZkX2ZsYWdzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoX2lvbW11X21vZGUsIF9uYW1lLCBfbW1hcF9mbGFncywgX21lbWZkX2ZsYWdzKSBcXFxuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0LCBfaW9tbXVfbW9kZSAjIyBfICMjIF9uYW1lKSB7ICAgIFxcXG4mIzQzO1x0LmlvbW11X21vZGUgPSAjX2lvbW11X21vZGUsXHRcdFx0XHRcdFx0ICAgICAgXFxcbiYjNDM7XHQubW1hcF9mbGFncyA9IE1BUF9TSEFSRUQgfCAoX21tYXBfZmxhZ3MpLFx0XHRcdFx0ICAgICAgXFxcbiYjNDM7XHQubWVtZmRfZmxhZ3MgPSBNQVBfU0hBUkVEIHwgKF9tZW1mZF9mbGFncyksXHRcdFx0XHQgICAgICBcXFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhtZW1mZCwgMCwgMCk7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKG1lbWZkX2h1Z2V0bGJfMm1iLFxuJiM0MztcdFx0XHRcdCAgICBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzJNQixcbiYjNDM7XHRcdFx0XHQgICAgTUZEX0hVR0VUTEIgfCBNRkRfSFVHRV8yTUIpO1xuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhtZW1mZF9odWdldGxiXzFnYixcbiYjNDM7XHRcdFx0XHQgICAgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8xR0IsXG4mIzQzO1x0XHRcdFx0ICAgIE1GRF9IVUdFVExCIHwgTUZEX0hVR0VfMUdCKTtcbiYjNDM7XG4mIzQzOyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREVcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2YXJpYW50LVx1MDAzZWlvbW11X21vZGUpO1xuJiM0MztcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4mIzQzO1x0c2VsZi1cdTAwM2Vpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi1cdTAwM2Vpb21tdSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpXG4mIzQzO3tcbiYjNDM7XHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IpO1xuJiM0MztcdHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHNlbGYtXHUwMDNlZGV2aWNlKTtcbiYjNDM7XHRpb21tdV9jbGVhbnVwKHNlbGYtXHUwMDNlaW9tbXUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqc2V0dXBfbWVtZmQoaW50ICpmZCwgdTY0IHNpemUsIGludCBtbWFwX2ZsYWdzLCBpbnQgbWZkX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqYnVmID0gTUFQX0ZBSUxFRDtcbiYjNDM7XHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7XG4mIzQzO1xuJiM0MztcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbiYjNDM7XHQqZmQgPSBtZW1mZF9jcmVhdGUoXCYjMzQ7dmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3RcJiMzNDssIG1mZF9mbGFncyk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O0NvbXBsZXRlZCBtZW1mZF9jcmVhdGUoKSBpbiAlLjJsZm1zXFxuXCYjMzQ7LCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XG4mIzQzO1x0aWYgKCpmZCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gTUFQX0ZBSUxFRDtcbiYjNDM7XG4mIzQzO1x0aWYgKGZ0cnVuY2F0ZSgqZmQsIHNpemUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbiYjNDM7XHRidWYgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIG1tYXBfZmxhZ3MsICpmZCwgMCk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O0NvbXBsZXRlZCBtbWFwKCkgZm9yIG1lbWZkIGluICUuMmxmbXNcXG5cJiMzNDssIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAoYnVmID09IE1BUF9GQUlMRUQpXG4mIzQzO1x0XHRjbG9zZSgqZmQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYnVmO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZWFyZG93bl9tZW1mZChpbnQgZmQsIHU2NCBzaXplLCB2b2lkICp2YWRkcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYyBzdGFydDtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhZGRyICE9IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbiYjNDM7XHRcdG11bm1hcCh2YWRkciwgc2l6ZSk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7Q29tcGxldGVkIG11bm1hcCgpIGluICUuMmxmbXNcXG5cJiMzNDssIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChmZCAhPSAtMSkge1xuJiM0MztcdFx0dGltZXJfc3RhcnQoXHUwMDI2c3RhcnQpO1xuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O0NvbXBsZXRlZCBjbG9zZSgpIGluICUuMmxmbXNcXG5cJiMzNDssIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCwgZG1hX21hcF91bm1hcF9mcm9tX2ZpbGUpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1NjQgc2l6ZSA9IHRlc3RfcGFyYW1zLnNpemU7XG4mIzQzO1x0c3RydWN0IGRtYV9yZWdpb24gcmVnaW9uO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYyBzdGFydDtcbiYjNDM7XHR1NjQgdW5tYXBwZWQ7XG4mIzQzO1x0aW50IHJjLCBmZDtcbiYjNDM7XG4mIzQzO1x0cmVnaW9uLnZhZGRyID0gc2V0dXBfbWVtZmQoXHUwMDI2ZmQsIHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgdmFyaWFudC1cdTAwM2VtbWFwX2ZsYWdzIHwgdGVzdF9wYXJhbXMubW1hcF9mbGFncyxcbiYjNDM7XHRcdFx0XHQgICB2YXJpYW50LVx1MDAzZW1lbWZkX2ZsYWdzKTtcbiYjNDM7XHRBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTtcbiYjNDM7XG4mIzQzO1x0cmVnaW9uLmlvdmEgPSBpb3ZhX2FsbG9jYXRvcl9hbGxvYyhzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yLCBzaXplKTtcbiYjNDM7XHRyZWdpb24uc2l6ZSA9IHNpemU7XG4mIzQzO1xuJiM0MztcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbiYjNDM7XHRpZiAoc3RyY21wKHZhcmlhbnQtXHUwMDNlaW9tbXVfbW9kZSwgTU9ERV9JT01NVUZEKSA9PSAwKSB7XG4mIzQzO1x0XHRpb21tdWZkX21hcF9maWxlKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbiwgZmQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpb21tdV9tYXAoc2VsZi1cdTAwM2Vpb21tdSwgXHUwMDI2cmVnaW9uKTtcbiYjNDM7XHR9XG4mIzQzO1x0cHJpbnRmKFwmIzM0O01hcHBlZCBIVkEgJXAgKHNpemUgJWx1RykgYXQgSU9WQSAweCVseCBpbiAlLjJsZm1zXFxuXCYjMzQ7LFxuJiM0MztcdCAgICAgICByZWdpb24udmFkZHIsIHNpemUgLyBTWl8xRywgcmVnaW9uLmlvdmEsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbiYjNDM7XHRBU1NFUlRfRVEocmVnaW9uLmlvdmEsIHRvX2lvdmEoc2VsZi1cdTAwM2VkZXZpY2UsIHJlZ2lvbi52YWRkcikpO1xuJiM0MztcbiYjNDM7XHR0aW1lcl9zdGFydChcdTAwMjZzdGFydCk7XG4mIzQzO1x0cmMgPSBfX2lvbW11X3VubWFwKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbiwgXHUwMDI2dW5tYXBwZWQpO1xuJiM0MztcdHByaW50ZihcJiMzNDtVbm1hcHBlZCBJT1ZBIDB4JWx4IGluICUuMmxmbXNcXG5cJiMzNDssIHJlZ2lvbi5pb3ZhLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XG4mIzQzO1x0QVNTRVJUX0VRKHJjLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi5zaXplKTtcbiYjNDM7XG4mIzQzO1x0dGVhcmRvd25fbWVtZmQoZmQsIHNpemUsIHJlZ2lvbi52YWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFBhcnNlcyBcJiMzNDtbMC05XSYjNDM7W2ttZ3RdP1wmIzM0Oy5cbiYjNDM7ICovXG4mIzQzO3NpemVfdCBwYXJzZV9zaXplKGNvbnN0IGNoYXIgKnNpemUpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgYmFzZTtcbiYjNDM7XHRjaGFyICpzY2FsZTtcbiYjNDM7XHRpbnQgc2hpZnQgPSAwO1xuJiM0MztcbiYjNDM7XHRWRklPX0FTU0VSVF9UUlVFKHNpemUgXHUwMDI2XHUwMDI2IGlzZGlnaXQoc2l6ZVswXSksXG4mIzQzO1x0XHRcdCBcJiMzNDtOZWVkIGF0IGxlYXN0IG9uZSBkaWdpdCBpbiAmIzM5OyVzJiMzOTsuXCYjMzQ7LCBzaXplKTtcbiYjNDM7XG4mIzQzO1x0YmFzZSA9IHN0cnRvdWxsKHNpemUsIFx1MDAyNnNjYWxlLCAwKTtcbiYjNDM7XG4mIzQzO1x0VkZJT19BU1NFUlRfVFJVRShiYXNlICE9IFVMTE9OR19NQVgsIFwmIzM0O092ZXJmbG93IHBhcnNpbmcgc2l6ZSFcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHRvbG93ZXIoKnNjYWxlKSkge1xuJiM0MztcdGNhc2UgJiMzOTt0JiMzOTs6XG4mIzQzO1x0XHRzaGlmdCA9IDQwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAmIzM5O2cmIzM5OzpcbiYjNDM7XHRcdHNoaWZ0ID0gMzA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlICYjMzk7bSYjMzk7OlxuJiM0MztcdFx0c2hpZnQgPSAyMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgJiMzOTtrJiMzOTs6XG4mIzQzO1x0XHRzaGlmdCA9IDEwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAmIzM5O2ImIzM5OzpcbiYjNDM7XHRjYXNlICYjMzk7XFwwJiMzOTs6XG4mIzQzO1x0XHRzaGlmdCA9IDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0VkZJT19GQUlMKFwmIzM0O1Vua25vd24gc2l6ZSBsZXR0ZXIgJiMzOTslYyYjMzk7LlwmIzM0OywgKnNjYWxlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdFZGSU9fQVNTRVJUX1RSVUUoKGJhc2UgXHUwMDNjXHUwMDNjIHNoaWZ0KSBcdTAwM2VcdTAwM2Ugc2hpZnQgPT0gYmFzZSxcbiYjNDM7XHRcdFx0IFwmIzM0O092ZXJmbG93IHNjYWxpbmcgc2l6ZSFcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYmFzZSBcdTAwM2NcdTAwM2Mgc2hpZnQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGhlbHAoY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHB1dHMoXCYjMzQ7XCYjMzQ7KTtcbiYjNDM7XHRwcmludGYoXCYjMzQ7dXNhZ2U6ICVzIFstaHwtcF0gWy1iIGJ5dGVzXSBbLWEgXFxcJiMzNDt0ZXN0IGhhcm5lc3MgYXJnc1xcXCYjMzQ7XVxcblwmIzM0OywgbmFtZSk7XG4mIzQzO1x0cHV0cyhcJiMzNDtcJiMzNDspO1xuJiM0MztcdHByaW50ZihcJiMzNDsgLWg6IERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UuXFxuXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0OyAtYjogU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgRE1BIHJlZ2lvbiB0byBiZSBtYXBwZWRcXG5cJiMzNDtcbiYjNDM7XHQgICAgICAgXCYjMzQ7ICAgICBhbmQgdW5tYXBwZWQuIGUuZy4gMTZNIG9yIDhHLCAoZGVmYXVsdDogMUcpXFxuXCYjMzQ7XG4mIzQzO1x0ICAgICAgIFwmIzM0OyAtcDogQXBwZW5kICYjMzk7TUFQX1BPUFVMQVRFJiMzOTsgdG8gdGhlIG1tYXAoKSBmbGFncyB0byBhdm9pZFxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgIHByZWZhdWx0aW5nIHdoaWxlIG1hcHBpbmcgRE1BIHJlZ2lvbnMuIEluc3RlYWQsIGFueVxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgIGFuZCBhbGwgcHJlZmF1bHRpbmcgbmVlZGVkIHdpbGwgaGFwcGVuIGR1cmluZyB0aGVcXG5cJiMzNDtcbiYjNDM7XHQgICAgICAgXCYjMzQ7ICAgICBtbWFwKCkgY2FsbC4gVGhpcyB3aWxsIG1ha2UgbWFwcGluZyBETUEgcmVnaW9uc1xcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgIG1vcmUgY29uc2lzdGVudC5cXG5cJiMzNDtcbiYjNDM7XHQgICAgICAgXCYjMzQ7IC1hOiBBcmdzIHRoYXQgYXJlIGZvcndhcmRlZCB0byB0aGUgdGVzdCBoYXJuZXNzLFxcblwmIzM0O1xuJiM0MztcdCAgICAgICBcJiMzNDsgICAgIGUuZy4gLWEgXFxcJiMzNDstdCBkbWFfbWFwX3VubWFwX2Zyb21fZmlsZVxcXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IGhhcm5lc3NfYXJnc1xuJiM0Mzt7XG4mIzQzO1x0aW50IGFyZ2M7XG4mIzQzO1x0Y2hhciAqKmFyZ3Y7XG4mIzQzO1x0d29yZGV4cF90IGV4cDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBvcHVsYXRlX2hhcm5lc3NfYXJncyhzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzLCBjb25zdCBjaGFyICphcmd2XzAsXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBjaGFyICpjbWRsbmUpXG4mIzQzO3tcbiYjNDM7XHRpZiAod29yZGV4cChhcmd2XzAsIFx1MDAyNmFyZ3MtXHUwMDNlZXhwLCBXUkRFX05PQ01EKSA9PSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB3b3JkZXhwKGNtZGxuZSwgXHUwMDI2YXJncy1cdTAwM2VleHAsIFdSREVfQVBQRU5EIHwgV1JERV9OT0NNRCkgPT0gMCkge1xuJiM0MztcdFx0YXJncy1cdTAwM2VhcmdjID0gYXJncy1cdTAwM2VleHAud2Vfd29yZGM7XG4mIzQzO1x0XHRhcmdzLVx1MDAzZWFyZ3YgPSBhcmdzLVx1MDAzZWV4cC53ZV93b3JkdjtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwX3Rlc3Qoc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiYjNDM7e1xuJiM0MztcdGludCBvcHQ7XG4mIzQzO1xuJiM0MztcdHRlc3RfcGFyYW1zID0gKHN0cnVjdCB0ZXN0X3BhcmFtcykge1xuJiM0MztcdFx0LnNpemUgPSBTWl8xRyxcbiYjNDM7XHRcdC5tbWFwX2ZsYWdzID0gMCxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcJiMzNDthOmI6cGhcJiMzNDspKSAhPSAtMSkge1xuJiM0MztcdFx0c3dpdGNoIChvcHQpIHtcbiYjNDM7XHRcdGNhc2UgJiMzOTthJiMzOTs6XG4mIzQzO1x0XHRcdHBvcHVsYXRlX2hhcm5lc3NfYXJncyhhcmdzLCBhcmd2WzBdLCBvcHRhcmcpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtiJiMzOTs6XG4mIzQzO1x0XHRcdHRlc3RfcGFyYW1zLnNpemUgPSBwYXJzZV9zaXplKG9wdGFyZyk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O3AmIzM5OzpcbiYjNDM7XHRcdFx0dGVzdF9wYXJhbXMubW1hcF9mbGFncyA9IE1BUF9QT1BVTEFURTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlICYjMzk7aCYjMzk7OlxuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0aGVscChhcmd2WzBdKTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdC8vIFJlc2V0IGdldG9wdCgpIHN0YXRlIHRvIGFsbG93IHRoZSB0ZXN0IGhhcm5lc3MgdG8gdXNlIGl0LlxuJiM0MztcdG9wdGluZCA9IDE7IFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB0ZWFyZG93bl90ZXN0KHN0cnVjdCBoYXJuZXNzX2FyZ3MgKmFyZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYXJncy1cdTAwM2Vhcmd2KSB7XG4mIzQzO1x0XHRhcmdzLVx1MDAzZWFyZ2MgPSAwO1xuJiM0MztcdFx0YXJncy1cdTAwM2Vhcmd2ID0gTlVMTDtcbiYjNDM7XHRcdHdvcmRmcmVlKFx1MDAyNmFyZ3MtXHUwMDNlZXhwKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGFybmVzc19hcmdzIGFyZ3MgPSAoc3RydWN0IGhhcm5lc3NfYXJncykge1xuJiM0MztcdFx0LmFyZ2MgPSAwLFxuJiM0MztcdFx0LmFyZ3YgPSBOVUxMLFxuJiM0MztcdH07XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdHNldHVwX3Rlc3QoXHUwMDI2YXJncywgYXJnYywgYXJndik7XG4mIzQzO1x0ZGV2aWNlX2JkZiA9IHZmaW9fc2VsZnRlc3RzX2dldF9iZGYoXHUwMDI2YXJnYywgYXJndik7XG4mIzQzO1x0ciA9IHRlc3RfaGFybmVzc19ydW4oYXJncy5hcmdjLCBhcmdzLmFyZ3YpO1xuJiM0MztcdHRlYXJkb3duX3Rlc3QoXHUwMDI2YXJncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHNlbGZ0ZXN0IGFuZCBtb2RpZmllcyBzZWxmdGVzdCBsaWJyYXJ5IGNvZGUuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU1ZmJjYWY0MWJlOWYwMTUyOWJhNjg3NjUyZTU0ODE1MzcwZGJjOWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyIDAyOjM3OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGUKaW5kZXggZTZlOGNiNTJhYjAzMDEuLjlmNjIwYzVlZjZhYjkxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGUKQEAgLTgsNiAmIzQzOzgsNyBAQCBlbHNlCiBDRkxBR1MgPSAkKEtIRFJfSU5DTFVERVMpCiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdmZpb19kbWFfbWFwcGluZ190ZXN0CiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdmZpb19kbWFfbWFwcGluZ19tbWlvX3Rlc3QKJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QKIFRFU1RfR0VOX1BST0dTICYjNDM7PSB2ZmlvX2lvbW11ZmRfc2V0dXBfdGVzdAogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHZmaW9fcGNpX2RldmljZV90ZXN0CiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdmZpb19wY2lfZGV2aWNlX2luaXRfcGVyZl90ZXN0CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oCmluZGV4IGU5YTMzODZhNDcxOTNhLi5lZWVmNTk5MDI5MmNmYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmgKQEAgLTM1LDYgJiM0MzszNSwxMyBAQCBzdHJ1Y3QgaW9tbXUgewogc3RydWN0IGlvbW11ICppb21tdV9pbml0KGNvbnN0IGNoYXIgKmlvbW11X21vZGUpOwogdm9pZCBpb21tdV9jbGVhbnVwKHN0cnVjdCBpb21tdSAqaW9tbXUpOwogCiYjNDM7aW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZCkKJiM0Mzt7CiYjNDM7CVZGSU9fQVNTRVJUX0VRKF9faW9tbXVmZF9tYXBfZmlsZShpb21tdSwgcmVnaW9uLCBmZCksIDApOwomIzQzO30KJiM0MzsKIGludCBfX2lvbW11X21hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGlvbW11X21hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMKaW5kZXggMDM1ZGFjMDY5ZDYwMTYuLjY3MzBiMzkwNjBjYTE2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMKQEAgLTk3LDYgJiM0Mzs5NywzMCBAQCBpb3ZhX3QgaW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIpCiAJcmV0dXJuIGlvdmE7CiB9CiAKJiM0MztpbnQgX19pb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZCkKJiM0Mzt7CiYjNDM7CVZGSU9fQVNTRVJUX1RSVUUoaW9tbXUtJmd0O2lvbW11ZmQsICYjMzQ7SU9NTVVfSU9BU19NQVBfRklMRSBpcyBhbiBJT01NVUZEIElPQ1RMLiYjMzQ7KTsKJiM0MzsKJiM0MzsJc3RydWN0IGlvbW11X2lvYXNfbWFwX2ZpbGUgYXJncyA9IHsKJiM0MzsJCS5zaXplID0gc2l6ZW9mKGFyZ3MpLAomIzQzOwkJLmZsYWdzID0gSU9NTVVfSU9BU19NQVBfUkVBREFCTEUgfAomIzQzOwkJCUlPTU1VX0lPQVNfTUFQX1dSSVRFQUJMRSB8CiYjNDM7CQkJSU9NTVVfSU9BU19NQVBfRklYRURfSU9WQSwKJiM0MzsJCS5pb2FzX2lkID0gaW9tbXUtJmd0O2lvYXNfaWQsCiYjNDM7CQkuZmQgPSBmZCwKJiM0MzsJCS5zdGFydCA9IDAsCiYjNDM7CQkuaW92YSA9IHJlZ2lvbi0mZ3Q7aW92YSwKJiM0MzsJCS5sZW5ndGggPSByZWdpb24tJmd0O3NpemUsCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChpb2N0bChpb21tdS0mZ3Q7aW9tbXVmZCwgSU9NTVVfSU9BU19NQVBfRklMRSwgJmFtcDthcmdzKSkKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CWxpc3RfYWRkKCZhbXA7cmVnaW9uLSZndDtsaW5rLCAmYW1wO2lvbW11LSZndDtkbWFfcmVnaW9ucyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdmZpb19pb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbikKIHsKIAlzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfbWFwIGFyZ3MgPSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgwMzJmNTFjMWEzZTViCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jCkBAIC0wLDAgJiM0MzsxLDM4MCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjaW5jbHVkZSAmbHQ7bGltaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3dvcmRleHAuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9tbXVmZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtZmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lNjQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdmZpby5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaWJ2ZmlvLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqZGV2aWNlX2JkZjsKJiM0MzsKJiM0MztzdHJ1Y3QgdGVzdF9wYXJhbXMgewomIzQzOwl1NjQgc2l6ZTsKJiM0MzsJaW50IG1tYXBfZmxhZ3M7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgdGVzdF9wYXJhbXMgdGVzdF9wYXJhbXM7CiYjNDM7CiYjNDM7c3RydWN0IGlvbW11X21hcHBpbmcgewomIzQzOwl1NjQgcGdkOwomIzQzOwl1NjQgcDRkOwomIzQzOwl1NjQgcHVkOwomIzQzOwl1NjQgcG1kOwomIzQzOwl1NjQgcHRlOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGltZXJfc3RhcnQoc3RydWN0IHRpbWVzcGVjICpzdGFydCkgewomIzQzOwljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgc3RhcnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgZG91YmxlIHRpbWVyX2VsYXBzZWRfbXMoc3RydWN0IHRpbWVzcGVjIHN0YXJ0KQomIzQzO3sKJiM0MzsJc3RydWN0IHRpbWVzcGVjIGVuZDsKJiM0MzsKJiM0MzsJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7ZW5kKTsKJiM0MzsKJiM0MzsJcmV0dXJuIChkb3VibGUpKGVuZC50dl9zZWMgLSBzdGFydC50dl9zZWMpICogTVNFQ19QRVJfU0VDICYjNDM7CiYjNDM7CSAgICAgICAoZG91YmxlKShlbmQudHZfbnNlYyAtIHN0YXJ0LnR2X25zZWMpIC8gTlNFQ19QRVJfTVNFQzsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRSh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCkgewomIzQzOwlzdHJ1Y3QgaW9tbXUgKmlvbW11OwomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2U7CiYjNDM7CXN0cnVjdCBpb3ZhX2FsbG9jYXRvciAqaW92YV9hbGxvY2F0b3I7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlQodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpIHsKJiM0MzsJY29uc3QgY2hhciAqaW9tbXVfbW9kZTsKJiM0MzsJaW50IG1tYXBfZmxhZ3M7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShfaW9tbXVfbW9kZSwgX25hbWUsIF9tbWFwX2ZsYWdzKQkgICAgICAgXAomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIF9pb21tdV9tb2RlICMjIF8gIyMgX25hbWUpIHsgICBcCiYjNDM7CS5pb21tdV9tb2RlID0gI19pb21tdV9tb2RlLAkJCQkJICAgICAgIFwKJiM0MzsJLm1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCAoX21tYXBfZmxhZ3MpLAkgICAgICAgXAomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXMsIDApOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91c19odWdldGxiXzJtYiwgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIpOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91c19odWdldGxiXzFnYiwgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8xR0IpOwomIzQzOwomIzQzOyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KQomIzQzO3sKJiM0MzsJc2VsZi0mZ3Q7aW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtJmd0O2lvbW11X21vZGUpOwomIzQzOwlzZWxmLSZndDtkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLSZndDtpb21tdSk7CiYjNDM7CXNlbGYtJmd0O2lvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLSZndDtpb21tdSk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpCiYjNDM7ewomIzQzOwlpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtJmd0O2lvdmFfYWxsb2NhdG9yKTsKJiM0MzsJdmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc2VsZi0mZ3Q7ZGV2aWNlKTsKJiM0MzsJaW9tbXVfY2xlYW51cChzZWxmLSZndDtpb21tdSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCwgZG1hX21hcF91bm1hcCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHU2NCBzaXplID0gdGVzdF9wYXJhbXMuc2l6ZTsKJiM0MzsJY29uc3QgaW50IGZsYWdzID0gdmFyaWFudC0mZ3Q7bW1hcF9mbGFncyB8IHRlc3RfcGFyYW1zLm1tYXBfZmxhZ3M7CiYjNDM7CXN0cnVjdCBkbWFfcmVnaW9uIHJlZ2lvbjsKJiM0MzsJc3RydWN0IHRpbWVzcGVjIHN0YXJ0OwomIzQzOwl1NjQgdW5tYXBwZWQ7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJdGltZXJfc3RhcnQoJmFtcDtzdGFydCk7CiYjNDM7CXJlZ2lvbi52YWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgZmxhZ3MsIC0xLCAwKTsKJiM0MzsJcHJpbnRmKCYjMzQ7Q29tcGxldGVkIG1tYXAoKSBpbiAlLjJsZm1zXG4mIzM0OywgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpOwomIzQzOwomIzQzOwkvKiBTa2lwIHRoZSB0ZXN0IGlmIHRoZXJlIGFyZW4mIzM5O3QgZW5vdWdoIEh1Z2VUTEIgcGFnZXMgYXZhaWxhYmxlLiAqLwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgTUFQX0hVR0VUTEIgJmFtcDsmYW1wOyByZWdpb24udmFkZHIgPT0gTUFQX0ZBSUxFRCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O21tYXAoKSBmYWlsZWQ6ICVzICglZClcbiYjMzQ7LCBzdHJlcnJvcihlcnJubyksIGVycm5vKTsKJiM0MzsJZWxzZQomIzQzOwkJQVNTRVJUX05FKHJlZ2lvbi52YWRkciwgTUFQX0ZBSUxFRCk7CiYjNDM7CiYjNDM7CXJlZ2lvbi5pb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2Moc2VsZi0mZ3Q7aW92YV9hbGxvY2F0b3IsIHNpemUpOwomIzQzOwlyZWdpb24uc2l6ZSA9IHNpemU7CiYjNDM7CiYjNDM7CXRpbWVyX3N0YXJ0KCZhbXA7c3RhcnQpOwomIzQzOwlpb21tdV9tYXAoc2VsZi0mZ3Q7aW9tbXUsICZhbXA7cmVnaW9uKTsKJiM0MzsJcHJpbnRmKCYjMzQ7TWFwcGVkIEhWQSAlcCAoc2l6ZSAlbHVHKSBhdCBJT1ZBIDB4JWx4IGluICUuMmxmbXNcbiYjMzQ7LAomIzQzOwkgICAgICAgcmVnaW9uLnZhZGRyLCBzaXplIC8gU1pfMUcsIHJlZ2lvbi5pb3ZhLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7CiYjNDM7CUFTU0VSVF9FUShyZWdpb24uaW92YSwgdG9faW92YShzZWxmLSZndDtkZXZpY2UsIHJlZ2lvbi52YWRkcikpOwomIzQzOwomIzQzOwl0aW1lcl9zdGFydCgmYW1wO3N0YXJ0KTsKJiM0MzsJcmMgPSBfX2lvbW11X3VubWFwKHNlbGYtJmd0O2lvbW11LCAmYW1wO3JlZ2lvbiwgJmFtcDt1bm1hcHBlZCk7CiYjNDM7CXByaW50ZigmIzM0O1VubWFwcGVkIElPVkEgMHglbHggaW4gJS4ybGZtc1xuJiMzNDssIHJlZ2lvbi5pb3ZhLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7CiYjNDM7CUFTU0VSVF9FUShyYywgMCk7CiYjNDM7CUFTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLnNpemUpOwomIzQzOwomIzQzOwl0aW1lcl9zdGFydCgmYW1wO3N0YXJ0KTsKJiM0MzsJQVNTRVJUX1RSVUUoIW11bm1hcChyZWdpb24udmFkZHIsIHNpemUpKTsKJiM0MzsJcHJpbnRmKCYjMzQ7Q29tcGxldGVkIG11bm1hcCgpIGluICUuMmxmbXNcbiYjMzQ7LCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkUodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpIHsKJiM0MzsJc3RydWN0IGlvbW11ICppb21tdTsKJiM0MzsJc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlOwomIzQzOwlzdHJ1Y3QgaW92YV9hbGxvY2F0b3IgKmlvdmFfYWxsb2NhdG9yOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KSB7CiYjNDM7CWNvbnN0IGNoYXIgKmlvbW11X21vZGU7CiYjNDM7CWludCBtbWFwX2ZsYWdzOwomIzQzOwlpbnQgbWVtZmRfZmxhZ3M7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShfaW9tbXVfbW9kZSwgX25hbWUsIF9tbWFwX2ZsYWdzLCBfbWVtZmRfZmxhZ3MpIFwKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0LCBfaW9tbXVfbW9kZSAjIyBfICMjIF9uYW1lKSB7ICAgIFwKJiM0MzsJLmlvbW11X21vZGUgPSAjX2lvbW11X21vZGUsCQkJCQkJICAgICAgXAomIzQzOwkubW1hcF9mbGFncyA9IE1BUF9TSEFSRUQgfCAoX21tYXBfZmxhZ3MpLAkJCQkgICAgICBcCiYjNDM7CS5tZW1mZF9mbGFncyA9IE1BUF9TSEFSRUQgfCAoX21lbWZkX2ZsYWdzKSwJCQkJICAgICAgXAomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhtZW1mZCwgMCwgMCk7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMobWVtZmRfaHVnZXRsYl8ybWIsCiYjNDM7CQkJCSAgICBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzJNQiwKJiM0MzsJCQkJICAgIE1GRF9IVUdFVExCIHwgTUZEX0hVR0VfMk1CKTsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhtZW1mZF9odWdldGxiXzFnYiwKJiM0MzsJCQkJICAgIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMUdCLAomIzQzOwkJCQkgICAgTUZEX0hVR0VUTEIgfCBNRkRfSFVHRV8xR0IpOwomIzQzOwomIzQzOyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KQomIzQzO3sKJiM0MzsJc2VsZi0mZ3Q7aW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtJmd0O2lvbW11X21vZGUpOwomIzQzOwlzZWxmLSZndDtkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLSZndDtpb21tdSk7CiYjNDM7CXNlbGYtJmd0O2lvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLSZndDtpb21tdSk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpCiYjNDM7ewomIzQzOwlpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtJmd0O2lvdmFfYWxsb2NhdG9yKTsKJiM0MzsJdmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc2VsZi0mZ3Q7ZGV2aWNlKTsKJiM0MzsJaW9tbXVfY2xlYW51cChzZWxmLSZndDtpb21tdSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICpzZXR1cF9tZW1mZChpbnQgKmZkLCB1NjQgc2l6ZSwgaW50IG1tYXBfZmxhZ3MsIGludCBtZmRfZmxhZ3MpCiYjNDM7ewomIzQzOwl2b2lkICpidWYgPSBNQVBfRkFJTEVEOwomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7CiYjNDM7CiYjNDM7CXRpbWVyX3N0YXJ0KCZhbXA7c3RhcnQpOwomIzQzOwkqZmQgPSBtZW1mZF9jcmVhdGUoJiMzNDt2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCYjMzQ7LCBtZmRfZmxhZ3MpOwomIzQzOwlwcmludGYoJiMzNDtDb21wbGV0ZWQgbWVtZmRfY3JlYXRlKCkgaW4gJS4ybGZtc1xuJiMzNDssIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTsKJiM0MzsJaWYgKCpmZCAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIE1BUF9GQUlMRUQ7CiYjNDM7CiYjNDM7CWlmIChmdHJ1bmNhdGUoKmZkLCBzaXplKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl0aW1lcl9zdGFydCgmYW1wO3N0YXJ0KTsKJiM0MzsJYnVmID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBtbWFwX2ZsYWdzLCAqZmQsIDApOwomIzQzOwlwcmludGYoJiMzNDtDb21wbGV0ZWQgbW1hcCgpIGZvciBtZW1mZCBpbiAlLjJsZm1zXG4mIzM0OywgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpOwomIzQzOwomIzQzO291dDoKJiM0MzsJaWYgKGJ1ZiA9PSBNQVBfRkFJTEVEKQomIzQzOwkJY2xvc2UoKmZkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJ1ZjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVhcmRvd25fbWVtZmQoaW50IGZkLCB1NjQgc2l6ZSwgdm9pZCAqdmFkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7CiYjNDM7CiYjNDM7CWlmICh2YWRkciAhPSBNQVBfRkFJTEVEKSB7CiYjNDM7CQl0aW1lcl9zdGFydCgmYW1wO3N0YXJ0KTsKJiM0MzsJCW11bm1hcCh2YWRkciwgc2l6ZSk7CiYjNDM7CQlwcmludGYoJiMzNDtDb21wbGV0ZWQgbXVubWFwKCkgaW4gJS4ybGZtc1xuJiMzNDssIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZmQgIT0gLTEpIHsKJiM0MzsJCXRpbWVyX3N0YXJ0KCZhbXA7c3RhcnQpOwomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcHJpbnRmKCYjMzQ7Q29tcGxldGVkIGNsb3NlKCkgaW4gJS4ybGZtc1xuJiMzNDssIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztURVNUX0YodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QsIGRtYV9tYXBfdW5tYXBfZnJvbV9maWxlKQomIzQzO3sKJiM0MzsJY29uc3QgdTY0IHNpemUgPSB0ZXN0X3BhcmFtcy5zaXplOwomIzQzOwlzdHJ1Y3QgZG1hX3JlZ2lvbiByZWdpb247CiYjNDM7CXN0cnVjdCB0aW1lc3BlYyBzdGFydDsKJiM0MzsJdTY0IHVubWFwcGVkOwomIzQzOwlpbnQgcmMsIGZkOwomIzQzOwomIzQzOwlyZWdpb24udmFkZHIgPSBzZXR1cF9tZW1mZCgmYW1wO2ZkLCBzaXplLAomIzQzOwkJCQkgICB2YXJpYW50LSZndDttbWFwX2ZsYWdzIHwgdGVzdF9wYXJhbXMubW1hcF9mbGFncywKJiM0MzsJCQkJICAgdmFyaWFudC0mZ3Q7bWVtZmRfZmxhZ3MpOwomIzQzOwlBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJcmVnaW9uLmlvdmEgPSBpb3ZhX2FsbG9jYXRvcl9hbGxvYyhzZWxmLSZndDtpb3ZhX2FsbG9jYXRvciwgc2l6ZSk7CiYjNDM7CXJlZ2lvbi5zaXplID0gc2l6ZTsKJiM0MzsKJiM0MzsJdGltZXJfc3RhcnQoJmFtcDtzdGFydCk7CiYjNDM7CWlmIChzdHJjbXAodmFyaWFudC0mZ3Q7aW9tbXVfbW9kZSwgTU9ERV9JT01NVUZEKSA9PSAwKSB7CiYjNDM7CQlpb21tdWZkX21hcF9maWxlKHNlbGYtJmd0O2lvbW11LCAmYW1wO3JlZ2lvbiwgZmQpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaW9tbXVfbWFwKHNlbGYtJmd0O2lvbW11LCAmYW1wO3JlZ2lvbik7CiYjNDM7CX0KJiM0MzsJcHJpbnRmKCYjMzQ7TWFwcGVkIEhWQSAlcCAoc2l6ZSAlbHVHKSBhdCBJT1ZBIDB4JWx4IGluICUuMmxmbXNcbiYjMzQ7LAomIzQzOwkgICAgICAgcmVnaW9uLnZhZGRyLCBzaXplIC8gU1pfMUcsIHJlZ2lvbi5pb3ZhLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7CiYjNDM7CUFTU0VSVF9FUShyZWdpb24uaW92YSwgdG9faW92YShzZWxmLSZndDtkZXZpY2UsIHJlZ2lvbi52YWRkcikpOwomIzQzOwomIzQzOwl0aW1lcl9zdGFydCgmYW1wO3N0YXJ0KTsKJiM0MzsJcmMgPSBfX2lvbW11X3VubWFwKHNlbGYtJmd0O2lvbW11LCAmYW1wO3JlZ2lvbiwgJmFtcDt1bm1hcHBlZCk7CiYjNDM7CXByaW50ZigmIzM0O1VubWFwcGVkIElPVkEgMHglbHggaW4gJS4ybGZtc1xuJiMzNDssIHJlZ2lvbi5pb3ZhLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7CiYjNDM7CUFTU0VSVF9FUShyYywgMCk7CiYjNDM7CUFTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLnNpemUpOwomIzQzOwomIzQzOwl0ZWFyZG93bl9tZW1mZChmZCwgc2l6ZSwgcmVnaW9uLnZhZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQYXJzZXMgJiMzNDtbMC05XSYjNDM7W2ttZ3RdPyYjMzQ7LgomIzQzOyAqLwomIzQzO3NpemVfdCBwYXJzZV9zaXplKGNvbnN0IGNoYXIgKnNpemUpCiYjNDM7ewomIzQzOwlzaXplX3QgYmFzZTsKJiM0MzsJY2hhciAqc2NhbGU7CiYjNDM7CWludCBzaGlmdCA9IDA7CiYjNDM7CiYjNDM7CVZGSU9fQVNTRVJUX1RSVUUoc2l6ZSAmYW1wOyZhbXA7IGlzZGlnaXQoc2l6ZVswXSksCiYjNDM7CQkJICYjMzQ7TmVlZCBhdCBsZWFzdCBvbmUgZGlnaXQgaW4gJiMzOTslcyYjMzk7LiYjMzQ7LCBzaXplKTsKJiM0MzsKJiM0MzsJYmFzZSA9IHN0cnRvdWxsKHNpemUsICZhbXA7c2NhbGUsIDApOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9UUlVFKGJhc2UgIT0gVUxMT05HX01BWCwgJiMzNDtPdmVyZmxvdyBwYXJzaW5nIHNpemUhJiMzNDspOwomIzQzOwomIzQzOwlzd2l0Y2ggKHRvbG93ZXIoKnNjYWxlKSkgewomIzQzOwljYXNlICYjMzk7dCYjMzk7OgomIzQzOwkJc2hpZnQgPSA0MDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlICYjMzk7ZyYjMzk7OgomIzQzOwkJc2hpZnQgPSAzMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlICYjMzk7bSYjMzk7OgomIzQzOwkJc2hpZnQgPSAyMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlICYjMzk7ayYjMzk7OgomIzQzOwkJc2hpZnQgPSAxMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlICYjMzk7YiYjMzk7OgomIzQzOwljYXNlICYjMzk7XDAmIzM5OzoKJiM0MzsJCXNoaWZ0ID0gMDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJVkZJT19GQUlMKCYjMzQ7VW5rbm93biBzaXplIGxldHRlciAmIzM5OyVjJiMzOTsuJiMzNDssICpzY2FsZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJVkZJT19BU1NFUlRfVFJVRSgoYmFzZSAmbHQ7Jmx0OyBzaGlmdCkgJmd0OyZndDsgc2hpZnQgPT0gYmFzZSwKJiM0MzsJCQkgJiMzNDtPdmVyZmxvdyBzY2FsaW5nIHNpemUhJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gYmFzZSAmbHQ7Jmx0OyBzaGlmdDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGVscChjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJcHV0cygmIzM0OyYjMzQ7KTsKJiM0MzsJcHJpbnRmKCYjMzQ7dXNhZ2U6ICVzIFstaHwtcF0gWy1iIGJ5dGVzXSBbLWEgXCYjMzQ7dGVzdCBoYXJuZXNzIGFyZ3NcJiMzNDtdXG4mIzM0OywgbmFtZSk7CiYjNDM7CXB1dHMoJiMzNDsmIzM0Oyk7CiYjNDM7CXByaW50ZigmIzM0OyAtaDogRGlzcGxheSB0aGlzIGhlbHAgbWVzc2FnZS5cbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAtYjogU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgRE1BIHJlZ2lvbiB0byBiZSBtYXBwZWRcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgYW5kIHVubWFwcGVkLiBlLmcuIDE2TSBvciA4RywgKGRlZmF1bHQ6IDFHKVxuJiMzNDsKJiM0MzsJICAgICAgICYjMzQ7IC1wOiBBcHBlbmQgJiMzOTtNQVBfUE9QVUxBVEUmIzM5OyB0byB0aGUgbW1hcCgpIGZsYWdzIHRvIGF2b2lkXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgIHByZWZhdWx0aW5nIHdoaWxlIG1hcHBpbmcgRE1BIHJlZ2lvbnMuIEluc3RlYWQsIGFueVxuJiMzNDsKJiM0MzsJICAgICAgICYjMzQ7ICAgICBhbmQgYWxsIHByZWZhdWx0aW5nIG5lZWRlZCB3aWxsIGhhcHBlbiBkdXJpbmcgdGhlXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgIG1tYXAoKSBjYWxsLiBUaGlzIHdpbGwgbWFrZSBtYXBwaW5nIERNQSByZWdpb25zXG4mIzM0OwomIzQzOwkgICAgICAgJiMzNDsgICAgIG1vcmUgY29uc2lzdGVudC5cbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAtYTogQXJncyB0aGF0IGFyZSBmb3J3YXJkZWQgdG8gdGhlIHRlc3QgaGFybmVzcyxcbiYjMzQ7CiYjNDM7CSAgICAgICAmIzM0OyAgICAgZS5nLiAtYSBcJiMzNDstdCBkbWFfbWFwX3VubWFwX2Zyb21fZmlsZVwmIzM0O1xuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgaGFybmVzc19hcmdzCiYjNDM7ewomIzQzOwlpbnQgYXJnYzsKJiM0MzsJY2hhciAqKmFyZ3Y7CiYjNDM7CXdvcmRleHBfdCBleHA7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwb3B1bGF0ZV9oYXJuZXNzX2FyZ3Moc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncywgY29uc3QgY2hhciAqYXJndl8wLAomIzQzOwkJCQkgIGNvbnN0IGNoYXIgKmNtZGxuZSkKJiM0Mzt7CiYjNDM7CWlmICh3b3JkZXhwKGFyZ3ZfMCwgJmFtcDthcmdzLSZndDtleHAsIFdSREVfTk9DTUQpID09IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgd29yZGV4cChjbWRsbmUsICZhbXA7YXJncy0mZ3Q7ZXhwLCBXUkRFX0FQUEVORCB8IFdSREVfTk9DTUQpID09IDApIHsKJiM0MzsJCWFyZ3MtJmd0O2FyZ2MgPSBhcmdzLSZndDtleHAud2Vfd29yZGM7CiYjNDM7CQlhcmdzLSZndDthcmd2ID0gYXJncy0mZ3Q7ZXhwLndlX3dvcmR2OwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldHVwX3Rlc3Qoc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CWludCBvcHQ7CiYjNDM7CiYjNDM7CXRlc3RfcGFyYW1zID0gKHN0cnVjdCB0ZXN0X3BhcmFtcykgewomIzQzOwkJLnNpemUgPSBTWl8xRywKJiM0MzsJCS5tbWFwX2ZsYWdzID0gMCwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgJiMzNDthOmI6cGgmIzM0OykpICE9IC0xKSB7CiYjNDM7CQlzd2l0Y2ggKG9wdCkgewomIzQzOwkJY2FzZSAmIzM5O2EmIzM5OzoKJiM0MzsJCQlwb3B1bGF0ZV9oYXJuZXNzX2FyZ3MoYXJncywgYXJndlswXSwgb3B0YXJnKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtiJiMzOTs6CiYjNDM7CQkJdGVzdF9wYXJhbXMuc2l6ZSA9IHBhcnNlX3NpemUob3B0YXJnKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtwJiMzOTs6CiYjNDM7CQkJdGVzdF9wYXJhbXMubW1hcF9mbGFncyA9IE1BUF9QT1BVTEFURTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtoJiMzOTs6CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWhlbHAoYXJndlswXSk7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MztvdXQ6CiYjNDM7CS8vIFJlc2V0IGdldG9wdCgpIHN0YXRlIHRvIGFsbG93IHRoZSB0ZXN0IGhhcm5lc3MgdG8gdXNlIGl0LgomIzQzOwlvcHRpbmQgPSAxOyAKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVhcmRvd25fdGVzdChzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzKQomIzQzO3sKJiM0MzsJaWYgKGFyZ3MtJmd0O2FyZ3YpIHsKJiM0MzsJCWFyZ3MtJmd0O2FyZ2MgPSAwOwomIzQzOwkJYXJncy0mZ3Q7YXJndiA9IE5VTEw7CiYjNDM7CQl3b3JkZnJlZSgmYW1wO2FyZ3MtJmd0O2V4cCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoYXJuZXNzX2FyZ3MgYXJncyA9IChzdHJ1Y3QgaGFybmVzc19hcmdzKSB7CiYjNDM7CQkuYXJnYyA9IDAsCiYjNDM7CQkuYXJndiA9IE5VTEwsCiYjNDM7CX07CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlzZXR1cF90ZXN0KCZhbXA7YXJncywgYXJnYywgYXJndik7CiYjNDM7CWRldmljZV9iZGYgPSB2ZmlvX3NlbGZ0ZXN0c19nZXRfYmRmKCZhbXA7YXJnYywgYXJndik7CiYjNDM7CXIgPSB0ZXN0X2hhcm5lc3NfcnVuKGFyZ3MuYXJnYywgYXJncy5hcmd2KTsKJiM0MzsJdGVhcmRvd25fdGVzdCgmYW1wO2FyZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gcjsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzgKCQkJCQkJCW91dHB1dDogNTgKCQkJCQkJCXRob3VnaHRzOiA0NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBuZXcgc2VsZnRlc3QsIGB2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdGAsIGFuZCB0d2Vha3MgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNgIHRvIGluY2x1ZGUgYF9faW9tbXVmZF9tYXBfZmlsZWAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIHN0cmljdGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AgZGlyZWN0b3J5LiBObyBjb3JlIGtlcm5lbCBjb2RlLCBubyBkcml2ZXIgbW9kaWZpY2F0aW9ucywgYW5kIGNlcnRhaW5seSBub3RoaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gSXQmIzM5O3MganVzdCBhZGRpbmcgYSB0ZXN0LCBhbmQgdGhhdCYjMzk7cyB0aGUgb25seSBzY29wZS4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gd2l0aCBhIGRpZmYgY2hlY2sgb2YgdGhlIGNoYW5nZWQgZmlsZXM6IGBNYWtlZmlsZWAsIGFuIGluY2x1ZGUgZmlsZSwgdGhlIG1vZGlmaWVkIEMgZmlsZSwgYW5kIHRoZSBuZXcgdGVzdC4gWWVwLCBhbGwgdW5kZXIgdGhlIGB2ZmlvYCBzZWxmdGVzdCBkaXJlY3RvcnkuCgpHaXZlbiB0aGlzLCB0aGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmIHRoYXQgYXJlIGFwcHJvcHJpYXRlIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYXR0YWNrIHN1cmZhY2VzIGluIHRoZSBrZXJuZWwmIzM5O3MgY29yZSBsb2dpYy4gVGhlIGZ1enppbmcgZWZmb3J0cyBhcmUgdGFyZ2V0ZWQgdG93YXJkcyB0aGUga2VybmVsIGFuZCBpdHMgaW50ZXJmYWNlcyBhbmQgbm90IHRoZSB0ZXN0IHN1aXRlcy4KCkFscmlnaHQsIHRpbWUgdG8gZXZhbHVhdGUgdGhpcyBhZ2FpbnN0IHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGd1aWRlbGluZXMuIFRoZXkgc3BlY2lmaWNhbGx5IG1lbnRpb24gbW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgbG9nZ2luZywgY29uc3RhbnRzLCBhbmQgdW5yZWFjaGFibGUgY29kZSBwYXRocy4gV2hpbGUgc2VsZnRlc3RzIGFyZW4mIzM5O3QgZXhwbGljaXRseSBtZW50aW9uZWQsIHRoZXkgYXJlIG5vdCBrZXJuZWwgY29kZTsgdGhleSYjMzk7cmUgdXNlcnNwYWNlIHRvb2xzIHVzZWQgdG8gdGVzdCB0aGUga2VybmVsLiBGdXp6aW5nIHRoZSBrZXJuZWwgYmFzZWQgb24gY2hhbmdlcyAqd2l0aGluKiB0aGUgc2VsZnRlc3RzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUuIFdlIGZ1enogdGhlIGtlcm5lbC4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIE15IHJlYXNvbmluZyBpcyBjb25jaXNlOiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgc2VsZnRlc3QgYW5kIG1vZGlmaWVzIHNlbGZ0ZXN0IGxpYnJhcnkgY29kZS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgc2VsZnRlc3QgYW5kIG1vZGlmaWVzIHNlbGZ0ZXN0IGxpYnJhcnkgY29kZS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHNlbGZ0ZXN0IGFuZCBtb2RpZmllcyBzZWxmdGVzdCBsaWJyYXJ5IGNvZGUuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjozNzo0NS4wNDA1NTU2NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTk2MzIxMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgYSBuZXcgc2VsZnRlc3QgYW5kIG1vZGlmaWVzIHNlbGZ0ZXN0IGxpYnJhcnkgY29kZS4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDI6Mzc6NDUuMDQwNTYwNzI4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM3OTI4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NWZiY2FmNDFiZTlmMDE1MjliYTY4NzY1MmU1NDgxNTM3MGRiYzlmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMDI6Mzc6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcXG5pbmRleCBlNmU4Y2I1MmFiMDMwMS4uOWY2MjBjNWVmNmFiOTEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGVcXG5AQCAtOCw2ICs4LDcgQEAgZWxzZVxcbiBDRkxBR1MgPSAkKEtIRFJfSU5DTFVERVMpXFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9fZG1hX21hcHBpbmdfdGVzdFxcbiBURVNUX0dFTl9QUk9HUyArPSB2ZmlvX2RtYV9tYXBwaW5nX21taW9fdGVzdFxcbitURVNUX0dFTl9QUk9HUyArPSB2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdFxcbiBURVNUX0dFTl9QUk9HUyArPSB2ZmlvX2lvbW11ZmRfc2V0dXBfdGVzdFxcbiBURVNUX0dFTl9QUk9HUyArPSB2ZmlvX3BjaV9kZXZpY2VfdGVzdFxcbiBURVNUX0dFTl9QUk9HUyArPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdF9wZXJmX3Rlc3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxcbmluZGV4IGU5YTMzODZhNDcxOTNhLi5lZWVmNTk5MDI5MmNmYiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXFxuQEAgLTM1LDYgKzM1LDEzIEBAIHN0cnVjdCBpb21tdSB7XFxuIHN0cnVjdCBpb21tdSAqaW9tbXVfaW5pdChjb25zdCBjaGFyICppb21tdV9tb2RlKTtcXG4gdm9pZCBpb21tdV9jbGVhbnVwKHN0cnVjdCBpb21tdSAqaW9tbXUpO1xcbiBcXG4raW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpO1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGlvbW11ZmRfbWFwX2ZpbGUoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwgaW50IGZkKVxcbit7XFxuK1xcdFZGSU9fQVNTRVJUX0VRKF9faW9tbXVmZF9tYXBfZmlsZShpb21tdSwgcmVnaW9uLCBmZCksIDApO1xcbit9XFxuK1xcbiBpbnQgX19pb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbik7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgaW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXFxuaW5kZXggMDM1ZGFjMDY5ZDYwMTYuLjY3MzBiMzkwNjBjYTE2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXFxuQEAgLTk3LDYgKzk3LDMwIEBAIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcilcXG4gXFx0cmV0dXJuIGlvdmE7XFxuIH1cXG4gXFxuK2ludCBfX2lvbW11ZmRfbWFwX2ZpbGUoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwgaW50IGZkKVxcbit7XFxuK1xcdFZGSU9fQVNTRVJUX1RSVUUoaW9tbXUtXFx1MDAzZWlvbW11ZmQsIFxcXCJJT01NVV9JT0FTX01BUF9GSUxFIGlzIGFuIElPTU1VRkQgSU9DVEwuXFxcIik7XFxuK1xcbitcXHRzdHJ1Y3QgaW9tbXVfaW9hc19tYXBfZmlsZSBhcmdzID0ge1xcbitcXHRcXHQuc2l6ZSA9IHNpemVvZihhcmdzKSxcXG4rXFx0XFx0LmZsYWdzID0gSU9NTVVfSU9BU19NQVBfUkVBREFCTEUgfFxcbitcXHRcXHRcXHRJT01NVV9JT0FTX01BUF9XUklURUFCTEUgfFxcbitcXHRcXHRcXHRJT01NVV9JT0FTX01BUF9GSVhFRF9JT1ZBLFxcbitcXHRcXHQuaW9hc19pZCA9IGlvbW11LVxcdTAwM2Vpb2FzX2lkLFxcbitcXHRcXHQuZmQgPSBmZCxcXG4rXFx0XFx0LnN0YXJ0ID0gMCxcXG4rXFx0XFx0LmlvdmEgPSByZWdpb24tXFx1MDAzZWlvdmEsXFxuK1xcdFxcdC5sZW5ndGggPSByZWdpb24tXFx1MDAzZXNpemUsXFxuK1xcdH07XFxuK1xcbitcXHRpZiAoaW9jdGwoaW9tbXUtXFx1MDAzZWlvbW11ZmQsIElPTU1VX0lPQVNfTUFQX0ZJTEUsIFxcdTAwMjZhcmdzKSlcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdGxpc3RfYWRkKFxcdTAwMjZyZWdpb24tXFx1MDAzZWxpbmssIFxcdTAwMjZpb21tdS1cXHUwMDNlZG1hX3JlZ2lvbnMpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdmZpb19pb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfbWFwIGFyZ3MgPSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgwMzJmNTFjMWEzZTViXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY1xcbkBAIC0wLDAgKzEsMzgwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3dvcmRleHAuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21tdWZkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWZkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZTY0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC92ZmlvLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGlidmZpby5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqZGV2aWNlX2JkZjtcXG4rXFxuK3N0cnVjdCB0ZXN0X3BhcmFtcyB7XFxuK1xcdHU2NCBzaXplO1xcbitcXHRpbnQgbW1hcF9mbGFncztcXG4rfTtcXG4rXFxuK3N0cnVjdCB0ZXN0X3BhcmFtcyB0ZXN0X3BhcmFtcztcXG4rXFxuK3N0cnVjdCBpb21tdV9tYXBwaW5nIHtcXG4rXFx0dTY0IHBnZDtcXG4rXFx0dTY0IHA0ZDtcXG4rXFx0dTY0IHB1ZDtcXG4rXFx0dTY0IHBtZDtcXG4rXFx0dTY0IHB0ZTtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHRpbWVyX3N0YXJ0KHN0cnVjdCB0aW1lc3BlYyAqc3RhcnQpIHtcXG4rXFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIHN0YXJ0KTtcXG4rfVxcbitcXG4rc3RhdGljIGRvdWJsZSB0aW1lcl9lbGFwc2VkX21zKHN0cnVjdCB0aW1lc3BlYyBzdGFydClcXG4re1xcbitcXHRzdHJ1Y3QgdGltZXNwZWMgZW5kO1xcbitcXG4rXFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFxcdTAwMjZlbmQpO1xcbitcXG4rXFx0cmV0dXJuIChkb3VibGUpKGVuZC50dl9zZWMgLSBzdGFydC50dl9zZWMpICogTVNFQ19QRVJfU0VDICtcXG4rXFx0ICAgICAgIChkb3VibGUpKGVuZC50dl9uc2VjIC0gc3RhcnQudHZfbnNlYykgLyBOU0VDX1BFUl9NU0VDO1xcbit9XFxuK1xcbitGSVhUVVJFKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KSB7XFxuK1xcdHN0cnVjdCBpb21tdSAqaW9tbXU7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZTtcXG4rXFx0c3RydWN0IGlvdmFfYWxsb2NhdG9yICppb3ZhX2FsbG9jYXRvcjtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCkge1xcbitcXHRjb25zdCBjaGFyICppb21tdV9tb2RlO1xcbitcXHRpbnQgbW1hcF9mbGFncztcXG4rfTtcXG4rXFxuKyNkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKF9pb21tdV9tb2RlLCBfbmFtZSwgX21tYXBfZmxhZ3MpXFx0ICAgICAgIFxcXFxcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCwgX2lvbW11X21vZGUgIyMgXyAjIyBfbmFtZSkgeyAgIFxcXFxcXG4rXFx0LmlvbW11X21vZGUgPSAjX2lvbW11X21vZGUsXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4rXFx0Lm1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCAoX21tYXBfZmxhZ3MpLFxcdCAgICAgICBcXFxcXFxuK31cXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91cywgMCk7XFxuK0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91c19odWdldGxiXzJtYiwgTUFQX0hVR0VUTEIgfCBNQVBfSFVHRV8yTUIpO1xcbitGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8xZ2IsIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMUdCKTtcXG4rXFxuKyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREVcXG4rXFxuK0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXFxuK3tcXG4rXFx0c2VsZi1cXHUwMDNlaW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtXFx1MDAzZWlvbW11X21vZGUpO1xcbitcXHRzZWxmLVxcdTAwM2VkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLVxcdTAwM2Vpb21tdSk7XFxuK1xcdHNlbGYtXFx1MDAzZWlvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLVxcdTAwM2Vpb21tdSk7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXFxuK3tcXG4rXFx0aW92YV9hbGxvY2F0b3JfY2xlYW51cChzZWxmLVxcdTAwM2Vpb3ZhX2FsbG9jYXRvcik7XFxuK1xcdHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHNlbGYtXFx1MDAzZWRldmljZSk7XFxuK1xcdGlvbW11X2NsZWFudXAoc2VsZi1cXHUwMDNlaW9tbXUpO1xcbit9XFxuK1xcbitURVNUX0YodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIGRtYV9tYXBfdW5tYXApXFxuK3tcXG4rXFx0Y29uc3QgdTY0IHNpemUgPSB0ZXN0X3BhcmFtcy5zaXplO1xcbitcXHRjb25zdCBpbnQgZmxhZ3MgPSB2YXJpYW50LVxcdTAwM2VtbWFwX2ZsYWdzIHwgdGVzdF9wYXJhbXMubW1hcF9mbGFncztcXG4rXFx0c3RydWN0IGRtYV9yZWdpb24gcmVnaW9uO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7XFxuK1xcdHU2NCB1bm1hcHBlZDtcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0dGltZXJfc3RhcnQoXFx1MDAyNnN0YXJ0KTtcXG4rXFx0cmVnaW9uLnZhZGRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBmbGFncywgLTEsIDApO1xcbitcXHRwcmludGYoXFxcIkNvbXBsZXRlZCBtbWFwKCkgaW4gJS4ybGZtc1xcXFxuXFxcIiwgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xcbitcXG4rXFx0LyogU2tpcCB0aGUgdGVzdCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIEh1Z2VUTEIgcGFnZXMgYXZhaWxhYmxlLiAqL1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNQVBfSFVHRVRMQiBcXHUwMDI2XFx1MDAyNiByZWdpb24udmFkZHIgPT0gTUFQX0ZBSUxFRClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJtbWFwKCkgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRBU1NFUlRfTkUocmVnaW9uLnZhZGRyLCBNQVBfRkFJTEVEKTtcXG4rXFxuK1xcdHJlZ2lvbi5pb3ZhID0gaW92YV9hbGxvY2F0b3JfYWxsb2Moc2VsZi1cXHUwMDNlaW92YV9hbGxvY2F0b3IsIHNpemUpO1xcbitcXHRyZWdpb24uc2l6ZSA9IHNpemU7XFxuK1xcbitcXHR0aW1lcl9zdGFydChcXHUwMDI2c3RhcnQpO1xcbitcXHRpb21tdV9tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIFxcdTAwMjZyZWdpb24pO1xcbitcXHRwcmludGYoXFxcIk1hcHBlZCBIVkEgJXAgKHNpemUgJWx1RykgYXQgSU9WQSAweCVseCBpbiAlLjJsZm1zXFxcXG5cXFwiLFxcbitcXHQgICAgICAgcmVnaW9uLnZhZGRyLCBzaXplIC8gU1pfMUcsIHJlZ2lvbi5pb3ZhLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XFxuK1xcdEFTU0VSVF9FUShyZWdpb24uaW92YSwgdG9faW92YShzZWxmLVxcdTAwM2VkZXZpY2UsIHJlZ2lvbi52YWRkcikpO1xcbitcXG4rXFx0dGltZXJfc3RhcnQoXFx1MDAyNnN0YXJ0KTtcXG4rXFx0cmMgPSBfX2lvbW11X3VubWFwKHNlbGYtXFx1MDAzZWlvbW11LCBcXHUwMDI2cmVnaW9uLCBcXHUwMDI2dW5tYXBwZWQpO1xcbitcXHRwcmludGYoXFxcIlVubWFwcGVkIElPVkEgMHglbHggaW4gJS4ybGZtc1xcXFxuXFxcIiwgcmVnaW9uLmlvdmEsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcXG4rXFx0QVNTRVJUX0VRKHJjLCAwKTtcXG4rXFx0QVNTRVJUX0VRKHVubWFwcGVkLCByZWdpb24uc2l6ZSk7XFxuK1xcbitcXHR0aW1lcl9zdGFydChcXHUwMDI2c3RhcnQpO1xcbitcXHRBU1NFUlRfVFJVRSghbXVubWFwKHJlZ2lvbi52YWRkciwgc2l6ZSkpO1xcbitcXHRwcmludGYoXFxcIkNvbXBsZXRlZCBtdW5tYXAoKSBpbiAlLjJsZm1zXFxcXG5cXFwiLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XFxuK31cXG4rXFxuK0ZJWFRVUkUodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpIHtcXG4rXFx0c3RydWN0IGlvbW11ICppb21tdTtcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlO1xcbitcXHRzdHJ1Y3QgaW92YV9hbGxvY2F0b3IgKmlvdmFfYWxsb2NhdG9yO1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KSB7XFxuK1xcdGNvbnN0IGNoYXIgKmlvbW11X21vZGU7XFxuK1xcdGludCBtbWFwX2ZsYWdzO1xcbitcXHRpbnQgbWVtZmRfZmxhZ3M7XFxuK307XFxuK1xcbisjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShfaW9tbXVfbW9kZSwgX25hbWUsIF9tbWFwX2ZsYWdzLCBfbWVtZmRfZmxhZ3MpIFxcXFxcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCwgX2lvbW11X21vZGUgIyMgXyAjIyBfbmFtZSkgeyAgICBcXFxcXFxuK1xcdC5pb21tdV9tb2RlID0gI19pb21tdV9tb2RlLFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXFxcXG4rXFx0Lm1tYXBfZmxhZ3MgPSBNQVBfU0hBUkVEIHwgKF9tbWFwX2ZsYWdzKSxcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuK1xcdC5tZW1mZF9mbGFncyA9IE1BUF9TSEFSRUQgfCAoX21lbWZkX2ZsYWdzKSxcXHRcXHRcXHRcXHQgICAgICBcXFxcXFxuK31cXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKG1lbWZkLCAwLCAwKTtcXG4rRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMobWVtZmRfaHVnZXRsYl8ybWIsXFxuK1xcdFxcdFxcdFxcdCAgICBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzJNQixcXG4rXFx0XFx0XFx0XFx0ICAgIE1GRF9IVUdFVExCIHwgTUZEX0hVR0VfMk1CKTtcXG4rRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMobWVtZmRfaHVnZXRsYl8xZ2IsXFxuK1xcdFxcdFxcdFxcdCAgICBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzFHQixcXG4rXFx0XFx0XFx0XFx0ICAgIE1GRF9IVUdFVExCIHwgTUZEX0hVR0VfMUdCKTtcXG4rXFxuKyN1bmRlZiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREVcXG4rXFxuK0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpXFxuK3tcXG4rXFx0c2VsZi1cXHUwMDNlaW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtXFx1MDAzZWlvbW11X21vZGUpO1xcbitcXHRzZWxmLVxcdTAwM2VkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLVxcdTAwM2Vpb21tdSk7XFxuK1xcdHNlbGYtXFx1MDAzZWlvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLVxcdTAwM2Vpb21tdSk7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04odmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpXFxuK3tcXG4rXFx0aW92YV9hbGxvY2F0b3JfY2xlYW51cChzZWxmLVxcdTAwM2Vpb3ZhX2FsbG9jYXRvcik7XFxuK1xcdHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHNlbGYtXFx1MDAzZWRldmljZSk7XFxuK1xcdGlvbW11X2NsZWFudXAoc2VsZi1cXHUwMDNlaW9tbXUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCAqc2V0dXBfbWVtZmQoaW50ICpmZCwgdTY0IHNpemUsIGludCBtbWFwX2ZsYWdzLCBpbnQgbWZkX2ZsYWdzKVxcbit7XFxuK1xcdHZvaWQgKmJ1ZiA9IE1BUF9GQUlMRUQ7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYyBzdGFydDtcXG4rXFxuK1xcdHRpbWVyX3N0YXJ0KFxcdTAwMjZzdGFydCk7XFxuK1xcdCpmZCA9IG1lbWZkX2NyZWF0ZShcXFwidmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3RcXFwiLCBtZmRfZmxhZ3MpO1xcbitcXHRwcmludGYoXFxcIkNvbXBsZXRlZCBtZW1mZF9jcmVhdGUoKSBpbiAlLjJsZm1zXFxcXG5cXFwiLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XFxuK1xcdGlmICgqZmQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIE1BUF9GQUlMRUQ7XFxuK1xcbitcXHRpZiAoZnRydW5jYXRlKCpmZCwgc2l6ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0dGltZXJfc3RhcnQoXFx1MDAyNnN0YXJ0KTtcXG4rXFx0YnVmID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBtbWFwX2ZsYWdzLCAqZmQsIDApO1xcbitcXHRwcmludGYoXFxcIkNvbXBsZXRlZCBtbWFwKCkgZm9yIG1lbWZkIGluICUuMmxmbXNcXFxcblxcXCIsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcXG4rXFxuK291dDpcXG4rXFx0aWYgKGJ1ZiA9PSBNQVBfRkFJTEVEKVxcbitcXHRcXHRjbG9zZSgqZmQpO1xcbitcXG4rXFx0cmV0dXJuIGJ1ZjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVhcmRvd25fbWVtZmQoaW50IGZkLCB1NjQgc2l6ZSwgdm9pZCAqdmFkZHIpXFxuK3tcXG4rXFx0c3RydWN0IHRpbWVzcGVjIHN0YXJ0O1xcbitcXG4rXFx0aWYgKHZhZGRyICE9IE1BUF9GQUlMRUQpIHtcXG4rXFx0XFx0dGltZXJfc3RhcnQoXFx1MDAyNnN0YXJ0KTtcXG4rXFx0XFx0bXVubWFwKHZhZGRyLCBzaXplKTtcXG4rXFx0XFx0cHJpbnRmKFxcXCJDb21wbGV0ZWQgbXVubWFwKCkgaW4gJS4ybGZtc1xcXFxuXFxcIiwgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZmQgIT0gLTEpIHtcXG4rXFx0XFx0dGltZXJfc3RhcnQoXFx1MDAyNnN0YXJ0KTtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRwcmludGYoXFxcIkNvbXBsZXRlZCBjbG9zZSgpIGluICUuMmxmbXNcXFxcblxcXCIsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcXG4rXFx0fVxcbit9XFxuK1xcbitURVNUX0YodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QsIGRtYV9tYXBfdW5tYXBfZnJvbV9maWxlKVxcbit7XFxuK1xcdGNvbnN0IHU2NCBzaXplID0gdGVzdF9wYXJhbXMuc2l6ZTtcXG4rXFx0c3RydWN0IGRtYV9yZWdpb24gcmVnaW9uO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7XFxuK1xcdHU2NCB1bm1hcHBlZDtcXG4rXFx0aW50IHJjLCBmZDtcXG4rXFxuK1xcdHJlZ2lvbi52YWRkciA9IHNldHVwX21lbWZkKFxcdTAwMjZmZCwgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgdmFyaWFudC1cXHUwMDNlbW1hcF9mbGFncyB8IHRlc3RfcGFyYW1zLm1tYXBfZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgIHZhcmlhbnQtXFx1MDAzZW1lbWZkX2ZsYWdzKTtcXG4rXFx0QVNTRVJUX05FKHJlZ2lvbi52YWRkciwgTUFQX0ZBSUxFRCk7XFxuK1xcbitcXHRyZWdpb24uaW92YSA9IGlvdmFfYWxsb2NhdG9yX2FsbG9jKHNlbGYtXFx1MDAzZWlvdmFfYWxsb2NhdG9yLCBzaXplKTtcXG4rXFx0cmVnaW9uLnNpemUgPSBzaXplO1xcbitcXG4rXFx0dGltZXJfc3RhcnQoXFx1MDAyNnN0YXJ0KTtcXG4rXFx0aWYgKHN0cmNtcCh2YXJpYW50LVxcdTAwM2Vpb21tdV9tb2RlLCBNT0RFX0lPTU1VRkQpID09IDApIHtcXG4rXFx0XFx0aW9tbXVmZF9tYXBfZmlsZShzZWxmLVxcdTAwM2Vpb21tdSwgXFx1MDAyNnJlZ2lvbiwgZmQpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpb21tdV9tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIFxcdTAwMjZyZWdpb24pO1xcbitcXHR9XFxuK1xcdHByaW50ZihcXFwiTWFwcGVkIEhWQSAlcCAoc2l6ZSAlbHVHKSBhdCBJT1ZBIDB4JWx4IGluICUuMmxmbXNcXFxcblxcXCIsXFxuK1xcdCAgICAgICByZWdpb24udmFkZHIsIHNpemUgLyBTWl8xRywgcmVnaW9uLmlvdmEsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcXG4rXFx0QVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtXFx1MDAzZWRldmljZSwgcmVnaW9uLnZhZGRyKSk7XFxuK1xcbitcXHR0aW1lcl9zdGFydChcXHUwMDI2c3RhcnQpO1xcbitcXHRyYyA9IF9faW9tbXVfdW5tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIFxcdTAwMjZyZWdpb24sIFxcdTAwMjZ1bm1hcHBlZCk7XFxuK1xcdHByaW50ZihcXFwiVW5tYXBwZWQgSU9WQSAweCVseCBpbiAlLjJsZm1zXFxcXG5cXFwiLCByZWdpb24uaW92YSwgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xcbitcXHRBU1NFUlRfRVEocmMsIDApO1xcbitcXHRBU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi5zaXplKTtcXG4rXFxuK1xcdHRlYXJkb3duX21lbWZkKGZkLCBzaXplLCByZWdpb24udmFkZHIpO1xcbit9XFxuK1xcbisvKlxcbisgKiBQYXJzZXMgXFxcIlswLTldK1trbWd0XT9cXFwiLlxcbisgKi9cXG4rc2l6ZV90IHBhcnNlX3NpemUoY29uc3QgY2hhciAqc2l6ZSlcXG4re1xcbitcXHRzaXplX3QgYmFzZTtcXG4rXFx0Y2hhciAqc2NhbGU7XFxuK1xcdGludCBzaGlmdCA9IDA7XFxuK1xcbitcXHRWRklPX0FTU0VSVF9UUlVFKHNpemUgXFx1MDAyNlxcdTAwMjYgaXNkaWdpdChzaXplWzBdKSxcXG4rXFx0XFx0XFx0IFxcXCJOZWVkIGF0IGxlYXN0IG9uZSBkaWdpdCBpbiAnJXMnLlxcXCIsIHNpemUpO1xcbitcXG4rXFx0YmFzZSA9IHN0cnRvdWxsKHNpemUsIFxcdTAwMjZzY2FsZSwgMCk7XFxuK1xcbitcXHRWRklPX0FTU0VSVF9UUlVFKGJhc2UgIT0gVUxMT05HX01BWCwgXFxcIk92ZXJmbG93IHBhcnNpbmcgc2l6ZSFcXFwiKTtcXG4rXFxuK1xcdHN3aXRjaCAodG9sb3dlcigqc2NhbGUpKSB7XFxuK1xcdGNhc2UgJ3QnOlxcbitcXHRcXHRzaGlmdCA9IDQwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAnZyc6XFxuK1xcdFxcdHNoaWZ0ID0gMzA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlICdtJzpcXG4rXFx0XFx0c2hpZnQgPSAyMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgJ2snOlxcbitcXHRcXHRzaGlmdCA9IDEwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAnYic6XFxuK1xcdGNhc2UgJ1xcXFwwJzpcXG4rXFx0XFx0c2hpZnQgPSAwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0VkZJT19GQUlMKFxcXCJVbmtub3duIHNpemUgbGV0dGVyICclYycuXFxcIiwgKnNjYWxlKTtcXG4rXFx0fVxcbitcXG4rXFx0VkZJT19BU1NFUlRfVFJVRSgoYmFzZSBcXHUwMDNjXFx1MDAzYyBzaGlmdCkgXFx1MDAzZVxcdTAwM2Ugc2hpZnQgPT0gYmFzZSxcXG4rXFx0XFx0XFx0IFxcXCJPdmVyZmxvdyBzY2FsaW5nIHNpemUhXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gYmFzZSBcXHUwMDNjXFx1MDAzYyBzaGlmdDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaGVscChjaGFyICpuYW1lKVxcbit7XFxuK1xcdHB1dHMoXFxcIlxcXCIpO1xcbitcXHRwcmludGYoXFxcInVzYWdlOiAlcyBbLWh8LXBdIFstYiBieXRlc10gWy1hIFxcXFxcXFwidGVzdCBoYXJuZXNzIGFyZ3NcXFxcXFxcIl1cXFxcblxcXCIsIG5hbWUpO1xcbitcXHRwdXRzKFxcXCJcXFwiKTtcXG4rXFx0cHJpbnRmKFxcXCIgLWg6IERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UuXFxcXG5cXFwiXFxuK1xcdCAgICAgICBcXFwiIC1iOiBTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBETUEgcmVnaW9uIHRvIGJlIG1hcHBlZFxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgYW5kIHVubWFwcGVkLiBlLmcuIDE2TSBvciA4RywgKGRlZmF1bHQ6IDFHKVxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAtcDogQXBwZW5kICdNQVBfUE9QVUxBVEUnIHRvIHRoZSBtbWFwKCkgZmxhZ3MgdG8gYXZvaWRcXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgICAgIHByZWZhdWx0aW5nIHdoaWxlIG1hcHBpbmcgRE1BIHJlZ2lvbnMuIEluc3RlYWQsIGFueVxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgYW5kIGFsbCBwcmVmYXVsdGluZyBuZWVkZWQgd2lsbCBoYXBwZW4gZHVyaW5nIHRoZVxcXFxuXFxcIlxcbitcXHQgICAgICAgXFxcIiAgICAgbW1hcCgpIGNhbGwuIFRoaXMgd2lsbCBtYWtlIG1hcHBpbmcgRE1BIHJlZ2lvbnNcXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgICAgIG1vcmUgY29uc2lzdGVudC5cXFxcblxcXCJcXG4rXFx0ICAgICAgIFxcXCIgLWE6IEFyZ3MgdGhhdCBhcmUgZm9yd2FyZGVkIHRvIHRoZSB0ZXN0IGhhcm5lc3MsXFxcXG5cXFwiXFxuK1xcdCAgICAgICBcXFwiICAgICBlLmcuIC1hIFxcXFxcXFwiLXQgZG1hX21hcF91bm1hcF9mcm9tX2ZpbGVcXFxcXFxcIlxcXFxuXFxcIik7XFxuK31cXG4rXFxuK3N0cnVjdCBoYXJuZXNzX2FyZ3NcXG4re1xcbitcXHRpbnQgYXJnYztcXG4rXFx0Y2hhciAqKmFyZ3Y7XFxuK1xcdHdvcmRleHBfdCBleHA7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBwb3B1bGF0ZV9oYXJuZXNzX2FyZ3Moc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncywgY29uc3QgY2hhciAqYXJndl8wLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmNtZGxuZSlcXG4re1xcbitcXHRpZiAod29yZGV4cChhcmd2XzAsIFxcdTAwMjZhcmdzLVxcdTAwM2VleHAsIFdSREVfTk9DTUQpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHdvcmRleHAoY21kbG5lLCBcXHUwMDI2YXJncy1cXHUwMDNlZXhwLCBXUkRFX0FQUEVORCB8IFdSREVfTk9DTUQpID09IDApIHtcXG4rXFx0XFx0YXJncy1cXHUwMDNlYXJnYyA9IGFyZ3MtXFx1MDAzZWV4cC53ZV93b3JkYztcXG4rXFx0XFx0YXJncy1cXHUwMDNlYXJndiA9IGFyZ3MtXFx1MDAzZWV4cC53ZV93b3JkdjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXR1cF90ZXN0KHN0cnVjdCBoYXJuZXNzX2FyZ3MgKmFyZ3MsIGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0aW50IG9wdDtcXG4rXFxuK1xcdHRlc3RfcGFyYW1zID0gKHN0cnVjdCB0ZXN0X3BhcmFtcykge1xcbitcXHRcXHQuc2l6ZSA9IFNaXzFHLFxcbitcXHRcXHQubW1hcF9mbGFncyA9IDAsXFxuK1xcdH07XFxuK1xcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBcXFwiYTpiOnBoXFxcIikpICE9IC0xKSB7XFxuK1xcdFxcdHN3aXRjaCAob3B0KSB7XFxuK1xcdFxcdGNhc2UgJ2EnOlxcbitcXHRcXHRcXHRwb3B1bGF0ZV9oYXJuZXNzX2FyZ3MoYXJncywgYXJndlswXSwgb3B0YXJnKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ2InOlxcbitcXHRcXHRcXHR0ZXN0X3BhcmFtcy5zaXplID0gcGFyc2Vfc2l6ZShvcHRhcmcpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSAncCc6XFxuK1xcdFxcdFxcdHRlc3RfcGFyYW1zLm1tYXBfZmxhZ3MgPSBNQVBfUE9QVUxBVEU7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdoJzpcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0aGVscChhcmd2WzBdKTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHQvLyBSZXNldCBnZXRvcHQoKSBzdGF0ZSB0byBhbGxvdyB0aGUgdGVzdCBoYXJuZXNzIHRvIHVzZSBpdC5cXG4rXFx0b3B0aW5kID0gMTsgXFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlYXJkb3duX3Rlc3Qoc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncylcXG4re1xcbitcXHRpZiAoYXJncy1cXHUwMDNlYXJndikge1xcbitcXHRcXHRhcmdzLVxcdTAwM2VhcmdjID0gMDtcXG4rXFx0XFx0YXJncy1cXHUwMDNlYXJndiA9IE5VTEw7XFxuK1xcdFxcdHdvcmRmcmVlKFxcdTAwMjZhcmdzLVxcdTAwM2VleHApO1xcbitcXHR9XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0c3RydWN0IGhhcm5lc3NfYXJncyBhcmdzID0gKHN0cnVjdCBoYXJuZXNzX2FyZ3MpIHtcXG4rXFx0XFx0LmFyZ2MgPSAwLFxcbitcXHRcXHQuYXJndiA9IE5VTEwsXFxuK1xcdH07XFxuK1xcdGludCByO1xcbitcXG4rXFx0c2V0dXBfdGVzdChcXHUwMDI2YXJncywgYXJnYywgYXJndik7XFxuK1xcdGRldmljZV9iZGYgPSB2ZmlvX3NlbGZ0ZXN0c19nZXRfYmRmKFxcdTAwMjZhcmdjLCBhcmd2KTtcXG4rXFx0ciA9IHRlc3RfaGFybmVzc19ydW4oYXJncy5hcmdjLCBhcmdzLmFyZ3YpO1xcbitcXHR0ZWFyZG93bl90ZXN0KFxcdTAwMjZhcmdzKTtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjM3OjQ1LjUyNTQxODkwOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcxMTQ1MDg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHNlbGZ0ZXN0IGFuZCBtb2RpZmllcyBzZWxmdGVzdCBsaWJyYXJ5IGNvZGUuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTVmYmNhZjQxYmU5ZjAxNTI5YmE2ODc2NTJlNTQ4MTUzNzBkYmM5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDI6Mzc6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuaW5kZXggZTZlOGNiNTJhYjAzMDEuLjlmNjIwYzVlZjZhYjkxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuQEAgLTgsNiArOCw3IEBAIGVsc2VcbiBDRkxBR1MgPSAkKEtIRFJfSU5DTFVERVMpXG4gVEVTVF9HRU5fUFJPR1MgKz0gdmZpb19kbWFfbWFwcGluZ190ZXN0XG4gVEVTVF9HRU5fUFJPR1MgKz0gdmZpb19kbWFfbWFwcGluZ19tbWlvX3Rlc3RcbitURVNUX0dFTl9QUk9HUyArPSB2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdFxuIFRFU1RfR0VOX1BST0dTICs9IHZmaW9faW9tbXVmZF9zZXR1cF90ZXN0XG4gVEVTVF9HRU5fUFJPR1MgKz0gdmZpb19wY2lfZGV2aWNlX3Rlc3RcbiBURVNUX0dFTl9QUk9HUyArPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdF9wZXJmX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXG5pbmRleCBlOWEzMzg2YTQ3MTkzYS4uZWVlZjU5OTAyOTJjZmIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcbkBAIC0zNSw2ICszNSwxMyBAQCBzdHJ1Y3QgaW9tbXUge1xuIHN0cnVjdCBpb21tdSAqaW9tbXVfaW5pdChjb25zdCBjaGFyICppb21tdV9tb2RlKTtcbiB2b2lkIGlvbW11X2NsZWFudXAoc3RydWN0IGlvbW11ICppb21tdSk7XG4gXG4raW50IF9faW9tbXVmZF9tYXBfZmlsZShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uLCBpbnQgZmQpO1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZClcbit7XG4rXHRWRklPX0FTU0VSVF9FUShfX2lvbW11ZmRfbWFwX2ZpbGUoaW9tbXUsIHJlZ2lvbiwgZmQpLCAwKTtcbit9XG4rXG4gaW50IF9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpb21tdV9tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY1xuaW5kZXggMDM1ZGFjMDY5ZDYwMTYuLjY3MzBiMzkwNjBjYTE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY1xuQEAgLTk3LDYgKzk3LDMwIEBAIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcilcbiBcdHJldHVybiBpb3ZhO1xuIH1cbiBcbitpbnQgX19pb21tdWZkX21hcF9maWxlKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sIGludCBmZClcbit7XG4rXHRWRklPX0FTU0VSVF9UUlVFKGlvbW11LVx1MDAzZWlvbW11ZmQsIFwiSU9NTVVfSU9BU19NQVBfRklMRSBpcyBhbiBJT01NVUZEIElPQ1RMLlwiKTtcbitcbitcdHN0cnVjdCBpb21tdV9pb2FzX21hcF9maWxlIGFyZ3MgPSB7XG4rXHRcdC5zaXplID0gc2l6ZW9mKGFyZ3MpLFxuK1x0XHQuZmxhZ3MgPSBJT01NVV9JT0FTX01BUF9SRUFEQUJMRSB8XG4rXHRcdFx0SU9NTVVfSU9BU19NQVBfV1JJVEVBQkxFIHxcbitcdFx0XHRJT01NVV9JT0FTX01BUF9GSVhFRF9JT1ZBLFxuK1x0XHQuaW9hc19pZCA9IGlvbW11LVx1MDAzZWlvYXNfaWQsXG4rXHRcdC5mZCA9IGZkLFxuK1x0XHQuc3RhcnQgPSAwLFxuK1x0XHQuaW92YSA9IHJlZ2lvbi1cdTAwM2Vpb3ZhLFxuK1x0XHQubGVuZ3RoID0gcmVnaW9uLVx1MDAzZXNpemUsXG4rXHR9O1xuK1xuK1x0aWYgKGlvY3RsKGlvbW11LVx1MDAzZWlvbW11ZmQsIElPTU1VX0lPQVNfTUFQX0ZJTEUsIFx1MDAyNmFyZ3MpKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0bGlzdF9hZGQoXHUwMDI2cmVnaW9uLVx1MDAzZWxpbmssIFx1MDAyNmlvbW11LVx1MDAzZWRtYV9yZWdpb25zKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHZmaW9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXG4ge1xuIFx0c3RydWN0IHZmaW9faW9tbXVfdHlwZTFfZG1hX21hcCBhcmdzID0ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MDMyZjUxYzFhM2U1YlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdC5jXG5AQCAtMCwwICsxLDM4MCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N3b3JkZXhwLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdWZkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC92ZmlvLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpkZXZpY2VfYmRmO1xuK1xuK3N0cnVjdCB0ZXN0X3BhcmFtcyB7XG4rXHR1NjQgc2l6ZTtcbitcdGludCBtbWFwX2ZsYWdzO1xuK307XG4rXG4rc3RydWN0IHRlc3RfcGFyYW1zIHRlc3RfcGFyYW1zO1xuK1xuK3N0cnVjdCBpb21tdV9tYXBwaW5nIHtcbitcdHU2NCBwZ2Q7XG4rXHR1NjQgcDRkO1xuK1x0dTY0IHB1ZDtcbitcdHU2NCBwbWQ7XG4rXHR1NjQgcHRlO1xuK307XG4rXG4rc3RhdGljIHZvaWQgdGltZXJfc3RhcnQoc3RydWN0IHRpbWVzcGVjICpzdGFydCkge1xuK1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIHN0YXJ0KTtcbit9XG4rXG4rc3RhdGljIGRvdWJsZSB0aW1lcl9lbGFwc2VkX21zKHN0cnVjdCB0aW1lc3BlYyBzdGFydClcbit7XG4rXHRzdHJ1Y3QgdGltZXNwZWMgZW5kO1xuK1xuK1x0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNmVuZCk7XG4rXG4rXHRyZXR1cm4gKGRvdWJsZSkoZW5kLnR2X3NlYyAtIHN0YXJ0LnR2X3NlYykgKiBNU0VDX1BFUl9TRUMgK1xuK1x0ICAgICAgIChkb3VibGUpKGVuZC50dl9uc2VjIC0gc3RhcnQudHZfbnNlYykgLyBOU0VDX1BFUl9NU0VDO1xuK31cbitcbitGSVhUVVJFKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0KSB7XG4rXHRzdHJ1Y3QgaW9tbXUgKmlvbW11O1xuK1x0c3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlO1xuK1x0c3RydWN0IGlvdmFfYWxsb2NhdG9yICppb3ZhX2FsbG9jYXRvcjtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdCkge1xuK1x0Y29uc3QgY2hhciAqaW9tbXVfbW9kZTtcbitcdGludCBtbWFwX2ZsYWdzO1xuK307XG4rXG4rI2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoX2lvbW11X21vZGUsIF9uYW1lLCBfbW1hcF9mbGFncylcdCAgICAgICBcXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QsIF9pb21tdV9tb2RlICMjIF8gIyMgX25hbWUpIHsgICBcXFxuK1x0LmlvbW11X21vZGUgPSAjX2lvbW11X21vZGUsXHRcdFx0XHRcdCAgICAgICBcXFxuK1x0Lm1tYXBfZmxhZ3MgPSBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUgfCAoX21tYXBfZmxhZ3MpLFx0ICAgICAgIFxcXG4rfVxuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKGFub255bW91cywgMCk7XG4rRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoYW5vbnltb3VzX2h1Z2V0bGJfMm1iLCBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzJNQik7XG4rRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoYW5vbnltb3VzX2h1Z2V0bGJfMWdiLCBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzFHQik7XG4rXG4rI3VuZGVmIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERVxuK1xuK0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX3Rlc3QpXG4re1xuK1x0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC1cdTAwM2Vpb21tdV9tb2RlKTtcbitcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4rXHRzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLVx1MDAzZWlvbW11KTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfdGVzdClcbit7XG4rXHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IpO1xuK1x0dmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc2VsZi1cdTAwM2VkZXZpY2UpO1xuK1x0aW9tbXVfY2xlYW51cChzZWxmLVx1MDAzZWlvbW11KTtcbit9XG4rXG4rVEVTVF9GKHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0LCBkbWFfbWFwX3VubWFwKVxuK3tcbitcdGNvbnN0IHU2NCBzaXplID0gdGVzdF9wYXJhbXMuc2l6ZTtcbitcdGNvbnN0IGludCBmbGFncyA9IHZhcmlhbnQtXHUwMDNlbW1hcF9mbGFncyB8IHRlc3RfcGFyYW1zLm1tYXBfZmxhZ3M7XG4rXHRzdHJ1Y3QgZG1hX3JlZ2lvbiByZWdpb247XG4rXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7XG4rXHR1NjQgdW5tYXBwZWQ7XG4rXHRpbnQgcmM7XG4rXG4rXHR0aW1lcl9zdGFydChcdTAwMjZzdGFydCk7XG4rXHRyZWdpb24udmFkZHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIGZsYWdzLCAtMSwgMCk7XG4rXHRwcmludGYoXCJDb21wbGV0ZWQgbW1hcCgpIGluICUuMmxmbXNcXG5cIiwgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xuK1xuK1x0LyogU2tpcCB0aGUgdGVzdCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIEh1Z2VUTEIgcGFnZXMgYXZhaWxhYmxlLiAqL1xuK1x0aWYgKGZsYWdzIFx1MDAyNiBNQVBfSFVHRVRMQiBcdTAwMjZcdTAwMjYgcmVnaW9uLnZhZGRyID09IE1BUF9GQUlMRUQpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm1tYXAoKSBmYWlsZWQ6ICVzICglZClcXG5cIiwgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XG4rXHRlbHNlXG4rXHRcdEFTU0VSVF9ORShyZWdpb24udmFkZHIsIE1BUF9GQUlMRUQpO1xuK1xuK1x0cmVnaW9uLmlvdmEgPSBpb3ZhX2FsbG9jYXRvcl9hbGxvYyhzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yLCBzaXplKTtcbitcdHJlZ2lvbi5zaXplID0gc2l6ZTtcbitcbitcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbitcdGlvbW11X21hcChzZWxmLVx1MDAzZWlvbW11LCBcdTAwMjZyZWdpb24pO1xuK1x0cHJpbnRmKFwiTWFwcGVkIEhWQSAlcCAoc2l6ZSAlbHVHKSBhdCBJT1ZBIDB4JWx4IGluICUuMmxmbXNcXG5cIixcbitcdCAgICAgICByZWdpb24udmFkZHIsIHNpemUgLyBTWl8xRywgcmVnaW9uLmlvdmEsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbitcdEFTU0VSVF9FUShyZWdpb24uaW92YSwgdG9faW92YShzZWxmLVx1MDAzZWRldmljZSwgcmVnaW9uLnZhZGRyKSk7XG4rXG4rXHR0aW1lcl9zdGFydChcdTAwMjZzdGFydCk7XG4rXHRyYyA9IF9faW9tbXVfdW5tYXAoc2VsZi1cdTAwM2Vpb21tdSwgXHUwMDI2cmVnaW9uLCBcdTAwMjZ1bm1hcHBlZCk7XG4rXHRwcmludGYoXCJVbm1hcHBlZCBJT1ZBIDB4JWx4IGluICUuMmxmbXNcXG5cIiwgcmVnaW9uLmlvdmEsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbitcdEFTU0VSVF9FUShyYywgMCk7XG4rXHRBU1NFUlRfRVEodW5tYXBwZWQsIHJlZ2lvbi5zaXplKTtcbitcbitcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbitcdEFTU0VSVF9UUlVFKCFtdW5tYXAocmVnaW9uLnZhZGRyLCBzaXplKSk7XG4rXHRwcmludGYoXCJDb21wbGV0ZWQgbXVubWFwKCkgaW4gJS4ybGZtc1xcblwiLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XG4rfVxuK1xuK0ZJWFRVUkUodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpIHtcbitcdHN0cnVjdCBpb21tdSAqaW9tbXU7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2U7XG4rXHRzdHJ1Y3QgaW92YV9hbGxvY2F0b3IgKmlvdmFfYWxsb2NhdG9yO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UKHZmaW9fZG1hX21hcHBpbmdfcGVyZl9tZW1mZF90ZXN0KSB7XG4rXHRjb25zdCBjaGFyICppb21tdV9tb2RlO1xuK1x0aW50IG1tYXBfZmxhZ3M7XG4rXHRpbnQgbWVtZmRfZmxhZ3M7XG4rfTtcbitcbisjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShfaW9tbXVfbW9kZSwgX25hbWUsIF9tbWFwX2ZsYWdzLCBfbWVtZmRfZmxhZ3MpIFxcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCwgX2lvbW11X21vZGUgIyMgXyAjIyBfbmFtZSkgeyAgICBcXFxuK1x0LmlvbW11X21vZGUgPSAjX2lvbW11X21vZGUsXHRcdFx0XHRcdFx0ICAgICAgXFxcbitcdC5tbWFwX2ZsYWdzID0gTUFQX1NIQVJFRCB8IChfbW1hcF9mbGFncyksXHRcdFx0XHQgICAgICBcXFxuK1x0Lm1lbWZkX2ZsYWdzID0gTUFQX1NIQVJFRCB8IChfbWVtZmRfZmxhZ3MpLFx0XHRcdFx0ICAgICAgXFxcbit9XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMobWVtZmQsIDAsIDApO1xuK0ZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKG1lbWZkX2h1Z2V0bGJfMm1iLFxuK1x0XHRcdFx0ICAgIE1BUF9IVUdFVExCIHwgTUFQX0hVR0VfMk1CLFxuK1x0XHRcdFx0ICAgIE1GRF9IVUdFVExCIHwgTUZEX0hVR0VfMk1CKTtcbitGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhtZW1mZF9odWdldGxiXzFnYixcbitcdFx0XHRcdCAgICBNQVBfSFVHRVRMQiB8IE1BUF9IVUdFXzFHQixcbitcdFx0XHRcdCAgICBNRkRfSFVHRVRMQiB8IE1GRF9IVUdFXzFHQik7XG4rXG4rI3VuZGVmIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERVxuK1xuK0ZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3QpXG4re1xuK1x0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC1cdTAwM2Vpb21tdV9tb2RlKTtcbitcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4rXHRzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLVx1MDAzZWlvbW11KTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdClcbit7XG4rXHRpb3ZhX2FsbG9jYXRvcl9jbGVhbnVwKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IpO1xuK1x0dmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc2VsZi1cdTAwM2VkZXZpY2UpO1xuK1x0aW9tbXVfY2xlYW51cChzZWxmLVx1MDAzZWlvbW11KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgKnNldHVwX21lbWZkKGludCAqZmQsIHU2NCBzaXplLCBpbnQgbW1hcF9mbGFncywgaW50IG1mZF9mbGFncylcbit7XG4rXHR2b2lkICpidWYgPSBNQVBfRkFJTEVEO1xuK1x0c3RydWN0IHRpbWVzcGVjIHN0YXJ0O1xuK1xuK1x0dGltZXJfc3RhcnQoXHUwMDI2c3RhcnQpO1xuK1x0KmZkID0gbWVtZmRfY3JlYXRlKFwidmZpb19kbWFfbWFwcGluZ19wZXJmX21lbWZkX3Rlc3RcIiwgbWZkX2ZsYWdzKTtcbitcdHByaW50ZihcIkNvbXBsZXRlZCBtZW1mZF9jcmVhdGUoKSBpbiAlLjJsZm1zXFxuXCIsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbitcdGlmICgqZmQgXHUwMDNjPSAwKVxuK1x0XHRyZXR1cm4gTUFQX0ZBSUxFRDtcbitcbitcdGlmIChmdHJ1bmNhdGUoKmZkLCBzaXplKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR0aW1lcl9zdGFydChcdTAwMjZzdGFydCk7XG4rXHRidWYgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIG1tYXBfZmxhZ3MsICpmZCwgMCk7XG4rXHRwcmludGYoXCJDb21wbGV0ZWQgbW1hcCgpIGZvciBtZW1mZCBpbiAlLjJsZm1zXFxuXCIsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbitcbitvdXQ6XG4rXHRpZiAoYnVmID09IE1BUF9GQUlMRUQpXG4rXHRcdGNsb3NlKCpmZCk7XG4rXG4rXHRyZXR1cm4gYnVmO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZWFyZG93bl9tZW1mZChpbnQgZmQsIHU2NCBzaXplLCB2b2lkICp2YWRkcilcbit7XG4rXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ7XG4rXG4rXHRpZiAodmFkZHIgIT0gTUFQX0ZBSUxFRCkge1xuK1x0XHR0aW1lcl9zdGFydChcdTAwMjZzdGFydCk7XG4rXHRcdG11bm1hcCh2YWRkciwgc2l6ZSk7XG4rXHRcdHByaW50ZihcIkNvbXBsZXRlZCBtdW5tYXAoKSBpbiAlLjJsZm1zXFxuXCIsIHRpbWVyX2VsYXBzZWRfbXMoc3RhcnQpKTtcbitcdH1cbitcbitcdGlmIChmZCAhPSAtMSkge1xuK1x0XHR0aW1lcl9zdGFydChcdTAwMjZzdGFydCk7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0cHJpbnRmKFwiQ29tcGxldGVkIGNsb3NlKCkgaW4gJS4ybGZtc1xcblwiLCB0aW1lcl9lbGFwc2VkX21zKHN0YXJ0KSk7XG4rXHR9XG4rfVxuK1xuK1RFU1RfRih2ZmlvX2RtYV9tYXBwaW5nX3BlcmZfbWVtZmRfdGVzdCwgZG1hX21hcF91bm1hcF9mcm9tX2ZpbGUpXG4re1xuK1x0Y29uc3QgdTY0IHNpemUgPSB0ZXN0X3BhcmFtcy5zaXplO1xuK1x0c3RydWN0IGRtYV9yZWdpb24gcmVnaW9uO1xuK1x0c3RydWN0IHRpbWVzcGVjIHN0YXJ0O1xuK1x0dTY0IHVubWFwcGVkO1xuK1x0aW50IHJjLCBmZDtcbitcbitcdHJlZ2lvbi52YWRkciA9IHNldHVwX21lbWZkKFx1MDAyNmZkLCBzaXplLFxuK1x0XHRcdFx0ICAgdmFyaWFudC1cdTAwM2VtbWFwX2ZsYWdzIHwgdGVzdF9wYXJhbXMubW1hcF9mbGFncyxcbitcdFx0XHRcdCAgIHZhcmlhbnQtXHUwMDNlbWVtZmRfZmxhZ3MpO1xuK1x0QVNTRVJUX05FKHJlZ2lvbi52YWRkciwgTUFQX0ZBSUxFRCk7XG4rXG4rXHRyZWdpb24uaW92YSA9IGlvdmFfYWxsb2NhdG9yX2FsbG9jKHNlbGYtXHUwMDNlaW92YV9hbGxvY2F0b3IsIHNpemUpO1xuK1x0cmVnaW9uLnNpemUgPSBzaXplO1xuK1xuK1x0dGltZXJfc3RhcnQoXHUwMDI2c3RhcnQpO1xuK1x0aWYgKHN0cmNtcCh2YXJpYW50LVx1MDAzZWlvbW11X21vZGUsIE1PREVfSU9NTVVGRCkgPT0gMCkge1xuK1x0XHRpb21tdWZkX21hcF9maWxlKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbiwgZmQpO1xuK1x0fSBlbHNlIHtcbitcdFx0aW9tbXVfbWFwKHNlbGYtXHUwMDNlaW9tbXUsIFx1MDAyNnJlZ2lvbik7XG4rXHR9XG4rXHRwcmludGYoXCJNYXBwZWQgSFZBICVwIChzaXplICVsdUcpIGF0IElPVkEgMHglbHggaW4gJS4ybGZtc1xcblwiLFxuK1x0ICAgICAgIHJlZ2lvbi52YWRkciwgc2l6ZSAvIFNaXzFHLCByZWdpb24uaW92YSwgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xuK1x0QVNTRVJUX0VRKHJlZ2lvbi5pb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24udmFkZHIpKTtcbitcbitcdHRpbWVyX3N0YXJ0KFx1MDAyNnN0YXJ0KTtcbitcdHJjID0gX19pb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCBcdTAwMjZyZWdpb24sIFx1MDAyNnVubWFwcGVkKTtcbitcdHByaW50ZihcIlVubWFwcGVkIElPVkEgMHglbHggaW4gJS4ybGZtc1xcblwiLCByZWdpb24uaW92YSwgdGltZXJfZWxhcHNlZF9tcyhzdGFydCkpO1xuK1x0QVNTRVJUX0VRKHJjLCAwKTtcbitcdEFTU0VSVF9FUSh1bm1hcHBlZCwgcmVnaW9uLnNpemUpO1xuK1xuK1x0dGVhcmRvd25fbWVtZmQoZmQsIHNpemUsIHJlZ2lvbi52YWRkcik7XG4rfVxuK1xuKy8qXG4rICogUGFyc2VzIFwiWzAtOV0rW2ttZ3RdP1wiLlxuKyAqL1xuK3NpemVfdCBwYXJzZV9zaXplKGNvbnN0IGNoYXIgKnNpemUpXG4re1xuK1x0c2l6ZV90IGJhc2U7XG4rXHRjaGFyICpzY2FsZTtcbitcdGludCBzaGlmdCA9IDA7XG4rXG4rXHRWRklPX0FTU0VSVF9UUlVFKHNpemUgXHUwMDI2XHUwMDI2IGlzZGlnaXQoc2l6ZVswXSksXG4rXHRcdFx0IFwiTmVlZCBhdCBsZWFzdCBvbmUgZGlnaXQgaW4gJyVzJy5cIiwgc2l6ZSk7XG4rXG4rXHRiYXNlID0gc3RydG91bGwoc2l6ZSwgXHUwMDI2c2NhbGUsIDApO1xuK1xuK1x0VkZJT19BU1NFUlRfVFJVRShiYXNlICE9IFVMTE9OR19NQVgsIFwiT3ZlcmZsb3cgcGFyc2luZyBzaXplIVwiKTtcbitcbitcdHN3aXRjaCAodG9sb3dlcigqc2NhbGUpKSB7XG4rXHRjYXNlICd0JzpcbitcdFx0c2hpZnQgPSA0MDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlICdnJzpcbitcdFx0c2hpZnQgPSAzMDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlICdtJzpcbitcdFx0c2hpZnQgPSAyMDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlICdrJzpcbitcdFx0c2hpZnQgPSAxMDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlICdiJzpcbitcdGNhc2UgJ1xcMCc6XG4rXHRcdHNoaWZ0ID0gMDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRWRklPX0ZBSUwoXCJVbmtub3duIHNpemUgbGV0dGVyICclYycuXCIsICpzY2FsZSk7XG4rXHR9XG4rXG4rXHRWRklPX0FTU0VSVF9UUlVFKChiYXNlIFx1MDAzY1x1MDAzYyBzaGlmdCkgXHUwMDNlXHUwMDNlIHNoaWZ0ID09IGJhc2UsXG4rXHRcdFx0IFwiT3ZlcmZsb3cgc2NhbGluZyBzaXplIVwiKTtcbitcbitcdHJldHVybiBiYXNlIFx1MDAzY1x1MDAzYyBzaGlmdDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaGVscChjaGFyICpuYW1lKVxuK3tcbitcdHB1dHMoXCJcIik7XG4rXHRwcmludGYoXCJ1c2FnZTogJXMgWy1ofC1wXSBbLWIgYnl0ZXNdIFstYSBcXFwidGVzdCBoYXJuZXNzIGFyZ3NcXFwiXVxcblwiLCBuYW1lKTtcbitcdHB1dHMoXCJcIik7XG4rXHRwcmludGYoXCIgLWg6IERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UuXFxuXCJcbitcdCAgICAgICBcIiAtYjogU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgRE1BIHJlZ2lvbiB0byBiZSBtYXBwZWRcXG5cIlxuK1x0ICAgICAgIFwiICAgICBhbmQgdW5tYXBwZWQuIGUuZy4gMTZNIG9yIDhHLCAoZGVmYXVsdDogMUcpXFxuXCJcbitcdCAgICAgICBcIiAtcDogQXBwZW5kICdNQVBfUE9QVUxBVEUnIHRvIHRoZSBtbWFwKCkgZmxhZ3MgdG8gYXZvaWRcXG5cIlxuK1x0ICAgICAgIFwiICAgICBwcmVmYXVsdGluZyB3aGlsZSBtYXBwaW5nIERNQSByZWdpb25zLiBJbnN0ZWFkLCBhbnlcXG5cIlxuK1x0ICAgICAgIFwiICAgICBhbmQgYWxsIHByZWZhdWx0aW5nIG5lZWRlZCB3aWxsIGhhcHBlbiBkdXJpbmcgdGhlXFxuXCJcbitcdCAgICAgICBcIiAgICAgbW1hcCgpIGNhbGwuIFRoaXMgd2lsbCBtYWtlIG1hcHBpbmcgRE1BIHJlZ2lvbnNcXG5cIlxuK1x0ICAgICAgIFwiICAgICBtb3JlIGNvbnNpc3RlbnQuXFxuXCJcbitcdCAgICAgICBcIiAtYTogQXJncyB0aGF0IGFyZSBmb3J3YXJkZWQgdG8gdGhlIHRlc3QgaGFybmVzcyxcXG5cIlxuK1x0ICAgICAgIFwiICAgICBlLmcuIC1hIFxcXCItdCBkbWFfbWFwX3VubWFwX2Zyb21fZmlsZVxcXCJcXG5cIik7XG4rfVxuK1xuK3N0cnVjdCBoYXJuZXNzX2FyZ3Ncbit7XG4rXHRpbnQgYXJnYztcbitcdGNoYXIgKiphcmd2O1xuK1x0d29yZGV4cF90IGV4cDtcbit9O1xuK1xuK3N0YXRpYyB2b2lkIHBvcHVsYXRlX2hhcm5lc3NfYXJncyhzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzLCBjb25zdCBjaGFyICphcmd2XzAsXG4rXHRcdFx0XHQgIGNvbnN0IGNoYXIgKmNtZGxuZSlcbit7XG4rXHRpZiAod29yZGV4cChhcmd2XzAsIFx1MDAyNmFyZ3MtXHUwMDNlZXhwLCBXUkRFX05PQ01EKSA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHdvcmRleHAoY21kbG5lLCBcdTAwMjZhcmdzLVx1MDAzZWV4cCwgV1JERV9BUFBFTkQgfCBXUkRFX05PQ01EKSA9PSAwKSB7XG4rXHRcdGFyZ3MtXHUwMDNlYXJnYyA9IGFyZ3MtXHUwMDNlZXhwLndlX3dvcmRjO1xuK1x0XHRhcmdzLVx1MDAzZWFyZ3YgPSBhcmdzLVx1MDAzZWV4cC53ZV93b3JkdjtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0dXBfdGVzdChzdHJ1Y3QgaGFybmVzc19hcmdzICphcmdzLCBpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK3tcbitcdGludCBvcHQ7XG4rXG4rXHR0ZXN0X3BhcmFtcyA9IChzdHJ1Y3QgdGVzdF9wYXJhbXMpIHtcbitcdFx0LnNpemUgPSBTWl8xRyxcbitcdFx0Lm1tYXBfZmxhZ3MgPSAwLFxuK1x0fTtcbitcbitcdHdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFwiYTpiOnBoXCIpKSAhPSAtMSkge1xuK1x0XHRzd2l0Y2ggKG9wdCkge1xuK1x0XHRjYXNlICdhJzpcbitcdFx0XHRwb3B1bGF0ZV9oYXJuZXNzX2FyZ3MoYXJncywgYXJndlswXSwgb3B0YXJnKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnYic6XG4rXHRcdFx0dGVzdF9wYXJhbXMuc2l6ZSA9IHBhcnNlX3NpemUob3B0YXJnKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAncCc6XG4rXHRcdFx0dGVzdF9wYXJhbXMubW1hcF9mbGFncyA9IE1BUF9QT1BVTEFURTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSAnaCc6XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0aGVscChhcmd2WzBdKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0fVxuK1xuK291dDpcbitcdC8vIFJlc2V0IGdldG9wdCgpIHN0YXRlIHRvIGFsbG93IHRoZSB0ZXN0IGhhcm5lc3MgdG8gdXNlIGl0LlxuK1x0b3B0aW5kID0gMTsgXG4rfVxuK1xuK3N0YXRpYyB2b2lkIHRlYXJkb3duX3Rlc3Qoc3RydWN0IGhhcm5lc3NfYXJncyAqYXJncylcbit7XG4rXHRpZiAoYXJncy1cdTAwM2Vhcmd2KSB7XG4rXHRcdGFyZ3MtXHUwMDNlYXJnYyA9IDA7XG4rXHRcdGFyZ3MtXHUwMDNlYXJndiA9IE5VTEw7XG4rXHRcdHdvcmRmcmVlKFx1MDAyNmFyZ3MtXHUwMDNlZXhwKTtcbitcdH1cbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRzdHJ1Y3QgaGFybmVzc19hcmdzIGFyZ3MgPSAoc3RydWN0IGhhcm5lc3NfYXJncykge1xuK1x0XHQuYXJnYyA9IDAsXG4rXHRcdC5hcmd2ID0gTlVMTCxcbitcdH07XG4rXHRpbnQgcjtcbitcbitcdHNldHVwX3Rlc3QoXHUwMDI2YXJncywgYXJnYywgYXJndik7XG4rXHRkZXZpY2VfYmRmID0gdmZpb19zZWxmdGVzdHNfZ2V0X2JkZihcdTAwMjZhcmdjLCBhcmd2KTtcbitcdHIgPSB0ZXN0X2hhcm5lc3NfcnVuKGFyZ3MuYXJnYywgYXJncy5hcmd2KTtcbitcdHRlYXJkb3duX3Rlc3QoXHUwMDI2YXJncyk7XG4rXG4rXHRyZXR1cm4gcjtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMjozNzo0NS41MjU0MjA5MzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzExNDIwNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIG5ldyBzZWxmdGVzdCwgYHZmaW9fZG1hX21hcHBpbmdfcGVyZl90ZXN0YCwgYW5kIHR3ZWFrcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuY2AgdG8gaW5jbHVkZSBgX19pb21tdWZkX21hcF9maWxlYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBzdHJpY3RseSBjb250YWluZWQgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gIGRpcmVjdG9yeS4gTm8gY29yZSBrZXJuZWwgY29kZSwgbm8gZHJpdmVyIG1vZGlmaWNhdGlvbnMsIGFuZCBjZXJ0YWlubHkgbm90aGluZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIEl0J3MganVzdCBhZGRpbmcgYSB0ZXN0LCBhbmQgdGhhdCdzIHRoZSBvbmx5IHNjb3BlLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gd2l0aCBhIGRpZmYgY2hlY2sgb2YgdGhlIGNoYW5nZWQgZmlsZXM6IGBNYWtlZmlsZWAsIGFuIGluY2x1ZGUgZmlsZSwgdGhlIG1vZGlmaWVkIEMgZmlsZSwgYW5kIHRoZSBuZXcgdGVzdC4gWWVwLCBhbGwgdW5kZXIgdGhlIGB2ZmlvYCBzZWxmdGVzdCBkaXJlY3RvcnkuXG5cbkdpdmVuIHRoaXMsIHRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYgdGhhdCBhcmUgYXBwcm9wcmlhdGUgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGF0dGFjayBzdXJmYWNlcyBpbiB0aGUga2VybmVsJ3MgY29yZSBsb2dpYy4gVGhlIGZ1enppbmcgZWZmb3J0cyBhcmUgdGFyZ2V0ZWQgdG93YXJkcyB0aGUga2VybmVsIGFuZCBpdHMgaW50ZXJmYWNlcyBhbmQgbm90IHRoZSB0ZXN0IHN1aXRlcy5cblxuQWxyaWdodCwgdGltZSB0byBldmFsdWF0ZSB0aGlzIGFnYWluc3QgdGhlIFwiV29ydGhGdXp6aW5nXCIgZ3VpZGVsaW5lcy4gVGhleSBzcGVjaWZpY2FsbHkgbWVudGlvbiBtb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBsb2dnaW5nLCBjb25zdGFudHMsIGFuZCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiBXaGlsZSBzZWxmdGVzdHMgYXJlbid0IGV4cGxpY2l0bHkgbWVudGlvbmVkLCB0aGV5IGFyZSBub3Qga2VybmVsIGNvZGU7IHRoZXkncmUgdXNlcnNwYWNlIHRvb2xzIHVzZWQgdG8gdGVzdCB0aGUga2VybmVsLiBGdXp6aW5nIHRoZSBrZXJuZWwgYmFzZWQgb24gY2hhbmdlcyAqd2l0aGluKiB0aGUgc2VsZnRlc3RzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUuIFdlIGZ1enogdGhlIGtlcm5lbC5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gTXkgcmVhc29uaW5nIGlzIGNvbmNpc2U6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBzZWxmdGVzdCBhbmQgbW9kaWZpZXMgc2VsZnRlc3QgbGlicmFyeSBjb2RlLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYuXCJcblxuXG4iLCJJbnB1dFRva2VucyI6NzIzOCwiT3V0cHV0VG9rZW5zIjo1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAyOjM3OjUyLjIzNjg0MzI2M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGEgbmV3IHNlbGZ0ZXN0IGFuZCBtb2RpZmllcyBzZWxmdGVzdCBsaWJyYXJ5IGNvZGUuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhIG5ldyBzZWxmdGVzdCBhbmQgbW9kaWZpZXMgc2VsZnRlc3QgbGlicmFyeSBjb2RlLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow9pjwd[1] Phase: Running StartedAt: 2026-07-02 02:39:56 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9pjwd[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-02 02:39:56 +0000 UTC FinishedAt: 2026-07-02 02:40:15 +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,}