Name: series-workflowsxtn7 Phase: Failed StartedAt: 2026-09-03 13:15:21 +0000 UTC FinishedAt: 2026-09-03 13:16:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsxtn7[0] Phase: Succeeded StartedAt: 2026-09-03 13:15:21 +0000 UTC FinishedAt: 2026-09-03 13:16:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsxtn7[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 13:15:21 +0000 UTC FinishedAt: 2026-09-03 13:16:47 +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+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtBbGwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgcmVzdHJpY3RlZCB0byB1c2VyLXNwYWNlIEtWTSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggZG8gbm90IG1vZGlmeSB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzN2EzMDZkN2U4Njk5NzA0ZTE2YjBiZGRkNzVlNWE2OTQ3ZDQ4YzI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMzoxNjoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcbmluZGV4IDZiYjNkODI5MDZiMjIuLmIwZTNmYzhjZDc2YWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuY1xuQEAgLTU5NywxOCAmIzQzOzU5NywxNiBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IHRlc3RfcGFyYW1zICpwKVxuIFxuIFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCxcbiBcdFx0XHRcdCAgICBDT0RFX0FORF9EQVRBX01FTVNMT1QsIGNvZGVfbnBhZ2VzLCAwKTtcbi1cdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fQ09ERV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7XG4tXHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX0RBVEFdID0gQ09ERV9BTkRfREFUQV9NRU1TTE9UO1xuLVxuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBwLVx1MDAzZXNyY190eXBlLCBkYXRhX2dwYSAtIHB0X3NpemUsXG4tXHRcdFx0XHQgICAgUEFHRV9UQUJMRV9NRU1TTE9ULCBwdF9zaXplIC8gZ3Vlc3RfcGFnZV9zaXplLFxuLVx0XHRcdFx0ICAgIHAtXHUwMDNldGVzdF9kZXNjLVx1MDAzZXB0X21lbXNsb3RfZmxhZ3MpO1xuLVx0dm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0gPSBQQUdFX1RBQkxFX01FTVNMT1Q7XG4tXG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhLCBURVNUX0RBVEFfTUVNU0xPVCxcbi1cdFx0XHRcdCAgICBkYXRhX3NpemUgLyBndWVzdF9wYWdlX3NpemUsXG4tXHRcdFx0XHQgICAgcC1cdTAwM2V0ZXN0X2Rlc2MtXHUwMDNlZGF0YV9tZW1zbG90X2ZsYWdzKTtcbi1cdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fVEVTVF9EQVRBXSA9IFRFU1RfREFUQV9NRU1TTE9UO1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0NPREUsIENPREVfQU5EX0RBVEFfTUVNU0xPVCk7XG4mIzQzO1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTtcbiYjNDM7XG4mIzQzO1x0X192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCBwLVx1MDAzZXNyY190eXBlLCBkYXRhX2dwYSAtIHB0X3NpemUsXG4mIzQzO1x0XHRcdFx0IFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgcC1cdTAwM2V0ZXN0X2Rlc2MtXHUwMDNlcHRfbWVtc2xvdF9mbGFncyk7XG4mIzQzO1xuJiM0MztcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIHAtXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhLFxuJiM0MztcdFx0XHRcdCBURVNUX0RBVEFfTUVNU0xPVCwgZGF0YV9zaXplIC8gZ3Vlc3RfcGFnZV9zaXplLFxuJiM0MztcdFx0XHRcdCBwLVx1MDAzZXRlc3RfZGVzYy1cdTAwM2VkYXRhX21lbXNsb3RfZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZXR1cF91Y2FsbChzdHJ1Y3Qga3ZtX3ZtICp2bSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbmluZGV4IDlhNjljNDM5YTBmOGYuLjQ1YTg3YmE1YTczN2EgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuY1xuQEAgLTIzLDcgJiM0MzsyMyw2IEBAXG4gI2RlZmluZSBHSUNfTFBJX09GRlNFVFx0ODE5MlxuIFxuIHN0YXRpYyBzaXplX3QgbnJfaXRlcmF0aW9ucyA9IDEwMDA7XG4tc3RhdGljIGdwYV90IGdwYV9iYXNlO1xuIFxuIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG5AQCAtMTQzLDYgJiM0MzsxNDIsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHNpemVfdCBucl9scGlzKVxuIFxuIHN0YXRpYyB2b2lkIHNldHVwX21lbXNsb3Qodm9pZClcbiB7XG4mIzQzO1x0Z3BhX3QgZ3BhX2Jhc2U7XG4gXHRzaXplX3QgcGFnZXM7XG4gXHRzaXplX3Qgc3o7XG4gXG5AQCAtMTY0LDggJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90KHZvaWQpXG4gXG4gXHRwYWdlcyA9IHN6IC8gdm0tXHUwMDNlcGFnZV9zaXplO1xuIFx0Z3BhX2Jhc2UgPSAoKHZtX2NvbXB1dGVfbWF4X2dmbih2bSkgJiM0MzsgMSkgKiB2bS1cdTAwM2VwYWdlX3NpemUpIC0gc3o7XG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBncGFfYmFzZSxcbi1cdFx0XHRcdCAgICBURVNUX01FTVNMT1RfSU5ERVgsIHBhZ2VzLCAwKTtcbiYjNDM7XHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuJiM0MztcdFx0XHQgICAgICAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMpO1xuIH1cbiBcbiAjZGVmaW5lIExQSV9QUk9QX0RFRkFVTFRfUFJJT1x0MHhhMFxuQEAgLTE5MSwyOCAmIzQzOzE5MSwyNSBAQCBzdGF0aWMgdm9pZCBzZXR1cF90ZXN0X2RhdGEodm9pZClcbiBcdGdwYV90IGNtZHFfYmFzZTtcbiBcbiBcdHRlc3RfZGF0YS5kZXZpY2VfdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXG4tXHRcdFx0XHRcdFx0ICAgIGdwYV9iYXNlLFxuLVx0XHRcdFx0XHRcdCAgICBURVNUX01FTVNMT1RfSU5ERVgpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcbiBcdHRlc3RfZGF0YS5jb2xsZWN0aW9uX3RhYmxlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLFxuLVx0XHRcdFx0XHRcdFx0Z3BhX2Jhc2UsXG4tXHRcdFx0XHRcdFx0XHRURVNUX01FTVNMT1RfSU5ERVgpO1xuJiM0MztcdFx0XHRcdFx0XHRcdE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXG4tXHRjbWRxX2Jhc2UgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssIGdwYV9iYXNlLFxuLVx0XHRcdFx0ICAgICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4mIzQzO1x0Y21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFx0dmlydF9tYXAodm0sIGNtZHFfYmFzZSwgY21kcV9iYXNlLCBwYWdlc19wZXJfNjRrKTtcbiBcdHRlc3RfZGF0YS5jbWRxX2Jhc2UgPSBjbWRxX2Jhc2U7XG4gXHR0ZXN0X2RhdGEuY21kcV9iYXNlX3ZhID0gKHZvaWQgKiljbWRxX2Jhc2U7XG4gXG4gXHR0ZXN0X2RhdGEuaXR0X3RhYmxlcyA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayAqIG5yX2RldmljZXMsXG4tXHRcdFx0XHRcdFx0ICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFxuIFx0dGVzdF9kYXRhLmxwaV9wcm9wX3RhYmxlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLFxuLVx0XHRcdFx0XHRcdCAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFx0Y29uZmlndXJlX2xwaXMoKTtcbiBcbiBcdHRlc3RfZGF0YS5scGlfcGVuZF90YWJsZXMgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGsgKiBucl9jcHVzLFxuLVx0XHRcdFx0XHRcdCAgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdGVzdF9kYXRhKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbmluZGV4IDVhN2E0NTViNTM4NzUuLjg5YjRmYzJhZjc1MTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oXG5AQCAtMzMsNiAmIzQzOzMzLDggQEBcbiBcbiAjZGVmaW5lIE5TRUNfUEVSX1NFQyAxMDAwMDAwMDAwTFxuIFxuJiM0MzsjZGVmaW5lIEtWTV9JTlZBTElEX01FTVNMT1QgVUlOVF9NQVhcbiYjNDM7XG4gc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uIHtcbiBcdHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHJlZ2lvbjtcbiBcdHN0cnVjdCBzcGFyc2ViaXQgKnVudXNlZF9waHlfcGFnZXM7XG5AQCAtODAsMTEgJiM0Mzs4Miw0NSBAQCBzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb25zIHtcbiBcdERFQ0xBUkVfSEFTSFRBQkxFKHNsb3RfaGFzaCwgOSk7XG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogTWVtb3J5IHJlZ2lvbiB0eXBlcyBhcmUgcGFzc2VkIHRvIHZhcmlvdXMgcGFnZSBhbGxvY2F0b3JzIHRvIGNvbW11bmljYXRlXG4mIzQzOyAqIHZhcmlvdXMgcHJvcGVydGllcyBhbmQgbWV0YWRhdGEgcmVsYXRlZCB0byB0aGUgYWxsb2NhdGlvbi4gIE5vdGUsIHRoZVxuJiM0MzsgKiBkZXNjcmlwdGlvbnMgYmVsb3cgZGVzY3JpYmVkIHRoZSBwcmltYXJ5IHVzYWdlIG9mIGVhY2ggdHlwZS4gIEluZGl2aWR1YWxcbiYjNDM7ICogdGVzdHMgbWF5IGFsbG9jYXRlIG1lbW9yeSBmb3Igb3RoZXIgcHVycG9zZXMuXG4mIzQzOyAqXG4mIzQzOyAqIEJ5IGRlZmF1bHQsIGFsbCByZWdpb25zIGV4Y2VwdCBURVNUX0VYVFJBIGFyZSBtYXBwZWQgdG8gbWVtc2xvdCAmIzM5OzAmIzM5Oy4gIFRoZVxuJiM0MzsgKiBURVhUX0VYVFJBIHJlZ2lvbiBpcyBsZWZ0IHVubWFwcGVkIGFzIGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIHVzZWQgb25seSBmb3IgdGVzdFxuJiM0MzsgKiBzcGVjaWZpYyBhbGxvY2F0aW9ucywgaS5lLiBzaG91bGQgbmV2ZXIgYmUgdXNlZCBieSBjb3JlL2luZnJhc3RydWN0dXJlIGNvZGUuXG4mIzQzOyAqIFRlc3RzIGNhbiBvdmVycmlkZSB0aGUgbWVtc2xvdCBmb3IgYW55IG9yIGFsbCB0eXBlcywgZS5nLiBzbyB0aGF0IGFsbCB0ZXN0XG4mIzQzOyAqIGRhdGEgaXMgYWxsb2NhdGVkIGZyb20gYSBjdXJhdGVkIG1lbXNsb3QuXG4mIzQzOyAqL1xuIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgQ09ERSByZWdpb24gaXMgdXNlZCBieSBsaWIvZWxmIHdoZW4gbG9hZGluZyB0aGUgdGVzdCYjMzk7cyBjb2RlIGludG9cbiYjNDM7XHQgKiBndWVzdCBtZW1vcnkuXG4mIzQzO1x0ICovXG4gXHRNRU1fUkVHSU9OX0NPREUsXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgREFUQSByZWdpb24gaXMgdXNlZCB0byBhbGxvY2F0ZSBjb3JlIGRhdGEgc3RydWN0dXJlcywgZS5nLiB2Q1BVXG4mIzQzO1x0ICogc3RhY2tzLCBWTSBleGNlcHRpb24gdGFibGVzLCB4ODYmIzM5O3MgVFNTLCBldGMuXG4mIzQzO1x0ICovXG4gXHRNRU1fUkVHSU9OX0RBVEEsXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgUFQgcmVnaW9uLCBhLmsuYS4gUGFnZSBUYWJsZSByZWdpb24sIGlzIHVzZWQgdG8gYWxsb2NhdGUgcGFnZVxuJiM0MztcdCAqIHRhYmxlIHBhZ2VzLlxuJiM0MztcdCAqL1xuIFx0TUVNX1JFR0lPTl9QVCxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBURVNUX0RBVEEgcmVnaW9uIGlzIHVzZWQgZm9yIGFsbG9jYXRpbmcgdGVzdCBkYXRhIHRoYXQgaXMgZWl0aGVyXG4mIzQzO1x0ICogdGVzdCBzcGVjaWZpYywgYW5kL29yIGlzbiYjMzk7dCBjb25zaWRlcmVkIGEgXCYjMzQ7Y29yZVwmIzM0OyBkYXRhIHN0cnVjdHVyZS5cbiYjNDM7XHQgKi9cbiBcdE1FTV9SRUdJT05fVEVTVF9EQVRBLFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIFRFU1RfRVhUUkEgcmVnaW9uIGlzIGZvciBzcGVjaWFsIHNub3dmbGFrZXMsIHdoZXJlIGEgdGVzdCB3YW50c1xuJiM0MztcdCAqIHRvIGNyZWF0ZSBhbmQgdXNlIGEgb25lLW9mZiBtZW1zbG90LCB3aXRob3V0IGltcGFjdGluZyBcJiMzNDtub3JtYWxcJiMzNDsgdGVzdFxuJiM0MztcdCAqIGRhdGEgYWxsb2NhdGlvbnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0TUVNX1JFR0lPTl9URVNUX0VYVFJBLFxuIFx0TlJfTUVNX1JFR0lPTlMsXG4gfTtcbiBcbkBAIC0xMjcsMTEgJiM0MzsxNjMsNiBAQCBzdHJ1Y3Qga3ZtX3ZtIHtcbiBcbiBcdHN0cnVjdCBrdm1fYmluYXJ5X3N0YXRzIHN0YXRzO1xuIFxuLVx0Lypcbi1cdCAqIEtWTSByZWdpb24gc2xvdHMuIFRoZXNlIGFyZSB0aGUgZGVmYXVsdCBtZW1zbG90cyB1c2VkIGJ5IHBhZ2Vcbi1cdCAqIGFsbG9jYXRvcnMsIGUuZy4sIGxpYi9lbGYgdXNlcyB0aGUgbWVtc2xvdHNbTUVNX1JFR0lPTl9DT0RFXVxuLVx0ICogbWVtc2xvdC5cbi1cdCAqL1xuIFx0dTMyIG1lbXNsb3RzW05SX01FTV9SRUdJT05TXTtcbiB9O1xuIFxuQEAgLTE2OSw3ICYjNDM7MjAwLDggQEAgbWVtc2xvdDJyZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIHUzMiBtZW1zbG90KTtcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqdm1fZ2V0X21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4gXHRcdFx0XHRcdFx0XHQgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKVxuIHtcbi1cdGFzc2VydCh0eXBlIFx1MDAzYyBOUl9NRU1fUkVHSU9OUyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQodHlwZSBcdTAwM2MgTlJfTUVNX1JFR0lPTlMsXG4mIzQzO1x0XHQgICAgXCYjMzQ7SW52YWxpZCBtZW1vcnkgcmVnaW9uIHR5cGUgJiMzOTsldSYjMzk7XCYjMzQ7LCB0eXBlKTtcbiBcdHJldHVybiBtZW1zbG90MnJlZ2lvbih2bSwgdm0tXHUwMDNlbWVtc2xvdHNbdHlwZV0pO1xuIH1cbiBcbkBAIC03MDIsNiAmIzQzOzczNCwzNiBAQCB2b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG4gXHRcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcbiBcdFx0aW50IGd1ZXN0X21lbWZkX2ZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcbiBcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgdTMyIHNsb3QpXG4mIzQzO3tcbiYjNDM7XHRURVNUX0FTU0VSVCh2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSA9PSBLVk1fSU5WQUxJRF9NRU1TTE9ULFxuJiM0MztcdFx0ICAgIFwmIzM0O01lbW9yeSByZWdpb24gdHlwZSAmIzM5OyV1JiMzOTsgd2FzIGFscmVhZHkgb3ZlcnJpZGRlbiB3aXRoIHNsb3Q9JXVcJiMzNDssXG4mIzQzO1x0XHQgICAgdHlwZSwgdm0tXHUwMDNlbWVtc2xvdHNbdHlwZV0pO1xuJiM0MztcbiYjNDM7XHR2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSA9IHNsb3Q7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4mIzQzO1x0XHRcdFx0XHQgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdCAgICBncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLFxuJiM0MztcdFx0XHRcdFx0ICAgIHUzMiBmbGFncylcbiYjNDM7e1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCB0eXBlLCBzbG90KTtcbiYjNDM7XHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHNyY190eXBlLCBncGEsIHNsb3QsIG5wYWdlcywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgIGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIHR5cGUsIHNyY190eXBlLCBncGEsIHNsb3QsIG5wYWdlcywgMCk7XG4mIzQzO31cbiYjNDM7XG4gI2lmbmRlZiB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5XG4gc3RhdGljIGlubGluZSBib29sIHZtX2FyY2hfaGFzX3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IGt2bV92bSAqdm0pXG4ge1xuQEAgLTk5MCwyMyAmIzQzOzEwNTIsNDEgQEAgdm9pZCBrdm1fZ3NpX3JvdXRpbmdfd3JpdGUoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgKnJvdXRpbmcpO1xuIFxuIGNvbnN0IGNoYXIgKmV4aXRfcmVhc29uX3N0cih1bnNpZ25lZCBpbnQgZXhpdF9yZWFzb24pO1xuIFxuLWdwYV90IHZtX3BoeV9wYWdlX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdCk7XG4tZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sIGdwYV90IG1pbl9ncGEsXG4tXHRcdFx0ICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkKTtcbi1ncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKTtcbiYjNDM7Ym9vbCBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcyh2b2lkKTtcbiYjNDM7XG4mIzQzO2dwYV90IF9fX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcywgZ3BhX3QgbWluX2dwYSxcbiYjNDM7XHRcdFx0ICAgICB1MzIgbWVtc2xvdCwgYm9vbCBwcm90ZWN0ZWQsIGJvb2wgbmF0dXJhbGx5X2FsaWduZWQpO1xuJiM0MztncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLFxuJiM0MztcdFx0XHQgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwgYm9vbCBwcm90ZWN0ZWQpO1xuIFxuLXN0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLFxuLVx0XHRcdFx0ICAgICAgIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KVxuJiM0MztzdGF0aWMgaW5saW5lIGdwYV90IHZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLFxuJiM0MztcdFx0XHRcdCAgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcbiB7XG4gXHQvKlxuIFx0ICogQnkgZGVmYXVsdCwgYWxsb2NhdGUgbWVtb3J5IGFzIHByb3RlY3RlZCBmb3IgVk1zIHRoYXQgc3VwcG9ydFxuIFx0ICogcHJvdGVjdGVkIG1lbW9yeSwgYXMgdGhlIG1ham9yaXR5IG9mIG1lbW9yeSBmb3Igc3VjaCBWTXMgaXNcbiBcdCAqIHByb3RlY3RlZCwgaS5lLiB1c2luZyBzaGFyZWQgbWVtb3J5IGlzIGVmZmVjdGl2ZWx5IG9wdC1pbi5cbiBcdCAqL1xuLVx0cmV0dXJuIF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBudW0sIG1pbl9ncGEsIG1lbXNsb3QsXG4mIzQzO1x0cmV0dXJuIF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywgdHlwZSxcbiBcdFx0XHRcdCAgICB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHZtKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGdwYV90IHZtX3BoeV9wYWdlX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLFxuJiM0MztcdFx0XHRcdCAgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMSwgdHlwZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIE1FTV9SRUdJT05fUFQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGt2bV92bSAqdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgMSk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBfX19fdm1fY3JlYXRlKCkgZG9lcyBLVk1fQ1JFQVRFX1ZNIGFuZCBsaXR0bGUgZWxzZS4gIF9fdm1fY3JlYXRlKCkgYWxzb1xuICAqIGxvYWRzIHRoZSB0ZXN0IGJpbmFyeSBpbnRvIGd1ZXN0IG1lbW9yeSBhbmQgY3JlYXRlcyBhbiBJUlEgY2hpcCAoeDg2IG9ubHkpLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaFxuaW5kZXggMmQxYWZhMDk4MTliMC4uMTVmYWFhMDYwMTI2MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oXG5AQCAtOCw3ICYjNDM7OCw3IEBAXG4gI2RlZmluZSBTTVJBTV9NRU1TTE9UXHQoKDEgXHUwMDNjXHUwMDNjIDE2KSB8IDEpXG4gI2RlZmluZSBTTVJBTV9QQUdFU1x0KFNNUkFNX1NJWkUgLyBQQUdFX1NJWkUpXG4gXG4tdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLFxuJiM0Mzt2b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHNtcmFtX2dwYSxcbiBcdFx0IGNvbnN0IHZvaWQgKnNtaV9oYW5kbGVyLCBzaXplX3QgaGFuZGxlcl9zaXplKTtcbiBcbiB2b2lkIGluamVjdF9zbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuY1xuaW5kZXggMDEzMjViZjRkMzZmYy4uMmRjYWEyYzRhMDM4MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcbkBAIC0xMTUsOSAmIzQzOzExNSw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBcdGlmICh2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQpXG4gXHRcdHJldHVybjtcbiBcbi1cdHZtLVx1MDAzZW1tdS5wZ2QgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLFxuLVx0XHRcdFx0XHQgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxuLVx0XHRcdFx0XHQgdm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xuJiM0MztcdHZtLVx1MDAzZW1tdS5wZ2QgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBucl9wYWdlcyk7XG4gXHR2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQgPSB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbmluZGV4IDlkZGMwNDdkNWMyNzUuLjU3YjY1M2ZiZDBiMWYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xuQEAgLTE3LDYgJiM0MzsxNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2FsaWduLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuIFxuICNkZWZpbmUgS1ZNX1VUSUxfTUlOX1BGTlx0MlxuQEAgLTI4Nyw2ICYjNDM7Mjg4LDcgQEAgX193ZWFrIHZvaWQgdm1fcG9wdWxhdGVfZ3ZhX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBzdHJ1Y3Qga3ZtX3ZtICpfX19fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdHZtID0gY2FsbG9jKDEsIHNpemVvZigqdm0pKTtcbiBcdFRFU1RfQVNTRVJUKHZtICE9IE5VTEwsIFwmIzM0O0luc3VmZmljaWVudCBNZW1vcnlcJiMzNDspO1xuQEAgLTI5NSw2ICYjNDM7Mjk3LDggQEAgc3RydWN0IGt2bV92bSAqX19fX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXG4gXHR2bS1cdTAwM2VyZWdpb25zLmdwYV90cmVlID0gUkJfUk9PVDtcbiBcdHZtLVx1MDAzZXJlZ2lvbnMuaHZhX3RyZWUgPSBSQl9ST09UO1xuIFx0aGFzaF9pbml0KHZtLVx1MDAzZXJlZ2lvbnMuc2xvdF9oYXNoKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR2bS1cdTAwM2VtZW1zbG90c1tpXSA9IEtWTV9JTlZBTElEX01FTVNMT1Q7XG4gXG4gXHR2bS1cdTAwM2Vtb2RlID0gc2hhcGUubW9kZTtcbiBcdHZtLVx1MDAzZXR5cGUgPSBzaGFwZS50eXBlO1xuQEAgLTQ5MSw3ICYjNDM7NDk1LDcgQEAgc3RydWN0IGt2bV92bSAqX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlLCB1MzIgbnJfcnVubmFibGVfdmNwdXMsXG4gXHRcdFx0XHRcdFx0IG5yX2V4dHJhX3BhZ2VzKTtcbiBcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqc2xvdDA7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cdGludCBpLCBmbGFncztcbiYjNDM7XHRpbnQgZmxhZ3M7XG4gXG4gXHRrdm1fc2V0X2ZpbGVzX3JsaW1pdChucl9ydW5uYWJsZV92Y3B1cyk7XG4gXG5AQCAtNTA5LDggJiM0Mzs1MTMsMTAgQEAgc3RydWN0IGt2bV92bSAqX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlLCB1MzIgbnJfcnVubmFibGVfdmNwdXMsXG4gXHRcdGZsYWdzIHw9IEtWTV9NRU1fR1VFU1RfTUVNRkQ7XG4gXG4gXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCAwLCAwLCBucl9wYWdlcywgZmxhZ3MpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IGkmIzQzOyYjNDM7KVxuLVx0XHR2bS1cdTAwM2VtZW1zbG90c1tpXSA9IDA7XG4mIzQzO1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgMCk7XG4mIzQzO1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fUFQsIDApO1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIDApO1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgMCk7XG4gXG4gXHRrdm1fdm1fZWxmX2xvYWQodm0sIHByb2dyYW1faW52b2NhdGlvbl9uYW1lKTtcbiBcbkBAIC0xMTg5LDYgJiM0MzsxMTk1LDggQEAgbWVtc2xvdDJyZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIHUzMiBtZW1zbG90KVxuIHtcbiBcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uO1xuIFxuJiM0MztcdFRFU1RfQVNTRVJUKG1lbXNsb3QgIT0gS1ZNX0lOVkFMSURfTUVNU0xPVCwgXCYjMzQ7dm0tXHUwMDNlbWVtc2xvdHNbXSB1bnBvcHVsYXRlZD9cJiMzNDspO1xuJiM0MztcbiBcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUodm0tXHUwMDNlcmVnaW9ucy5zbG90X2hhc2gsIHJlZ2lvbiwgc2xvdF9ub2RlLFxuIFx0XHRcdCAgICAgICBtZW1zbG90KVxuIFx0XHRpZiAocmVnaW9uLVx1MDAzZXJlZ2lvbi5zbG90ID09IG1lbXNsb3QpXG5AQCAtMTQ2NSw5ICYjNDM7MTQ3Myw3IEBAIHN0YXRpYyBndmFfdCBfX19fdm1fYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBzeiwgZ3ZhX3QgbWluX2d2YSxcbiBcdHU2NCBwYWdlcyA9IChzeiBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdCkgJiM0MzsgKChzeiAlIHZtLVx1MDAzZXBhZ2Vfc2l6ZSkgIT0gMCk7XG4gXG4gXHR2aXJ0X3BnZF9hbGxvYyh2bSk7XG4tXHRncGFfdCBncGEgPSBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXMsXG4tXHRcdFx0XHRcdCAgIEtWTV9VVElMX01JTl9QRk4gKiB2bS1cdTAwM2VwYWdlX3NpemUsXG4tXHRcdFx0XHRcdCAgIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdLCBwcm90ZWN0ZWQpO1xuJiM0MztcdGdwYV90IGdwYSA9IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlcywgdHlwZSwgcHJvdGVjdGVkKTtcbiBcbiBcdC8qXG4gXHQgKiBGaW5kIGFuIHVudXNlZCByYW5nZSBvZiB2aXJ0dWFsIHBhZ2UgYWRkcmVzc2VzIG9mIGF0IGxlYXN0XG5AQCAtMjAyNSwzMyAmIzQzOzIwMzEsMjEgQEAgY29uc3QgY2hhciAqZXhpdF9yZWFzb25fc3RyKHVuc2lnbmVkIGludCBleGl0X3JlYXNvbilcbiB9XG4gXG4gLypcbi0gKiBQaHlzaWNhbCBDb250aWd1b3VzIFBhZ2UgQWxsb2NhdG9yXG4tICpcbi0gKiBJbnB1dCBBcmdzOlxuLSAqICAgdm0gLSBWaXJ0dWFsIE1hY2hpbmVcbi0gKiAgIG51bSAtIG51bWJlciBvZiBwYWdlc1xuLSAqICAgbWluX2dwYSAtIFBoeXNpY2FsIGFkZHJlc3MgbWluaW11bVxuLSAqICAgbWVtc2xvdCAtIE1lbW9yeSByZWdpb24gdG8gYWxsb2NhdGUgcGFnZSBmcm9tXG4tICogICBwcm90ZWN0ZWQgLSBUcnVlIGlmIHRoZSBwYWdlcyB3aWxsIGJlIHVzZWQgYXMgcHJvdGVjdGVkL3ByaXZhdGUgbWVtb3J5XG4mIzQzOyAqIEFsbG9jYXRlIGNvbnRpZ3VvdXMgKGd1ZXN0KSBwaHlzaWNhbCBwYWdlcyBpbiBhIGdpdmVuIG1lbW9yeSByZWdpb24sIGF0IG9yXG4mIzQzOyAqIHRoZSBtaW5pbXVtIHNwZWNpZmljIEdQQS4gIElmIHRoZSBtZW1vcnkgaXMgcHJvdGVjdGVkL3ByaXZhdGUsIGFsc28gYWRkIHRoZVxuJiM0MzsgKiBhbGxvY2F0ZSBwYWdlcyB0byB0aGUgcmVnaW9uJiMzOTtzIHNldCBvZiBwcm90ZWN0ZWQgcGFnZXMsIGUuZy4gc28gdGhhdCBhcmNoXG4mIzQzOyAqIGNvZGUga25vd3Mgd2hpY2ggcGFnZXMgbmVlZCB0byBiZSBlbmNyeXB0ZWQgd2hlbiBsYXVuY2hpbmcgdGhlIFZNLlxuICAqXG4tICogT3V0cHV0IEFyZ3M6IE5vbmVcbi0gKlxuLSAqIFJldHVybjpcbi0gKiAgIFN0YXJ0aW5nIHBoeXNpY2FsIGFkZHJlc3Ncbi0gKlxuLSAqIFdpdGhpbiB0aGUgVk0gc3BlY2lmaWVkIGJ5IHZtLCBsb2NhdGVzIGEgcmFuZ2Ugb2YgYXZhaWxhYmxlIHBoeXNpY2FsXG4tICogcGFnZXMgYXQgb3IgYWJvdmUgbWluX2dwYS4gSWYgZm91bmQsIHRoZSBwYWdlcyBhcmUgbWFya2VkIGFzIGluIHVzZVxuLSAqIGFuZCB0aGVpciBiYXNlIGFkZHJlc3MgaXMgcmV0dXJuZWQuIEEgVEVTVF9BU1NFUlQgZmFpbHVyZSBvY2N1cnMgaWZcbi0gKiBub3QgZW5vdWdoIHBhZ2VzIGFyZSBhdmFpbGFibGUgYXQgb3IgYWJvdmUgbWluX2dwYS5cbiYjNDM7ICogTm90ZSwgc3VjY2VzcyBpcyBndWFyYW50ZWVkIVxuICAqL1xuLWdwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLFxuLVx0XHRcdCAgIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90LFxuLVx0XHRcdCAgIGJvb2wgcHJvdGVjdGVkKVxuJiM0MztncGFfdCBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsIGdwYV90IG1pbl9ncGEsXG4mIzQzO1x0XHRcdCAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKVxuIHtcbiYjNDM7XHRzaXplX3QgYWxpZ25tZW50ID0gbmF0dXJhbGx5X2FsaWduZWQgPyBucl9wYWdlcyA6IDE7XG4gXHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnJlZ2lvbjtcbiBcdHNwYXJzZWJpdF9pZHhfdCBwZywgYmFzZTtcbiBcbi1cdFRFU1RfQVNTRVJUKG51bSBcdTAwM2UgMCwgXCYjMzQ7TXVzdCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZVwmIzM0Oyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQobnJfcGFnZXMsIFwmIzM0O011c3QgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHBhZ2VcJiMzNDspO1xuIFxuIFx0VEVTVF9BU1NFUlQoKG1pbl9ncGEgJSB2bS1cdTAwM2VwYWdlX3NpemUpID09IDAsIFwmIzM0O01pbiBwaHlzaWNhbCBhZGRyZXNzIFwmIzM0O1xuIFx0XHRcJiMzNDtub3QgZGl2aXNpYmxlIGJ5IHBhZ2Ugc2l6ZS5cXG5cJiMzNDtcbkBAIC0yMDYyLDQzICYjNDM7MjA1Niw3OCBAQCBncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSxcbiBcdFRFU1RfQVNTRVJUKCFwcm90ZWN0ZWQgfHwgcmVnaW9uLVx1MDAzZXByb3RlY3RlZF9waHlfcGFnZXMsXG4gXHRcdCAgICBcJiMzNDtSZWdpb24gZG9lc24mIzM5O3Qgc3VwcG9ydCBwcm90ZWN0ZWQgbWVtb3J5XCYjMzQ7KTtcbiBcbi1cdGJhc2UgPSBwZyA9IG1pbl9ncGEgXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQ7XG4tXHRkbyB7XG4tXHRcdGZvciAoOyBwZyBcdTAwM2MgYmFzZSAmIzQzOyBudW07ICYjNDM7JiM0MztwZykge1xuLVx0XHRcdGlmICghc3BhcnNlYml0X2lzX3NldChyZWdpb24tXHUwMDNldW51c2VkX3BoeV9wYWdlcywgcGcpKSB7XG4tXHRcdFx0XHRiYXNlID0gcGcgPSBzcGFyc2ViaXRfbmV4dF9zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbiYjNDM7XHRiYXNlID0gbWluX2dwYSBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdDtcbiYjNDM7YWdhaW46XG4mIzQzO1x0YmFzZSA9IEFMSUdOKGJhc2UsIGFsaWdubWVudCk7XG4mIzQzO1x0Zm9yIChwZyA9IGJhc2U7IHBnIFx1MDAzYyBiYXNlICYjNDM7IG5yX3BhZ2VzOyAmIzQzOyYjNDM7cGcpIHtcbiYjNDM7XHRcdGlmICghc3BhcnNlYml0X2lzX3NldChyZWdpb24tXHUwMDNldW51c2VkX3BoeV9wYWdlcywgcGcpKSB7XG4mIzQzO1x0XHRcdGJhc2UgPSBzcGFyc2ViaXRfbmV4dF9zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKTtcbiYjNDM7XHRcdFx0aWYgKCFiYXNlKVxuJiM0MztcdFx0XHRcdGdvdG8gZW5vbWVtO1xuJiM0MztcdFx0XHRnb3RvIGFnYWluO1xuIFx0XHR9XG4tXHR9IHdoaWxlIChwZyBcdTAwMjZcdTAwMjYgcGcgIT0gYmFzZSAmIzQzOyBudW0pO1xuLVxuLVx0aWYgKHBnID09IDApIHtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O05vIGd1ZXN0IHBoeXNpY2FsIHBhZ2UgYXZhaWxhYmxlLCBcJiMzNDtcbi1cdFx0XHRcJiMzNDttaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcXG5cJiMzNDssXG4tXHRcdFx0bWluX2dwYSwgdm0tXHUwMDNlcGFnZV9zaXplLCBtZW1zbG90KTtcbi1cdFx0ZnB1dHMoXCYjMzQ7LS0tLSB2bSBkdW1wIC0tLS1cXG5cJiMzNDssIHN0ZGVycik7XG4tXHRcdHZtX2R1bXAoc3RkZXJyLCB2bSwgMik7XG4tXHRcdGFib3J0KCk7XG4gXHR9XG4gXG4tXHRmb3IgKHBnID0gYmFzZTsgcGcgXHUwMDNjIGJhc2UgJiM0MzsgbnVtOyAmIzQzOyYjNDM7cGcpIHtcbiYjNDM7XHRmb3IgKHBnID0gYmFzZTsgcGcgXHUwMDNjIGJhc2UgJiM0MzsgbnJfcGFnZXM7ICYjNDM7JiM0MztwZykge1xuIFx0XHRzcGFyc2ViaXRfY2xlYXIocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKTtcbiBcdFx0aWYgKHByb3RlY3RlZClcbiBcdFx0XHRzcGFyc2ViaXRfc2V0KHJlZ2lvbi1cdTAwM2Vwcm90ZWN0ZWRfcGh5X3BhZ2VzLCBwZyk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gYmFzZSAqIHZtLVx1MDAzZXBhZ2Vfc2l6ZTtcbiYjNDM7XG4mIzQzO2Vub21lbTpcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7Tm8gZ3Vlc3QgcGh5c2ljYWwgcGFnZSBhdmFpbGFibGUsIG1pbl9ncGE6IDB4JWx4IHBhZ2Vfc2l6ZTogMHgleCBtZW1zbG90OiAldVxcblwmIzM0OyxcbiYjNDM7XHRcdG1pbl9ncGEsIHZtLVx1MDAzZXBhZ2Vfc2l6ZSwgbWVtc2xvdCk7XG4mIzQzO1x0ZnB1dHMoXCYjMzQ7LS0tLSB2bSBkdW1wIC0tLS1cXG5cJiMzNDssIHN0ZGVycik7XG4mIzQzO1x0dm1fZHVtcChzdGRlcnIsIHZtLCAyKTtcbiYjNDM7XHRhYm9ydCgpO1xuJiM0MztcdF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpO1xuIH1cbiBcbi1ncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpXG4mIzQzO19fd2VhayBib29sIGt2bV9hcmNoX25lZWRzX25hdHVyYWxseV9hbGlnbmVkX3BhZ2VfdGFibGVzKHZvaWQpXG4ge1xuLVx0cmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMSwgbWluX2dwYSwgbWVtc2xvdCk7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1ncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKVxuJiM0MztncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLFxuJiM0MztcdFx0XHQgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwgYm9vbCBwcm90ZWN0ZWQpXG4ge1xuLVx0cmV0dXJuIHZtX3BoeV9wYWdlX2FsbG9jKHZtLCBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsXG4tXHRcdFx0XHQgdm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xuJiM0MztcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uID0gdm1fZ2V0X21lbV9yZWdpb24odm0sIHR5cGUpO1xuJiM0MztcdGJvb2wgbmF0dXJhbGx5X2FsaWduZWQgPSBmYWxzZTtcbiYjNDM7XHRncGFfdCBtaW5fZ3BhO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVChyZWdpb24sIFwmIzM0O05vIHJlZ2lvbiBmb3IgdHlwZSAmIzM5OyV1JiMzOTssIG1lbXNsb3QgJiMzOTsldSYjMzk7XCYjMzQ7LFxuJiM0MztcdFx0ICAgIHR5cGUsIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBNRU1fUkVHSU9OX0NPREU6XG4mIzQzO1x0Y2FzZSBNRU1fUkVHSU9OX0RBVEE6XG4mIzQzO1x0Y2FzZSBNRU1fUkVHSU9OX1RFU1RfREFUQTpcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiB0aGUgcmVnaW9uIGlzIGJhY2tlZCBieSB0aGUgZGVmYXVsdCBtZW1zbG90IChpZD0wKSwgdXNlXG4mIzQzO1x0XHQgKiBzZWxmdGVzdHMmIzM5OyBoYXJkY29kZWQgbWluaW11bSBQRk4sIG90aGVyd2lzZSB1c2UgdGhlIGJhc2Ugb2ZcbiYjNDM7XHRcdCAqIHRoZSBjdXN0b20gbWVtb3J5IHNsb3QgdGhhdCBiYWNrcyB0aGUgcmVnaW9uLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIXZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdKVxuJiM0MztcdFx0XHRtaW5fZ3BhID0gS1ZNX1VUSUxfTUlOX1BGTiAqIHZtLVx1MDAzZXBhZ2Vfc2l6ZTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bWluX2dwYSA9IHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBNRU1fUkVHSU9OX1BUOlxuJiM0MztcdFx0bWluX2dwYSA9IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUjtcbiYjNDM7XHRcdG5hdHVyYWxseV9hbGlnbmVkID0ga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXMoKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUVNX1JFR0lPTl9URVNUX0VYVFJBOlxuJiM0MztcdFx0bWluX2dwYSA9IHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdFRFU1RfRkFJTChcJiMzNDtJbnZhbGlkIG1lbW9yeSByZWdpb24gdHlwZSAmIzM5OyV1JiMzOTtcJiMzNDssIHR5cGUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIG1pbl9ncGEsIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdLFxuJiM0MztcdFx0XHRcdCAgICAgIHByb3RlY3RlZCwgbmF0dXJhbGx5X2FsaWduZWQpO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcbmluZGV4IDQ3YmJkZTNlMjA1YTAuLmZjZDQxYmM2ZmJkYWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcbkBAIC05LDcgJiM0Mzs5LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtwcm9jZXNzb3IuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3VjYWxsX2NvbW1vbi5oXCYjMzQ7XG4gXG4tI2RlZmluZSBMT09OR0FSQ0hfUEFHRV9UQUJMRV9QSFlTX01JTlx0XHQweDIwMDAwMFxuICNkZWZpbmUgTE9PTkdBUkNIX0dVRVNUX1NUQUNLX1ZBRERSX01JTlx0XHQweDIwMDAwMFxuIFxuIHN0YXRpYyBncGFfdCBpbnZhbGlkX3BndGFibGVbNF07XG5AQCAtNTcsOSAmIzQzOzU2LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFx0Y2hpbGQgPSB0YWJsZSA9IDA7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2bS1cdTAwM2VtbXUucGd0YWJsZV9sZXZlbHM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGludmFsaWRfcGd0YWJsZVtpXSA9IGNoaWxkO1xuLVx0XHR0YWJsZSA9IHZtX3BoeV9wYWdlX2FsbG9jKHZtLCBMT09OR0FSQ0hfUEFHRV9UQUJMRV9QSFlTX01JTixcbi1cdFx0XHRcdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbi1cdFx0VEVTVF9BU1NFUlQodGFibGUsIFwmIzM0O0ZhaWwgdG8gYWxsb2NhdGUgcGFnZSB0YWxlIGF0IGxldmVsICVkXFxuXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdHRhYmxlID0gdm1fYWxsb2NfcGFnZV90YWJsZSh2bSk7XG4gXHRcdHZpcnRfc2V0X3BndGFibGUodm0sIHRhYmxlLCBjaGlsZCk7XG4gXHRcdGNoaWxkID0gdGFibGU7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbmluZGV4IGRlZDU0MjlmMzQ0ODMuLmMxNzVkY2QxNDExNDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5AQCAtNjksOSAmIzQzOzY5LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFx0aWYgKHZtLVx1MDAzZW1tdS5wZ2RfY3JlYXRlZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0dm0tXHUwMDNlbW11LnBnZCA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsXG4tXHRcdFx0XHRcdCBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsXG4tXHRcdFx0XHRcdCB2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XG4mIzQzO1x0dm0tXHUwMDNlbW11LnBnZCA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIG5yX3BhZ2VzKTtcbiBcdHZtLVx1MDAzZW1tdS5wZ2RfY3JlYXRlZCA9IHRydWU7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuY1xuaW5kZXggYTlhZGIzNzgyYjM1Mi4uMzNmNDlkNzQzYjVmZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jXG5AQCAtMjAsOSAmIzQzOzIwLDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFx0aWYgKHZtLVx1MDAzZW1tdS5wZ2RfY3JlYXRlZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBQQUdFU19QRVJfUkVHSU9OLFxuLVx0XHRcdFx0ICAgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxuLVx0XHRcdFx0ICAgdm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xuJiM0MztcdGdwYSA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIFBBR0VTX1BFUl9SRUdJT04pO1xuIFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgZ3BhKSwgMHhmZiwgUEFHRVNfUEVSX1JFR0lPTiAqIHZtLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4gXG4gXHR2bS1cdTAwM2VtbXUucGdkID0gZ3BhO1xuQEAgLTM4LDggJiM0MzszNiw3IEBAIHN0YXRpYyB1NjQgdmlydF9hbGxvY19yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIGludCByaSlcbiB7XG4gXHR1NjQgdGFkZHI7XG4gXG4tXHR0YWRkciA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgIHJpIFx1MDAzYyA0ID8gUEFHRVNfUEVSX1JFR0lPTiA6IDEsXG4tXHRcdFx0XHQgICBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsIDApO1xuJiM0MztcdHRhZGRyID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgcmkgXHUwMDNjIDQgPyBQQUdFU19QRVJfUkVHSU9OIDogMSk7XG4gXHRtZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCB0YWRkciksIDB4ZmYsIFBBR0VTX1BFUl9SRUdJT04gKiB2bS1cdTAwM2VwYWdlX3NpemUpO1xuIFxuIFx0cmV0dXJuICh0YWRkciBcdTAwMjYgUkVHSU9OX0VOVFJZX09SSUdJTilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5pbmRleCBkMzFmYTgxZWEwNzU2Li40NzllOWE0ODE2ODdkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5AQCAtNTI5LDcgJiM0Mzs1MjksMTAgQEAgdm9pZCB0ZHBfaWRlbnRpdHlfbWFwX2RlZmF1bHRfbWVtc2xvdHMoc3RydWN0IGt2bV92bSAqdm0pXG4gXG4gXHQvKiBPbmx5IG1lbXNsb3QgMCBpcyBtYXBwZWQgaGVyZSwgZW5zdXJlIGl0JiMzOTtzIHRoZSBvbmx5IG9uZSBiZWluZyB1c2VkICovXG4gXHRmb3IgKHMgPSAwOyBzIFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgcyYjNDM7JiM0MzspXG4tXHRcdFRFU1RfQVNTRVJUX0VRKHZtLVx1MDAzZW1lbXNsb3RzW3NdLCAwKTtcbiYjNDM7XHRcdFRFU1RfQVNTRVJUKCF2bS1cdTAwM2VtZW1zbG90c1tzXSB8fFxuJiM0MztcdFx0XHQgICAgdm0tXHUwMDNlbWVtc2xvdHNbc10gPT0gS1ZNX0lOVkFMSURfTUVNU0xPVCxcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O1VuaGFuZGxlZCBtZW1zbG90ICYjMzk7JXUmIzM5OyBmb3IgdHlwZSAmIzM5OyV1JiMzOTtcJiMzNDssXG4mIzQzO1x0XHRcdCAgICB2bS1cdTAwM2VtZW1zbG90c1tzXSwgcyk7XG4gXG4gXHRpID0gKHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyIFx1MDAzZVx1MDAzZSB2bS1cdTAwM2VwYWdlX3NoaWZ0KSAtIDE7XG4gXHRsYXN0ID0gaSAmIzQzOyAocmVnaW9uLVx1MDAzZXJlZ2lvbi5tZW1vcnlfc2l6ZSBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdCk7XG5AQCAtMTQ2NSwxMyAmIzQzOzE0NjgsMTMgQEAgYm9vbCBrdm1fYXJjaF9oYXNfZGVmYXVsdF9pcnFjaGlwKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLFxuJiM0Mzt2b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHNtcmFtX2dwYSxcbiBcdFx0IGNvbnN0IHZvaWQgKnNtaV9oYW5kbGVyLCBzaXplX3QgaGFuZGxlcl9zaXplKVxuIHtcbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIHNtcmFtX2dwYSxcbi1cdFx0XHRcdCAgICBTTVJBTV9NRU1TTE9ULCBTTVJBTV9QQUdFUywgMCk7XG4tXHRURVNUX0FTU0VSVCh2bV9waHlfcGFnZXNfYWxsb2Modm0sIFNNUkFNX1BBR0VTLCBzbXJhbV9ncGEsXG4tXHRcdFx0XHQgICAgICAgU01SQU1fTUVNU0xPVCkgPT0gc21yYW1fZ3BhLFxuJiM0MztcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4mIzQzO1x0XHRcdCAgICAgICBzbXJhbV9ncGEsIFNNUkFNX01FTVNMT1QsIFNNUkFNX1BBR0VTKTtcbiYjNDM7XG4mIzQzO1x0VEVTVF9BU1NFUlQodm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBTTVJBTV9QQUdFUywgTUVNX1JFR0lPTl9URVNUX0VYVFJBKSA9PSBzbXJhbV9ncGEsXG4gXHRcdCAgICBcJiMzNDtDb3VsZCBub3QgYWxsb2NhdGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGZvciBTTVJBTVwmIzM0Oyk7XG4gXG4gXHRtZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCBzbXJhbV9ncGEpLCAweDAsIFNNUkFNX1NJWkUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcbmluZGV4IGUxMjk5NjExYmUzMjIuLjg0NGVhOWI3YmI0MWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcbkBAIC0zMzksNyAmIzQzOzMzOSw4IEBAIHN0YXRpYyBib29sIHByZXBhcmVfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEsIGludCBuc2xvdHMsIHU2NCAqbWF4c2xvdHMsXG4gXHRcdGlmIChzbG90ID09IGRhdGEtXHUwMDNlbnNsb3RzKVxuIFx0XHRcdG5wYWdlcyAmIzQzOz0gcmVtcGFnZXM7XG4gXG4tXHRcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyhkYXRhLVx1MDAzZXZtLCBucGFnZXMsIGd1ZXN0X2FkZHIsIHNsb3QpO1xuJiM0MztcdFx0Z3BhID0gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhkYXRhLVx1MDAzZXZtLCBucGFnZXMsIGd1ZXN0X2FkZHIsIHNsb3QsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGZhbHNlLCBmYWxzZSk7XG4gXHRcdFRFU1RfQVNTRVJUKGdwYSA9PSBndWVzdF9hZGRyLFxuIFx0XHRcdCAgICBcJiMzNDt2bV9waHlfcGFnZXNfYWxsb2MoKSBmYWlsZWRcJiMzNDspO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbmluZGV4IDE1ZDgxYjJlZDdhZDMuLjczMzg3Y2MzYmNhNzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbkBAIC0xMDIsMjQgJiM0MzsxMDIsMTcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfZGlydHlfdGVzdF9kYXRhKHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgY3JlYXRlX21haW5fbWVtc2xvdChzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiB7XG4tXHRpbnQgaTtcbi1cbiBcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsIDAsIE1BSU5fUEFHRV9DT1VOVCwgMCk7XG4tXHQvKiBzZXQgdGhlIGFycmF5IG9mIG1lbXNsb3RzIHRvIHplcm8gbGlrZSBfX3ZtX2NyZWF0ZSBkb2VzICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgaSYjNDM7JiM0MzspXG4tXHRcdHZtLVx1MDAzZW1lbXNsb3RzW2ldID0gMDtcbiYjNDM7XHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCAwKTtcbiYjNDM7XHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgMCk7XG4mIzQzO1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgMCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNyZWF0ZV90ZXN0X21lbXNsb3Qoc3RydWN0IGt2bV92bSAqdm0pXG4ge1xuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLFxuLVx0XHRcdFx0ICAgIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuLVx0XHRcdFx0ICAgIFRFU1RfREFUQV9TVEFSVF9HRk4gXHUwMDNjXHUwMDNjIHZtLVx1MDAzZXBhZ2Vfc2hpZnQsXG4tXHRcdFx0XHQgICAgVEVTVF9EQVRBX01FTVNMT1QsXG4tXHRcdFx0XHQgICAgVEVTVF9EQVRBX1BBR0VfQ09VTlQsXG4tXHRcdFx0XHQgICAgMFxuLVx0XHRcdFx0ICAgKTtcbi1cdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fVEVTVF9EQVRBXSA9IFRFU1RfREFUQV9NRU1TTE9UO1xuJiM0MztcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbiYjNDM7XHRcdFx0ICAgICAgIFRFU1RfREFUQV9TVEFSVF9HRk4gXHUwMDNjXHUwMDNjIHZtLVx1MDAzZXBhZ2Vfc2hpZnQsXG4mIzQzO1x0XHRcdCAgICAgICBURVNUX0RBVEFfTUVNU0xPVCwgVEVTVF9EQVRBX1BBR0VfQ09VTlQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBjcmVhdGVfbWVtc2xvdHMoc3RydWN0IGt2bV92bSAqdm0pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmNcbmluZGV4IGYzODM5Mjg0YWMwODEuLmNkMjZjYzFhZWQ4MDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jXG5AQCAtMzYsNyAmIzQzOzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdCh2b2lkKVxuIFx0fTtcbiBcbiBcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XG4tXHRtZW0gPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIDQwOTYgKiA0MiwgMCk7XG4mIzQzO1x0bWVtID0gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgNDA5NiAqIDQyLCAwLCBmYWxzZSwgZmFsc2UpO1xuIFxuIFx0cm91dGluZyA9IGt2bV9nc2lfcm91dGluZ19jcmVhdGUoKTtcbiBcdHJvdXRpbmctXHUwMDNlbnIgPSAxO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXG5pbmRleCBkZmZlOTY1NGY0NWJkLi5iZmE1YWM4Y2UwMjk1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuQEAgLTExNiwxNSAmIzQzOzExNiwxNSBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqc3Bhd25fdm0oc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwgcHRocmVhZF90ICp2Y3B1X3RocmVhZCxcbiBcbiBcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7XG4gXG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTX1RIUCxcbi1cdFx0XHRcdCAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxuLVx0XHRcdFx0ICAgIE1FTV9SRUdJT05fU0laRSAvIGdldHBhZ2VzaXplKCksIDApO1xuJiM0MztcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVNfVEhQLFxuJiM0MztcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcbiYjNDM7XHRcdFx0ICAgICAgIE1FTV9SRUdJT05fU0laRSAvIGdldHBhZ2VzaXplKCkpO1xuIFxuIFx0LypcbiBcdCAqIEFsbG9jYXRlIGFuZCBtYXAgdHdvIHBhZ2VzIHNvIHRoYXQgdGhlIEdQQSBhY2Nlc3NlZCBieSBndWVzdF9jb2RlKClcbiBcdCAqIHN0YXlzIHZhbGlkIGFjcm9zcyB0aGUgbWVtc2xvdCBtb3ZlLlxuIFx0ICovXG4tXHRncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QpO1xuJiM0MztcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcdFRFU1RfQVNTRVJUKGdwYSA9PSBNRU1fUkVHSU9OX0dQQSwgXCYjMzQ7RmFpbGVkIHZtX3BoeV9wYWdlc19hbGxvY1xcblwmIzM0Oyk7XG4gXG4gXHR2aXJ0X21hcCh2bSwgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fR1BBLCAyKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuY1xuaW5kZXggM2RjYTg1ZTk1NDc4MS4uOGQxODIyNzE3YWJkYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNcbkBAIC02MiwxMSAmIzQzOzYyLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRURVNUX0FTU0VSVChyYywgXCYjMzQ7S1ZNX0NBUF9FWElUX09OX0VNVUxBVElPTl9GQUlMVVJFIGlzIHVuYXZhaWxhYmxlXCYjMzQ7KTtcbiBcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhJVF9PTl9FTVVMQVRJT05fRkFJTFVSRSwgMSk7XG4gXG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuLVx0XHRcdFx0ICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsXG4tXHRcdFx0XHQgICAgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFLCAwKTtcbiYjNDM7XHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuJiM0MztcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcbiYjNDM7XHRcdFx0ICAgICAgIE1FTV9SRUdJT05fU0laRSAvIFBBR0VfU0laRSk7XG4mIzQzO1xuIFx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUsXG4tXHRcdFx0XHQgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCk7XG4mIzQzO1x0XHRcdFx0IE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXHRURVNUX0FTU0VSVChncGEgPT0gTUVNX1JFR0lPTl9HUEEsIFwmIzM0O0ZhaWxlZCB2bV9waHlfcGFnZXNfYWxsb2NcJiMzNDspO1xuIFx0dmlydF9tYXAodm0sIE1FTV9SRUdJT05fR1ZBLCBNRU1fUkVHSU9OX0dQQSwgMSk7XG4gXHRodmEgPSBhZGRyX2dwYTJodmEodm0sIE1FTV9SRUdJT05fR1BBKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O0FsbCBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzIGFyZSByZXN0cmljdGVkIHRvIHVzZXItc3BhY2UgS1ZNIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBkbyBub3QgbW9kaWZ5IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM3YTMwNmQ3ZTg2OTk3MDRlMTZiMGJkZGQ3NWU1YTY5NDdkNDhjMjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDEzOjE2OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jCmluZGV4IDZiYjNkODI5MDZiMjIuLmIwZTNmYzhjZDc2YWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmMKQEAgLTU5NywxOCAmIzQzOzU5NywxNiBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IHRlc3RfcGFyYW1zICpwKQogCiAJdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwKIAkJCQkgICAgQ09ERV9BTkRfREFUQV9NRU1TTE9ULCBjb2RlX25wYWdlcywgMCk7Ci0Jdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fQ09ERV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7Ci0Jdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fREFUQV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7Ci0KLQl2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtJmd0O3NyY190eXBlLCBkYXRhX2dwYSAtIHB0X3NpemUsCi0JCQkJICAgIFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSwKLQkJCQkgICAgcC0mZ3Q7dGVzdF9kZXNjLSZndDtwdF9tZW1zbG90X2ZsYWdzKTsKLQl2bS0mZ3Q7bWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0gPSBQQUdFX1RBQkxFX01FTVNMT1Q7Ci0KLQl2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtJmd0O3NyY190eXBlLCBkYXRhX2dwYSwgVEVTVF9EQVRBX01FTVNMT1QsCi0JCQkJICAgIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSwKLQkJCQkgICAgcC0mZ3Q7dGVzdF9kZXNjLSZndDtkYXRhX21lbXNsb3RfZmxhZ3MpOwotCXZtLSZndDttZW1zbG90c1tNRU1fUkVHSU9OX1RFU1RfREFUQV0gPSBURVNUX0RBVEFfTUVNU0xPVDsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTsKJiM0MzsKJiM0MzsJX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCBwLSZndDtzcmNfdHlwZSwgZGF0YV9ncGEgLSBwdF9zaXplLAomIzQzOwkJCQkgUEFHRV9UQUJMRV9NRU1TTE9ULCBwdF9zaXplIC8gZ3Vlc3RfcGFnZV9zaXplLAomIzQzOwkJCQkgcC0mZ3Q7dGVzdF9kZXNjLSZndDtwdF9tZW1zbG90X2ZsYWdzKTsKJiM0MzsKJiM0MzsJX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgcC0mZ3Q7c3JjX3R5cGUsIGRhdGFfZ3BhLAomIzQzOwkJCQkgVEVTVF9EQVRBX01FTVNMT1QsIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSwKJiM0MzsJCQkJIHAtJmd0O3Rlc3RfZGVzYy0mZ3Q7ZGF0YV9tZW1zbG90X2ZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0dXBfdWNhbGwoc3RydWN0IGt2bV92bSAqdm0pCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMKaW5kZXggOWE2OWM0MzlhMGY4Zi4uNDVhODdiYTVhNzM3YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuYwpAQCAtMjMsNyAmIzQzOzIzLDYgQEAKICNkZWZpbmUgR0lDX0xQSV9PRkZTRVQJODE5MgogCiBzdGF0aWMgc2l6ZV90IG5yX2l0ZXJhdGlvbnMgPSAxMDAwOwotc3RhdGljIGdwYV90IGdwYV9iYXNlOwogCiBzdGF0aWMgc3RydWN0IGt2bV92bSAqdm07CiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7CkBAIC0xNDMsNiAmIzQzOzE0Miw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUoc2l6ZV90IG5yX2xwaXMpCiAKIHN0YXRpYyB2b2lkIHNldHVwX21lbXNsb3Qodm9pZCkKIHsKJiM0MzsJZ3BhX3QgZ3BhX2Jhc2U7CiAJc2l6ZV90IHBhZ2VzOwogCXNpemVfdCBzejsKIApAQCAtMTY0LDggJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90KHZvaWQpCiAKIAlwYWdlcyA9IHN6IC8gdm0tJmd0O3BhZ2Vfc2l6ZTsKIAlncGFfYmFzZSA9ICgodm1fY29tcHV0ZV9tYXhfZ2ZuKHZtKSAmIzQzOyAxKSAqIHZtLSZndDtwYWdlX3NpemUpIC0gc3o7Ci0Jdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgZ3BhX2Jhc2UsCi0JCQkJICAgIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMsIDApOwomIzQzOwl2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLAomIzQzOwkJCSAgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYLCBwYWdlcyk7CiB9CiAKICNkZWZpbmUgTFBJX1BST1BfREVGQVVMVF9QUklPCTB4YTAKQEAgLTE5MSwyOCAmIzQzOzE5MSwyNSBAQCBzdGF0aWMgdm9pZCBzZXR1cF90ZXN0X2RhdGEodm9pZCkKIAlncGFfdCBjbWRxX2Jhc2U7CiAKIAl0ZXN0X2RhdGEuZGV2aWNlX3RhYmxlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLAotCQkJCQkJICAgIGdwYV9iYXNlLAotCQkJCQkJICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7CiYjNDM7CQkJCQkJICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7CiAKIAl0ZXN0X2RhdGEuY29sbGVjdGlvbl90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0aywKLQkJCQkJCQlncGFfYmFzZSwKLQkJCQkJCQlURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCQlNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCi0JY21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBncGFfYmFzZSwKLQkJCQkgICAgICAgVEVTVF9NRU1TTE9UX0lOREVYKTsKJiM0MzsJY21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCXZpcnRfbWFwKHZtLCBjbWRxX2Jhc2UsIGNtZHFfYmFzZSwgcGFnZXNfcGVyXzY0ayk7CiAJdGVzdF9kYXRhLmNtZHFfYmFzZSA9IGNtZHFfYmFzZTsKIAl0ZXN0X2RhdGEuY21kcV9iYXNlX3ZhID0gKHZvaWQgKiljbWRxX2Jhc2U7CiAKIAl0ZXN0X2RhdGEuaXR0X3RhYmxlcyA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayAqIG5yX2RldmljZXMsCi0JCQkJCQkgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCSAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTsKIAogCXRlc3RfZGF0YS5scGlfcHJvcF90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0aywKLQkJCQkJCSAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCSAgICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7CiAJY29uZmlndXJlX2xwaXMoKTsKIAogCXRlc3RfZGF0YS5scGlfcGVuZF90YWJsZXMgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGsgKiBucl9jcHVzLAotCQkJCQkJICAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCSAgICAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCiAJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHRlc3RfZGF0YSk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaAppbmRleCA1YTdhNDU1YjUzODc1Li44OWI0ZmMyYWY3NTE2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgKQEAgLTMzLDYgJiM0MzszMyw4IEBACiAKICNkZWZpbmUgTlNFQ19QRVJfU0VDIDEwMDAwMDAwMDBMCiAKJiM0MzsjZGVmaW5lIEtWTV9JTlZBTElEX01FTVNMT1QgVUlOVF9NQVgKJiM0MzsKIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiB7CiAJc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgcmVnaW9uOwogCXN0cnVjdCBzcGFyc2ViaXQgKnVudXNlZF9waHlfcGFnZXM7CkBAIC04MCwxMSAmIzQzOzgyLDQ1IEBAIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbnMgewogCURFQ0xBUkVfSEFTSFRBQkxFKHNsb3RfaGFzaCwgOSk7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBNZW1vcnkgcmVnaW9uIHR5cGVzIGFyZSBwYXNzZWQgdG8gdmFyaW91cyBwYWdlIGFsbG9jYXRvcnMgdG8gY29tbXVuaWNhdGUKJiM0MzsgKiB2YXJpb3VzIHByb3BlcnRpZXMgYW5kIG1ldGFkYXRhIHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24uICBOb3RlLCB0aGUKJiM0MzsgKiBkZXNjcmlwdGlvbnMgYmVsb3cgZGVzY3JpYmVkIHRoZSBwcmltYXJ5IHVzYWdlIG9mIGVhY2ggdHlwZS4gIEluZGl2aWR1YWwKJiM0MzsgKiB0ZXN0cyBtYXkgYWxsb2NhdGUgbWVtb3J5IGZvciBvdGhlciBwdXJwb3Nlcy4KJiM0MzsgKgomIzQzOyAqIEJ5IGRlZmF1bHQsIGFsbCByZWdpb25zIGV4Y2VwdCBURVNUX0VYVFJBIGFyZSBtYXBwZWQgdG8gbWVtc2xvdCAmIzM5OzAmIzM5Oy4gIFRoZQomIzQzOyAqIFRFWFRfRVhUUkEgcmVnaW9uIGlzIGxlZnQgdW5tYXBwZWQgYXMgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0CiYjNDM7ICogc3BlY2lmaWMgYWxsb2NhdGlvbnMsIGkuZS4gc2hvdWxkIG5ldmVyIGJlIHVzZWQgYnkgY29yZS9pbmZyYXN0cnVjdHVyZSBjb2RlLgomIzQzOyAqIFRlc3RzIGNhbiBvdmVycmlkZSB0aGUgbWVtc2xvdCBmb3IgYW55IG9yIGFsbCB0eXBlcywgZS5nLiBzbyB0aGF0IGFsbCB0ZXN0CiYjNDM7ICogZGF0YSBpcyBhbGxvY2F0ZWQgZnJvbSBhIGN1cmF0ZWQgbWVtc2xvdC4KJiM0MzsgKi8KIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBDT0RFIHJlZ2lvbiBpcyB1c2VkIGJ5IGxpYi9lbGYgd2hlbiBsb2FkaW5nIHRoZSB0ZXN0JiMzOTtzIGNvZGUgaW50bwomIzQzOwkgKiBndWVzdCBtZW1vcnkuCiYjNDM7CSAqLwogCU1FTV9SRUdJT05fQ09ERSwKJiM0MzsJLyoKJiM0MzsJICogVGhlIERBVEEgcmVnaW9uIGlzIHVzZWQgdG8gYWxsb2NhdGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIGUuZy4gdkNQVQomIzQzOwkgKiBzdGFja3MsIFZNIGV4Y2VwdGlvbiB0YWJsZXMsIHg4NiYjMzk7cyBUU1MsIGV0Yy4KJiM0MzsJICovCiAJTUVNX1JFR0lPTl9EQVRBLAomIzQzOwkvKgomIzQzOwkgKiBUaGUgUFQgcmVnaW9uLCBhLmsuYS4gUGFnZSBUYWJsZSByZWdpb24sIGlzIHVzZWQgdG8gYWxsb2NhdGUgcGFnZQomIzQzOwkgKiB0YWJsZSBwYWdlcy4KJiM0MzsJICovCiAJTUVNX1JFR0lPTl9QVCwKJiM0MzsJLyoKJiM0MzsJICogVGhlIFRFU1RfREFUQSByZWdpb24gaXMgdXNlZCBmb3IgYWxsb2NhdGluZyB0ZXN0IGRhdGEgdGhhdCBpcyBlaXRoZXIKJiM0MzsJICogdGVzdCBzcGVjaWZpYywgYW5kL29yIGlzbiYjMzk7dCBjb25zaWRlcmVkIGEgJiMzNDtjb3JlJiMzNDsgZGF0YSBzdHJ1Y3R1cmUuCiYjNDM7CSAqLwogCU1FTV9SRUdJT05fVEVTVF9EQVRBLAomIzQzOwkvKgomIzQzOwkgKiBUaGUgVEVTVF9FWFRSQSByZWdpb24gaXMgZm9yIHNwZWNpYWwgc25vd2ZsYWtlcywgd2hlcmUgYSB0ZXN0IHdhbnRzCiYjNDM7CSAqIHRvIGNyZWF0ZSBhbmQgdXNlIGEgb25lLW9mZiBtZW1zbG90LCB3aXRob3V0IGltcGFjdGluZyAmIzM0O25vcm1hbCYjMzQ7IHRlc3QKJiM0MzsJICogZGF0YSBhbGxvY2F0aW9ucy4KJiM0MzsJICovCiYjNDM7CU1FTV9SRUdJT05fVEVTVF9FWFRSQSwKIAlOUl9NRU1fUkVHSU9OUywKIH07CiAKQEAgLTEyNywxMSAmIzQzOzE2Myw2IEBAIHN0cnVjdCBrdm1fdm0gewogCiAJc3RydWN0IGt2bV9iaW5hcnlfc3RhdHMgc3RhdHM7CiAKLQkvKgotCSAqIEtWTSByZWdpb24gc2xvdHMuIFRoZXNlIGFyZSB0aGUgZGVmYXVsdCBtZW1zbG90cyB1c2VkIGJ5IHBhZ2UKLQkgKiBhbGxvY2F0b3JzLCBlLmcuLCBsaWIvZWxmIHVzZXMgdGhlIG1lbXNsb3RzW01FTV9SRUdJT05fQ09ERV0KLQkgKiBtZW1zbG90LgotCSAqLwogCXUzMiBtZW1zbG90c1tOUl9NRU1fUkVHSU9OU107CiB9OwogCkBAIC0xNjksNyAmIzQzOzIwMCw4IEBAIG1lbXNsb3QycmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgbWVtc2xvdCk7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqdm1fZ2V0X21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sCiAJCQkJCQkJICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSkKIHsKLQlhc3NlcnQodHlwZSAmbHQ7IE5SX01FTV9SRUdJT05TKTsKJiM0MzsJVEVTVF9BU1NFUlQodHlwZSAmbHQ7IE5SX01FTV9SRUdJT05TLAomIzQzOwkJICAgICYjMzQ7SW52YWxpZCBtZW1vcnkgcmVnaW9uIHR5cGUgJiMzOTsldSYjMzk7JiMzNDssIHR5cGUpOwogCXJldHVybiBtZW1zbG90MnJlZ2lvbih2bSwgdm0tJmd0O21lbXNsb3RzW3R5cGVdKTsKIH0KIApAQCAtNzAyLDYgJiM0Mzs3MzQsMzYgQEAgdm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLAogCQlncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsCiAJCWludCBndWVzdF9tZW1mZF9mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7CiAKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sCiYjNDM7CQkJCQkgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwKJiM0MzsJCQkJCSAgICAgIHUzMiBzbG90KQomIzQzO3sKJiM0MzsJVEVTVF9BU1NFUlQodm0tJmd0O21lbXNsb3RzW3R5cGVdID09IEtWTV9JTlZBTElEX01FTVNMT1QsCiYjNDM7CQkgICAgJiMzNDtNZW1vcnkgcmVnaW9uIHR5cGUgJiMzOTsldSYjMzk7IHdhcyBhbHJlYWR5IG92ZXJyaWRkZW4gd2l0aCBzbG90PSV1JiMzNDssCiYjNDM7CQkgICAgdHlwZSwgdm0tJmd0O21lbXNsb3RzW3R5cGVdKTsKJiM0MzsKJiM0MzsJdm0tJmd0O21lbXNsb3RzW3R5cGVdID0gc2xvdDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwKJiM0MzsJCQkJCSAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwKJiM0MzsJCQkJCSAgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLAomIzQzOwkJCQkJICAgIGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsCiYjNDM7CQkJCQkgICAgdTMyIGZsYWdzKQomIzQzO3sKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIHR5cGUsIHNsb3QpOwomIzQzOwl2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHNyY190eXBlLCBncGEsIHNsb3QsIG5wYWdlcywgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwKJiM0MzsJCQkJCSAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsCiYjNDM7CQkJCQkgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsCiYjNDM7CQkJCQkgIGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMpCiYjNDM7ewomIzQzOwlfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIHR5cGUsIHNyY190eXBlLCBncGEsIHNsb3QsIG5wYWdlcywgMCk7CiYjNDM7fQomIzQzOwogI2lmbmRlZiB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5CiBzdGF0aWMgaW5saW5lIGJvb2wgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3Qga3ZtX3ZtICp2bSkKIHsKQEAgLTk5MCwyMyAmIzQzOzEwNTIsNDEgQEAgdm9pZCBrdm1fZ3NpX3JvdXRpbmdfd3JpdGUoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgKnJvdXRpbmcpOwogCiBjb25zdCBjaGFyICpleGl0X3JlYXNvbl9zdHIodW5zaWduZWQgaW50IGV4aXRfcmVhc29uKTsKIAotZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KTsKLWdwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLCBncGFfdCBtaW5fZ3BhLAotCQkJICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkKTsKLWdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGt2bV92bSAqdm0pOwomIzQzO2Jvb2wga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXModm9pZCk7CiYjNDM7CiYjNDM7Z3BhX3QgX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLCBncGFfdCBtaW5fZ3BhLAomIzQzOwkJCSAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKTsKJiM0MztncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLAomIzQzOwkJCSAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLCBib29sIHByb3RlY3RlZCk7CiAKLXN0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLAotCQkJCSAgICAgICBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdCkKJiM0MztzdGF0aWMgaW5saW5lIGdwYV90IHZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLAomIzQzOwkJCQkgICAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUpCiB7CiAJLyoKIAkgKiBCeSBkZWZhdWx0LCBhbGxvY2F0ZSBtZW1vcnkgYXMgcHJvdGVjdGVkIGZvciBWTXMgdGhhdCBzdXBwb3J0CiAJICogcHJvdGVjdGVkIG1lbW9yeSwgYXMgdGhlIG1ham9yaXR5IG9mIG1lbW9yeSBmb3Igc3VjaCBWTXMgaXMKIAkgKiBwcm90ZWN0ZWQsIGkuZS4gdXNpbmcgc2hhcmVkIG1lbW9yeSBpcyBlZmZlY3RpdmVseSBvcHQtaW4uCiAJICovCi0JcmV0dXJuIF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBudW0sIG1pbl9ncGEsIG1lbXNsb3QsCiYjNDM7CXJldHVybiBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIHR5cGUsCiAJCQkJICAgIHZtX2FyY2hfaGFzX3Byb3RlY3RlZF9tZW1vcnkodm0pKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sCiYjNDM7CQkJCSAgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMSwgdHlwZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIE1FTV9SRUdJT05fUFQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGt2bV92bSAqdm0pCiYjNDM7ewomIzQzOwlyZXR1cm4gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgMSk7CiYjNDM7fQomIzQzOwogLyoKICAqIF9fX192bV9jcmVhdGUoKSBkb2VzIEtWTV9DUkVBVEVfVk0gYW5kIGxpdHRsZSBlbHNlLiAgX192bV9jcmVhdGUoKSBhbHNvCiAgKiBsb2FkcyB0aGUgdGVzdCBiaW5hcnkgaW50byBndWVzdCBtZW1vcnkgYW5kIGNyZWF0ZXMgYW4gSVJRIGNoaXAgKHg4NiBvbmx5KS4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaAppbmRleCAyZDFhZmEwOTgxOWIwLi4xNWZhYWEwNjAxMjYyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oCkBAIC04LDcgJiM0Mzs4LDcgQEAKICNkZWZpbmUgU01SQU1fTUVNU0xPVAkoKDEgJmx0OyZsdDsgMTYpIHwgMSkKICNkZWZpbmUgU01SQU1fUEFHRVMJKFNNUkFNX1NJWkUgLyBQQUdFX1NJWkUpCiAKLXZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNtcmFtX2dwYSwKJiM0Mzt2b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHNtcmFtX2dwYSwKIAkJIGNvbnN0IHZvaWQgKnNtaV9oYW5kbGVyLCBzaXplX3QgaGFuZGxlcl9zaXplKTsKIAogdm9pZCBpbmplY3Rfc21pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuYwppbmRleCAwMTMyNWJmNGQzNmZjLi4yZGNhYTJjNGEwMzgzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmMKQEAgLTExNSw5ICYjNDM7MTE1LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKQogCWlmICh2bS0mZ3Q7bW11LnBnZF9jcmVhdGVkKQogCQlyZXR1cm47CiAKLQl2bS0mZ3Q7bW11LnBnZCA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsCi0JCQkJCSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsCi0JCQkJCSB2bS0mZ3Q7bWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pOwomIzQzOwl2bS0mZ3Q7bW11LnBnZCA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIG5yX3BhZ2VzKTsKIAl2bS0mZ3Q7bW11LnBnZF9jcmVhdGVkID0gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jCmluZGV4IDlkZGMwNDdkNWMyNzUuLjU3YjY1M2ZiZDBiMWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMKQEAgLTE3LDYgJiM0MzsxNyw3IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKICNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2FsaWduLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAKICNkZWZpbmUgS1ZNX1VUSUxfTUlOX1BGTgkyCkBAIC0yODcsNiAmIzQzOzI4OCw3IEBAIF9fd2VhayB2b2lkIHZtX3BvcHVsYXRlX2d2YV9iaXRtYXAoc3RydWN0IGt2bV92bSAqdm0pCiBzdHJ1Y3Qga3ZtX3ZtICpfX19fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSkKIHsKIAlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IGk7CiAKIAl2bSA9IGNhbGxvYygxLCBzaXplb2YoKnZtKSk7CiAJVEVTVF9BU1NFUlQodm0gIT0gTlVMTCwgJiMzNDtJbnN1ZmZpY2llbnQgTWVtb3J5JiMzNDspOwpAQCAtMjk1LDYgJiM0MzsyOTcsOCBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX19fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSkKIAl2bS0mZ3Q7cmVnaW9ucy5ncGFfdHJlZSA9IFJCX1JPT1Q7CiAJdm0tJmd0O3JlZ2lvbnMuaHZhX3RyZWUgPSBSQl9ST09UOwogCWhhc2hfaW5pdCh2bS0mZ3Q7cmVnaW9ucy5zbG90X2hhc2gpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTlJfTUVNX1JFR0lPTlM7IGkmIzQzOyYjNDM7KQomIzQzOwkJdm0tJmd0O21lbXNsb3RzW2ldID0gS1ZNX0lOVkFMSURfTUVNU0xPVDsKIAogCXZtLSZndDttb2RlID0gc2hhcGUubW9kZTsKIAl2bS0mZ3Q7dHlwZSA9IHNoYXBlLnR5cGU7CkBAIC00OTEsNyAmIzQzOzQ5NSw3IEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLAogCQkJCQkJIG5yX2V4dHJhX3BhZ2VzKTsKIAlzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnNsb3QwOwogCXN0cnVjdCBrdm1fdm0gKnZtOwotCWludCBpLCBmbGFnczsKJiM0MzsJaW50IGZsYWdzOwogCiAJa3ZtX3NldF9maWxlc19ybGltaXQobnJfcnVubmFibGVfdmNwdXMpOwogCkBAIC01MDksOCAmIzQzOzUxMywxMCBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsIHUzMiBucl9ydW5uYWJsZV92Y3B1cywKIAkJZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDsKIAogCXZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsIDAsIG5yX3BhZ2VzLCBmbGFncyk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IE5SX01FTV9SRUdJT05TOyBpJiM0MzsmIzQzOykKLQkJdm0tJmd0O21lbXNsb3RzW2ldID0gMDsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgMCk7CiYjNDM7CV9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCAwKTsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgMCk7CiYjNDM7CV9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgMCk7CiAKIAlrdm1fdm1fZWxmX2xvYWQodm0sIHByb2dyYW1faW52b2NhdGlvbl9uYW1lKTsKIApAQCAtMTE4OSw2ICYjNDM7MTE5NSw4IEBAIG1lbXNsb3QycmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgbWVtc2xvdCkKIHsKIAlzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnJlZ2lvbjsKIAomIzQzOwlURVNUX0FTU0VSVChtZW1zbG90ICE9IEtWTV9JTlZBTElEX01FTVNMT1QsICYjMzQ7dm0tJmd0O21lbXNsb3RzW10gdW5wb3B1bGF0ZWQ/JiMzNDspOwomIzQzOwogCWhhc2hfZm9yX2VhY2hfcG9zc2libGUodm0tJmd0O3JlZ2lvbnMuc2xvdF9oYXNoLCByZWdpb24sIHNsb3Rfbm9kZSwKIAkJCSAgICAgICBtZW1zbG90KQogCQlpZiAocmVnaW9uLSZndDtyZWdpb24uc2xvdCA9PSBtZW1zbG90KQpAQCAtMTQ2NSw5ICYjNDM7MTQ3Myw3IEBAIHN0YXRpYyBndmFfdCBfX19fdm1fYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBzeiwgZ3ZhX3QgbWluX2d2YSwKIAl1NjQgcGFnZXMgPSAoc3ogJmd0OyZndDsgdm0tJmd0O3BhZ2Vfc2hpZnQpICYjNDM7ICgoc3ogJSB2bS0mZ3Q7cGFnZV9zaXplKSAhPSAwKTsKIAogCXZpcnRfcGdkX2FsbG9jKHZtKTsKLQlncGFfdCBncGEgPSBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXMsCi0JCQkJCSAgIEtWTV9VVElMX01JTl9QRk4gKiB2bS0mZ3Q7cGFnZV9zaXplLAotCQkJCQkgICB2bS0mZ3Q7bWVtc2xvdHNbdHlwZV0sIHByb3RlY3RlZCk7CiYjNDM7CWdwYV90IGdwYSA9IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlcywgdHlwZSwgcHJvdGVjdGVkKTsKIAogCS8qCiAJICogRmluZCBhbiB1bnVzZWQgcmFuZ2Ugb2YgdmlydHVhbCBwYWdlIGFkZHJlc3NlcyBvZiBhdCBsZWFzdApAQCAtMjAyNSwzMyAmIzQzOzIwMzEsMjEgQEAgY29uc3QgY2hhciAqZXhpdF9yZWFzb25fc3RyKHVuc2lnbmVkIGludCBleGl0X3JlYXNvbikKIH0KIAogLyoKLSAqIFBoeXNpY2FsIENvbnRpZ3VvdXMgUGFnZSBBbGxvY2F0b3IKLSAqCi0gKiBJbnB1dCBBcmdzOgotICogICB2bSAtIFZpcnR1YWwgTWFjaGluZQotICogICBudW0gLSBudW1iZXIgb2YgcGFnZXMKLSAqICAgbWluX2dwYSAtIFBoeXNpY2FsIGFkZHJlc3MgbWluaW11bQotICogICBtZW1zbG90IC0gTWVtb3J5IHJlZ2lvbiB0byBhbGxvY2F0ZSBwYWdlIGZyb20KLSAqICAgcHJvdGVjdGVkIC0gVHJ1ZSBpZiB0aGUgcGFnZXMgd2lsbCBiZSB1c2VkIGFzIHByb3RlY3RlZC9wcml2YXRlIG1lbW9yeQomIzQzOyAqIEFsbG9jYXRlIGNvbnRpZ3VvdXMgKGd1ZXN0KSBwaHlzaWNhbCBwYWdlcyBpbiBhIGdpdmVuIG1lbW9yeSByZWdpb24sIGF0IG9yCiYjNDM7ICogdGhlIG1pbmltdW0gc3BlY2lmaWMgR1BBLiAgSWYgdGhlIG1lbW9yeSBpcyBwcm90ZWN0ZWQvcHJpdmF0ZSwgYWxzbyBhZGQgdGhlCiYjNDM7ICogYWxsb2NhdGUgcGFnZXMgdG8gdGhlIHJlZ2lvbiYjMzk7cyBzZXQgb2YgcHJvdGVjdGVkIHBhZ2VzLCBlLmcuIHNvIHRoYXQgYXJjaAomIzQzOyAqIGNvZGUga25vd3Mgd2hpY2ggcGFnZXMgbmVlZCB0byBiZSBlbmNyeXB0ZWQgd2hlbiBsYXVuY2hpbmcgdGhlIFZNLgogICoKLSAqIE91dHB1dCBBcmdzOiBOb25lCi0gKgotICogUmV0dXJuOgotICogICBTdGFydGluZyBwaHlzaWNhbCBhZGRyZXNzCi0gKgotICogV2l0aGluIHRoZSBWTSBzcGVjaWZpZWQgYnkgdm0sIGxvY2F0ZXMgYSByYW5nZSBvZiBhdmFpbGFibGUgcGh5c2ljYWwKLSAqIHBhZ2VzIGF0IG9yIGFib3ZlIG1pbl9ncGEuIElmIGZvdW5kLCB0aGUgcGFnZXMgYXJlIG1hcmtlZCBhcyBpbiB1c2UKLSAqIGFuZCB0aGVpciBiYXNlIGFkZHJlc3MgaXMgcmV0dXJuZWQuIEEgVEVTVF9BU1NFUlQgZmFpbHVyZSBvY2N1cnMgaWYKLSAqIG5vdCBlbm91Z2ggcGFnZXMgYXJlIGF2YWlsYWJsZSBhdCBvciBhYm92ZSBtaW5fZ3BhLgomIzQzOyAqIE5vdGUsIHN1Y2Nlc3MgaXMgZ3VhcmFudGVlZCEKICAqLwotZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sCi0JCQkgICBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdCwKLQkJCSAgIGJvb2wgcHJvdGVjdGVkKQomIzQzO2dwYV90IF9fX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcywgZ3BhX3QgbWluX2dwYSwKJiM0MzsJCQkgICAgIHUzMiBtZW1zbG90LCBib29sIHByb3RlY3RlZCwgYm9vbCBuYXR1cmFsbHlfYWxpZ25lZCkKIHsKJiM0MzsJc2l6ZV90IGFsaWdubWVudCA9IG5hdHVyYWxseV9hbGlnbmVkID8gbnJfcGFnZXMgOiAxOwogCXN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uOwogCXNwYXJzZWJpdF9pZHhfdCBwZywgYmFzZTsKIAotCVRFU1RfQVNTRVJUKG51bSAmZ3Q7IDAsICYjMzQ7TXVzdCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZSYjMzQ7KTsKJiM0MzsJVEVTVF9BU1NFUlQobnJfcGFnZXMsICYjMzQ7TXVzdCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZSYjMzQ7KTsKIAogCVRFU1RfQVNTRVJUKChtaW5fZ3BhICUgdm0tJmd0O3BhZ2Vfc2l6ZSkgPT0gMCwgJiMzNDtNaW4gcGh5c2ljYWwgYWRkcmVzcyAmIzM0OwogCQkmIzM0O25vdCBkaXZpc2libGUgYnkgcGFnZSBzaXplLlxuJiMzNDsKQEAgLTIwNjIsNDMgJiM0MzsyMDU2LDc4IEBAIGdwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLAogCVRFU1RfQVNTRVJUKCFwcm90ZWN0ZWQgfHwgcmVnaW9uLSZndDtwcm90ZWN0ZWRfcGh5X3BhZ2VzLAogCQkgICAgJiMzNDtSZWdpb24gZG9lc24mIzM5O3Qgc3VwcG9ydCBwcm90ZWN0ZWQgbWVtb3J5JiMzNDspOwogCi0JYmFzZSA9IHBnID0gbWluX2dwYSAmZ3Q7Jmd0OyB2bS0mZ3Q7cGFnZV9zaGlmdDsKLQlkbyB7Ci0JCWZvciAoOyBwZyAmbHQ7IGJhc2UgJiM0MzsgbnVtOyAmIzQzOyYjNDM7cGcpIHsKLQkJCWlmICghc3BhcnNlYml0X2lzX3NldChyZWdpb24tJmd0O3VudXNlZF9waHlfcGFnZXMsIHBnKSkgewotCQkJCWJhc2UgPSBwZyA9IHNwYXJzZWJpdF9uZXh0X3NldChyZWdpb24tJmd0O3VudXNlZF9waHlfcGFnZXMsIHBnKTsKLQkJCQlicmVhazsKLQkJCX0KJiM0MzsJYmFzZSA9IG1pbl9ncGEgJmd0OyZndDsgdm0tJmd0O3BhZ2Vfc2hpZnQ7CiYjNDM7YWdhaW46CiYjNDM7CWJhc2UgPSBBTElHTihiYXNlLCBhbGlnbm1lbnQpOwomIzQzOwlmb3IgKHBnID0gYmFzZTsgcGcgJmx0OyBiYXNlICYjNDM7IG5yX3BhZ2VzOyAmIzQzOyYjNDM7cGcpIHsKJiM0MzsJCWlmICghc3BhcnNlYml0X2lzX3NldChyZWdpb24tJmd0O3VudXNlZF9waHlfcGFnZXMsIHBnKSkgewomIzQzOwkJCWJhc2UgPSBzcGFyc2ViaXRfbmV4dF9zZXQocmVnaW9uLSZndDt1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7CiYjNDM7CQkJaWYgKCFiYXNlKQomIzQzOwkJCQlnb3RvIGVub21lbTsKJiM0MzsJCQlnb3RvIGFnYWluOwogCQl9Ci0JfSB3aGlsZSAocGcgJmFtcDsmYW1wOyBwZyAhPSBiYXNlICYjNDM7IG51bSk7Ci0KLQlpZiAocGcgPT0gMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtObyBndWVzdCBwaHlzaWNhbCBwYWdlIGF2YWlsYWJsZSwgJiMzNDsKLQkJCSYjMzQ7bWluX2dwYTogMHglbHggcGFnZV9zaXplOiAweCV4IG1lbXNsb3Q6ICV1XG4mIzM0OywKLQkJCW1pbl9ncGEsIHZtLSZndDtwYWdlX3NpemUsIG1lbXNsb3QpOwotCQlmcHV0cygmIzM0Oy0tLS0gdm0gZHVtcCAtLS0tXG4mIzM0Oywgc3RkZXJyKTsKLQkJdm1fZHVtcChzdGRlcnIsIHZtLCAyKTsKLQkJYWJvcnQoKTsKIAl9CiAKLQlmb3IgKHBnID0gYmFzZTsgcGcgJmx0OyBiYXNlICYjNDM7IG51bTsgJiM0MzsmIzQzO3BnKSB7CiYjNDM7CWZvciAocGcgPSBiYXNlOyBwZyAmbHQ7IGJhc2UgJiM0MzsgbnJfcGFnZXM7ICYjNDM7JiM0MztwZykgewogCQlzcGFyc2ViaXRfY2xlYXIocmVnaW9uLSZndDt1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7CiAJCWlmIChwcm90ZWN0ZWQpCiAJCQlzcGFyc2ViaXRfc2V0KHJlZ2lvbi0mZ3Q7cHJvdGVjdGVkX3BoeV9wYWdlcywgcGcpOwogCX0KIAogCXJldHVybiBiYXNlICogdm0tJmd0O3BhZ2Vfc2l6ZTsKJiM0MzsKJiM0Mztlbm9tZW06CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O05vIGd1ZXN0IHBoeXNpY2FsIHBhZ2UgYXZhaWxhYmxlLCBtaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcbiYjMzQ7LAomIzQzOwkJbWluX2dwYSwgdm0tJmd0O3BhZ2Vfc2l6ZSwgbWVtc2xvdCk7CiYjNDM7CWZwdXRzKCYjMzQ7LS0tLSB2bSBkdW1wIC0tLS1cbiYjMzQ7LCBzdGRlcnIpOwomIzQzOwl2bV9kdW1wKHN0ZGVyciwgdm0sIDIpOwomIzQzOwlhYm9ydCgpOwomIzQzOwlfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsKIH0KIAotZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KQomIzQzO19fd2VhayBib29sIGt2bV9hcmNoX25lZWRzX25hdHVyYWxseV9hbGlnbmVkX3BhZ2VfdGFibGVzKHZvaWQpCiB7Ci0JcmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMSwgbWluX2dwYSwgbWVtc2xvdCk7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAotZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSkKJiM0MztncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLAomIzQzOwkJCSAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLCBib29sIHByb3RlY3RlZCkKIHsKLQlyZXR1cm4gdm1fcGh5X3BhZ2VfYWxsb2Modm0sIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUiwKLQkJCQkgdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fUFRdKTsKJiM0MzsJc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb24gPSB2bV9nZXRfbWVtX3JlZ2lvbih2bSwgdHlwZSk7CiYjNDM7CWJvb2wgbmF0dXJhbGx5X2FsaWduZWQgPSBmYWxzZTsKJiM0MzsJZ3BhX3QgbWluX2dwYTsKJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQocmVnaW9uLCAmIzM0O05vIHJlZ2lvbiBmb3IgdHlwZSAmIzM5OyV1JiMzOTssIG1lbXNsb3QgJiMzOTsldSYjMzk7JiMzNDssCiYjNDM7CQkgICAgdHlwZSwgdm0tJmd0O21lbXNsb3RzW3R5cGVdKTsKJiM0MzsKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgTUVNX1JFR0lPTl9DT0RFOgomIzQzOwljYXNlIE1FTV9SRUdJT05fREFUQToKJiM0MzsJY2FzZSBNRU1fUkVHSU9OX1RFU1RfREFUQToKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiB0aGUgcmVnaW9uIGlzIGJhY2tlZCBieSB0aGUgZGVmYXVsdCBtZW1zbG90IChpZD0wKSwgdXNlCiYjNDM7CQkgKiBzZWxmdGVzdHMmIzM5OyBoYXJkY29kZWQgbWluaW11bSBQRk4sIG90aGVyd2lzZSB1c2UgdGhlIGJhc2Ugb2YKJiM0MzsJCSAqIHRoZSBjdXN0b20gbWVtb3J5IHNsb3QgdGhhdCBiYWNrcyB0aGUgcmVnaW9uLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIXZtLSZndDttZW1zbG90c1t0eXBlXSkKJiM0MzsJCQltaW5fZ3BhID0gS1ZNX1VUSUxfTUlOX1BGTiAqIHZtLSZndDtwYWdlX3NpemU7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWluX2dwYSA9IHJlZ2lvbi0mZ3Q7cmVnaW9uLmd1ZXN0X3BoeXNfYWRkcjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1FTV9SRUdJT05fUFQ6CiYjNDM7CQltaW5fZ3BhID0gS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSOwomIzQzOwkJbmF0dXJhbGx5X2FsaWduZWQgPSBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcygpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUVNX1JFR0lPTl9URVNUX0VYVFJBOgomIzQzOwkJbWluX2dwYSA9IHJlZ2lvbi0mZ3Q7cmVnaW9uLmd1ZXN0X3BoeXNfYWRkcjsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJVEVTVF9GQUlMKCYjMzQ7SW52YWxpZCBtZW1vcnkgcmVnaW9uIHR5cGUgJiMzOTsldSYjMzk7JiMzNDssIHR5cGUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIF9fX192bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLCBtaW5fZ3BhLCB2bS0mZ3Q7bWVtc2xvdHNbdHlwZV0sCiYjNDM7CQkJCSAgICAgIHByb3RlY3RlZCwgbmF0dXJhbGx5X2FsaWduZWQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuYwppbmRleCA0N2JiZGUzZTIwNWEwLi5mY2Q0MWJjNmZiZGFlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuYwpAQCAtOSw3ICYjNDM7OSw2IEBACiAjaW5jbHVkZSAmIzM0O3Byb2Nlc3Nvci5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dWNhbGxfY29tbW9uLmgmIzM0OwogCi0jZGVmaW5lIExPT05HQVJDSF9QQUdFX1RBQkxFX1BIWVNfTUlOCQkweDIwMDAwMAogI2RlZmluZSBMT09OR0FSQ0hfR1VFU1RfU1RBQ0tfVkFERFJfTUlOCQkweDIwMDAwMAogCiBzdGF0aWMgZ3BhX3QgaW52YWxpZF9wZ3RhYmxlWzRdOwpAQCAtNTcsOSAmIzQzOzU2LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKQogCWNoaWxkID0gdGFibGUgPSAwOwogCWZvciAoaSA9IDA7IGkgJmx0OyB2bS0mZ3Q7bW11LnBndGFibGVfbGV2ZWxzOyBpJiM0MzsmIzQzOykgewogCQlpbnZhbGlkX3BndGFibGVbaV0gPSBjaGlsZDsKLQkJdGFibGUgPSB2bV9waHlfcGFnZV9hbGxvYyh2bSwgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU4sCi0JCQkJdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fUFRdKTsKLQkJVEVTVF9BU1NFUlQodGFibGUsICYjMzQ7RmFpbCB0byBhbGxvY2F0ZSBwYWdlIHRhbGUgYXQgbGV2ZWwgJWRcbiYjMzQ7LCBpKTsKJiM0MzsJCXRhYmxlID0gdm1fYWxsb2NfcGFnZV90YWJsZSh2bSk7CiAJCXZpcnRfc2V0X3BndGFibGUodm0sIHRhYmxlLCBjaGlsZCk7CiAJCWNoaWxkID0gdGFibGU7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKaW5kZXggZGVkNTQyOWYzNDQ4My4uYzE3NWRjZDE0MTE0NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCkBAIC02OSw5ICYjNDM7NjksNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pCiAJaWYgKHZtLSZndDttbXUucGdkX2NyZWF0ZWQpCiAJCXJldHVybjsKIAotCXZtLSZndDttbXUucGdkID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywKLQkJCQkJIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUiwKLQkJCQkJIHZtLSZndDttZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7CiYjNDM7CXZtLSZndDttbXUucGdkID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgbnJfcGFnZXMpOwogCXZtLSZndDttbXUucGdkX2NyZWF0ZWQgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmMKaW5kZXggYTlhZGIzNzgyYjM1Mi4uMzNmNDlkNzQzYjVmZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuYwpAQCAtMjAsOSAmIzQzOzIwLDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKQogCWlmICh2bS0mZ3Q7bW11LnBnZF9jcmVhdGVkKQogCQlyZXR1cm47CiAKLQlncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIFBBR0VTX1BFUl9SRUdJT04sCi0JCQkJICAgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLAotCQkJCSAgIHZtLSZndDttZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7CiYjNDM7CWdwYSA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIFBBR0VTX1BFUl9SRUdJT04pOwogCW1lbXNldChhZGRyX2dwYTJodmEodm0sIGdwYSksIDB4ZmYsIFBBR0VTX1BFUl9SRUdJT04gKiB2bS0mZ3Q7cGFnZV9zaXplKTsKIAogCXZtLSZndDttbXUucGdkID0gZ3BhOwpAQCAtMzgsOCAmIzQzOzM2LDcgQEAgc3RhdGljIHU2NCB2aXJ0X2FsbG9jX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHJpKQogewogCXU2NCB0YWRkcjsKIAotCXRhZGRyID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAgcmkgJmx0OyA0ID8gUEFHRVNfUEVSX1JFR0lPTiA6IDEsCi0JCQkJICAgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLCAwKTsKJiM0MzsJdGFkZHIgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCByaSAmbHQ7IDQgPyBQQUdFU19QRVJfUkVHSU9OIDogMSk7CiAJbWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgdGFkZHIpLCAweGZmLCBQQUdFU19QRVJfUkVHSU9OICogdm0tJmd0O3BhZ2Vfc2l6ZSk7CiAKIAlyZXR1cm4gKHRhZGRyICZhbXA7IFJFR0lPTl9FTlRSWV9PUklHSU4pCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jCmluZGV4IGQzMWZhODFlYTA3NTYuLjQ3OWU5YTQ4MTY4N2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jCkBAIC01MjksNyAmIzQzOzUyOSwxMCBAQCB2b2lkIHRkcF9pZGVudGl0eV9tYXBfZGVmYXVsdF9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSkKIAogCS8qIE9ubHkgbWVtc2xvdCAwIGlzIG1hcHBlZCBoZXJlLCBlbnN1cmUgaXQmIzM5O3MgdGhlIG9ubHkgb25lIGJlaW5nIHVzZWQgKi8KIAlmb3IgKHMgPSAwOyBzICZsdDsgTlJfTUVNX1JFR0lPTlM7IHMmIzQzOyYjNDM7KQotCQlURVNUX0FTU0VSVF9FUSh2bS0mZ3Q7bWVtc2xvdHNbc10sIDApOwomIzQzOwkJVEVTVF9BU1NFUlQoIXZtLSZndDttZW1zbG90c1tzXSB8fAomIzQzOwkJCSAgICB2bS0mZ3Q7bWVtc2xvdHNbc10gPT0gS1ZNX0lOVkFMSURfTUVNU0xPVCwKJiM0MzsJCQkgICAgJiMzNDtVbmhhbmRsZWQgbWVtc2xvdCAmIzM5OyV1JiMzOTsgZm9yIHR5cGUgJiMzOTsldSYjMzk7JiMzNDssCiYjNDM7CQkJICAgIHZtLSZndDttZW1zbG90c1tzXSwgcyk7CiAKIAlpID0gKHJlZ2lvbi0mZ3Q7cmVnaW9uLmd1ZXN0X3BoeXNfYWRkciAmZ3Q7Jmd0OyB2bS0mZ3Q7cGFnZV9zaGlmdCkgLSAxOwogCWxhc3QgPSBpICYjNDM7IChyZWdpb24tJmd0O3JlZ2lvbi5tZW1vcnlfc2l6ZSAmZ3Q7Jmd0OyB2bS0mZ3Q7cGFnZV9zaGlmdCk7CkBAIC0xNDY1LDEzICYjNDM7MTQ2OCwxMyBAQCBib29sIGt2bV9hcmNoX2hhc19kZWZhdWx0X2lycWNoaXAodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLAomIzQzO3ZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgc21yYW1fZ3BhLAogCQkgY29uc3Qgdm9pZCAqc21pX2hhbmRsZXIsIHNpemVfdCBoYW5kbGVyX3NpemUpCiB7Ci0Jdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgc21yYW1fZ3BhLAotCQkJCSAgICBTTVJBTV9NRU1TTE9ULCBTTVJBTV9QQUdFUywgMCk7Ci0JVEVTVF9BU1NFUlQodm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBTTVJBTV9QQUdFUywgc21yYW1fZ3BhLAotCQkJCSAgICAgICBTTVJBTV9NRU1TTE9UKSA9PSBzbXJhbV9ncGEsCiYjNDM7CXZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsCiYjNDM7CQkJICAgICAgIHNtcmFtX2dwYSwgU01SQU1fTUVNU0xPVCwgU01SQU1fUEFHRVMpOwomIzQzOwomIzQzOwlURVNUX0FTU0VSVCh2bV9waHlfcGFnZXNfYWxsb2Modm0sIFNNUkFNX1BBR0VTLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpID09IHNtcmFtX2dwYSwKIAkJICAgICYjMzQ7Q291bGQgbm90IGFsbG9jYXRlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgU01SQU0mIzM0Oyk7CiAKIAltZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCBzbXJhbV9ncGEpLCAweDAsIFNNUkFNX1NJWkUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYwppbmRleCBlMTI5OTYxMWJlMzIyLi44NDRlYTliN2JiNDFjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYwpAQCAtMzM5LDcgJiM0MzszMzksOCBAQCBzdGF0aWMgYm9vbCBwcmVwYXJlX3ZtKHN0cnVjdCB2bV9kYXRhICpkYXRhLCBpbnQgbnNsb3RzLCB1NjQgKm1heHNsb3RzLAogCQlpZiAoc2xvdCA9PSBkYXRhLSZndDtuc2xvdHMpCiAJCQlucGFnZXMgJiM0Mzs9IHJlbXBhZ2VzOwogCi0JCWdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyhkYXRhLSZndDt2bSwgbnBhZ2VzLCBndWVzdF9hZGRyLCBzbG90KTsKJiM0MzsJCWdwYSA9IF9fX192bV9waHlfcGFnZXNfYWxsb2MoZGF0YS0mZ3Q7dm0sIG5wYWdlcywgZ3Vlc3RfYWRkciwgc2xvdCwKJiM0MzsJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKIAkJVEVTVF9BU1NFUlQoZ3BhID09IGd1ZXN0X2FkZHIsCiAJCQkgICAgJiMzNDt2bV9waHlfcGFnZXNfYWxsb2MoKSBmYWlsZWQmIzM0Oyk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMKaW5kZXggMTVkODFiMmVkN2FkMy4uNzMzODdjYzNiY2E3NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMKQEAgLTEwMiwyNCAmIzQzOzEwMiwxNyBAQCBzdGF0aWMgdm9pZCBndWVzdF9kaXJ0eV90ZXN0X2RhdGEodm9pZCkKIAogc3RhdGljIHZvaWQgY3JlYXRlX21haW5fbWVtc2xvdChzdHJ1Y3Qga3ZtX3ZtICp2bSkKIHsKLQlpbnQgaTsKLQogCXZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsIDAsIE1BSU5fUEFHRV9DT1VOVCwgMCk7Ci0JLyogc2V0IHRoZSBhcnJheSBvZiBtZW1zbG90cyB0byB6ZXJvIGxpa2UgX192bV9jcmVhdGUgZG9lcyAqLwotCWZvciAoaSA9IDA7IGkgJmx0OyBOUl9NRU1fUkVHSU9OUzsgaSYjNDM7JiM0MzspCi0JCXZtLSZndDttZW1zbG90c1tpXSA9IDA7CiYjNDM7CV9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0NPREUsIDApOwomIzQzOwlfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgMCk7CiYjNDM7CV9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIDApOwogfQogCiBzdGF0aWMgdm9pZCBjcmVhdGVfdGVzdF9tZW1zbG90KHN0cnVjdCBrdm1fdm0gKnZtKQogewotCXZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwKLQkJCQkgICAgVk1fTUVNX1NSQ19BTk9OWU1PVVMsCi0JCQkJICAgIFRFU1RfREFUQV9TVEFSVF9HRk4gJmx0OyZsdDsgdm0tJmd0O3BhZ2Vfc2hpZnQsCi0JCQkJICAgIFRFU1RfREFUQV9NRU1TTE9ULAotCQkJCSAgICBURVNUX0RBVEFfUEFHRV9DT1VOVCwKLQkJCQkgICAgMAotCQkJCSAgICk7Ci0Jdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fVEVTVF9EQVRBXSA9IFRFU1RfREFUQV9NRU1TTE9UOwomIzQzOwl2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsCiYjNDM7CQkJICAgICAgIFRFU1RfREFUQV9TVEFSVF9HRk4gJmx0OyZsdDsgdm0tJmd0O3BhZ2Vfc2hpZnQsCiYjNDM7CQkJICAgICAgIFRFU1RfREFUQV9NRU1TTE9ULCBURVNUX0RBVEFfUEFHRV9DT1VOVCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNyZWF0ZV9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jCmluZGV4IGYzODM5Mjg0YWMwODEuLmNkMjZjYzFhZWQ4MDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuYwpAQCAtMzYsNyAmIzQzOzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdCh2b2lkKQogCX07CiAKIAl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfY29kZSk7Ci0JbWVtID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCA0MDk2ICogNDIsIDApOwomIzQzOwltZW0gPSBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCA0MDk2ICogNDIsIDAsIGZhbHNlLCBmYWxzZSk7CiAKIAlyb3V0aW5nID0ga3ZtX2dzaV9yb3V0aW5nX2NyZWF0ZSgpOwogCXJvdXRpbmctJmd0O25yID0gMTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jCmluZGV4IGRmZmU5NjU0ZjQ1YmQuLmJmYTVhYzhjZTAyOTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYwpAQCAtMTE2LDE1ICYjNDM7MTE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpzcGF3bl92bShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LCBwdGhyZWFkX3QgKnZjcHVfdGhyZWFkLAogCiAJdm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBndWVzdF9jb2RlKTsKIAotCXZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVNfVEhQLAotCQkJCSAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULAotCQkJCSAgICBNRU1fUkVHSU9OX1NJWkUgLyBnZXRwYWdlc2l6ZSgpLCAwKTsKJiM0MzsJdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsCiYjNDM7CQkJICAgICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsCiYjNDM7CQkJICAgICAgIE1FTV9SRUdJT05fU0laRSAvIGdldHBhZ2VzaXplKCkpOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBhbmQgbWFwIHR3byBwYWdlcyBzbyB0aGF0IHRoZSBHUEEgYWNjZXNzZWQgYnkgZ3Vlc3RfY29kZSgpCiAJICogc3RheXMgdmFsaWQgYWNyb3NzIHRoZSBtZW1zbG90IG1vdmUuCiAJICovCi0JZ3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9UKTsKJiM0MzsJZ3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCVRFU1RfQVNTRVJUKGdwYSA9PSBNRU1fUkVHSU9OX0dQQSwgJiMzNDtGYWlsZWQgdm1fcGh5X3BhZ2VzX2FsbG9jXG4mIzM0Oyk7CiAKIAl2aXJ0X21hcCh2bSwgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fR1BBLCAyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jCmluZGV4IDNkY2E4NWU5NTQ3ODEuLjhkMTgyMjcxN2FiZGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuYwpAQCAtNjIsMTEgJiM0Mzs2MiwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCVRFU1RfQVNTRVJUKHJjLCAmIzM0O0tWTV9DQVBfRVhJVF9PTl9FTVVMQVRJT05fRkFJTFVSRSBpcyB1bmF2YWlsYWJsZSYjMzQ7KTsKIAl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYSVRfT05fRU1VTEFUSU9OX0ZBSUxVUkUsIDEpOwogCi0Jdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywKLQkJCQkgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCwKLQkJCQkgICAgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFLCAwKTsKJiM0MzsJdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywKJiM0MzsJCQkgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCwKJiM0MzsJCQkgICAgICAgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFKTsKJiM0MzsKIAlncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIE1FTV9SRUdJT05fU0laRSAvIFBBR0VfU0laRSwKLQkJCQkgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCk7CiYjNDM7CQkJCSBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCVRFU1RfQVNTRVJUKGdwYSA9PSBNRU1fUkVHSU9OX0dQQSwgJiMzNDtGYWlsZWQgdm1fcGh5X3BhZ2VzX2FsbG9jJiMzNDspOwogCXZpcnRfbWFwKHZtLCBNRU1fUkVHSU9OX0dWQSwgTUVNX1JFR0lPTl9HUEEsIDEpOwogCWh2YSA9IGFkZHJfZ3BhMmh2YSh2bSwgTUVNX1JFR0lPTl9HUEEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI1OQoJCQkJCQkJb3V0cHV0OiA3NwoJCQkJCQkJdGhvdWdodHM6IDY2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoaXMgZGlmZi4gQWxsIHRoZSBjaGFuZ2VzIGFyZSBuZWF0bHkgY29udGFpbmVkIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AuIFRoaXMgaXMgZ29vZCwgaXQgc2ltcGxpZmllcyB0aGUgYXNzZXNzbWVudC4gTm93LCBsZXQmIzM5O3MgcmVmcmVzaCBvdXIgbWVtb3J5IG9uIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFNwZWNpZmljYWxseSwgc2VjdGlvbiAyOiAmIzM0O1dIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSYjMzQ7LiBUaGUga2V5IGhlcmUgaXMgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBXZSYjMzk7cmUgbG9va2luZyBmb3IgbW9kaWZpY2F0aW9ucyB0aGF0IGZhbGwgKnN0cmljdGx5KiBpbnRvIGEgc3BlY2lmaWMgY2F0ZWdvcnkgd2hlcmUgZnV6emluZyBpcyBkZWVtZWQgdW5uZWNlc3NhcnkuCgpUaGUgZ3VpZGVsaW5lIHNwZWNpZmljYWxseSBjYWxscyBvdXQgJiMzNDtVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLi4uIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OyBCaW5nby4gQWxsIHRoZSBmaWxlcyBsaXN0ZWQg4oCTIHRoZSBgcGFnZV9mYXVsdF90ZXN0LmNgLCBgdmdpY19scGlfc3RyZXNzLmNgLCBhbGwgdGhlIGluY2x1ZGVzIGFuZCBsaWJyYXJ5IGNvZGUsIGFuZCB0aGUgdmFyaW91cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdGVzdHMg4oCTIHRoZXkgYWxsIHJlc2lkZSB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLiBUaGF0JiMzOTtzICpwcmVjaXNlbHkqIHVzZXItc3BhY2Ugc2VsZi10ZXN0IGNvZGUsIGFuZCBpdCYjMzk7cyBub3QgZ29pbmcgdG8gdG91Y2ggdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLiBUaGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gTm8ga2VybmVsIG1vZGlmaWNhdGlvbnMsIG5vIGZ1enppbmcgcmVxdWlyZWQuCgpUaGVyZWZvcmUsIFdvcnRoRnV6emluZyBpcyBkZWZpbml0aXZlbHkgYGZhbHNlYC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIFdlIG5lZWQgdG8gc2V0IHRoZSBwYXJhbWV0ZXJzIGxpa2Ugc286CiogICBXb3J0aEZ1enppbmc6IGBmYWxzZWAKKiAgIFJlYXNvbmluZzogJiMzNDtBbGwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgcmVzdHJpY3RlZCB0byB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBkbyBub3QgbW9kaWZ5IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7CiogICBGb2N1c1N5bWJvbHM6IFxbIF0gKGVtcHR5IGxpc3QpCiogICBFbmFibGVDb25maWdzOiBcWyBdIChlbXB0eSBsaXN0KQoKRG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7QWxsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIHJlc3RyaWN0ZWQgdG8gdXNlci1zcGFjZSBLVk0gc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8sIHdoaWNoIGRvIG5vdCBtb2RpZnkgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O0FsbCBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzIGFyZSByZXN0cmljdGVkIHRvIHVzZXItc3BhY2UgS1ZNIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBkbyBub3QgbW9kaWZ5IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6MTY6MzAuMzk5MjAzNDYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNjQ0OTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiQWxsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIHJlc3RyaWN0ZWQgdG8gdXNlci1zcGFjZSBLVk0gc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8sIHdoaWNoIGRvIG5vdCBtb2RpZnkgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoxNjozMC4zOTkyMDk0MzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjI4MjY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM3YTMwNmQ3ZTg2OTk3MDRlMTZiMGJkZGQ3NWU1YTY5NDdkNDhjMjlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAxMzoxNjoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcXG5pbmRleCA2YmIzZDgyOTA2YjIyLi5iMGUzZmM4Y2Q3NmFjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuY1xcbkBAIC01OTcsMTggKzU5NywxNiBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IHRlc3RfcGFyYW1zICpwKVxcbiBcXG4gXFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCxcXG4gXFx0XFx0XFx0XFx0ICAgIENPREVfQU5EX0RBVEFfTUVNU0xPVCwgY29kZV9ucGFnZXMsIDApO1xcbi1cXHR2bS1cXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9DT0RFXSA9IENPREVfQU5EX0RBVEFfTUVNU0xPVDtcXG4tXFx0dm0tXFx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fREFUQV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7XFxuLVxcbi1cXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtXFx1MDAzZXNyY190eXBlLCBkYXRhX2dwYSAtIHB0X3NpemUsXFxuLVxcdFxcdFxcdFxcdCAgICBQQUdFX1RBQkxFX01FTVNMT1QsIHB0X3NpemUgLyBndWVzdF9wYWdlX3NpemUsXFxuLVxcdFxcdFxcdFxcdCAgICBwLVxcdTAwM2V0ZXN0X2Rlc2MtXFx1MDAzZXB0X21lbXNsb3RfZmxhZ3MpO1xcbi1cXHR2bS1cXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0gPSBQQUdFX1RBQkxFX01FTVNMT1Q7XFxuLVxcbi1cXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtXFx1MDAzZXNyY190eXBlLCBkYXRhX2dwYSwgVEVTVF9EQVRBX01FTVNMT1QsXFxuLVxcdFxcdFxcdFxcdCAgICBkYXRhX3NpemUgLyBndWVzdF9wYWdlX3NpemUsXFxuLVxcdFxcdFxcdFxcdCAgICBwLVxcdTAwM2V0ZXN0X2Rlc2MtXFx1MDAzZWRhdGFfbWVtc2xvdF9mbGFncyk7XFxuLVxcdHZtLVxcdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1RFU1RfREFUQV0gPSBURVNUX0RBVEFfTUVNU0xPVDtcXG4rXFx0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTtcXG4rXFx0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTtcXG4rXFxuK1xcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgcC1cXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhIC0gcHRfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0IFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0IHAtXFx1MDAzZXRlc3RfZGVzYy1cXHUwMDNlcHRfbWVtc2xvdF9mbGFncyk7XFxuK1xcbitcXHRfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCBwLVxcdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEsXFxuK1xcdFxcdFxcdFxcdCBURVNUX0RBVEFfTUVNU0xPVCwgZGF0YV9zaXplIC8gZ3Vlc3RfcGFnZV9zaXplLFxcbitcXHRcXHRcXHRcXHQgcC1cXHUwMDNldGVzdF9kZXNjLVxcdTAwM2VkYXRhX21lbXNsb3RfZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBzZXR1cF91Y2FsbChzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXFxuaW5kZXggOWE2OWM0MzlhMGY4Zi4uNDVhODdiYTVhNzM3YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcXG5AQCAtMjMsNyArMjMsNiBAQFxcbiAjZGVmaW5lIEdJQ19MUElfT0ZGU0VUXFx0ODE5MlxcbiBcXG4gc3RhdGljIHNpemVfdCBucl9pdGVyYXRpb25zID0gMTAwMDtcXG4tc3RhdGljIGdwYV90IGdwYV9iYXNlO1xcbiBcXG4gc3RhdGljIHN0cnVjdCBrdm1fdm0gKnZtO1xcbiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XFxuQEAgLTE0Myw2ICsxNDIsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHNpemVfdCBucl9scGlzKVxcbiBcXG4gc3RhdGljIHZvaWQgc2V0dXBfbWVtc2xvdCh2b2lkKVxcbiB7XFxuK1xcdGdwYV90IGdwYV9iYXNlO1xcbiBcXHRzaXplX3QgcGFnZXM7XFxuIFxcdHNpemVfdCBzejtcXG4gXFxuQEAgLTE2NCw4ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90KHZvaWQpXFxuIFxcbiBcXHRwYWdlcyA9IHN6IC8gdm0tXFx1MDAzZXBhZ2Vfc2l6ZTtcXG4gXFx0Z3BhX2Jhc2UgPSAoKHZtX2NvbXB1dGVfbWF4X2dmbih2bSkgKyAxKSAqIHZtLVxcdTAwM2VwYWdlX3NpemUpIC0gc3o7XFxuLVxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIGdwYV9iYXNlLFxcbi1cXHRcXHRcXHRcXHQgICAgVEVTVF9NRU1TTE9UX0lOREVYLCBwYWdlcywgMCk7XFxuK1xcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXFxuK1xcdFxcdFxcdCAgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYLCBwYWdlcyk7XFxuIH1cXG4gXFxuICNkZWZpbmUgTFBJX1BST1BfREVGQVVMVF9QUklPXFx0MHhhMFxcbkBAIC0xOTEsMjggKzE5MSwyNSBAQCBzdGF0aWMgdm9pZCBzZXR1cF90ZXN0X2RhdGEodm9pZClcXG4gXFx0Z3BhX3QgY21kcV9iYXNlO1xcbiBcXG4gXFx0dGVzdF9kYXRhLmRldmljZV90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdwYV9iYXNlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgVEVTVF9NRU1TTE9UX0lOREVYKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XFxuIFxcbiBcXHR0ZXN0X2RhdGEuY29sbGVjdGlvbl90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0Z3BhX2Jhc2UsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFRFU1RfTUVNU0xPVF9JTkRFWCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XFxuIFxcbi1cXHRjbWRxX2Jhc2UgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssIGdwYV9iYXNlLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgVEVTVF9NRU1TTE9UX0lOREVYKTtcXG4rXFx0Y21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xcbiBcXHR2aXJ0X21hcCh2bSwgY21kcV9iYXNlLCBjbWRxX2Jhc2UsIHBhZ2VzX3Blcl82NGspO1xcbiBcXHR0ZXN0X2RhdGEuY21kcV9iYXNlID0gY21kcV9iYXNlO1xcbiBcXHR0ZXN0X2RhdGEuY21kcV9iYXNlX3ZhID0gKHZvaWQgKiljbWRxX2Jhc2U7XFxuIFxcbiBcXHR0ZXN0X2RhdGEuaXR0X3RhYmxlcyA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayAqIG5yX2RldmljZXMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcXG4gXFxuIFxcdHRlc3RfZGF0YS5scGlfcHJvcF90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XFxuIFxcdGNvbmZpZ3VyZV9scGlzKCk7XFxuIFxcbiBcXHR0ZXN0X2RhdGEubHBpX3BlbmRfdGFibGVzID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrICogbnJfY3B1cyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcXG4gXFxuIFxcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCB0ZXN0X2RhdGEpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oXFxuaW5kZXggNWE3YTQ1NWI1Mzg3NS4uODliNGZjMmFmNzUxNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxcbkBAIC0zMyw2ICszMyw4IEBAXFxuIFxcbiAjZGVmaW5lIE5TRUNfUEVSX1NFQyAxMDAwMDAwMDAwTFxcbiBcXG4rI2RlZmluZSBLVk1fSU5WQUxJRF9NRU1TTE9UIFVJTlRfTUFYXFxuK1xcbiBzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiByZWdpb247XFxuIFxcdHN0cnVjdCBzcGFyc2ViaXQgKnVudXNlZF9waHlfcGFnZXM7XFxuQEAgLTgwLDExICs4Miw0NSBAQCBzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb25zIHtcXG4gXFx0REVDTEFSRV9IQVNIVEFCTEUoc2xvdF9oYXNoLCA5KTtcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIE1lbW9yeSByZWdpb24gdHlwZXMgYXJlIHBhc3NlZCB0byB2YXJpb3VzIHBhZ2UgYWxsb2NhdG9ycyB0byBjb21tdW5pY2F0ZVxcbisgKiB2YXJpb3VzIHByb3BlcnRpZXMgYW5kIG1ldGFkYXRhIHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24uICBOb3RlLCB0aGVcXG4rICogZGVzY3JpcHRpb25zIGJlbG93IGRlc2NyaWJlZCB0aGUgcHJpbWFyeSB1c2FnZSBvZiBlYWNoIHR5cGUuICBJbmRpdmlkdWFsXFxuKyAqIHRlc3RzIG1heSBhbGxvY2F0ZSBtZW1vcnkgZm9yIG90aGVyIHB1cnBvc2VzLlxcbisgKlxcbisgKiBCeSBkZWZhdWx0LCBhbGwgcmVnaW9ucyBleGNlcHQgVEVTVF9FWFRSQSBhcmUgbWFwcGVkIHRvIG1lbXNsb3QgJzAnLiAgVGhlXFxuKyAqIFRFWFRfRVhUUkEgcmVnaW9uIGlzIGxlZnQgdW5tYXBwZWQgYXMgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIG9ubHkgZm9yIHRlc3RcXG4rICogc3BlY2lmaWMgYWxsb2NhdGlvbnMsIGkuZS4gc2hvdWxkIG5ldmVyIGJlIHVzZWQgYnkgY29yZS9pbmZyYXN0cnVjdHVyZSBjb2RlLlxcbisgKiBUZXN0cyBjYW4gb3ZlcnJpZGUgdGhlIG1lbXNsb3QgZm9yIGFueSBvciBhbGwgdHlwZXMsIGUuZy4gc28gdGhhdCBhbGwgdGVzdFxcbisgKiBkYXRhIGlzIGFsbG9jYXRlZCBmcm9tIGEgY3VyYXRlZCBtZW1zbG90LlxcbisgKi9cXG4gZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHtcXG4rXFx0LypcXG4rXFx0ICogVGhlIENPREUgcmVnaW9uIGlzIHVzZWQgYnkgbGliL2VsZiB3aGVuIGxvYWRpbmcgdGhlIHRlc3QncyBjb2RlIGludG9cXG4rXFx0ICogZ3Vlc3QgbWVtb3J5LlxcbitcXHQgKi9cXG4gXFx0TUVNX1JFR0lPTl9DT0RFLFxcbitcXHQvKlxcbitcXHQgKiBUaGUgREFUQSByZWdpb24gaXMgdXNlZCB0byBhbGxvY2F0ZSBjb3JlIGRhdGEgc3RydWN0dXJlcywgZS5nLiB2Q1BVXFxuK1xcdCAqIHN0YWNrcywgVk0gZXhjZXB0aW9uIHRhYmxlcywgeDg2J3MgVFNTLCBldGMuXFxuK1xcdCAqL1xcbiBcXHRNRU1fUkVHSU9OX0RBVEEsXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBQVCByZWdpb24sIGEuay5hLiBQYWdlIFRhYmxlIHJlZ2lvbiwgaXMgdXNlZCB0byBhbGxvY2F0ZSBwYWdlXFxuK1xcdCAqIHRhYmxlIHBhZ2VzLlxcbitcXHQgKi9cXG4gXFx0TUVNX1JFR0lPTl9QVCxcXG4rXFx0LypcXG4rXFx0ICogVGhlIFRFU1RfREFUQSByZWdpb24gaXMgdXNlZCBmb3IgYWxsb2NhdGluZyB0ZXN0IGRhdGEgdGhhdCBpcyBlaXRoZXJcXG4rXFx0ICogdGVzdCBzcGVjaWZpYywgYW5kL29yIGlzbid0IGNvbnNpZGVyZWQgYSBcXFwiY29yZVxcXCIgZGF0YSBzdHJ1Y3R1cmUuXFxuK1xcdCAqL1xcbiBcXHRNRU1fUkVHSU9OX1RFU1RfREFUQSxcXG4rXFx0LypcXG4rXFx0ICogVGhlIFRFU1RfRVhUUkEgcmVnaW9uIGlzIGZvciBzcGVjaWFsIHNub3dmbGFrZXMsIHdoZXJlIGEgdGVzdCB3YW50c1xcbitcXHQgKiB0byBjcmVhdGUgYW5kIHVzZSBhIG9uZS1vZmYgbWVtc2xvdCwgd2l0aG91dCBpbXBhY3RpbmcgXFxcIm5vcm1hbFxcXCIgdGVzdFxcbitcXHQgKiBkYXRhIGFsbG9jYXRpb25zLlxcbitcXHQgKi9cXG4rXFx0TUVNX1JFR0lPTl9URVNUX0VYVFJBLFxcbiBcXHROUl9NRU1fUkVHSU9OUyxcXG4gfTtcXG4gXFxuQEAgLTEyNywxMSArMTYzLDYgQEAgc3RydWN0IGt2bV92bSB7XFxuIFxcbiBcXHRzdHJ1Y3Qga3ZtX2JpbmFyeV9zdGF0cyBzdGF0cztcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIEtWTSByZWdpb24gc2xvdHMuIFRoZXNlIGFyZSB0aGUgZGVmYXVsdCBtZW1zbG90cyB1c2VkIGJ5IHBhZ2VcXG4tXFx0ICogYWxsb2NhdG9ycywgZS5nLiwgbGliL2VsZiB1c2VzIHRoZSBtZW1zbG90c1tNRU1fUkVHSU9OX0NPREVdXFxuLVxcdCAqIG1lbXNsb3QuXFxuLVxcdCAqL1xcbiBcXHR1MzIgbWVtc2xvdHNbTlJfTUVNX1JFR0lPTlNdO1xcbiB9O1xcbiBcXG5AQCAtMTY5LDcgKzIwMCw4IEBAIG1lbXNsb3QycmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgbWVtc2xvdCk7XFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICp2bV9nZXRfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcXG4ge1xcbi1cXHRhc3NlcnQodHlwZSBcXHUwMDNjIE5SX01FTV9SRUdJT05TKTtcXG4rXFx0VEVTVF9BU1NFUlQodHlwZSBcXHUwMDNjIE5SX01FTV9SRUdJT05TLFxcbitcXHRcXHQgICAgXFxcIkludmFsaWQgbWVtb3J5IHJlZ2lvbiB0eXBlICcldSdcXFwiLCB0eXBlKTtcXG4gXFx0cmV0dXJuIG1lbXNsb3QycmVnaW9uKHZtLCB2bS1cXHUwMDNlbWVtc2xvdHNbdHlwZV0pO1xcbiB9XFxuIFxcbkBAIC03MDIsNiArNzM0LDM2IEBAIHZvaWQgdm1fbWVtX2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcXG4gXFx0XFx0Z3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcywgdTMyIGZsYWdzLFxcbiBcXHRcXHRpbnQgZ3Vlc3RfbWVtZmRfZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbiBcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiBzbG90KVxcbit7XFxuK1xcdFRFU1RfQVNTRVJUKHZtLVxcdTAwM2VtZW1zbG90c1t0eXBlXSA9PSBLVk1fSU5WQUxJRF9NRU1TTE9ULFxcbitcXHRcXHQgICAgXFxcIk1lbW9yeSByZWdpb24gdHlwZSAnJXUnIHdhcyBhbHJlYWR5IG92ZXJyaWRkZW4gd2l0aCBzbG90PSV1XFxcIixcXG4rXFx0XFx0ICAgIHR5cGUsIHZtLVxcdTAwM2VtZW1zbG90c1t0eXBlXSk7XFxuK1xcbitcXHR2bS1cXHUwMDNlbWVtc2xvdHNbdHlwZV0gPSBzbG90O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgZ3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHUzMiBmbGFncylcXG4re1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgdHlwZSwgc2xvdCk7XFxuK1xcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgc3JjX3R5cGUsIGdwYSwgc2xvdCwgbnBhZ2VzLCBmbGFncyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZ3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcylcXG4re1xcbitcXHRfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIHR5cGUsIHNyY190eXBlLCBncGEsIHNsb3QsIG5wYWdlcywgMCk7XFxuK31cXG4rXFxuICNpZm5kZWYgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4ge1xcbkBAIC05OTAsMjMgKzEwNTIsNDEgQEAgdm9pZCBrdm1fZ3NpX3JvdXRpbmdfd3JpdGUoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgKnJvdXRpbmcpO1xcbiBcXG4gY29uc3QgY2hhciAqZXhpdF9yZWFzb25fc3RyKHVuc2lnbmVkIGludCBleGl0X3JlYXNvbik7XFxuIFxcbi1ncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpO1xcbi1ncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSwgZ3BhX3QgbWluX2dwYSxcXG4tXFx0XFx0XFx0ICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkKTtcXG4tZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSk7XFxuK2Jvb2wga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXModm9pZCk7XFxuK1xcbitncGFfdCBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsIGdwYV90IG1pbl9ncGEsXFxuK1xcdFxcdFxcdCAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKTtcXG4rZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcXG4rXFx0XFx0XFx0ICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsIGJvb2wgcHJvdGVjdGVkKTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpXFxuK3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcXG4ge1xcbiBcXHQvKlxcbiBcXHQgKiBCeSBkZWZhdWx0LCBhbGxvY2F0ZSBtZW1vcnkgYXMgcHJvdGVjdGVkIGZvciBWTXMgdGhhdCBzdXBwb3J0XFxuIFxcdCAqIHByb3RlY3RlZCBtZW1vcnksIGFzIHRoZSBtYWpvcml0eSBvZiBtZW1vcnkgZm9yIHN1Y2ggVk1zIGlzXFxuIFxcdCAqIHByb3RlY3RlZCwgaS5lLiB1c2luZyBzaGFyZWQgbWVtb3J5IGlzIGVmZmVjdGl2ZWx5IG9wdC1pbi5cXG4gXFx0ICovXFxuLVxcdHJldHVybiBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnVtLCBtaW5fZ3BhLCBtZW1zbG90LFxcbitcXHRyZXR1cm4gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLCB0eXBlLFxcbiBcXHRcXHRcXHRcXHQgICAgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeSh2bSkpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGdwYV90IHZtX3BoeV9wYWdlX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLFxcbitcXHRcXHRcXHRcXHQgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcXG4re1xcbitcXHRyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAxLCB0eXBlKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMpXFxuK3tcXG4rXFx0cmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIE1FTV9SRUdJT05fUFQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGt2bV92bSAqdm0pXFxuK3tcXG4rXFx0cmV0dXJuIHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIDEpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBfX19fdm1fY3JlYXRlKCkgZG9lcyBLVk1fQ1JFQVRFX1ZNIGFuZCBsaXR0bGUgZWxzZS4gIF9fdm1fY3JlYXRlKCkgYWxzb1xcbiAgKiBsb2FkcyB0aGUgdGVzdCBiaW5hcnkgaW50byBndWVzdCBtZW1vcnkgYW5kIGNyZWF0ZXMgYW4gSVJRIGNoaXAgKHg4NiBvbmx5KS5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oXFxuaW5kZXggMmQxYWZhMDk4MTliMC4uMTVmYWFhMDYwMTI2MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcXG5AQCAtOCw3ICs4LDcgQEBcXG4gI2RlZmluZSBTTVJBTV9NRU1TTE9UXFx0KCgxIFxcdTAwM2NcXHUwMDNjIDE2KSB8IDEpXFxuICNkZWZpbmUgU01SQU1fUEFHRVNcXHQoU01SQU1fU0laRSAvIFBBR0VfU0laRSlcXG4gXFxuLXZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNtcmFtX2dwYSxcXG4rdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzbXJhbV9ncGEsXFxuIFxcdFxcdCBjb25zdCB2b2lkICpzbWlfaGFuZGxlciwgc2l6ZV90IGhhbmRsZXJfc2l6ZSk7XFxuIFxcbiB2b2lkIGluamVjdF9zbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcXG5pbmRleCAwMTMyNWJmNGQzNmZjLi4yZGNhYTJjNGEwMzgzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jXFxuQEAgLTExNSw5ICsxMTUsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pXFxuIFxcdGlmICh2bS1cXHUwMDNlbW11LnBnZF9jcmVhdGVkKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHR2bS1cXHUwMDNlbW11LnBnZCA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsXFxuLVxcdFxcdFxcdFxcdFxcdCBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsXFxuLVxcdFxcdFxcdFxcdFxcdCB2bS1cXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xcbitcXHR2bS1cXHUwMDNlbW11LnBnZCA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIG5yX3BhZ2VzKTtcXG4gXFx0dm0tXFx1MDAzZW1tdS5wZ2RfY3JlYXRlZCA9IHRydWU7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xcbmluZGV4IDlkZGMwNDdkNWMyNzUuLjU3YjY1M2ZiZDBiMWYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXFxuQEAgLTE3LDYgKzE3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zdGF0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FsaWduLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgS1ZNX1VUSUxfTUlOX1BGTlxcdDJcXG5AQCAtMjg3LDYgKzI4OCw3IEBAIF9fd2VhayB2b2lkIHZtX3BvcHVsYXRlX2d2YV9iaXRtYXAoc3RydWN0IGt2bV92bSAqdm0pXFxuIHN0cnVjdCBrdm1fdm0gKl9fX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRpbnQgaTtcXG4gXFxuIFxcdHZtID0gY2FsbG9jKDEsIHNpemVvZigqdm0pKTtcXG4gXFx0VEVTVF9BU1NFUlQodm0gIT0gTlVMTCwgXFxcIkluc3VmZmljaWVudCBNZW1vcnlcXFwiKTtcXG5AQCAtMjk1LDYgKzI5Nyw4IEBAIHN0cnVjdCBrdm1fdm0gKl9fX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlKVxcbiBcXHR2bS1cXHUwMDNlcmVnaW9ucy5ncGFfdHJlZSA9IFJCX1JPT1Q7XFxuIFxcdHZtLVxcdTAwM2VyZWdpb25zLmh2YV90cmVlID0gUkJfUk9PVDtcXG4gXFx0aGFzaF9pbml0KHZtLVxcdTAwM2VyZWdpb25zLnNsb3RfaGFzaCk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgaSsrKVxcbitcXHRcXHR2bS1cXHUwMDNlbWVtc2xvdHNbaV0gPSBLVk1fSU5WQUxJRF9NRU1TTE9UO1xcbiBcXG4gXFx0dm0tXFx1MDAzZW1vZGUgPSBzaGFwZS5tb2RlO1xcbiBcXHR2bS1cXHUwMDNldHlwZSA9IHNoYXBlLnR5cGU7XFxuQEAgLTQ5MSw3ICs0OTUsNyBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsIHUzMiBucl9ydW5uYWJsZV92Y3B1cyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IG5yX2V4dHJhX3BhZ2VzKTtcXG4gXFx0c3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpzbG90MDtcXG4gXFx0c3RydWN0IGt2bV92bSAqdm07XFxuLVxcdGludCBpLCBmbGFncztcXG4rXFx0aW50IGZsYWdzO1xcbiBcXG4gXFx0a3ZtX3NldF9maWxlc19ybGltaXQobnJfcnVubmFibGVfdmNwdXMpO1xcbiBcXG5AQCAtNTA5LDggKzUxMywxMCBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsIHUzMiBucl9ydW5uYWJsZV92Y3B1cyxcXG4gXFx0XFx0ZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG4gXFxuIFxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsIDAsIG5yX3BhZ2VzLCBmbGFncyk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgaSsrKVxcbi1cXHRcXHR2bS1cXHUwMDNlbWVtc2xvdHNbaV0gPSAwO1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCAwKTtcXG4rXFx0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fUFQsIDApO1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9EQVRBLCAwKTtcXG4rXFx0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCAwKTtcXG4gXFxuIFxcdGt2bV92bV9lbGZfbG9hZCh2bSwgcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUpO1xcbiBcXG5AQCAtMTE4OSw2ICsxMTk1LDggQEAgbWVtc2xvdDJyZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIHUzMiBtZW1zbG90KVxcbiB7XFxuIFxcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uO1xcbiBcXG4rXFx0VEVTVF9BU1NFUlQobWVtc2xvdCAhPSBLVk1fSU5WQUxJRF9NRU1TTE9ULCBcXFwidm0tXFx1MDAzZW1lbXNsb3RzW10gdW5wb3B1bGF0ZWQ/XFxcIik7XFxuK1xcbiBcXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKHZtLVxcdTAwM2VyZWdpb25zLnNsb3RfaGFzaCwgcmVnaW9uLCBzbG90X25vZGUsXFxuIFxcdFxcdFxcdCAgICAgICBtZW1zbG90KVxcbiBcXHRcXHRpZiAocmVnaW9uLVxcdTAwM2VyZWdpb24uc2xvdCA9PSBtZW1zbG90KVxcbkBAIC0xNDY1LDkgKzE0NzMsNyBAQCBzdGF0aWMgZ3ZhX3QgX19fX3ZtX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3Qgc3osIGd2YV90IG1pbl9ndmEsXFxuIFxcdHU2NCBwYWdlcyA9IChzeiBcXHUwMDNlXFx1MDAzZSB2bS1cXHUwMDNlcGFnZV9zaGlmdCkgKyAoKHN6ICUgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSkgIT0gMCk7XFxuIFxcbiBcXHR2aXJ0X3BnZF9hbGxvYyh2bSk7XFxuLVxcdGdwYV90IGdwYSA9IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlcyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgS1ZNX1VUSUxfTUlOX1BGTiAqIHZtLVxcdTAwM2VwYWdlX3NpemUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHZtLVxcdTAwM2VtZW1zbG90c1t0eXBlXSwgcHJvdGVjdGVkKTtcXG4rXFx0Z3BhX3QgZ3BhID0gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzLCB0eXBlLCBwcm90ZWN0ZWQpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRmluZCBhbiB1bnVzZWQgcmFuZ2Ugb2YgdmlydHVhbCBwYWdlIGFkZHJlc3NlcyBvZiBhdCBsZWFzdFxcbkBAIC0yMDI1LDMzICsyMDMxLDIxIEBAIGNvbnN0IGNoYXIgKmV4aXRfcmVhc29uX3N0cih1bnNpZ25lZCBpbnQgZXhpdF9yZWFzb24pXFxuIH1cXG4gXFxuIC8qXFxuLSAqIFBoeXNpY2FsIENvbnRpZ3VvdXMgUGFnZSBBbGxvY2F0b3JcXG4tICpcXG4tICogSW5wdXQgQXJnczpcXG4tICogICB2bSAtIFZpcnR1YWwgTWFjaGluZVxcbi0gKiAgIG51bSAtIG51bWJlciBvZiBwYWdlc1xcbi0gKiAgIG1pbl9ncGEgLSBQaHlzaWNhbCBhZGRyZXNzIG1pbmltdW1cXG4tICogICBtZW1zbG90IC0gTWVtb3J5IHJlZ2lvbiB0byBhbGxvY2F0ZSBwYWdlIGZyb21cXG4tICogICBwcm90ZWN0ZWQgLSBUcnVlIGlmIHRoZSBwYWdlcyB3aWxsIGJlIHVzZWQgYXMgcHJvdGVjdGVkL3ByaXZhdGUgbWVtb3J5XFxuKyAqIEFsbG9jYXRlIGNvbnRpZ3VvdXMgKGd1ZXN0KSBwaHlzaWNhbCBwYWdlcyBpbiBhIGdpdmVuIG1lbW9yeSByZWdpb24sIGF0IG9yXFxuKyAqIHRoZSBtaW5pbXVtIHNwZWNpZmljIEdQQS4gIElmIHRoZSBtZW1vcnkgaXMgcHJvdGVjdGVkL3ByaXZhdGUsIGFsc28gYWRkIHRoZVxcbisgKiBhbGxvY2F0ZSBwYWdlcyB0byB0aGUgcmVnaW9uJ3Mgc2V0IG9mIHByb3RlY3RlZCBwYWdlcywgZS5nLiBzbyB0aGF0IGFyY2hcXG4rICogY29kZSBrbm93cyB3aGljaCBwYWdlcyBuZWVkIHRvIGJlIGVuY3J5cHRlZCB3aGVuIGxhdW5jaGluZyB0aGUgVk0uXFxuICAqXFxuLSAqIE91dHB1dCBBcmdzOiBOb25lXFxuLSAqXFxuLSAqIFJldHVybjpcXG4tICogICBTdGFydGluZyBwaHlzaWNhbCBhZGRyZXNzXFxuLSAqXFxuLSAqIFdpdGhpbiB0aGUgVk0gc3BlY2lmaWVkIGJ5IHZtLCBsb2NhdGVzIGEgcmFuZ2Ugb2YgYXZhaWxhYmxlIHBoeXNpY2FsXFxuLSAqIHBhZ2VzIGF0IG9yIGFib3ZlIG1pbl9ncGEuIElmIGZvdW5kLCB0aGUgcGFnZXMgYXJlIG1hcmtlZCBhcyBpbiB1c2VcXG4tICogYW5kIHRoZWlyIGJhc2UgYWRkcmVzcyBpcyByZXR1cm5lZC4gQSBURVNUX0FTU0VSVCBmYWlsdXJlIG9jY3VycyBpZlxcbi0gKiBub3QgZW5vdWdoIHBhZ2VzIGFyZSBhdmFpbGFibGUgYXQgb3IgYWJvdmUgbWluX2dwYS5cXG4rICogTm90ZSwgc3VjY2VzcyBpcyBndWFyYW50ZWVkIVxcbiAgKi9cXG4tZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sXFxuLVxcdFxcdFxcdCAgIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90LFxcbi1cXHRcXHRcXHQgICBib29sIHByb3RlY3RlZClcXG4rZ3BhX3QgX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLCBncGFfdCBtaW5fZ3BhLFxcbitcXHRcXHRcXHQgICAgIHUzMiBtZW1zbG90LCBib29sIHByb3RlY3RlZCwgYm9vbCBuYXR1cmFsbHlfYWxpZ25lZClcXG4ge1xcbitcXHRzaXplX3QgYWxpZ25tZW50ID0gbmF0dXJhbGx5X2FsaWduZWQgPyBucl9wYWdlcyA6IDE7XFxuIFxcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uO1xcbiBcXHRzcGFyc2ViaXRfaWR4X3QgcGcsIGJhc2U7XFxuIFxcbi1cXHRURVNUX0FTU0VSVChudW0gXFx1MDAzZSAwLCBcXFwiTXVzdCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZVxcXCIpO1xcbitcXHRURVNUX0FTU0VSVChucl9wYWdlcywgXFxcIk11c3QgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHBhZ2VcXFwiKTtcXG4gXFxuIFxcdFRFU1RfQVNTRVJUKChtaW5fZ3BhICUgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSkgPT0gMCwgXFxcIk1pbiBwaHlzaWNhbCBhZGRyZXNzIFxcXCJcXG4gXFx0XFx0XFxcIm5vdCBkaXZpc2libGUgYnkgcGFnZSBzaXplLlxcXFxuXFxcIlxcbkBAIC0yMDYyLDQzICsyMDU2LDc4IEBAIGdwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLFxcbiBcXHRURVNUX0FTU0VSVCghcHJvdGVjdGVkIHx8IHJlZ2lvbi1cXHUwMDNlcHJvdGVjdGVkX3BoeV9wYWdlcyxcXG4gXFx0XFx0ICAgIFxcXCJSZWdpb24gZG9lc24ndCBzdXBwb3J0IHByb3RlY3RlZCBtZW1vcnlcXFwiKTtcXG4gXFxuLVxcdGJhc2UgPSBwZyA9IG1pbl9ncGEgXFx1MDAzZVxcdTAwM2Ugdm0tXFx1MDAzZXBhZ2Vfc2hpZnQ7XFxuLVxcdGRvIHtcXG4tXFx0XFx0Zm9yICg7IHBnIFxcdTAwM2MgYmFzZSArIG51bTsgKytwZykge1xcbi1cXHRcXHRcXHRpZiAoIXNwYXJzZWJpdF9pc19zZXQocmVnaW9uLVxcdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZykpIHtcXG4tXFx0XFx0XFx0XFx0YmFzZSA9IHBnID0gc3BhcnNlYml0X25leHRfc2V0KHJlZ2lvbi1cXHUwMDNldW51c2VkX3BoeV9wYWdlcywgcGcpO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbitcXHRiYXNlID0gbWluX2dwYSBcXHUwMDNlXFx1MDAzZSB2bS1cXHUwMDNlcGFnZV9zaGlmdDtcXG4rYWdhaW46XFxuK1xcdGJhc2UgPSBBTElHTihiYXNlLCBhbGlnbm1lbnQpO1xcbitcXHRmb3IgKHBnID0gYmFzZTsgcGcgXFx1MDAzYyBiYXNlICsgbnJfcGFnZXM7ICsrcGcpIHtcXG4rXFx0XFx0aWYgKCFzcGFyc2ViaXRfaXNfc2V0KHJlZ2lvbi1cXHUwMDNldW51c2VkX3BoeV9wYWdlcywgcGcpKSB7XFxuK1xcdFxcdFxcdGJhc2UgPSBzcGFyc2ViaXRfbmV4dF9zZXQocmVnaW9uLVxcdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XFxuK1xcdFxcdFxcdGlmICghYmFzZSlcXG4rXFx0XFx0XFx0XFx0Z290byBlbm9tZW07XFxuK1xcdFxcdFxcdGdvdG8gYWdhaW47XFxuIFxcdFxcdH1cXG4tXFx0fSB3aGlsZSAocGcgXFx1MDAyNlxcdTAwMjYgcGcgIT0gYmFzZSArIG51bSk7XFxuLVxcbi1cXHRpZiAocGcgPT0gMCkge1xcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIk5vIGd1ZXN0IHBoeXNpY2FsIHBhZ2UgYXZhaWxhYmxlLCBcXFwiXFxuLVxcdFxcdFxcdFxcXCJtaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdG1pbl9ncGEsIHZtLVxcdTAwM2VwYWdlX3NpemUsIG1lbXNsb3QpO1xcbi1cXHRcXHRmcHV0cyhcXFwiLS0tLSB2bSBkdW1wIC0tLS1cXFxcblxcXCIsIHN0ZGVycik7XFxuLVxcdFxcdHZtX2R1bXAoc3RkZXJyLCB2bSwgMik7XFxuLVxcdFxcdGFib3J0KCk7XFxuIFxcdH1cXG4gXFxuLVxcdGZvciAocGcgPSBiYXNlOyBwZyBcXHUwMDNjIGJhc2UgKyBudW07ICsrcGcpIHtcXG4rXFx0Zm9yIChwZyA9IGJhc2U7IHBnIFxcdTAwM2MgYmFzZSArIG5yX3BhZ2VzOyArK3BnKSB7XFxuIFxcdFxcdHNwYXJzZWJpdF9jbGVhcihyZWdpb24tXFx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKTtcXG4gXFx0XFx0aWYgKHByb3RlY3RlZClcXG4gXFx0XFx0XFx0c3BhcnNlYml0X3NldChyZWdpb24tXFx1MDAzZXByb3RlY3RlZF9waHlfcGFnZXMsIHBnKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGJhc2UgKiB2bS1cXHUwMDNlcGFnZV9zaXplO1xcbitcXG4rZW5vbWVtOlxcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIk5vIGd1ZXN0IHBoeXNpY2FsIHBhZ2UgYXZhaWxhYmxlLCBtaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcXFxcblxcXCIsXFxuK1xcdFxcdG1pbl9ncGEsIHZtLVxcdTAwM2VwYWdlX3NpemUsIG1lbXNsb3QpO1xcbitcXHRmcHV0cyhcXFwiLS0tLSB2bSBkdW1wIC0tLS1cXFxcblxcXCIsIHN0ZGVycik7XFxuK1xcdHZtX2R1bXAoc3RkZXJyLCB2bSwgMik7XFxuK1xcdGFib3J0KCk7XFxuK1xcdF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpO1xcbiB9XFxuIFxcbi1ncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpXFxuK19fd2VhayBib29sIGt2bV9hcmNoX25lZWRzX25hdHVyYWxseV9hbGlnbmVkX3BhZ2VfdGFibGVzKHZvaWQpXFxuIHtcXG4tXFx0cmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMSwgbWluX2dwYSwgbWVtc2xvdCk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4rZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcXG4rXFx0XFx0XFx0ICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsIGJvb2wgcHJvdGVjdGVkKVxcbiB7XFxuLVxcdHJldHVybiB2bV9waHlfcGFnZV9hbGxvYyh2bSwgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxcbi1cXHRcXHRcXHRcXHQgdm0tXFx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcXG4rXFx0c3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb24gPSB2bV9nZXRfbWVtX3JlZ2lvbih2bSwgdHlwZSk7XFxuK1xcdGJvb2wgbmF0dXJhbGx5X2FsaWduZWQgPSBmYWxzZTtcXG4rXFx0Z3BhX3QgbWluX2dwYTtcXG4rXFxuK1xcdFRFU1RfQVNTRVJUKHJlZ2lvbiwgXFxcIk5vIHJlZ2lvbiBmb3IgdHlwZSAnJXUnLCBtZW1zbG90ICcldSdcXFwiLFxcbitcXHRcXHQgICAgdHlwZSwgdm0tXFx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcXG4rXFxuK1xcdHN3aXRjaCAodHlwZSkge1xcbitcXHRjYXNlIE1FTV9SRUdJT05fQ09ERTpcXG4rXFx0Y2FzZSBNRU1fUkVHSU9OX0RBVEE6XFxuK1xcdGNhc2UgTUVNX1JFR0lPTl9URVNUX0RBVEE6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIElmIHRoZSByZWdpb24gaXMgYmFja2VkIGJ5IHRoZSBkZWZhdWx0IG1lbXNsb3QgKGlkPTApLCB1c2VcXG4rXFx0XFx0ICogc2VsZnRlc3RzJyBoYXJkY29kZWQgbWluaW11bSBQRk4sIG90aGVyd2lzZSB1c2UgdGhlIGJhc2Ugb2ZcXG4rXFx0XFx0ICogdGhlIGN1c3RvbSBtZW1vcnkgc2xvdCB0aGF0IGJhY2tzIHRoZSByZWdpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIXZtLVxcdTAwM2VtZW1zbG90c1t0eXBlXSlcXG4rXFx0XFx0XFx0bWluX2dwYSA9IEtWTV9VVElMX01JTl9QRk4gKiB2bS1cXHUwMDNlcGFnZV9zaXplO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG1pbl9ncGEgPSByZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1FTV9SRUdJT05fUFQ6XFxuK1xcdFxcdG1pbl9ncGEgPSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFI7XFxuK1xcdFxcdG5hdHVyYWxseV9hbGlnbmVkID0ga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXMoKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUVNX1JFR0lPTl9URVNUX0VYVFJBOlxcbitcXHRcXHRtaW5fZ3BhID0gcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0VEVTVF9GQUlMKFxcXCJJbnZhbGlkIG1lbW9yeSByZWdpb24gdHlwZSAnJXUnXFxcIiwgdHlwZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIG1pbl9ncGEsIHZtLVxcdTAwM2VtZW1zbG90c1t0eXBlXSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcHJvdGVjdGVkLCBuYXR1cmFsbHlfYWxpZ25lZCk7XFxuIH1cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcXG5pbmRleCA0N2JiZGUzZTIwNWEwLi5mY2Q0MWJjNmZiZGFlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcXG5AQCAtOSw3ICs5LDYgQEBcXG4gI2luY2x1ZGUgXFxcInByb2Nlc3Nvci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidWNhbGxfY29tbW9uLmhcXFwiXFxuIFxcbi0jZGVmaW5lIExPT05HQVJDSF9QQUdFX1RBQkxFX1BIWVNfTUlOXFx0XFx0MHgyMDAwMDBcXG4gI2RlZmluZSBMT09OR0FSQ0hfR1VFU1RfU1RBQ0tfVkFERFJfTUlOXFx0XFx0MHgyMDAwMDBcXG4gXFxuIHN0YXRpYyBncGFfdCBpbnZhbGlkX3BndGFibGVbNF07XFxuQEAgLTU3LDkgKzU2LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxcbiBcXHRjaGlsZCA9IHRhYmxlID0gMDtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHZtLVxcdTAwM2VtbXUucGd0YWJsZV9sZXZlbHM7IGkrKykge1xcbiBcXHRcXHRpbnZhbGlkX3BndGFibGVbaV0gPSBjaGlsZDtcXG4tXFx0XFx0dGFibGUgPSB2bV9waHlfcGFnZV9hbGxvYyh2bSwgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU4sXFxuLVxcdFxcdFxcdFxcdHZtLVxcdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XFxuLVxcdFxcdFRFU1RfQVNTRVJUKHRhYmxlLCBcXFwiRmFpbCB0byBhbGxvY2F0ZSBwYWdlIHRhbGUgYXQgbGV2ZWwgJWRcXFxcblxcXCIsIGkpO1xcbitcXHRcXHR0YWJsZSA9IHZtX2FsbG9jX3BhZ2VfdGFibGUodm0pO1xcbiBcXHRcXHR2aXJ0X3NldF9wZ3RhYmxlKHZtLCB0YWJsZSwgY2hpbGQpO1xcbiBcXHRcXHRjaGlsZCA9IHRhYmxlO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuaW5kZXggZGVkNTQyOWYzNDQ4My4uYzE3NWRjZDE0MTE0NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xcbkBAIC02OSw5ICs2OSw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4gXFx0aWYgKHZtLVxcdTAwM2VtbXUucGdkX2NyZWF0ZWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHZtLVxcdTAwM2VtbXUucGdkID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcyxcXG4tXFx0XFx0XFx0XFx0XFx0IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcXG4tXFx0XFx0XFx0XFx0XFx0IHZtLVxcdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XFxuK1xcdHZtLVxcdTAwM2VtbXUucGdkID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgbnJfcGFnZXMpO1xcbiBcXHR2bS1cXHUwMDNlbW11LnBnZF9jcmVhdGVkID0gdHJ1ZTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jXFxuaW5kZXggYTlhZGIzNzgyYjM1Mi4uMzNmNDlkNzQzYjVmZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcXG5AQCAtMjAsOSArMjAsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pXFxuIFxcdGlmICh2bS1cXHUwMDNlbW11LnBnZF9jcmVhdGVkKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIFBBR0VTX1BFUl9SRUdJT04sXFxuLVxcdFxcdFxcdFxcdCAgIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcXG4tXFx0XFx0XFx0XFx0ICAgdm0tXFx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcXG4rXFx0Z3BhID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgUEFHRVNfUEVSX1JFR0lPTik7XFxuIFxcdG1lbXNldChhZGRyX2dwYTJodmEodm0sIGdwYSksIDB4ZmYsIFBBR0VTX1BFUl9SRUdJT04gKiB2bS1cXHUwMDNlcGFnZV9zaXplKTtcXG4gXFxuIFxcdHZtLVxcdTAwM2VtbXUucGdkID0gZ3BhO1xcbkBAIC0zOCw4ICszNiw3IEBAIHN0YXRpYyB1NjQgdmlydF9hbGxvY19yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIGludCByaSlcXG4ge1xcbiBcXHR1NjQgdGFkZHI7XFxuIFxcbi1cXHR0YWRkciA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgIHJpIFxcdTAwM2MgNCA/IFBBR0VTX1BFUl9SRUdJT04gOiAxLFxcbi1cXHRcXHRcXHRcXHQgICBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsIDApO1xcbitcXHR0YWRkciA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIHJpIFxcdTAwM2MgNCA/IFBBR0VTX1BFUl9SRUdJT04gOiAxKTtcXG4gXFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgdGFkZHIpLCAweGZmLCBQQUdFU19QRVJfUkVHSU9OICogdm0tXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuIFxcbiBcXHRyZXR1cm4gKHRhZGRyIFxcdTAwMjYgUkVHSU9OX0VOVFJZX09SSUdJTilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xcbmluZGV4IGQzMWZhODFlYTA3NTYuLjQ3OWU5YTQ4MTY4N2QgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xcbkBAIC01MjksNyArNTI5LDEwIEBAIHZvaWQgdGRwX2lkZW50aXR5X21hcF9kZWZhdWx0X21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtKVxcbiBcXG4gXFx0LyogT25seSBtZW1zbG90IDAgaXMgbWFwcGVkIGhlcmUsIGVuc3VyZSBpdCdzIHRoZSBvbmx5IG9uZSBiZWluZyB1c2VkICovXFxuIFxcdGZvciAocyA9IDA7IHMgXFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgcysrKVxcbi1cXHRcXHRURVNUX0FTU0VSVF9FUSh2bS1cXHUwMDNlbWVtc2xvdHNbc10sIDApO1xcbitcXHRcXHRURVNUX0FTU0VSVCghdm0tXFx1MDAzZW1lbXNsb3RzW3NdIHx8XFxuK1xcdFxcdFxcdCAgICB2bS1cXHUwMDNlbWVtc2xvdHNbc10gPT0gS1ZNX0lOVkFMSURfTUVNU0xPVCxcXG4rXFx0XFx0XFx0ICAgIFxcXCJVbmhhbmRsZWQgbWVtc2xvdCAnJXUnIGZvciB0eXBlICcldSdcXFwiLFxcbitcXHRcXHRcXHQgICAgdm0tXFx1MDAzZW1lbXNsb3RzW3NdLCBzKTtcXG4gXFxuIFxcdGkgPSAocmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyIFxcdTAwM2VcXHUwMDNlIHZtLVxcdTAwM2VwYWdlX3NoaWZ0KSAtIDE7XFxuIFxcdGxhc3QgPSBpICsgKHJlZ2lvbi1cXHUwMDNlcmVnaW9uLm1lbW9yeV9zaXplIFxcdTAwM2VcXHUwMDNlIHZtLVxcdTAwM2VwYWdlX3NoaWZ0KTtcXG5AQCAtMTQ2NSwxMyArMTQ2OCwxMyBAQCBib29sIGt2bV9hcmNoX2hhc19kZWZhdWx0X2lycWNoaXAodm9pZClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNtcmFtX2dwYSxcXG4rdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzbXJhbV9ncGEsXFxuIFxcdFxcdCBjb25zdCB2b2lkICpzbWlfaGFuZGxlciwgc2l6ZV90IGhhbmRsZXJfc2l6ZSlcXG4ge1xcbi1cXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBzbXJhbV9ncGEsXFxuLVxcdFxcdFxcdFxcdCAgICBTTVJBTV9NRU1TTE9ULCBTTVJBTV9QQUdFUywgMCk7XFxuLVxcdFRFU1RfQVNTRVJUKHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgU01SQU1fUEFHRVMsIHNtcmFtX2dwYSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFNNUkFNX01FTVNMT1QpID09IHNtcmFtX2dwYSxcXG4rXFx0dm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcXG4rXFx0XFx0XFx0ICAgICAgIHNtcmFtX2dwYSwgU01SQU1fTUVNU0xPVCwgU01SQU1fUEFHRVMpO1xcbitcXG4rXFx0VEVTVF9BU1NFUlQodm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBTTVJBTV9QQUdFUywgTUVNX1JFR0lPTl9URVNUX0VYVFJBKSA9PSBzbXJhbV9ncGEsXFxuIFxcdFxcdCAgICBcXFwiQ291bGQgbm90IGFsbG9jYXRlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgU01SQU1cXFwiKTtcXG4gXFxuIFxcdG1lbXNldChhZGRyX2dwYTJodmEodm0sIHNtcmFtX2dwYSksIDB4MCwgU01SQU1fU0laRSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcXG5pbmRleCBlMTI5OTYxMWJlMzIyLi44NDRlYTliN2JiNDFjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcXG5AQCAtMzM5LDcgKzMzOSw4IEBAIHN0YXRpYyBib29sIHByZXBhcmVfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEsIGludCBuc2xvdHMsIHU2NCAqbWF4c2xvdHMsXFxuIFxcdFxcdGlmIChzbG90ID09IGRhdGEtXFx1MDAzZW5zbG90cylcXG4gXFx0XFx0XFx0bnBhZ2VzICs9IHJlbXBhZ2VzO1xcbiBcXG4tXFx0XFx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKGRhdGEtXFx1MDAzZXZtLCBucGFnZXMsIGd1ZXN0X2FkZHIsIHNsb3QpO1xcbitcXHRcXHRncGEgPSBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKGRhdGEtXFx1MDAzZXZtLCBucGFnZXMsIGd1ZXN0X2FkZHIsIHNsb3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgZmFsc2UsIGZhbHNlKTtcXG4gXFx0XFx0VEVTVF9BU1NFUlQoZ3BhID09IGd1ZXN0X2FkZHIsXFxuIFxcdFxcdFxcdCAgICBcXFwidm1fcGh5X3BhZ2VzX2FsbG9jKCkgZmFpbGVkXFxcIik7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXFxuaW5kZXggMTVkODFiMmVkN2FkMy4uNzMzODdjYzNiY2E3NiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXFxuQEAgLTEwMiwyNCArMTAyLDE3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2RpcnR5X3Rlc3RfZGF0YSh2b2lkKVxcbiBcXG4gc3RhdGljIHZvaWQgY3JlYXRlX21haW5fbWVtc2xvdChzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4ge1xcbi1cXHRpbnQgaTtcXG4tXFxuIFxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsIDAsIE1BSU5fUEFHRV9DT1VOVCwgMCk7XFxuLVxcdC8qIHNldCB0aGUgYXJyYXkgb2YgbWVtc2xvdHMgdG8gemVybyBsaWtlIF9fdm1fY3JlYXRlIGRvZXMgKi9cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX01FTV9SRUdJT05TOyBpKyspXFxuLVxcdFxcdHZtLVxcdTAwM2VtZW1zbG90c1tpXSA9IDA7XFxuK1xcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0NPREUsIDApO1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgMCk7XFxuK1xcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIDApO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBjcmVhdGVfdGVzdF9tZW1zbG90KHN0cnVjdCBrdm1fdm0gKnZtKVxcbiB7XFxuLVxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSxcXG4tXFx0XFx0XFx0XFx0ICAgIFZNX01FTV9TUkNfQU5PTllNT1VTLFxcbi1cXHRcXHRcXHRcXHQgICAgVEVTVF9EQVRBX1NUQVJUX0dGTiBcXHUwMDNjXFx1MDAzYyB2bS1cXHUwMDNlcGFnZV9zaGlmdCxcXG4tXFx0XFx0XFx0XFx0ICAgIFRFU1RfREFUQV9NRU1TTE9ULFxcbi1cXHRcXHRcXHRcXHQgICAgVEVTVF9EQVRBX1BBR0VfQ09VTlQsXFxuLVxcdFxcdFxcdFxcdCAgICAwXFxuLVxcdFxcdFxcdFxcdCAgICk7XFxuLVxcdHZtLVxcdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1RFU1RfREFUQV0gPSBURVNUX0RBVEFfTUVNU0xPVDtcXG4rXFx0dm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxcbitcXHRcXHRcXHQgICAgICAgVEVTVF9EQVRBX1NUQVJUX0dGTiBcXHUwMDNjXFx1MDAzYyB2bS1cXHUwMDNlcGFnZV9zaGlmdCxcXG4rXFx0XFx0XFx0ICAgICAgIFRFU1RfREFUQV9NRU1TTE9ULCBURVNUX0RBVEFfUEFHRV9DT1VOVCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGNyZWF0ZV9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmNcXG5pbmRleCBmMzgzOTI4NGFjMDgxLi5jZDI2Y2MxYWVkODAzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jXFxuQEAgLTM2LDcgKzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdCh2b2lkKVxcbiBcXHR9O1xcbiBcXG4gXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XFxuLVxcdG1lbSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgNDA5NiAqIDQyLCAwKTtcXG4rXFx0bWVtID0gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgNDA5NiAqIDQyLCAwLCBmYWxzZSwgZmFsc2UpO1xcbiBcXG4gXFx0cm91dGluZyA9IGt2bV9nc2lfcm91dGluZ19jcmVhdGUoKTtcXG4gXFx0cm91dGluZy1cXHUwMDNlbnIgPSAxO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xcbmluZGV4IGRmZmU5NjU0ZjQ1YmQuLmJmYTVhYzhjZTAyOTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcXG5AQCAtMTE2LDE1ICsxMTYsMTUgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnNwYXduX3ZtKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsIHB0aHJlYWRfdCAqdmNwdV90aHJlYWQsXFxuIFxcbiBcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpO1xcbiBcXG4tXFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsXFxuLVxcdFxcdFxcdFxcdCAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxcbi1cXHRcXHRcXHRcXHQgICAgTUVNX1JFR0lPTl9TSVpFIC8gZ2V0cGFnZXNpemUoKSwgMCk7XFxuK1xcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVNfVEhQLFxcbitcXHRcXHRcXHQgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcXG4rXFx0XFx0XFx0ICAgICAgIE1FTV9SRUdJT05fU0laRSAvIGdldHBhZ2VzaXplKCkpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogQWxsb2NhdGUgYW5kIG1hcCB0d28gcGFnZXMgc28gdGhhdCB0aGUgR1BBIGFjY2Vzc2VkIGJ5IGd1ZXN0X2NvZGUoKVxcbiBcXHQgKiBzdGF5cyB2YWxpZCBhY3Jvc3MgdGhlIG1lbXNsb3QgbW92ZS5cXG4gXFx0ICovXFxuLVxcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCk7XFxuK1xcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcXG4gXFx0VEVTVF9BU1NFUlQoZ3BhID09IE1FTV9SRUdJT05fR1BBLCBcXFwiRmFpbGVkIHZtX3BoeV9wYWdlc19hbGxvY1xcXFxuXFxcIik7XFxuIFxcbiBcXHR2aXJ0X21hcCh2bSwgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fR1BBLCAyKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNcXG5pbmRleCAzZGNhODVlOTU0NzgxLi44ZDE4MjI3MTdhYmRjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jXFxuQEAgLTYyLDExICs2MiwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRURVNUX0FTU0VSVChyYywgXFxcIktWTV9DQVBfRVhJVF9PTl9FTVVMQVRJT05fRkFJTFVSRSBpcyB1bmF2YWlsYWJsZVxcXCIpO1xcbiBcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYSVRfT05fRU1VTEFUSU9OX0ZBSUxVUkUsIDEpO1xcbiBcXG4tXFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcXG4tXFx0XFx0XFx0XFx0ICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsXFxuLVxcdFxcdFxcdFxcdCAgICBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUsIDApO1xcbitcXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxcbitcXHRcXHRcXHQgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcXG4rXFx0XFx0XFx0ICAgICAgIE1FTV9SRUdJT05fU0laRSAvIFBBR0VfU0laRSk7XFxuK1xcbiBcXHRncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIE1FTV9SRUdJT05fU0laRSAvIFBBR0VfU0laRSxcXG4tXFx0XFx0XFx0XFx0IE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QpO1xcbitcXHRcXHRcXHRcXHQgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcXG4gXFx0VEVTVF9BU1NFUlQoZ3BhID09IE1FTV9SRUdJT05fR1BBLCBcXFwiRmFpbGVkIHZtX3BoeV9wYWdlc19hbGxvY1xcXCIpO1xcbiBcXHR2aXJ0X21hcCh2bSwgTUVNX1JFR0lPTl9HVkEsIE1FTV9SRUdJT05fR1BBLCAxKTtcXG4gXFx0aHZhID0gYWRkcl9ncGEyaHZhKHZtLCBNRU1fUkVHSU9OX0dQQSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjE2OjMwLjg2MjEyNzg2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDc0MzUwMjc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJBbGwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgcmVzdHJpY3RlZCB0byB1c2VyLXNwYWNlIEtWTSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggZG8gbm90IG1vZGlmeSB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzdhMzA2ZDdlODY5OTcwNGUxNmIwYmRkZDc1ZTVhNjk0N2Q0OGMyOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTM6MTY6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcbmluZGV4IDZiYjNkODI5MDZiMjIuLmIwZTNmYzhjZDc2YWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuY1xuQEAgLTU5NywxOCArNTk3LDE2IEBAIHN0YXRpYyB2b2lkIHNldHVwX21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3QgdGVzdF9wYXJhbXMgKnApXG4gXG4gXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCAwLFxuIFx0XHRcdFx0ICAgIENPREVfQU5EX0RBVEFfTUVNU0xPVCwgY29kZV9ucGFnZXMsIDApO1xuLVx0dm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9DT0RFXSA9IENPREVfQU5EX0RBVEFfTUVNU0xPVDtcbi1cdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fREFUQV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7XG4tXG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhIC0gcHRfc2l6ZSxcbi1cdFx0XHRcdCAgICBQQUdFX1RBQkxFX01FTVNMT1QsIHB0X3NpemUgLyBndWVzdF9wYWdlX3NpemUsXG4tXHRcdFx0XHQgICAgcC1cdTAwM2V0ZXN0X2Rlc2MtXHUwMDNlcHRfbWVtc2xvdF9mbGFncyk7XG4tXHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSA9IFBBR0VfVEFCTEVfTUVNU0xPVDtcbi1cbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgcC1cdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEsIFRFU1RfREFUQV9NRU1TTE9ULFxuLVx0XHRcdFx0ICAgIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcbi1cdFx0XHRcdCAgICBwLVx1MDAzZXRlc3RfZGVzYy1cdTAwM2VkYXRhX21lbXNsb3RfZmxhZ3MpO1xuLVx0dm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9URVNUX0RBVEFdID0gVEVTVF9EQVRBX01FTVNMT1Q7XG4rXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCBDT0RFX0FORF9EQVRBX01FTVNMT1QpO1xuK1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTtcbitcbitcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgcC1cdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEgLSBwdF9zaXplLFxuK1x0XHRcdFx0IFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcbitcdFx0XHRcdCBwLVx1MDAzZXRlc3RfZGVzYy1cdTAwM2VwdF9tZW1zbG90X2ZsYWdzKTtcbitcbitcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIHAtXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhLFxuK1x0XHRcdFx0IFRFU1RfREFUQV9NRU1TTE9ULCBkYXRhX3NpemUgLyBndWVzdF9wYWdlX3NpemUsXG4rXHRcdFx0XHQgcC1cdTAwM2V0ZXN0X2Rlc2MtXHUwMDNlZGF0YV9tZW1zbG90X2ZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2V0dXBfdWNhbGwoc3RydWN0IGt2bV92bSAqdm0pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG5pbmRleCA5YTY5YzQzOWEwZjhmLi40NWE4N2JhNWE3MzdhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbkBAIC0yMyw3ICsyMyw2IEBAXG4gI2RlZmluZSBHSUNfTFBJX09GRlNFVFx0ODE5MlxuIFxuIHN0YXRpYyBzaXplX3QgbnJfaXRlcmF0aW9ucyA9IDEwMDA7XG4tc3RhdGljIGdwYV90IGdwYV9iYXNlO1xuIFxuIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG5AQCAtMTQzLDYgKzE0Miw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUoc2l6ZV90IG5yX2xwaXMpXG4gXG4gc3RhdGljIHZvaWQgc2V0dXBfbWVtc2xvdCh2b2lkKVxuIHtcbitcdGdwYV90IGdwYV9iYXNlO1xuIFx0c2l6ZV90IHBhZ2VzO1xuIFx0c2l6ZV90IHN6O1xuIFxuQEAgLTE2NCw4ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90KHZvaWQpXG4gXG4gXHRwYWdlcyA9IHN6IC8gdm0tXHUwMDNlcGFnZV9zaXplO1xuIFx0Z3BhX2Jhc2UgPSAoKHZtX2NvbXB1dGVfbWF4X2dmbih2bSkgKyAxKSAqIHZtLVx1MDAzZXBhZ2Vfc2l6ZSkgLSBzejtcbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIGdwYV9iYXNlLFxuLVx0XHRcdFx0ICAgIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMsIDApO1xuK1x0dm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbitcdFx0XHQgICAgICAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMpO1xuIH1cbiBcbiAjZGVmaW5lIExQSV9QUk9QX0RFRkFVTFRfUFJJT1x0MHhhMFxuQEAgLTE5MSwyOCArMTkxLDI1IEBAIHN0YXRpYyB2b2lkIHNldHVwX3Rlc3RfZGF0YSh2b2lkKVxuIFx0Z3BhX3QgY21kcV9iYXNlO1xuIFxuIFx0dGVzdF9kYXRhLmRldmljZV90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayxcbi1cdFx0XHRcdFx0XHQgICAgZ3BhX2Jhc2UsXG4tXHRcdFx0XHRcdFx0ICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4rXHRcdFx0XHRcdFx0ICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXG4gXHR0ZXN0X2RhdGEuY29sbGVjdGlvbl90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayxcbi1cdFx0XHRcdFx0XHRcdGdwYV9iYXNlLFxuLVx0XHRcdFx0XHRcdFx0VEVTVF9NRU1TTE9UX0lOREVYKTtcbitcdFx0XHRcdFx0XHRcdE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXG4tXHRjbWRxX2Jhc2UgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssIGdwYV9iYXNlLFxuLVx0XHRcdFx0ICAgICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4rXHRjbWRxX2Jhc2UgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXHR2aXJ0X21hcCh2bSwgY21kcV9iYXNlLCBjbWRxX2Jhc2UsIHBhZ2VzX3Blcl82NGspO1xuIFx0dGVzdF9kYXRhLmNtZHFfYmFzZSA9IGNtZHFfYmFzZTtcbiBcdHRlc3RfZGF0YS5jbWRxX2Jhc2VfdmEgPSAodm9pZCAqKWNtZHFfYmFzZTtcbiBcbiBcdHRlc3RfZGF0YS5pdHRfdGFibGVzID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrICogbnJfZGV2aWNlcyxcbi1cdFx0XHRcdFx0XHQgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpO1xuK1x0XHRcdFx0XHRcdCAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcbiBcdHRlc3RfZGF0YS5scGlfcHJvcF90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayxcbi1cdFx0XHRcdFx0XHQgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYKTtcbitcdFx0XHRcdFx0XHQgICAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFx0Y29uZmlndXJlX2xwaXMoKTtcbiBcbiBcdHRlc3RfZGF0YS5scGlfcGVuZF90YWJsZXMgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGsgKiBucl9jcHVzLFxuLVx0XHRcdFx0XHRcdCAgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYKTtcbitcdFx0XHRcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcbiBcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCB0ZXN0X2RhdGEpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuaW5kZXggNWE3YTQ1NWI1Mzg3NS4uODliNGZjMmFmNzUxNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbkBAIC0zMyw2ICszMyw4IEBAXG4gXG4gI2RlZmluZSBOU0VDX1BFUl9TRUMgMTAwMDAwMDAwMExcbiBcbisjZGVmaW5lIEtWTV9JTlZBTElEX01FTVNMT1QgVUlOVF9NQVhcbitcbiBzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24ge1xuIFx0c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgcmVnaW9uO1xuIFx0c3RydWN0IHNwYXJzZWJpdCAqdW51c2VkX3BoeV9wYWdlcztcbkBAIC04MCwxMSArODIsNDUgQEAgc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9ucyB7XG4gXHRERUNMQVJFX0hBU0hUQUJMRShzbG90X2hhc2gsIDkpO1xuIH07XG4gXG4rLypcbisgKiBNZW1vcnkgcmVnaW9uIHR5cGVzIGFyZSBwYXNzZWQgdG8gdmFyaW91cyBwYWdlIGFsbG9jYXRvcnMgdG8gY29tbXVuaWNhdGVcbisgKiB2YXJpb3VzIHByb3BlcnRpZXMgYW5kIG1ldGFkYXRhIHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24uICBOb3RlLCB0aGVcbisgKiBkZXNjcmlwdGlvbnMgYmVsb3cgZGVzY3JpYmVkIHRoZSBwcmltYXJ5IHVzYWdlIG9mIGVhY2ggdHlwZS4gIEluZGl2aWR1YWxcbisgKiB0ZXN0cyBtYXkgYWxsb2NhdGUgbWVtb3J5IGZvciBvdGhlciBwdXJwb3Nlcy5cbisgKlxuKyAqIEJ5IGRlZmF1bHQsIGFsbCByZWdpb25zIGV4Y2VwdCBURVNUX0VYVFJBIGFyZSBtYXBwZWQgdG8gbWVtc2xvdCAnMCcuICBUaGVcbisgKiBURVhUX0VYVFJBIHJlZ2lvbiBpcyBsZWZ0IHVubWFwcGVkIGFzIGl0J3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0XG4rICogc3BlY2lmaWMgYWxsb2NhdGlvbnMsIGkuZS4gc2hvdWxkIG5ldmVyIGJlIHVzZWQgYnkgY29yZS9pbmZyYXN0cnVjdHVyZSBjb2RlLlxuKyAqIFRlc3RzIGNhbiBvdmVycmlkZSB0aGUgbWVtc2xvdCBmb3IgYW55IG9yIGFsbCB0eXBlcywgZS5nLiBzbyB0aGF0IGFsbCB0ZXN0XG4rICogZGF0YSBpcyBhbGxvY2F0ZWQgZnJvbSBhIGN1cmF0ZWQgbWVtc2xvdC5cbisgKi9cbiBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUge1xuK1x0LypcbitcdCAqIFRoZSBDT0RFIHJlZ2lvbiBpcyB1c2VkIGJ5IGxpYi9lbGYgd2hlbiBsb2FkaW5nIHRoZSB0ZXN0J3MgY29kZSBpbnRvXG4rXHQgKiBndWVzdCBtZW1vcnkuXG4rXHQgKi9cbiBcdE1FTV9SRUdJT05fQ09ERSxcbitcdC8qXG4rXHQgKiBUaGUgREFUQSByZWdpb24gaXMgdXNlZCB0byBhbGxvY2F0ZSBjb3JlIGRhdGEgc3RydWN0dXJlcywgZS5nLiB2Q1BVXG4rXHQgKiBzdGFja3MsIFZNIGV4Y2VwdGlvbiB0YWJsZXMsIHg4NidzIFRTUywgZXRjLlxuK1x0ICovXG4gXHRNRU1fUkVHSU9OX0RBVEEsXG4rXHQvKlxuK1x0ICogVGhlIFBUIHJlZ2lvbiwgYS5rLmEuIFBhZ2UgVGFibGUgcmVnaW9uLCBpcyB1c2VkIHRvIGFsbG9jYXRlIHBhZ2VcbitcdCAqIHRhYmxlIHBhZ2VzLlxuK1x0ICovXG4gXHRNRU1fUkVHSU9OX1BULFxuK1x0LypcbitcdCAqIFRoZSBURVNUX0RBVEEgcmVnaW9uIGlzIHVzZWQgZm9yIGFsbG9jYXRpbmcgdGVzdCBkYXRhIHRoYXQgaXMgZWl0aGVyXG4rXHQgKiB0ZXN0IHNwZWNpZmljLCBhbmQvb3IgaXNuJ3QgY29uc2lkZXJlZCBhIFwiY29yZVwiIGRhdGEgc3RydWN0dXJlLlxuK1x0ICovXG4gXHRNRU1fUkVHSU9OX1RFU1RfREFUQSxcbitcdC8qXG4rXHQgKiBUaGUgVEVTVF9FWFRSQSByZWdpb24gaXMgZm9yIHNwZWNpYWwgc25vd2ZsYWtlcywgd2hlcmUgYSB0ZXN0IHdhbnRzXG4rXHQgKiB0byBjcmVhdGUgYW5kIHVzZSBhIG9uZS1vZmYgbWVtc2xvdCwgd2l0aG91dCBpbXBhY3RpbmcgXCJub3JtYWxcIiB0ZXN0XG4rXHQgKiBkYXRhIGFsbG9jYXRpb25zLlxuK1x0ICovXG4rXHRNRU1fUkVHSU9OX1RFU1RfRVhUUkEsXG4gXHROUl9NRU1fUkVHSU9OUyxcbiB9O1xuIFxuQEAgLTEyNywxMSArMTYzLDYgQEAgc3RydWN0IGt2bV92bSB7XG4gXG4gXHRzdHJ1Y3Qga3ZtX2JpbmFyeV9zdGF0cyBzdGF0cztcbiBcbi1cdC8qXG4tXHQgKiBLVk0gcmVnaW9uIHNsb3RzLiBUaGVzZSBhcmUgdGhlIGRlZmF1bHQgbWVtc2xvdHMgdXNlZCBieSBwYWdlXG4tXHQgKiBhbGxvY2F0b3JzLCBlLmcuLCBsaWIvZWxmIHVzZXMgdGhlIG1lbXNsb3RzW01FTV9SRUdJT05fQ09ERV1cbi1cdCAqIG1lbXNsb3QuXG4tXHQgKi9cbiBcdHUzMiBtZW1zbG90c1tOUl9NRU1fUkVHSU9OU107XG4gfTtcbiBcbkBAIC0xNjksNyArMjAwLDggQEAgbWVtc2xvdDJyZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIHUzMiBtZW1zbG90KTtcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqdm1fZ2V0X21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4gXHRcdFx0XHRcdFx0XHQgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKVxuIHtcbi1cdGFzc2VydCh0eXBlIFx1MDAzYyBOUl9NRU1fUkVHSU9OUyk7XG4rXHRURVNUX0FTU0VSVCh0eXBlIFx1MDAzYyBOUl9NRU1fUkVHSU9OUyxcbitcdFx0ICAgIFwiSW52YWxpZCBtZW1vcnkgcmVnaW9uIHR5cGUgJyV1J1wiLCB0eXBlKTtcbiBcdHJldHVybiBtZW1zbG90MnJlZ2lvbih2bSwgdm0tXHUwMDNlbWVtc2xvdHNbdHlwZV0pO1xuIH1cbiBcbkBAIC03MDIsNiArNzM0LDM2IEBAIHZvaWQgdm1fbWVtX2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcbiBcdFx0Z3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcywgdTMyIGZsYWdzLFxuIFx0XHRpbnQgZ3Vlc3RfbWVtZmRfZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xuIFxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSxcbitcdFx0XHRcdFx0ICAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsXG4rXHRcdFx0XHRcdCAgICAgIHUzMiBzbG90KVxuK3tcbitcdFRFU1RfQVNTRVJUKHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdID09IEtWTV9JTlZBTElEX01FTVNMT1QsXG4rXHRcdCAgICBcIk1lbW9yeSByZWdpb24gdHlwZSAnJXUnIHdhcyBhbHJlYWR5IG92ZXJyaWRkZW4gd2l0aCBzbG90PSV1XCIsXG4rXHRcdCAgICB0eXBlLCB2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSk7XG4rXG4rXHR2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSA9IHNsb3Q7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4rXHRcdFx0XHRcdCAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSxcbitcdFx0XHRcdFx0ICAgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG4rXHRcdFx0XHRcdCAgICBncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLFxuK1x0XHRcdFx0XHQgICAgdTMyIGZsYWdzKVxuK3tcbitcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCB0eXBlLCBzbG90KTtcbitcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgc3JjX3R5cGUsIGdwYSwgc2xvdCwgbnBhZ2VzLCBmbGFncyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLFxuK1x0XHRcdFx0XHQgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLFxuK1x0XHRcdFx0XHQgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG4rXHRcdFx0XHRcdCAgZ3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcylcbit7XG4rXHRfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIHR5cGUsIHNyY190eXBlLCBncGEsIHNsb3QsIG5wYWdlcywgMCk7XG4rfVxuK1xuICNpZm5kZWYgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBrdm1fdm0gKnZtKVxuIHtcbkBAIC05OTAsMjMgKzEwNTIsNDEgQEAgdm9pZCBrdm1fZ3NpX3JvdXRpbmdfd3JpdGUoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgKnJvdXRpbmcpO1xuIFxuIGNvbnN0IGNoYXIgKmV4aXRfcmVhc29uX3N0cih1bnNpZ25lZCBpbnQgZXhpdF9yZWFzb24pO1xuIFxuLWdwYV90IHZtX3BoeV9wYWdlX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdCk7XG4tZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sIGdwYV90IG1pbl9ncGEsXG4tXHRcdFx0ICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkKTtcbi1ncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKTtcbitib29sIGt2bV9hcmNoX25lZWRzX25hdHVyYWxseV9hbGlnbmVkX3BhZ2VfdGFibGVzKHZvaWQpO1xuK1xuK2dwYV90IF9fX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcywgZ3BhX3QgbWluX2dwYSxcbitcdFx0XHQgICAgIHUzMiBtZW1zbG90LCBib29sIHByb3RlY3RlZCwgYm9vbCBuYXR1cmFsbHlfYWxpZ25lZCk7XG4rZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcbitcdFx0XHQgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwgYm9vbCBwcm90ZWN0ZWQpO1xuIFxuLXN0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLFxuLVx0XHRcdFx0ICAgICAgIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KVxuK3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsXG4rXHRcdFx0XHQgICAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUpXG4ge1xuIFx0LypcbiBcdCAqIEJ5IGRlZmF1bHQsIGFsbG9jYXRlIG1lbW9yeSBhcyBwcm90ZWN0ZWQgZm9yIFZNcyB0aGF0IHN1cHBvcnRcbiBcdCAqIHByb3RlY3RlZCBtZW1vcnksIGFzIHRoZSBtYWpvcml0eSBvZiBtZW1vcnkgZm9yIHN1Y2ggVk1zIGlzXG4gXHQgKiBwcm90ZWN0ZWQsIGkuZS4gdXNpbmcgc2hhcmVkIG1lbW9yeSBpcyBlZmZlY3RpdmVseSBvcHQtaW4uXG4gXHQgKi9cbi1cdHJldHVybiBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnVtLCBtaW5fZ3BhLCBtZW1zbG90LFxuK1x0cmV0dXJuIF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywgdHlwZSxcbiBcdFx0XHRcdCAgICB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHZtKSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sXG4rXHRcdFx0XHQgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcbit7XG4rXHRyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAxLCB0eXBlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMpXG4re1xuK1x0cmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIE1FTV9SRUdJT05fUFQpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGt2bV92bSAqdm0pXG4re1xuK1x0cmV0dXJuIHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIDEpO1xuK31cbitcbiAvKlxuICAqIF9fX192bV9jcmVhdGUoKSBkb2VzIEtWTV9DUkVBVEVfVk0gYW5kIGxpdHRsZSBlbHNlLiAgX192bV9jcmVhdGUoKSBhbHNvXG4gICogbG9hZHMgdGhlIHRlc3QgYmluYXJ5IGludG8gZ3Vlc3QgbWVtb3J5IGFuZCBjcmVhdGVzIGFuIElSUSBjaGlwICh4ODYgb25seSkuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oXG5pbmRleCAyZDFhZmEwOTgxOWIwLi4xNWZhYWEwNjAxMjYyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcbkBAIC04LDcgKzgsNyBAQFxuICNkZWZpbmUgU01SQU1fTUVNU0xPVFx0KCgxIFx1MDAzY1x1MDAzYyAxNikgfCAxKVxuICNkZWZpbmUgU01SQU1fUEFHRVNcdChTTVJBTV9TSVpFIC8gUEFHRV9TSVpFKVxuIFxuLXZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNtcmFtX2dwYSxcbit2b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHNtcmFtX2dwYSxcbiBcdFx0IGNvbnN0IHZvaWQgKnNtaV9oYW5kbGVyLCBzaXplX3QgaGFuZGxlcl9zaXplKTtcbiBcbiB2b2lkIGluamVjdF9zbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuY1xuaW5kZXggMDEzMjViZjRkMzZmYy4uMmRjYWEyYzRhMDM4MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcbkBAIC0xMTUsOSArMTE1LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFx0aWYgKHZtLVx1MDAzZW1tdS5wZ2RfY3JlYXRlZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0dm0tXHUwMDNlbW11LnBnZCA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsXG4tXHRcdFx0XHRcdCBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsXG4tXHRcdFx0XHRcdCB2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XG4rXHR2bS1cdTAwM2VtbXUucGdkID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgbnJfcGFnZXMpO1xuIFx0dm0tXHUwMDNlbW11LnBnZF9jcmVhdGVkID0gdHJ1ZTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG5pbmRleCA5ZGRjMDQ3ZDVjMjc1Li41N2I2NTNmYmQwYjFmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbkBAIC0xNyw2ICsxNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWxpZ24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gXG4gI2RlZmluZSBLVk1fVVRJTF9NSU5fUEZOXHQyXG5AQCAtMjg3LDYgKzI4OCw3IEBAIF9fd2VhayB2b2lkIHZtX3BvcHVsYXRlX2d2YV9iaXRtYXAoc3RydWN0IGt2bV92bSAqdm0pXG4gc3RydWN0IGt2bV92bSAqX19fX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXG4ge1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4rXHRpbnQgaTtcbiBcbiBcdHZtID0gY2FsbG9jKDEsIHNpemVvZigqdm0pKTtcbiBcdFRFU1RfQVNTRVJUKHZtICE9IE5VTEwsIFwiSW5zdWZmaWNpZW50IE1lbW9yeVwiKTtcbkBAIC0yOTUsNiArMjk3LDggQEAgc3RydWN0IGt2bV92bSAqX19fX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXG4gXHR2bS1cdTAwM2VyZWdpb25zLmdwYV90cmVlID0gUkJfUk9PVDtcbiBcdHZtLVx1MDAzZXJlZ2lvbnMuaHZhX3RyZWUgPSBSQl9ST09UO1xuIFx0aGFzaF9pbml0KHZtLVx1MDAzZXJlZ2lvbnMuc2xvdF9oYXNoKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX01FTV9SRUdJT05TOyBpKyspXG4rXHRcdHZtLVx1MDAzZW1lbXNsb3RzW2ldID0gS1ZNX0lOVkFMSURfTUVNU0xPVDtcbiBcbiBcdHZtLVx1MDAzZW1vZGUgPSBzaGFwZS5tb2RlO1xuIFx0dm0tXHUwMDNldHlwZSA9IHNoYXBlLnR5cGU7XG5AQCAtNDkxLDcgKzQ5NSw3IEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxuIFx0XHRcdFx0XHRcdCBucl9leHRyYV9wYWdlcyk7XG4gXHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnNsb3QwO1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4tXHRpbnQgaSwgZmxhZ3M7XG4rXHRpbnQgZmxhZ3M7XG4gXG4gXHRrdm1fc2V0X2ZpbGVzX3JsaW1pdChucl9ydW5uYWJsZV92Y3B1cyk7XG4gXG5AQCAtNTA5LDggKzUxMywxMCBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsIHUzMiBucl9ydW5uYWJsZV92Y3B1cyxcbiBcdFx0ZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcbiBcbiBcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsIDAsIG5yX3BhZ2VzLCBmbGFncyk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgaSsrKVxuLVx0XHR2bS1cdTAwM2VtZW1zbG90c1tpXSA9IDA7XG4rXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCAwKTtcbitcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCAwKTtcbitcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIDApO1xuK1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCAwKTtcbiBcbiBcdGt2bV92bV9lbGZfbG9hZCh2bSwgcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUpO1xuIFxuQEAgLTExODksNiArMTE5NSw4IEBAIG1lbXNsb3QycmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgbWVtc2xvdClcbiB7XG4gXHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnJlZ2lvbjtcbiBcbitcdFRFU1RfQVNTRVJUKG1lbXNsb3QgIT0gS1ZNX0lOVkFMSURfTUVNU0xPVCwgXCJ2bS1cdTAwM2VtZW1zbG90c1tdIHVucG9wdWxhdGVkP1wiKTtcbitcbiBcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUodm0tXHUwMDNlcmVnaW9ucy5zbG90X2hhc2gsIHJlZ2lvbiwgc2xvdF9ub2RlLFxuIFx0XHRcdCAgICAgICBtZW1zbG90KVxuIFx0XHRpZiAocmVnaW9uLVx1MDAzZXJlZ2lvbi5zbG90ID09IG1lbXNsb3QpXG5AQCAtMTQ2NSw5ICsxNDczLDcgQEAgc3RhdGljIGd2YV90IF9fX192bV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IHN6LCBndmFfdCBtaW5fZ3ZhLFxuIFx0dTY0IHBhZ2VzID0gKHN6IFx1MDAzZVx1MDAzZSB2bS1cdTAwM2VwYWdlX3NoaWZ0KSArICgoc3ogJSB2bS1cdTAwM2VwYWdlX3NpemUpICE9IDApO1xuIFxuIFx0dmlydF9wZ2RfYWxsb2Modm0pO1xuLVx0Z3BhX3QgZ3BhID0gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzLFxuLVx0XHRcdFx0XHQgICBLVk1fVVRJTF9NSU5fUEZOICogdm0tXHUwMDNlcGFnZV9zaXplLFxuLVx0XHRcdFx0XHQgICB2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSwgcHJvdGVjdGVkKTtcbitcdGdwYV90IGdwYSA9IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlcywgdHlwZSwgcHJvdGVjdGVkKTtcbiBcbiBcdC8qXG4gXHQgKiBGaW5kIGFuIHVudXNlZCByYW5nZSBvZiB2aXJ0dWFsIHBhZ2UgYWRkcmVzc2VzIG9mIGF0IGxlYXN0XG5AQCAtMjAyNSwzMyArMjAzMSwyMSBAQCBjb25zdCBjaGFyICpleGl0X3JlYXNvbl9zdHIodW5zaWduZWQgaW50IGV4aXRfcmVhc29uKVxuIH1cbiBcbiAvKlxuLSAqIFBoeXNpY2FsIENvbnRpZ3VvdXMgUGFnZSBBbGxvY2F0b3Jcbi0gKlxuLSAqIElucHV0IEFyZ3M6XG4tICogICB2bSAtIFZpcnR1YWwgTWFjaGluZVxuLSAqICAgbnVtIC0gbnVtYmVyIG9mIHBhZ2VzXG4tICogICBtaW5fZ3BhIC0gUGh5c2ljYWwgYWRkcmVzcyBtaW5pbXVtXG4tICogICBtZW1zbG90IC0gTWVtb3J5IHJlZ2lvbiB0byBhbGxvY2F0ZSBwYWdlIGZyb21cbi0gKiAgIHByb3RlY3RlZCAtIFRydWUgaWYgdGhlIHBhZ2VzIHdpbGwgYmUgdXNlZCBhcyBwcm90ZWN0ZWQvcHJpdmF0ZSBtZW1vcnlcbisgKiBBbGxvY2F0ZSBjb250aWd1b3VzIChndWVzdCkgcGh5c2ljYWwgcGFnZXMgaW4gYSBnaXZlbiBtZW1vcnkgcmVnaW9uLCBhdCBvclxuKyAqIHRoZSBtaW5pbXVtIHNwZWNpZmljIEdQQS4gIElmIHRoZSBtZW1vcnkgaXMgcHJvdGVjdGVkL3ByaXZhdGUsIGFsc28gYWRkIHRoZVxuKyAqIGFsbG9jYXRlIHBhZ2VzIHRvIHRoZSByZWdpb24ncyBzZXQgb2YgcHJvdGVjdGVkIHBhZ2VzLCBlLmcuIHNvIHRoYXQgYXJjaFxuKyAqIGNvZGUga25vd3Mgd2hpY2ggcGFnZXMgbmVlZCB0byBiZSBlbmNyeXB0ZWQgd2hlbiBsYXVuY2hpbmcgdGhlIFZNLlxuICAqXG4tICogT3V0cHV0IEFyZ3M6IE5vbmVcbi0gKlxuLSAqIFJldHVybjpcbi0gKiAgIFN0YXJ0aW5nIHBoeXNpY2FsIGFkZHJlc3Ncbi0gKlxuLSAqIFdpdGhpbiB0aGUgVk0gc3BlY2lmaWVkIGJ5IHZtLCBsb2NhdGVzIGEgcmFuZ2Ugb2YgYXZhaWxhYmxlIHBoeXNpY2FsXG4tICogcGFnZXMgYXQgb3IgYWJvdmUgbWluX2dwYS4gSWYgZm91bmQsIHRoZSBwYWdlcyBhcmUgbWFya2VkIGFzIGluIHVzZVxuLSAqIGFuZCB0aGVpciBiYXNlIGFkZHJlc3MgaXMgcmV0dXJuZWQuIEEgVEVTVF9BU1NFUlQgZmFpbHVyZSBvY2N1cnMgaWZcbi0gKiBub3QgZW5vdWdoIHBhZ2VzIGFyZSBhdmFpbGFibGUgYXQgb3IgYWJvdmUgbWluX2dwYS5cbisgKiBOb3RlLCBzdWNjZXNzIGlzIGd1YXJhbnRlZWQhXG4gICovXG4tZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sXG4tXHRcdFx0ICAgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QsXG4tXHRcdFx0ICAgYm9vbCBwcm90ZWN0ZWQpXG4rZ3BhX3QgX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLCBncGFfdCBtaW5fZ3BhLFxuK1x0XHRcdCAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKVxuIHtcbitcdHNpemVfdCBhbGlnbm1lbnQgPSBuYXR1cmFsbHlfYWxpZ25lZCA/IG5yX3BhZ2VzIDogMTtcbiBcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uO1xuIFx0c3BhcnNlYml0X2lkeF90IHBnLCBiYXNlO1xuIFxuLVx0VEVTVF9BU1NFUlQobnVtIFx1MDAzZSAwLCBcIk11c3QgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHBhZ2VcIik7XG4rXHRURVNUX0FTU0VSVChucl9wYWdlcywgXCJNdXN0IGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlXCIpO1xuIFxuIFx0VEVTVF9BU1NFUlQoKG1pbl9ncGEgJSB2bS1cdTAwM2VwYWdlX3NpemUpID09IDAsIFwiTWluIHBoeXNpY2FsIGFkZHJlc3MgXCJcbiBcdFx0XCJub3QgZGl2aXNpYmxlIGJ5IHBhZ2Ugc2l6ZS5cXG5cIlxuQEAgLTIwNjIsNDMgKzIwNTYsNzggQEAgZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sXG4gXHRURVNUX0FTU0VSVCghcHJvdGVjdGVkIHx8IHJlZ2lvbi1cdTAwM2Vwcm90ZWN0ZWRfcGh5X3BhZ2VzLFxuIFx0XHQgICAgXCJSZWdpb24gZG9lc24ndCBzdXBwb3J0IHByb3RlY3RlZCBtZW1vcnlcIik7XG4gXG4tXHRiYXNlID0gcGcgPSBtaW5fZ3BhIFx1MDAzZVx1MDAzZSB2bS1cdTAwM2VwYWdlX3NoaWZ0O1xuLVx0ZG8ge1xuLVx0XHRmb3IgKDsgcGcgXHUwMDNjIGJhc2UgKyBudW07ICsrcGcpIHtcbi1cdFx0XHRpZiAoIXNwYXJzZWJpdF9pc19zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKSkge1xuLVx0XHRcdFx0YmFzZSA9IHBnID0gc3BhcnNlYml0X25leHRfc2V0KHJlZ2lvbi1cdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4rXHRiYXNlID0gbWluX2dwYSBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdDtcbithZ2FpbjpcbitcdGJhc2UgPSBBTElHTihiYXNlLCBhbGlnbm1lbnQpO1xuK1x0Zm9yIChwZyA9IGJhc2U7IHBnIFx1MDAzYyBiYXNlICsgbnJfcGFnZXM7ICsrcGcpIHtcbitcdFx0aWYgKCFzcGFyc2ViaXRfaXNfc2V0KHJlZ2lvbi1cdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZykpIHtcbitcdFx0XHRiYXNlID0gc3BhcnNlYml0X25leHRfc2V0KHJlZ2lvbi1cdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XG4rXHRcdFx0aWYgKCFiYXNlKVxuK1x0XHRcdFx0Z290byBlbm9tZW07XG4rXHRcdFx0Z290byBhZ2FpbjtcbiBcdFx0fVxuLVx0fSB3aGlsZSAocGcgXHUwMDI2XHUwMDI2IHBnICE9IGJhc2UgKyBudW0pO1xuLVxuLVx0aWYgKHBnID09IDApIHtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwiTm8gZ3Vlc3QgcGh5c2ljYWwgcGFnZSBhdmFpbGFibGUsIFwiXG4tXHRcdFx0XCJtaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcXG5cIixcbi1cdFx0XHRtaW5fZ3BhLCB2bS1cdTAwM2VwYWdlX3NpemUsIG1lbXNsb3QpO1xuLVx0XHRmcHV0cyhcIi0tLS0gdm0gZHVtcCAtLS0tXFxuXCIsIHN0ZGVycik7XG4tXHRcdHZtX2R1bXAoc3RkZXJyLCB2bSwgMik7XG4tXHRcdGFib3J0KCk7XG4gXHR9XG4gXG4tXHRmb3IgKHBnID0gYmFzZTsgcGcgXHUwMDNjIGJhc2UgKyBudW07ICsrcGcpIHtcbitcdGZvciAocGcgPSBiYXNlOyBwZyBcdTAwM2MgYmFzZSArIG5yX3BhZ2VzOyArK3BnKSB7XG4gXHRcdHNwYXJzZWJpdF9jbGVhcihyZWdpb24tXHUwMDNldW51c2VkX3BoeV9wYWdlcywgcGcpO1xuIFx0XHRpZiAocHJvdGVjdGVkKVxuIFx0XHRcdHNwYXJzZWJpdF9zZXQocmVnaW9uLVx1MDAzZXByb3RlY3RlZF9waHlfcGFnZXMsIHBnKTtcbiBcdH1cbiBcbiBcdHJldHVybiBiYXNlICogdm0tXHUwMDNlcGFnZV9zaXplO1xuK1xuK2Vub21lbTpcbitcdGZwcmludGYoc3RkZXJyLCBcIk5vIGd1ZXN0IHBoeXNpY2FsIHBhZ2UgYXZhaWxhYmxlLCBtaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcXG5cIixcbitcdFx0bWluX2dwYSwgdm0tXHUwMDNlcGFnZV9zaXplLCBtZW1zbG90KTtcbitcdGZwdXRzKFwiLS0tLSB2bSBkdW1wIC0tLS1cXG5cIiwgc3RkZXJyKTtcbitcdHZtX2R1bXAoc3RkZXJyLCB2bSwgMik7XG4rXHRhYm9ydCgpO1xuK1x0X19idWlsdGluX3VucmVhY2hhYmxlKCk7XG4gfVxuIFxuLWdwYV90IHZtX3BoeV9wYWdlX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdClcbitfX3dlYWsgYm9vbCBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcyh2b2lkKVxuIHtcbi1cdHJldHVybiB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDEsIG1pbl9ncGEsIG1lbXNsb3QpO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1ncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKVxuK2dwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsXG4rXHRcdFx0ICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsIGJvb2wgcHJvdGVjdGVkKVxuIHtcbi1cdHJldHVybiB2bV9waHlfcGFnZV9hbGxvYyh2bSwgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxuLVx0XHRcdFx0IHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbitcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uID0gdm1fZ2V0X21lbV9yZWdpb24odm0sIHR5cGUpO1xuK1x0Ym9vbCBuYXR1cmFsbHlfYWxpZ25lZCA9IGZhbHNlO1xuK1x0Z3BhX3QgbWluX2dwYTtcbitcbitcdFRFU1RfQVNTRVJUKHJlZ2lvbiwgXCJObyByZWdpb24gZm9yIHR5cGUgJyV1JywgbWVtc2xvdCAnJXUnXCIsXG4rXHRcdCAgICB0eXBlLCB2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSk7XG4rXG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgTUVNX1JFR0lPTl9DT0RFOlxuK1x0Y2FzZSBNRU1fUkVHSU9OX0RBVEE6XG4rXHRjYXNlIE1FTV9SRUdJT05fVEVTVF9EQVRBOlxuK1x0XHQvKlxuK1x0XHQgKiBJZiB0aGUgcmVnaW9uIGlzIGJhY2tlZCBieSB0aGUgZGVmYXVsdCBtZW1zbG90IChpZD0wKSwgdXNlXG4rXHRcdCAqIHNlbGZ0ZXN0cycgaGFyZGNvZGVkIG1pbmltdW0gUEZOLCBvdGhlcndpc2UgdXNlIHRoZSBiYXNlIG9mXG4rXHRcdCAqIHRoZSBjdXN0b20gbWVtb3J5IHNsb3QgdGhhdCBiYWNrcyB0aGUgcmVnaW9uLlxuK1x0XHQgKi9cbitcdFx0aWYgKCF2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSlcbitcdFx0XHRtaW5fZ3BhID0gS1ZNX1VUSUxfTUlOX1BGTiAqIHZtLVx1MDAzZXBhZ2Vfc2l6ZTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1pbl9ncGEgPSByZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkcjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1FTV9SRUdJT05fUFQ6XG4rXHRcdG1pbl9ncGEgPSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFI7XG4rXHRcdG5hdHVyYWxseV9hbGlnbmVkID0ga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXMoKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1FTV9SRUdJT05fVEVTVF9FWFRSQTpcbitcdFx0bWluX2dwYSA9IHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdFRFU1RfRkFJTChcIkludmFsaWQgbWVtb3J5IHJlZ2lvbiB0eXBlICcldSdcIiwgdHlwZSk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIF9fX192bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLCBtaW5fZ3BhLCB2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSxcbitcdFx0XHRcdCAgICAgIHByb3RlY3RlZCwgbmF0dXJhbGx5X2FsaWduZWQpO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcbmluZGV4IDQ3YmJkZTNlMjA1YTAuLmZjZDQxYmM2ZmJkYWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcbkBAIC05LDcgKzksNiBAQFxuICNpbmNsdWRlIFwicHJvY2Vzc29yLmhcIlxuICNpbmNsdWRlIFwidWNhbGxfY29tbW9uLmhcIlxuIFxuLSNkZWZpbmUgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU5cdFx0MHgyMDAwMDBcbiAjZGVmaW5lIExPT05HQVJDSF9HVUVTVF9TVEFDS19WQUREUl9NSU5cdFx0MHgyMDAwMDBcbiBcbiBzdGF0aWMgZ3BhX3QgaW52YWxpZF9wZ3RhYmxlWzRdO1xuQEAgLTU3LDkgKzU2LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFx0Y2hpbGQgPSB0YWJsZSA9IDA7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2bS1cdTAwM2VtbXUucGd0YWJsZV9sZXZlbHM7IGkrKykge1xuIFx0XHRpbnZhbGlkX3BndGFibGVbaV0gPSBjaGlsZDtcbi1cdFx0dGFibGUgPSB2bV9waHlfcGFnZV9hbGxvYyh2bSwgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU4sXG4tXHRcdFx0XHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XG4tXHRcdFRFU1RfQVNTRVJUKHRhYmxlLCBcIkZhaWwgdG8gYWxsb2NhdGUgcGFnZSB0YWxlIGF0IGxldmVsICVkXFxuXCIsIGkpO1xuK1x0XHR0YWJsZSA9IHZtX2FsbG9jX3BhZ2VfdGFibGUodm0pO1xuIFx0XHR2aXJ0X3NldF9wZ3RhYmxlKHZtLCB0YWJsZSwgY2hpbGQpO1xuIFx0XHRjaGlsZCA9IHRhYmxlO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5jMTc1ZGNkMTQxMTQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuQEAgLTY5LDkgKzY5LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFx0aWYgKHZtLVx1MDAzZW1tdS5wZ2RfY3JlYXRlZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0dm0tXHUwMDNlbW11LnBnZCA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsXG4tXHRcdFx0XHRcdCBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsXG4tXHRcdFx0XHRcdCB2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XG4rXHR2bS1cdTAwM2VtbXUucGdkID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgbnJfcGFnZXMpO1xuIFx0dm0tXHUwMDNlbW11LnBnZF9jcmVhdGVkID0gdHJ1ZTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jXG5pbmRleCBhOWFkYjM3ODJiMzUyLi4zM2Y0OWQ3NDNiNWZkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcbkBAIC0yMCw5ICsyMCw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBcdGlmICh2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQpXG4gXHRcdHJldHVybjtcbiBcbi1cdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgUEFHRVNfUEVSX1JFR0lPTixcbi1cdFx0XHRcdCAgIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcbi1cdFx0XHRcdCAgIHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbitcdGdwYSA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIFBBR0VTX1BFUl9SRUdJT04pO1xuIFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgZ3BhKSwgMHhmZiwgUEFHRVNfUEVSX1JFR0lPTiAqIHZtLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4gXG4gXHR2bS1cdTAwM2VtbXUucGdkID0gZ3BhO1xuQEAgLTM4LDggKzM2LDcgQEAgc3RhdGljIHU2NCB2aXJ0X2FsbG9jX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHJpKVxuIHtcbiBcdHU2NCB0YWRkcjtcbiBcbi1cdHRhZGRyID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAgcmkgXHUwMDNjIDQgPyBQQUdFU19QRVJfUkVHSU9OIDogMSxcbi1cdFx0XHRcdCAgIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUiwgMCk7XG4rXHR0YWRkciA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIHJpIFx1MDAzYyA0ID8gUEFHRVNfUEVSX1JFR0lPTiA6IDEpO1xuIFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgdGFkZHIpLCAweGZmLCBQQUdFU19QRVJfUkVHSU9OICogdm0tXHUwMDNlcGFnZV9zaXplKTtcbiBcbiBcdHJldHVybiAodGFkZHIgXHUwMDI2IFJFR0lPTl9FTlRSWV9PUklHSU4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuaW5kZXggZDMxZmE4MWVhMDc1Ni4uNDc5ZTlhNDgxNjg3ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuQEAgLTUyOSw3ICs1MjksMTAgQEAgdm9pZCB0ZHBfaWRlbnRpdHlfbWFwX2RlZmF1bHRfbWVtc2xvdHMoc3RydWN0IGt2bV92bSAqdm0pXG4gXG4gXHQvKiBPbmx5IG1lbXNsb3QgMCBpcyBtYXBwZWQgaGVyZSwgZW5zdXJlIGl0J3MgdGhlIG9ubHkgb25lIGJlaW5nIHVzZWQgKi9cbiBcdGZvciAocyA9IDA7IHMgXHUwMDNjIE5SX01FTV9SRUdJT05TOyBzKyspXG4tXHRcdFRFU1RfQVNTRVJUX0VRKHZtLVx1MDAzZW1lbXNsb3RzW3NdLCAwKTtcbitcdFx0VEVTVF9BU1NFUlQoIXZtLVx1MDAzZW1lbXNsb3RzW3NdIHx8XG4rXHRcdFx0ICAgIHZtLVx1MDAzZW1lbXNsb3RzW3NdID09IEtWTV9JTlZBTElEX01FTVNMT1QsXG4rXHRcdFx0ICAgIFwiVW5oYW5kbGVkIG1lbXNsb3QgJyV1JyBmb3IgdHlwZSAnJXUnXCIsXG4rXHRcdFx0ICAgIHZtLVx1MDAzZW1lbXNsb3RzW3NdLCBzKTtcbiBcbiBcdGkgPSAocmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHIgXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQpIC0gMTtcbiBcdGxhc3QgPSBpICsgKHJlZ2lvbi1cdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQpO1xuQEAgLTE0NjUsMTMgKzE0NjgsMTMgQEAgYm9vbCBrdm1fYXJjaF9oYXNfZGVmYXVsdF9pcnFjaGlwKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLFxuK3ZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgc21yYW1fZ3BhLFxuIFx0XHQgY29uc3Qgdm9pZCAqc21pX2hhbmRsZXIsIHNpemVfdCBoYW5kbGVyX3NpemUpXG4ge1xuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgc21yYW1fZ3BhLFxuLVx0XHRcdFx0ICAgIFNNUkFNX01FTVNMT1QsIFNNUkFNX1BBR0VTLCAwKTtcbi1cdFRFU1RfQVNTRVJUKHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgU01SQU1fUEFHRVMsIHNtcmFtX2dwYSxcbi1cdFx0XHRcdCAgICAgICBTTVJBTV9NRU1TTE9UKSA9PSBzbXJhbV9ncGEsXG4rXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuK1x0XHRcdCAgICAgICBzbXJhbV9ncGEsIFNNUkFNX01FTVNMT1QsIFNNUkFNX1BBR0VTKTtcbitcbitcdFRFU1RfQVNTRVJUKHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgU01SQU1fUEFHRVMsIE1FTV9SRUdJT05fVEVTVF9FWFRSQSkgPT0gc21yYW1fZ3BhLFxuIFx0XHQgICAgXCJDb3VsZCBub3QgYWxsb2NhdGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGZvciBTTVJBTVwiKTtcbiBcbiBcdG1lbXNldChhZGRyX2dwYTJodmEodm0sIHNtcmFtX2dwYSksIDB4MCwgU01SQU1fU0laRSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xuaW5kZXggZTEyOTk2MTFiZTMyMi4uODQ0ZWE5YjdiYjQxYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xuQEAgLTMzOSw3ICszMzksOCBAQCBzdGF0aWMgYm9vbCBwcmVwYXJlX3ZtKHN0cnVjdCB2bV9kYXRhICpkYXRhLCBpbnQgbnNsb3RzLCB1NjQgKm1heHNsb3RzLFxuIFx0XHRpZiAoc2xvdCA9PSBkYXRhLVx1MDAzZW5zbG90cylcbiBcdFx0XHRucGFnZXMgKz0gcmVtcGFnZXM7XG4gXG4tXHRcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyhkYXRhLVx1MDAzZXZtLCBucGFnZXMsIGd1ZXN0X2FkZHIsIHNsb3QpO1xuK1x0XHRncGEgPSBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKGRhdGEtXHUwMDNldm0sIG5wYWdlcywgZ3Vlc3RfYWRkciwgc2xvdCxcbitcdFx0XHRcdFx0ICAgICBmYWxzZSwgZmFsc2UpO1xuIFx0XHRURVNUX0FTU0VSVChncGEgPT0gZ3Vlc3RfYWRkcixcbiBcdFx0XHQgICAgXCJ2bV9waHlfcGFnZXNfYWxsb2MoKSBmYWlsZWRcIik7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xuaW5kZXggMTVkODFiMmVkN2FkMy4uNzMzODdjYzNiY2E3NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xuQEAgLTEwMiwyNCArMTAyLDE3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2RpcnR5X3Rlc3RfZGF0YSh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGNyZWF0ZV9tYWluX21lbXNsb3Qoc3RydWN0IGt2bV92bSAqdm0pXG4ge1xuLVx0aW50IGk7XG4tXG4gXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCAwLCAwLCBNQUlOX1BBR0VfQ09VTlQsIDApO1xuLVx0Lyogc2V0IHRoZSBhcnJheSBvZiBtZW1zbG90cyB0byB6ZXJvIGxpa2UgX192bV9jcmVhdGUgZG9lcyAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IGkrKylcbi1cdFx0dm0tXHUwMDNlbWVtc2xvdHNbaV0gPSAwO1xuK1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgMCk7XG4rXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgMCk7XG4rXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9EQVRBLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgY3JlYXRlX3Rlc3RfbWVtc2xvdChzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiB7XG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sXG4tXHRcdFx0XHQgICAgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4tXHRcdFx0XHQgICAgVEVTVF9EQVRBX1NUQVJUX0dGTiBcdTAwM2NcdTAwM2Mgdm0tXHUwMDNlcGFnZV9zaGlmdCxcbi1cdFx0XHRcdCAgICBURVNUX0RBVEFfTUVNU0xPVCxcbi1cdFx0XHRcdCAgICBURVNUX0RBVEFfUEFHRV9DT1VOVCxcbi1cdFx0XHRcdCAgICAwXG4tXHRcdFx0XHQgICApO1xuLVx0dm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9URVNUX0RBVEFdID0gVEVTVF9EQVRBX01FTVNMT1Q7XG4rXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4rXHRcdFx0ICAgICAgIFRFU1RfREFUQV9TVEFSVF9HRk4gXHUwMDNjXHUwMDNjIHZtLVx1MDAzZXBhZ2Vfc2hpZnQsXG4rXHRcdFx0ICAgICAgIFRFU1RfREFUQV9NRU1TTE9ULCBURVNUX0RBVEFfUEFHRV9DT1VOVCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNyZWF0ZV9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuY1xuaW5kZXggZjM4MzkyODRhYzA4MS4uY2QyNmNjMWFlZDgwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmNcbkBAIC0zNiw3ICszNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3Qodm9pZClcbiBcdH07XG4gXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuLVx0bWVtID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCA0MDk2ICogNDIsIDApO1xuK1x0bWVtID0gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgNDA5NiAqIDQyLCAwLCBmYWxzZSwgZmFsc2UpO1xuIFxuIFx0cm91dGluZyA9IGt2bV9nc2lfcm91dGluZ19jcmVhdGUoKTtcbiBcdHJvdXRpbmctXHUwMDNlbnIgPSAxO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXG5pbmRleCBkZmZlOTY1NGY0NWJkLi5iZmE1YWM4Y2UwMjk1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuQEAgLTExNiwxNSArMTE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpzcGF3bl92bShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LCBwdGhyZWFkX3QgKnZjcHVfdGhyZWFkLFxuIFxuIFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBndWVzdF9jb2RlKTtcbiBcbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVNfVEhQLFxuLVx0XHRcdFx0ICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsXG4tXHRcdFx0XHQgICAgTUVNX1JFR0lPTl9TSVpFIC8gZ2V0cGFnZXNpemUoKSwgMCk7XG4rXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTX1RIUCxcbitcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcbitcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9TSVpFIC8gZ2V0cGFnZXNpemUoKSk7XG4gXG4gXHQvKlxuIFx0ICogQWxsb2NhdGUgYW5kIG1hcCB0d28gcGFnZXMgc28gdGhhdCB0aGUgR1BBIGFjY2Vzc2VkIGJ5IGd1ZXN0X2NvZGUoKVxuIFx0ICogc3RheXMgdmFsaWQgYWNyb3NzIHRoZSBtZW1zbG90IG1vdmUuXG4gXHQgKi9cbi1cdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCk7XG4rXHRncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXHRURVNUX0FTU0VSVChncGEgPT0gTUVNX1JFR0lPTl9HUEEsIFwiRmFpbGVkIHZtX3BoeV9wYWdlc19hbGxvY1xcblwiKTtcbiBcbiBcdHZpcnRfbWFwKHZtLCBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9HUEEsIDIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jXG5pbmRleCAzZGNhODVlOTU0NzgxLi44ZDE4MjI3MTdhYmRjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuY1xuQEAgLTYyLDExICs2MiwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0VEVTVF9BU1NFUlQocmMsIFwiS1ZNX0NBUF9FWElUX09OX0VNVUxBVElPTl9GQUlMVVJFIGlzIHVuYXZhaWxhYmxlXCIpO1xuIFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWElUX09OX0VNVUxBVElPTl9GQUlMVVJFLCAxKTtcbiBcbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4tXHRcdFx0XHQgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcbi1cdFx0XHRcdCAgICBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUsIDApO1xuK1x0dm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbitcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcbitcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFKTtcbitcbiBcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFLFxuLVx0XHRcdFx0IE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QpO1xuK1x0XHRcdFx0IE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXHRURVNUX0FTU0VSVChncGEgPT0gTUVNX1JFR0lPTl9HUEEsIFwiRmFpbGVkIHZtX3BoeV9wYWdlc19hbGxvY1wiKTtcbiBcdHZpcnRfbWFwKHZtLCBNRU1fUkVHSU9OX0dWQSwgTUVNX1JFR0lPTl9HUEEsIDEpO1xuIFx0aHZhID0gYWRkcl9ncGEyaHZhKHZtLCBNRU1fUkVHSU9OX0dQQSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoxNjozMC44NjIxMzAzNDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzQzNDY5ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoaXMgZGlmZi4gQWxsIHRoZSBjaGFuZ2VzIGFyZSBuZWF0bHkgY29udGFpbmVkIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AuIFRoaXMgaXMgZ29vZCwgaXQgc2ltcGxpZmllcyB0aGUgYXNzZXNzbWVudC4gTm93LCBsZXQncyByZWZyZXNoIG91ciBtZW1vcnkgb24gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gU3BlY2lmaWNhbGx5LCBzZWN0aW9uIDI6IFwiV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlXCIuIFRoZSBrZXkgaGVyZSBpcyB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuIFdlJ3JlIGxvb2tpbmcgZm9yIG1vZGlmaWNhdGlvbnMgdGhhdCBmYWxsICpzdHJpY3RseSogaW50byBhIHNwZWNpZmljIGNhdGVnb3J5IHdoZXJlIGZ1enppbmcgaXMgZGVlbWVkIHVubmVjZXNzYXJ5LlxuXG5UaGUgZ3VpZGVsaW5lIHNwZWNpZmljYWxseSBjYWxscyBvdXQgXCJVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLi4uIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIiBCaW5nby4gQWxsIHRoZSBmaWxlcyBsaXN0ZWQg4oCTIHRoZSBgcGFnZV9mYXVsdF90ZXN0LmNgLCBgdmdpY19scGlfc3RyZXNzLmNgLCBhbGwgdGhlIGluY2x1ZGVzIGFuZCBsaWJyYXJ5IGNvZGUsIGFuZCB0aGUgdmFyaW91cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdGVzdHMg4oCTIHRoZXkgYWxsIHJlc2lkZSB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLiBUaGF0J3MgKnByZWNpc2VseSogdXNlci1zcGFjZSBzZWxmLXRlc3QgY29kZSwgYW5kIGl0J3Mgbm90IGdvaW5nIHRvIHRvdWNoIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIE5vIGtlcm5lbCBtb2RpZmljYXRpb25zLCBubyBmdXp6aW5nIHJlcXVpcmVkLlxuXG5UaGVyZWZvcmUsIFdvcnRoRnV6emluZyBpcyBkZWZpbml0aXZlbHkgYGZhbHNlYC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIFdlIG5lZWQgdG8gc2V0IHRoZSBwYXJhbWV0ZXJzIGxpa2Ugc286XG4qICAgV29ydGhGdXp6aW5nOiBgZmFsc2VgXG4qICAgUmVhc29uaW5nOiBcIkFsbCBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzIGFyZSByZXN0cmljdGVkIHRvIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8sIHdoaWNoIGRvIG5vdCBtb2RpZnkgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCJcbiogICBGb2N1c1N5bWJvbHM6IFxcWyBdIChlbXB0eSBsaXN0KVxuKiAgIEVuYWJsZUNvbmZpZ3M6IFxcWyBdIChlbXB0eSBsaXN0KVxuXG5Eb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI1OSwiT3V0cHV0VG9rZW5zIjo3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjE2OjM1LjYwNTYwMjM3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJBbGwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgcmVzdHJpY3RlZCB0byB1c2VyLXNwYWNlIEtWTSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggZG8gbm90IG1vZGlmeSB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiQWxsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIHJlc3RyaWN0ZWQgdG8gdXNlci1zcGFjZSBLVk0gc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8sIHdoaWNoIGRvIG5vdCBtb2RpZnkgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoxNjozNS42MDU2MzI1MDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowsxtn7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 13:15:21 +0000 UTC FinishedAt: 2026-09-03 13:16:37 +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+CgkJCTx0ZD4yMDI2LzA5LzAzIDEzOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtBbGwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgcmVzdHJpY3RlZCB0byB1c2VyLXNwYWNlIEtWTSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggZG8gbm90IG1vZGlmeSB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTM6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzN2EzMDZkN2U4Njk5NzA0ZTE2YjBiZGRkNzVlNWE2OTQ3ZDQ4YzI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMzoxNjoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcbmluZGV4IDZiYjNkODI5MDZiMjIuLmIwZTNmYzhjZDc2YWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuY1xuQEAgLTU5NywxOCAmIzQzOzU5NywxNiBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IHRlc3RfcGFyYW1zICpwKVxuIFxuIFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCxcbiBcdFx0XHRcdCAgICBDT0RFX0FORF9EQVRBX01FTVNMT1QsIGNvZGVfbnBhZ2VzLCAwKTtcbi1cdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fQ09ERV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7XG4tXHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX0RBVEFdID0gQ09ERV9BTkRfREFUQV9NRU1TTE9UO1xuLVxuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBwLVx1MDAzZXNyY190eXBlLCBkYXRhX2dwYSAtIHB0X3NpemUsXG4tXHRcdFx0XHQgICAgUEFHRV9UQUJMRV9NRU1TTE9ULCBwdF9zaXplIC8gZ3Vlc3RfcGFnZV9zaXplLFxuLVx0XHRcdFx0ICAgIHAtXHUwMDNldGVzdF9kZXNjLVx1MDAzZXB0X21lbXNsb3RfZmxhZ3MpO1xuLVx0dm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0gPSBQQUdFX1RBQkxFX01FTVNMT1Q7XG4tXG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhLCBURVNUX0RBVEFfTUVNU0xPVCxcbi1cdFx0XHRcdCAgICBkYXRhX3NpemUgLyBndWVzdF9wYWdlX3NpemUsXG4tXHRcdFx0XHQgICAgcC1cdTAwM2V0ZXN0X2Rlc2MtXHUwMDNlZGF0YV9tZW1zbG90X2ZsYWdzKTtcbi1cdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fVEVTVF9EQVRBXSA9IFRFU1RfREFUQV9NRU1TTE9UO1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0NPREUsIENPREVfQU5EX0RBVEFfTUVNU0xPVCk7XG4mIzQzO1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTtcbiYjNDM7XG4mIzQzO1x0X192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCBwLVx1MDAzZXNyY190eXBlLCBkYXRhX2dwYSAtIHB0X3NpemUsXG4mIzQzO1x0XHRcdFx0IFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgcC1cdTAwM2V0ZXN0X2Rlc2MtXHUwMDNlcHRfbWVtc2xvdF9mbGFncyk7XG4mIzQzO1xuJiM0MztcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIHAtXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhLFxuJiM0MztcdFx0XHRcdCBURVNUX0RBVEFfTUVNU0xPVCwgZGF0YV9zaXplIC8gZ3Vlc3RfcGFnZV9zaXplLFxuJiM0MztcdFx0XHRcdCBwLVx1MDAzZXRlc3RfZGVzYy1cdTAwM2VkYXRhX21lbXNsb3RfZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZXR1cF91Y2FsbChzdHJ1Y3Qga3ZtX3ZtICp2bSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbmluZGV4IDlhNjljNDM5YTBmOGYuLjQ1YTg3YmE1YTczN2EgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuY1xuQEAgLTIzLDcgJiM0MzsyMyw2IEBAXG4gI2RlZmluZSBHSUNfTFBJX09GRlNFVFx0ODE5MlxuIFxuIHN0YXRpYyBzaXplX3QgbnJfaXRlcmF0aW9ucyA9IDEwMDA7XG4tc3RhdGljIGdwYV90IGdwYV9iYXNlO1xuIFxuIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG5AQCAtMTQzLDYgJiM0MzsxNDIsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHNpemVfdCBucl9scGlzKVxuIFxuIHN0YXRpYyB2b2lkIHNldHVwX21lbXNsb3Qodm9pZClcbiB7XG4mIzQzO1x0Z3BhX3QgZ3BhX2Jhc2U7XG4gXHRzaXplX3QgcGFnZXM7XG4gXHRzaXplX3Qgc3o7XG4gXG5AQCAtMTY0LDggJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90KHZvaWQpXG4gXG4gXHRwYWdlcyA9IHN6IC8gdm0tXHUwMDNlcGFnZV9zaXplO1xuIFx0Z3BhX2Jhc2UgPSAoKHZtX2NvbXB1dGVfbWF4X2dmbih2bSkgJiM0MzsgMSkgKiB2bS1cdTAwM2VwYWdlX3NpemUpIC0gc3o7XG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBncGFfYmFzZSxcbi1cdFx0XHRcdCAgICBURVNUX01FTVNMT1RfSU5ERVgsIHBhZ2VzLCAwKTtcbiYjNDM7XHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuJiM0MztcdFx0XHQgICAgICAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMpO1xuIH1cbiBcbiAjZGVmaW5lIExQSV9QUk9QX0RFRkFVTFRfUFJJT1x0MHhhMFxuQEAgLTE5MSwyOCAmIzQzOzE5MSwyNSBAQCBzdGF0aWMgdm9pZCBzZXR1cF90ZXN0X2RhdGEodm9pZClcbiBcdGdwYV90IGNtZHFfYmFzZTtcbiBcbiBcdHRlc3RfZGF0YS5kZXZpY2VfdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXG4tXHRcdFx0XHRcdFx0ICAgIGdwYV9iYXNlLFxuLVx0XHRcdFx0XHRcdCAgICBURVNUX01FTVNMT1RfSU5ERVgpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcbiBcdHRlc3RfZGF0YS5jb2xsZWN0aW9uX3RhYmxlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLFxuLVx0XHRcdFx0XHRcdFx0Z3BhX2Jhc2UsXG4tXHRcdFx0XHRcdFx0XHRURVNUX01FTVNMT1RfSU5ERVgpO1xuJiM0MztcdFx0XHRcdFx0XHRcdE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXG4tXHRjbWRxX2Jhc2UgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssIGdwYV9iYXNlLFxuLVx0XHRcdFx0ICAgICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4mIzQzO1x0Y21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFx0dmlydF9tYXAodm0sIGNtZHFfYmFzZSwgY21kcV9iYXNlLCBwYWdlc19wZXJfNjRrKTtcbiBcdHRlc3RfZGF0YS5jbWRxX2Jhc2UgPSBjbWRxX2Jhc2U7XG4gXHR0ZXN0X2RhdGEuY21kcV9iYXNlX3ZhID0gKHZvaWQgKiljbWRxX2Jhc2U7XG4gXG4gXHR0ZXN0X2RhdGEuaXR0X3RhYmxlcyA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayAqIG5yX2RldmljZXMsXG4tXHRcdFx0XHRcdFx0ICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFxuIFx0dGVzdF9kYXRhLmxwaV9wcm9wX3RhYmxlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLFxuLVx0XHRcdFx0XHRcdCAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFx0Y29uZmlndXJlX2xwaXMoKTtcbiBcbiBcdHRlc3RfZGF0YS5scGlfcGVuZF90YWJsZXMgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGsgKiBucl9jcHVzLFxuLVx0XHRcdFx0XHRcdCAgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdGVzdF9kYXRhKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbmluZGV4IDVhN2E0NTViNTM4NzUuLjg5YjRmYzJhZjc1MTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oXG5AQCAtMzMsNiAmIzQzOzMzLDggQEBcbiBcbiAjZGVmaW5lIE5TRUNfUEVSX1NFQyAxMDAwMDAwMDAwTFxuIFxuJiM0MzsjZGVmaW5lIEtWTV9JTlZBTElEX01FTVNMT1QgVUlOVF9NQVhcbiYjNDM7XG4gc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uIHtcbiBcdHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHJlZ2lvbjtcbiBcdHN0cnVjdCBzcGFyc2ViaXQgKnVudXNlZF9waHlfcGFnZXM7XG5AQCAtODAsMTEgJiM0Mzs4Miw0NSBAQCBzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb25zIHtcbiBcdERFQ0xBUkVfSEFTSFRBQkxFKHNsb3RfaGFzaCwgOSk7XG4gfTtcbiBcbiYjNDM7LypcbiYjNDM7ICogTWVtb3J5IHJlZ2lvbiB0eXBlcyBhcmUgcGFzc2VkIHRvIHZhcmlvdXMgcGFnZSBhbGxvY2F0b3JzIHRvIGNvbW11bmljYXRlXG4mIzQzOyAqIHZhcmlvdXMgcHJvcGVydGllcyBhbmQgbWV0YWRhdGEgcmVsYXRlZCB0byB0aGUgYWxsb2NhdGlvbi4gIE5vdGUsIHRoZVxuJiM0MzsgKiBkZXNjcmlwdGlvbnMgYmVsb3cgZGVzY3JpYmVkIHRoZSBwcmltYXJ5IHVzYWdlIG9mIGVhY2ggdHlwZS4gIEluZGl2aWR1YWxcbiYjNDM7ICogdGVzdHMgbWF5IGFsbG9jYXRlIG1lbW9yeSBmb3Igb3RoZXIgcHVycG9zZXMuXG4mIzQzOyAqXG4mIzQzOyAqIEJ5IGRlZmF1bHQsIGFsbCByZWdpb25zIGV4Y2VwdCBURVNUX0VYVFJBIGFyZSBtYXBwZWQgdG8gbWVtc2xvdCAmIzM5OzAmIzM5Oy4gIFRoZVxuJiM0MzsgKiBURVhUX0VYVFJBIHJlZ2lvbiBpcyBsZWZ0IHVubWFwcGVkIGFzIGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIHVzZWQgb25seSBmb3IgdGVzdFxuJiM0MzsgKiBzcGVjaWZpYyBhbGxvY2F0aW9ucywgaS5lLiBzaG91bGQgbmV2ZXIgYmUgdXNlZCBieSBjb3JlL2luZnJhc3RydWN0dXJlIGNvZGUuXG4mIzQzOyAqIFRlc3RzIGNhbiBvdmVycmlkZSB0aGUgbWVtc2xvdCBmb3IgYW55IG9yIGFsbCB0eXBlcywgZS5nLiBzbyB0aGF0IGFsbCB0ZXN0XG4mIzQzOyAqIGRhdGEgaXMgYWxsb2NhdGVkIGZyb20gYSBjdXJhdGVkIG1lbXNsb3QuXG4mIzQzOyAqL1xuIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgQ09ERSByZWdpb24gaXMgdXNlZCBieSBsaWIvZWxmIHdoZW4gbG9hZGluZyB0aGUgdGVzdCYjMzk7cyBjb2RlIGludG9cbiYjNDM7XHQgKiBndWVzdCBtZW1vcnkuXG4mIzQzO1x0ICovXG4gXHRNRU1fUkVHSU9OX0NPREUsXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgREFUQSByZWdpb24gaXMgdXNlZCB0byBhbGxvY2F0ZSBjb3JlIGRhdGEgc3RydWN0dXJlcywgZS5nLiB2Q1BVXG4mIzQzO1x0ICogc3RhY2tzLCBWTSBleGNlcHRpb24gdGFibGVzLCB4ODYmIzM5O3MgVFNTLCBldGMuXG4mIzQzO1x0ICovXG4gXHRNRU1fUkVHSU9OX0RBVEEsXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgUFQgcmVnaW9uLCBhLmsuYS4gUGFnZSBUYWJsZSByZWdpb24sIGlzIHVzZWQgdG8gYWxsb2NhdGUgcGFnZVxuJiM0MztcdCAqIHRhYmxlIHBhZ2VzLlxuJiM0MztcdCAqL1xuIFx0TUVNX1JFR0lPTl9QVCxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBURVNUX0RBVEEgcmVnaW9uIGlzIHVzZWQgZm9yIGFsbG9jYXRpbmcgdGVzdCBkYXRhIHRoYXQgaXMgZWl0aGVyXG4mIzQzO1x0ICogdGVzdCBzcGVjaWZpYywgYW5kL29yIGlzbiYjMzk7dCBjb25zaWRlcmVkIGEgXCYjMzQ7Y29yZVwmIzM0OyBkYXRhIHN0cnVjdHVyZS5cbiYjNDM7XHQgKi9cbiBcdE1FTV9SRUdJT05fVEVTVF9EQVRBLFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIFRFU1RfRVhUUkEgcmVnaW9uIGlzIGZvciBzcGVjaWFsIHNub3dmbGFrZXMsIHdoZXJlIGEgdGVzdCB3YW50c1xuJiM0MztcdCAqIHRvIGNyZWF0ZSBhbmQgdXNlIGEgb25lLW9mZiBtZW1zbG90LCB3aXRob3V0IGltcGFjdGluZyBcJiMzNDtub3JtYWxcJiMzNDsgdGVzdFxuJiM0MztcdCAqIGRhdGEgYWxsb2NhdGlvbnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0TUVNX1JFR0lPTl9URVNUX0VYVFJBLFxuIFx0TlJfTUVNX1JFR0lPTlMsXG4gfTtcbiBcbkBAIC0xMjcsMTEgJiM0MzsxNjMsNiBAQCBzdHJ1Y3Qga3ZtX3ZtIHtcbiBcbiBcdHN0cnVjdCBrdm1fYmluYXJ5X3N0YXRzIHN0YXRzO1xuIFxuLVx0Lypcbi1cdCAqIEtWTSByZWdpb24gc2xvdHMuIFRoZXNlIGFyZSB0aGUgZGVmYXVsdCBtZW1zbG90cyB1c2VkIGJ5IHBhZ2Vcbi1cdCAqIGFsbG9jYXRvcnMsIGUuZy4sIGxpYi9lbGYgdXNlcyB0aGUgbWVtc2xvdHNbTUVNX1JFR0lPTl9DT0RFXVxuLVx0ICogbWVtc2xvdC5cbi1cdCAqL1xuIFx0dTMyIG1lbXNsb3RzW05SX01FTV9SRUdJT05TXTtcbiB9O1xuIFxuQEAgLTE2OSw3ICYjNDM7MjAwLDggQEAgbWVtc2xvdDJyZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIHUzMiBtZW1zbG90KTtcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqdm1fZ2V0X21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4gXHRcdFx0XHRcdFx0XHQgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKVxuIHtcbi1cdGFzc2VydCh0eXBlIFx1MDAzYyBOUl9NRU1fUkVHSU9OUyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQodHlwZSBcdTAwM2MgTlJfTUVNX1JFR0lPTlMsXG4mIzQzO1x0XHQgICAgXCYjMzQ7SW52YWxpZCBtZW1vcnkgcmVnaW9uIHR5cGUgJiMzOTsldSYjMzk7XCYjMzQ7LCB0eXBlKTtcbiBcdHJldHVybiBtZW1zbG90MnJlZ2lvbih2bSwgdm0tXHUwMDNlbWVtc2xvdHNbdHlwZV0pO1xuIH1cbiBcbkBAIC03MDIsNiAmIzQzOzczNCwzNiBAQCB2b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG4gXHRcdGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncyxcbiBcdFx0aW50IGd1ZXN0X21lbWZkX2ZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcbiBcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgdTMyIHNsb3QpXG4mIzQzO3tcbiYjNDM7XHRURVNUX0FTU0VSVCh2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSA9PSBLVk1fSU5WQUxJRF9NRU1TTE9ULFxuJiM0MztcdFx0ICAgIFwmIzM0O01lbW9yeSByZWdpb24gdHlwZSAmIzM5OyV1JiMzOTsgd2FzIGFscmVhZHkgb3ZlcnJpZGRlbiB3aXRoIHNsb3Q9JXVcJiMzNDssXG4mIzQzO1x0XHQgICAgdHlwZSwgdm0tXHUwMDNlbWVtc2xvdHNbdHlwZV0pO1xuJiM0MztcbiYjNDM7XHR2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSA9IHNsb3Q7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4mIzQzO1x0XHRcdFx0XHQgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdCAgICBncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLFxuJiM0MztcdFx0XHRcdFx0ICAgIHUzMiBmbGFncylcbiYjNDM7e1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCB0eXBlLCBzbG90KTtcbiYjNDM7XHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHNyY190eXBlLCBncGEsIHNsb3QsIG5wYWdlcywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgIGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIHR5cGUsIHNyY190eXBlLCBncGEsIHNsb3QsIG5wYWdlcywgMCk7XG4mIzQzO31cbiYjNDM7XG4gI2lmbmRlZiB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5XG4gc3RhdGljIGlubGluZSBib29sIHZtX2FyY2hfaGFzX3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IGt2bV92bSAqdm0pXG4ge1xuQEAgLTk5MCwyMyAmIzQzOzEwNTIsNDEgQEAgdm9pZCBrdm1fZ3NpX3JvdXRpbmdfd3JpdGUoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgKnJvdXRpbmcpO1xuIFxuIGNvbnN0IGNoYXIgKmV4aXRfcmVhc29uX3N0cih1bnNpZ25lZCBpbnQgZXhpdF9yZWFzb24pO1xuIFxuLWdwYV90IHZtX3BoeV9wYWdlX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdCk7XG4tZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sIGdwYV90IG1pbl9ncGEsXG4tXHRcdFx0ICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkKTtcbi1ncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKTtcbiYjNDM7Ym9vbCBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcyh2b2lkKTtcbiYjNDM7XG4mIzQzO2dwYV90IF9fX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcywgZ3BhX3QgbWluX2dwYSxcbiYjNDM7XHRcdFx0ICAgICB1MzIgbWVtc2xvdCwgYm9vbCBwcm90ZWN0ZWQsIGJvb2wgbmF0dXJhbGx5X2FsaWduZWQpO1xuJiM0MztncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLFxuJiM0MztcdFx0XHQgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwgYm9vbCBwcm90ZWN0ZWQpO1xuIFxuLXN0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLFxuLVx0XHRcdFx0ICAgICAgIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KVxuJiM0MztzdGF0aWMgaW5saW5lIGdwYV90IHZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLFxuJiM0MztcdFx0XHRcdCAgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcbiB7XG4gXHQvKlxuIFx0ICogQnkgZGVmYXVsdCwgYWxsb2NhdGUgbWVtb3J5IGFzIHByb3RlY3RlZCBmb3IgVk1zIHRoYXQgc3VwcG9ydFxuIFx0ICogcHJvdGVjdGVkIG1lbW9yeSwgYXMgdGhlIG1ham9yaXR5IG9mIG1lbW9yeSBmb3Igc3VjaCBWTXMgaXNcbiBcdCAqIHByb3RlY3RlZCwgaS5lLiB1c2luZyBzaGFyZWQgbWVtb3J5IGlzIGVmZmVjdGl2ZWx5IG9wdC1pbi5cbiBcdCAqL1xuLVx0cmV0dXJuIF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBudW0sIG1pbl9ncGEsIG1lbXNsb3QsXG4mIzQzO1x0cmV0dXJuIF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywgdHlwZSxcbiBcdFx0XHRcdCAgICB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHZtKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGdwYV90IHZtX3BoeV9wYWdlX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLFxuJiM0MztcdFx0XHRcdCAgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMSwgdHlwZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIE1FTV9SRUdJT05fUFQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGt2bV92bSAqdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgMSk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBfX19fdm1fY3JlYXRlKCkgZG9lcyBLVk1fQ1JFQVRFX1ZNIGFuZCBsaXR0bGUgZWxzZS4gIF9fdm1fY3JlYXRlKCkgYWxzb1xuICAqIGxvYWRzIHRoZSB0ZXN0IGJpbmFyeSBpbnRvIGd1ZXN0IG1lbW9yeSBhbmQgY3JlYXRlcyBhbiBJUlEgY2hpcCAoeDg2IG9ubHkpLlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaFxuaW5kZXggMmQxYWZhMDk4MTliMC4uMTVmYWFhMDYwMTI2MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oXG5AQCAtOCw3ICYjNDM7OCw3IEBAXG4gI2RlZmluZSBTTVJBTV9NRU1TTE9UXHQoKDEgXHUwMDNjXHUwMDNjIDE2KSB8IDEpXG4gI2RlZmluZSBTTVJBTV9QQUdFU1x0KFNNUkFNX1NJWkUgLyBQQUdFX1NJWkUpXG4gXG4tdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLFxuJiM0Mzt2b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHNtcmFtX2dwYSxcbiBcdFx0IGNvbnN0IHZvaWQgKnNtaV9oYW5kbGVyLCBzaXplX3QgaGFuZGxlcl9zaXplKTtcbiBcbiB2b2lkIGluamVjdF9zbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuY1xuaW5kZXggMDEzMjViZjRkMzZmYy4uMmRjYWEyYzRhMDM4MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcbkBAIC0xMTUsOSAmIzQzOzExNSw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBcdGlmICh2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQpXG4gXHRcdHJldHVybjtcbiBcbi1cdHZtLVx1MDAzZW1tdS5wZ2QgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLFxuLVx0XHRcdFx0XHQgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxuLVx0XHRcdFx0XHQgdm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xuJiM0MztcdHZtLVx1MDAzZW1tdS5wZ2QgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBucl9wYWdlcyk7XG4gXHR2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQgPSB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbmluZGV4IDlkZGMwNDdkNWMyNzUuLjU3YjY1M2ZiZDBiMWYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xuQEAgLTE3LDYgJiM0MzsxNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2FsaWduLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuIFxuICNkZWZpbmUgS1ZNX1VUSUxfTUlOX1BGTlx0MlxuQEAgLTI4Nyw2ICYjNDM7Mjg4LDcgQEAgX193ZWFrIHZvaWQgdm1fcG9wdWxhdGVfZ3ZhX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBzdHJ1Y3Qga3ZtX3ZtICpfX19fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRpbnQgaTtcbiBcbiBcdHZtID0gY2FsbG9jKDEsIHNpemVvZigqdm0pKTtcbiBcdFRFU1RfQVNTRVJUKHZtICE9IE5VTEwsIFwmIzM0O0luc3VmZmljaWVudCBNZW1vcnlcJiMzNDspO1xuQEAgLTI5NSw2ICYjNDM7Mjk3LDggQEAgc3RydWN0IGt2bV92bSAqX19fX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXG4gXHR2bS1cdTAwM2VyZWdpb25zLmdwYV90cmVlID0gUkJfUk9PVDtcbiBcdHZtLVx1MDAzZXJlZ2lvbnMuaHZhX3RyZWUgPSBSQl9ST09UO1xuIFx0aGFzaF9pbml0KHZtLVx1MDAzZXJlZ2lvbnMuc2xvdF9oYXNoKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR2bS1cdTAwM2VtZW1zbG90c1tpXSA9IEtWTV9JTlZBTElEX01FTVNMT1Q7XG4gXG4gXHR2bS1cdTAwM2Vtb2RlID0gc2hhcGUubW9kZTtcbiBcdHZtLVx1MDAzZXR5cGUgPSBzaGFwZS50eXBlO1xuQEAgLTQ5MSw3ICYjNDM7NDk1LDcgQEAgc3RydWN0IGt2bV92bSAqX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlLCB1MzIgbnJfcnVubmFibGVfdmNwdXMsXG4gXHRcdFx0XHRcdFx0IG5yX2V4dHJhX3BhZ2VzKTtcbiBcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqc2xvdDA7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cdGludCBpLCBmbGFncztcbiYjNDM7XHRpbnQgZmxhZ3M7XG4gXG4gXHRrdm1fc2V0X2ZpbGVzX3JsaW1pdChucl9ydW5uYWJsZV92Y3B1cyk7XG4gXG5AQCAtNTA5LDggJiM0Mzs1MTMsMTAgQEAgc3RydWN0IGt2bV92bSAqX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlLCB1MzIgbnJfcnVubmFibGVfdmNwdXMsXG4gXHRcdGZsYWdzIHw9IEtWTV9NRU1fR1VFU1RfTUVNRkQ7XG4gXG4gXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCAwLCAwLCBucl9wYWdlcywgZmxhZ3MpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IGkmIzQzOyYjNDM7KVxuLVx0XHR2bS1cdTAwM2VtZW1zbG90c1tpXSA9IDA7XG4mIzQzO1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgMCk7XG4mIzQzO1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fUFQsIDApO1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIDApO1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgMCk7XG4gXG4gXHRrdm1fdm1fZWxmX2xvYWQodm0sIHByb2dyYW1faW52b2NhdGlvbl9uYW1lKTtcbiBcbkBAIC0xMTg5LDYgJiM0MzsxMTk1LDggQEAgbWVtc2xvdDJyZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIHUzMiBtZW1zbG90KVxuIHtcbiBcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uO1xuIFxuJiM0MztcdFRFU1RfQVNTRVJUKG1lbXNsb3QgIT0gS1ZNX0lOVkFMSURfTUVNU0xPVCwgXCYjMzQ7dm0tXHUwMDNlbWVtc2xvdHNbXSB1bnBvcHVsYXRlZD9cJiMzNDspO1xuJiM0MztcbiBcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUodm0tXHUwMDNlcmVnaW9ucy5zbG90X2hhc2gsIHJlZ2lvbiwgc2xvdF9ub2RlLFxuIFx0XHRcdCAgICAgICBtZW1zbG90KVxuIFx0XHRpZiAocmVnaW9uLVx1MDAzZXJlZ2lvbi5zbG90ID09IG1lbXNsb3QpXG5AQCAtMTQ2NSw5ICYjNDM7MTQ3Myw3IEBAIHN0YXRpYyBndmFfdCBfX19fdm1fYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBzeiwgZ3ZhX3QgbWluX2d2YSxcbiBcdHU2NCBwYWdlcyA9IChzeiBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdCkgJiM0MzsgKChzeiAlIHZtLVx1MDAzZXBhZ2Vfc2l6ZSkgIT0gMCk7XG4gXG4gXHR2aXJ0X3BnZF9hbGxvYyh2bSk7XG4tXHRncGFfdCBncGEgPSBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXMsXG4tXHRcdFx0XHRcdCAgIEtWTV9VVElMX01JTl9QRk4gKiB2bS1cdTAwM2VwYWdlX3NpemUsXG4tXHRcdFx0XHRcdCAgIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdLCBwcm90ZWN0ZWQpO1xuJiM0MztcdGdwYV90IGdwYSA9IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlcywgdHlwZSwgcHJvdGVjdGVkKTtcbiBcbiBcdC8qXG4gXHQgKiBGaW5kIGFuIHVudXNlZCByYW5nZSBvZiB2aXJ0dWFsIHBhZ2UgYWRkcmVzc2VzIG9mIGF0IGxlYXN0XG5AQCAtMjAyNSwzMyAmIzQzOzIwMzEsMjEgQEAgY29uc3QgY2hhciAqZXhpdF9yZWFzb25fc3RyKHVuc2lnbmVkIGludCBleGl0X3JlYXNvbilcbiB9XG4gXG4gLypcbi0gKiBQaHlzaWNhbCBDb250aWd1b3VzIFBhZ2UgQWxsb2NhdG9yXG4tICpcbi0gKiBJbnB1dCBBcmdzOlxuLSAqICAgdm0gLSBWaXJ0dWFsIE1hY2hpbmVcbi0gKiAgIG51bSAtIG51bWJlciBvZiBwYWdlc1xuLSAqICAgbWluX2dwYSAtIFBoeXNpY2FsIGFkZHJlc3MgbWluaW11bVxuLSAqICAgbWVtc2xvdCAtIE1lbW9yeSByZWdpb24gdG8gYWxsb2NhdGUgcGFnZSBmcm9tXG4tICogICBwcm90ZWN0ZWQgLSBUcnVlIGlmIHRoZSBwYWdlcyB3aWxsIGJlIHVzZWQgYXMgcHJvdGVjdGVkL3ByaXZhdGUgbWVtb3J5XG4mIzQzOyAqIEFsbG9jYXRlIGNvbnRpZ3VvdXMgKGd1ZXN0KSBwaHlzaWNhbCBwYWdlcyBpbiBhIGdpdmVuIG1lbW9yeSByZWdpb24sIGF0IG9yXG4mIzQzOyAqIHRoZSBtaW5pbXVtIHNwZWNpZmljIEdQQS4gIElmIHRoZSBtZW1vcnkgaXMgcHJvdGVjdGVkL3ByaXZhdGUsIGFsc28gYWRkIHRoZVxuJiM0MzsgKiBhbGxvY2F0ZSBwYWdlcyB0byB0aGUgcmVnaW9uJiMzOTtzIHNldCBvZiBwcm90ZWN0ZWQgcGFnZXMsIGUuZy4gc28gdGhhdCBhcmNoXG4mIzQzOyAqIGNvZGUga25vd3Mgd2hpY2ggcGFnZXMgbmVlZCB0byBiZSBlbmNyeXB0ZWQgd2hlbiBsYXVuY2hpbmcgdGhlIFZNLlxuICAqXG4tICogT3V0cHV0IEFyZ3M6IE5vbmVcbi0gKlxuLSAqIFJldHVybjpcbi0gKiAgIFN0YXJ0aW5nIHBoeXNpY2FsIGFkZHJlc3Ncbi0gKlxuLSAqIFdpdGhpbiB0aGUgVk0gc3BlY2lmaWVkIGJ5IHZtLCBsb2NhdGVzIGEgcmFuZ2Ugb2YgYXZhaWxhYmxlIHBoeXNpY2FsXG4tICogcGFnZXMgYXQgb3IgYWJvdmUgbWluX2dwYS4gSWYgZm91bmQsIHRoZSBwYWdlcyBhcmUgbWFya2VkIGFzIGluIHVzZVxuLSAqIGFuZCB0aGVpciBiYXNlIGFkZHJlc3MgaXMgcmV0dXJuZWQuIEEgVEVTVF9BU1NFUlQgZmFpbHVyZSBvY2N1cnMgaWZcbi0gKiBub3QgZW5vdWdoIHBhZ2VzIGFyZSBhdmFpbGFibGUgYXQgb3IgYWJvdmUgbWluX2dwYS5cbiYjNDM7ICogTm90ZSwgc3VjY2VzcyBpcyBndWFyYW50ZWVkIVxuICAqL1xuLWdwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLFxuLVx0XHRcdCAgIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90LFxuLVx0XHRcdCAgIGJvb2wgcHJvdGVjdGVkKVxuJiM0MztncGFfdCBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsIGdwYV90IG1pbl9ncGEsXG4mIzQzO1x0XHRcdCAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKVxuIHtcbiYjNDM7XHRzaXplX3QgYWxpZ25tZW50ID0gbmF0dXJhbGx5X2FsaWduZWQgPyBucl9wYWdlcyA6IDE7XG4gXHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnJlZ2lvbjtcbiBcdHNwYXJzZWJpdF9pZHhfdCBwZywgYmFzZTtcbiBcbi1cdFRFU1RfQVNTRVJUKG51bSBcdTAwM2UgMCwgXCYjMzQ7TXVzdCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZVwmIzM0Oyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQobnJfcGFnZXMsIFwmIzM0O011c3QgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHBhZ2VcJiMzNDspO1xuIFxuIFx0VEVTVF9BU1NFUlQoKG1pbl9ncGEgJSB2bS1cdTAwM2VwYWdlX3NpemUpID09IDAsIFwmIzM0O01pbiBwaHlzaWNhbCBhZGRyZXNzIFwmIzM0O1xuIFx0XHRcJiMzNDtub3QgZGl2aXNpYmxlIGJ5IHBhZ2Ugc2l6ZS5cXG5cJiMzNDtcbkBAIC0yMDYyLDQzICYjNDM7MjA1Niw3OCBAQCBncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSxcbiBcdFRFU1RfQVNTRVJUKCFwcm90ZWN0ZWQgfHwgcmVnaW9uLVx1MDAzZXByb3RlY3RlZF9waHlfcGFnZXMsXG4gXHRcdCAgICBcJiMzNDtSZWdpb24gZG9lc24mIzM5O3Qgc3VwcG9ydCBwcm90ZWN0ZWQgbWVtb3J5XCYjMzQ7KTtcbiBcbi1cdGJhc2UgPSBwZyA9IG1pbl9ncGEgXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQ7XG4tXHRkbyB7XG4tXHRcdGZvciAoOyBwZyBcdTAwM2MgYmFzZSAmIzQzOyBudW07ICYjNDM7JiM0MztwZykge1xuLVx0XHRcdGlmICghc3BhcnNlYml0X2lzX3NldChyZWdpb24tXHUwMDNldW51c2VkX3BoeV9wYWdlcywgcGcpKSB7XG4tXHRcdFx0XHRiYXNlID0gcGcgPSBzcGFyc2ViaXRfbmV4dF9zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbiYjNDM7XHRiYXNlID0gbWluX2dwYSBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdDtcbiYjNDM7YWdhaW46XG4mIzQzO1x0YmFzZSA9IEFMSUdOKGJhc2UsIGFsaWdubWVudCk7XG4mIzQzO1x0Zm9yIChwZyA9IGJhc2U7IHBnIFx1MDAzYyBiYXNlICYjNDM7IG5yX3BhZ2VzOyAmIzQzOyYjNDM7cGcpIHtcbiYjNDM7XHRcdGlmICghc3BhcnNlYml0X2lzX3NldChyZWdpb24tXHUwMDNldW51c2VkX3BoeV9wYWdlcywgcGcpKSB7XG4mIzQzO1x0XHRcdGJhc2UgPSBzcGFyc2ViaXRfbmV4dF9zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKTtcbiYjNDM7XHRcdFx0aWYgKCFiYXNlKVxuJiM0MztcdFx0XHRcdGdvdG8gZW5vbWVtO1xuJiM0MztcdFx0XHRnb3RvIGFnYWluO1xuIFx0XHR9XG4tXHR9IHdoaWxlIChwZyBcdTAwMjZcdTAwMjYgcGcgIT0gYmFzZSAmIzQzOyBudW0pO1xuLVxuLVx0aWYgKHBnID09IDApIHtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O05vIGd1ZXN0IHBoeXNpY2FsIHBhZ2UgYXZhaWxhYmxlLCBcJiMzNDtcbi1cdFx0XHRcJiMzNDttaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcXG5cJiMzNDssXG4tXHRcdFx0bWluX2dwYSwgdm0tXHUwMDNlcGFnZV9zaXplLCBtZW1zbG90KTtcbi1cdFx0ZnB1dHMoXCYjMzQ7LS0tLSB2bSBkdW1wIC0tLS1cXG5cJiMzNDssIHN0ZGVycik7XG4tXHRcdHZtX2R1bXAoc3RkZXJyLCB2bSwgMik7XG4tXHRcdGFib3J0KCk7XG4gXHR9XG4gXG4tXHRmb3IgKHBnID0gYmFzZTsgcGcgXHUwMDNjIGJhc2UgJiM0MzsgbnVtOyAmIzQzOyYjNDM7cGcpIHtcbiYjNDM7XHRmb3IgKHBnID0gYmFzZTsgcGcgXHUwMDNjIGJhc2UgJiM0MzsgbnJfcGFnZXM7ICYjNDM7JiM0MztwZykge1xuIFx0XHRzcGFyc2ViaXRfY2xlYXIocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKTtcbiBcdFx0aWYgKHByb3RlY3RlZClcbiBcdFx0XHRzcGFyc2ViaXRfc2V0KHJlZ2lvbi1cdTAwM2Vwcm90ZWN0ZWRfcGh5X3BhZ2VzLCBwZyk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gYmFzZSAqIHZtLVx1MDAzZXBhZ2Vfc2l6ZTtcbiYjNDM7XG4mIzQzO2Vub21lbTpcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7Tm8gZ3Vlc3QgcGh5c2ljYWwgcGFnZSBhdmFpbGFibGUsIG1pbl9ncGE6IDB4JWx4IHBhZ2Vfc2l6ZTogMHgleCBtZW1zbG90OiAldVxcblwmIzM0OyxcbiYjNDM7XHRcdG1pbl9ncGEsIHZtLVx1MDAzZXBhZ2Vfc2l6ZSwgbWVtc2xvdCk7XG4mIzQzO1x0ZnB1dHMoXCYjMzQ7LS0tLSB2bSBkdW1wIC0tLS1cXG5cJiMzNDssIHN0ZGVycik7XG4mIzQzO1x0dm1fZHVtcChzdGRlcnIsIHZtLCAyKTtcbiYjNDM7XHRhYm9ydCgpO1xuJiM0MztcdF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpO1xuIH1cbiBcbi1ncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpXG4mIzQzO19fd2VhayBib29sIGt2bV9hcmNoX25lZWRzX25hdHVyYWxseV9hbGlnbmVkX3BhZ2VfdGFibGVzKHZvaWQpXG4ge1xuLVx0cmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMSwgbWluX2dwYSwgbWVtc2xvdCk7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1ncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKVxuJiM0MztncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLFxuJiM0MztcdFx0XHQgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwgYm9vbCBwcm90ZWN0ZWQpXG4ge1xuLVx0cmV0dXJuIHZtX3BoeV9wYWdlX2FsbG9jKHZtLCBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsXG4tXHRcdFx0XHQgdm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xuJiM0MztcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uID0gdm1fZ2V0X21lbV9yZWdpb24odm0sIHR5cGUpO1xuJiM0MztcdGJvb2wgbmF0dXJhbGx5X2FsaWduZWQgPSBmYWxzZTtcbiYjNDM7XHRncGFfdCBtaW5fZ3BhO1xuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVChyZWdpb24sIFwmIzM0O05vIHJlZ2lvbiBmb3IgdHlwZSAmIzM5OyV1JiMzOTssIG1lbXNsb3QgJiMzOTsldSYjMzk7XCYjMzQ7LFxuJiM0MztcdFx0ICAgIHR5cGUsIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBNRU1fUkVHSU9OX0NPREU6XG4mIzQzO1x0Y2FzZSBNRU1fUkVHSU9OX0RBVEE6XG4mIzQzO1x0Y2FzZSBNRU1fUkVHSU9OX1RFU1RfREFUQTpcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiB0aGUgcmVnaW9uIGlzIGJhY2tlZCBieSB0aGUgZGVmYXVsdCBtZW1zbG90IChpZD0wKSwgdXNlXG4mIzQzO1x0XHQgKiBzZWxmdGVzdHMmIzM5OyBoYXJkY29kZWQgbWluaW11bSBQRk4sIG90aGVyd2lzZSB1c2UgdGhlIGJhc2Ugb2ZcbiYjNDM7XHRcdCAqIHRoZSBjdXN0b20gbWVtb3J5IHNsb3QgdGhhdCBiYWNrcyB0aGUgcmVnaW9uLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIXZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdKVxuJiM0MztcdFx0XHRtaW5fZ3BhID0gS1ZNX1VUSUxfTUlOX1BGTiAqIHZtLVx1MDAzZXBhZ2Vfc2l6ZTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bWluX2dwYSA9IHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBNRU1fUkVHSU9OX1BUOlxuJiM0MztcdFx0bWluX2dwYSA9IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUjtcbiYjNDM7XHRcdG5hdHVyYWxseV9hbGlnbmVkID0ga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXMoKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUVNX1JFR0lPTl9URVNUX0VYVFJBOlxuJiM0MztcdFx0bWluX2dwYSA9IHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdFRFU1RfRkFJTChcJiMzNDtJbnZhbGlkIG1lbW9yeSByZWdpb24gdHlwZSAmIzM5OyV1JiMzOTtcJiMzNDssIHR5cGUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIG1pbl9ncGEsIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdLFxuJiM0MztcdFx0XHRcdCAgICAgIHByb3RlY3RlZCwgbmF0dXJhbGx5X2FsaWduZWQpO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcbmluZGV4IDQ3YmJkZTNlMjA1YTAuLmZjZDQxYmM2ZmJkYWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcbkBAIC05LDcgJiM0Mzs5LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtwcm9jZXNzb3IuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3VjYWxsX2NvbW1vbi5oXCYjMzQ7XG4gXG4tI2RlZmluZSBMT09OR0FSQ0hfUEFHRV9UQUJMRV9QSFlTX01JTlx0XHQweDIwMDAwMFxuICNkZWZpbmUgTE9PTkdBUkNIX0dVRVNUX1NUQUNLX1ZBRERSX01JTlx0XHQweDIwMDAwMFxuIFxuIHN0YXRpYyBncGFfdCBpbnZhbGlkX3BndGFibGVbNF07XG5AQCAtNTcsOSAmIzQzOzU2LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFx0Y2hpbGQgPSB0YWJsZSA9IDA7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2bS1cdTAwM2VtbXUucGd0YWJsZV9sZXZlbHM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGludmFsaWRfcGd0YWJsZVtpXSA9IGNoaWxkO1xuLVx0XHR0YWJsZSA9IHZtX3BoeV9wYWdlX2FsbG9jKHZtLCBMT09OR0FSQ0hfUEFHRV9UQUJMRV9QSFlTX01JTixcbi1cdFx0XHRcdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbi1cdFx0VEVTVF9BU1NFUlQodGFibGUsIFwmIzM0O0ZhaWwgdG8gYWxsb2NhdGUgcGFnZSB0YWxlIGF0IGxldmVsICVkXFxuXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdHRhYmxlID0gdm1fYWxsb2NfcGFnZV90YWJsZSh2bSk7XG4gXHRcdHZpcnRfc2V0X3BndGFibGUodm0sIHRhYmxlLCBjaGlsZCk7XG4gXHRcdGNoaWxkID0gdGFibGU7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbmluZGV4IGRlZDU0MjlmMzQ0ODMuLmMxNzVkY2QxNDExNDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5AQCAtNjksOSAmIzQzOzY5LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFx0aWYgKHZtLVx1MDAzZW1tdS5wZ2RfY3JlYXRlZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0dm0tXHUwMDNlbW11LnBnZCA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsXG4tXHRcdFx0XHRcdCBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsXG4tXHRcdFx0XHRcdCB2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XG4mIzQzO1x0dm0tXHUwMDNlbW11LnBnZCA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIG5yX3BhZ2VzKTtcbiBcdHZtLVx1MDAzZW1tdS5wZ2RfY3JlYXRlZCA9IHRydWU7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuY1xuaW5kZXggYTlhZGIzNzgyYjM1Mi4uMzNmNDlkNzQzYjVmZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jXG5AQCAtMjAsOSAmIzQzOzIwLDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFx0aWYgKHZtLVx1MDAzZW1tdS5wZ2RfY3JlYXRlZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBQQUdFU19QRVJfUkVHSU9OLFxuLVx0XHRcdFx0ICAgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxuLVx0XHRcdFx0ICAgdm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xuJiM0MztcdGdwYSA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIFBBR0VTX1BFUl9SRUdJT04pO1xuIFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgZ3BhKSwgMHhmZiwgUEFHRVNfUEVSX1JFR0lPTiAqIHZtLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4gXG4gXHR2bS1cdTAwM2VtbXUucGdkID0gZ3BhO1xuQEAgLTM4LDggJiM0MzszNiw3IEBAIHN0YXRpYyB1NjQgdmlydF9hbGxvY19yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIGludCByaSlcbiB7XG4gXHR1NjQgdGFkZHI7XG4gXG4tXHR0YWRkciA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgIHJpIFx1MDAzYyA0ID8gUEFHRVNfUEVSX1JFR0lPTiA6IDEsXG4tXHRcdFx0XHQgICBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsIDApO1xuJiM0MztcdHRhZGRyID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgcmkgXHUwMDNjIDQgPyBQQUdFU19QRVJfUkVHSU9OIDogMSk7XG4gXHRtZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCB0YWRkciksIDB4ZmYsIFBBR0VTX1BFUl9SRUdJT04gKiB2bS1cdTAwM2VwYWdlX3NpemUpO1xuIFxuIFx0cmV0dXJuICh0YWRkciBcdTAwMjYgUkVHSU9OX0VOVFJZX09SSUdJTilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5pbmRleCBkMzFmYTgxZWEwNzU2Li40NzllOWE0ODE2ODdkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5AQCAtNTI5LDcgJiM0Mzs1MjksMTAgQEAgdm9pZCB0ZHBfaWRlbnRpdHlfbWFwX2RlZmF1bHRfbWVtc2xvdHMoc3RydWN0IGt2bV92bSAqdm0pXG4gXG4gXHQvKiBPbmx5IG1lbXNsb3QgMCBpcyBtYXBwZWQgaGVyZSwgZW5zdXJlIGl0JiMzOTtzIHRoZSBvbmx5IG9uZSBiZWluZyB1c2VkICovXG4gXHRmb3IgKHMgPSAwOyBzIFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgcyYjNDM7JiM0MzspXG4tXHRcdFRFU1RfQVNTRVJUX0VRKHZtLVx1MDAzZW1lbXNsb3RzW3NdLCAwKTtcbiYjNDM7XHRcdFRFU1RfQVNTRVJUKCF2bS1cdTAwM2VtZW1zbG90c1tzXSB8fFxuJiM0MztcdFx0XHQgICAgdm0tXHUwMDNlbWVtc2xvdHNbc10gPT0gS1ZNX0lOVkFMSURfTUVNU0xPVCxcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O1VuaGFuZGxlZCBtZW1zbG90ICYjMzk7JXUmIzM5OyBmb3IgdHlwZSAmIzM5OyV1JiMzOTtcJiMzNDssXG4mIzQzO1x0XHRcdCAgICB2bS1cdTAwM2VtZW1zbG90c1tzXSwgcyk7XG4gXG4gXHRpID0gKHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyIFx1MDAzZVx1MDAzZSB2bS1cdTAwM2VwYWdlX3NoaWZ0KSAtIDE7XG4gXHRsYXN0ID0gaSAmIzQzOyAocmVnaW9uLVx1MDAzZXJlZ2lvbi5tZW1vcnlfc2l6ZSBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdCk7XG5AQCAtMTQ2NSwxMyAmIzQzOzE0NjgsMTMgQEAgYm9vbCBrdm1fYXJjaF9oYXNfZGVmYXVsdF9pcnFjaGlwKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLFxuJiM0Mzt2b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHNtcmFtX2dwYSxcbiBcdFx0IGNvbnN0IHZvaWQgKnNtaV9oYW5kbGVyLCBzaXplX3QgaGFuZGxlcl9zaXplKVxuIHtcbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIHNtcmFtX2dwYSxcbi1cdFx0XHRcdCAgICBTTVJBTV9NRU1TTE9ULCBTTVJBTV9QQUdFUywgMCk7XG4tXHRURVNUX0FTU0VSVCh2bV9waHlfcGFnZXNfYWxsb2Modm0sIFNNUkFNX1BBR0VTLCBzbXJhbV9ncGEsXG4tXHRcdFx0XHQgICAgICAgU01SQU1fTUVNU0xPVCkgPT0gc21yYW1fZ3BhLFxuJiM0MztcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4mIzQzO1x0XHRcdCAgICAgICBzbXJhbV9ncGEsIFNNUkFNX01FTVNMT1QsIFNNUkFNX1BBR0VTKTtcbiYjNDM7XG4mIzQzO1x0VEVTVF9BU1NFUlQodm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBTTVJBTV9QQUdFUywgTUVNX1JFR0lPTl9URVNUX0VYVFJBKSA9PSBzbXJhbV9ncGEsXG4gXHRcdCAgICBcJiMzNDtDb3VsZCBub3QgYWxsb2NhdGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGZvciBTTVJBTVwmIzM0Oyk7XG4gXG4gXHRtZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCBzbXJhbV9ncGEpLCAweDAsIFNNUkFNX1NJWkUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcbmluZGV4IGUxMjk5NjExYmUzMjIuLjg0NGVhOWI3YmI0MWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcbkBAIC0zMzksNyAmIzQzOzMzOSw4IEBAIHN0YXRpYyBib29sIHByZXBhcmVfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEsIGludCBuc2xvdHMsIHU2NCAqbWF4c2xvdHMsXG4gXHRcdGlmIChzbG90ID09IGRhdGEtXHUwMDNlbnNsb3RzKVxuIFx0XHRcdG5wYWdlcyAmIzQzOz0gcmVtcGFnZXM7XG4gXG4tXHRcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyhkYXRhLVx1MDAzZXZtLCBucGFnZXMsIGd1ZXN0X2FkZHIsIHNsb3QpO1xuJiM0MztcdFx0Z3BhID0gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhkYXRhLVx1MDAzZXZtLCBucGFnZXMsIGd1ZXN0X2FkZHIsIHNsb3QsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGZhbHNlLCBmYWxzZSk7XG4gXHRcdFRFU1RfQVNTRVJUKGdwYSA9PSBndWVzdF9hZGRyLFxuIFx0XHRcdCAgICBcJiMzNDt2bV9waHlfcGFnZXNfYWxsb2MoKSBmYWlsZWRcJiMzNDspO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbmluZGV4IDE1ZDgxYjJlZDdhZDMuLjczMzg3Y2MzYmNhNzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbkBAIC0xMDIsMjQgJiM0MzsxMDIsMTcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfZGlydHlfdGVzdF9kYXRhKHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgY3JlYXRlX21haW5fbWVtc2xvdChzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiB7XG4tXHRpbnQgaTtcbi1cbiBcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsIDAsIE1BSU5fUEFHRV9DT1VOVCwgMCk7XG4tXHQvKiBzZXQgdGhlIGFycmF5IG9mIG1lbXNsb3RzIHRvIHplcm8gbGlrZSBfX3ZtX2NyZWF0ZSBkb2VzICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgaSYjNDM7JiM0MzspXG4tXHRcdHZtLVx1MDAzZW1lbXNsb3RzW2ldID0gMDtcbiYjNDM7XHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCAwKTtcbiYjNDM7XHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgMCk7XG4mIzQzO1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgMCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNyZWF0ZV90ZXN0X21lbXNsb3Qoc3RydWN0IGt2bV92bSAqdm0pXG4ge1xuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLFxuLVx0XHRcdFx0ICAgIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuLVx0XHRcdFx0ICAgIFRFU1RfREFUQV9TVEFSVF9HRk4gXHUwMDNjXHUwMDNjIHZtLVx1MDAzZXBhZ2Vfc2hpZnQsXG4tXHRcdFx0XHQgICAgVEVTVF9EQVRBX01FTVNMT1QsXG4tXHRcdFx0XHQgICAgVEVTVF9EQVRBX1BBR0VfQ09VTlQsXG4tXHRcdFx0XHQgICAgMFxuLVx0XHRcdFx0ICAgKTtcbi1cdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fVEVTVF9EQVRBXSA9IFRFU1RfREFUQV9NRU1TTE9UO1xuJiM0MztcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbiYjNDM7XHRcdFx0ICAgICAgIFRFU1RfREFUQV9TVEFSVF9HRk4gXHUwMDNjXHUwMDNjIHZtLVx1MDAzZXBhZ2Vfc2hpZnQsXG4mIzQzO1x0XHRcdCAgICAgICBURVNUX0RBVEFfTUVNU0xPVCwgVEVTVF9EQVRBX1BBR0VfQ09VTlQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBjcmVhdGVfbWVtc2xvdHMoc3RydWN0IGt2bV92bSAqdm0pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmNcbmluZGV4IGYzODM5Mjg0YWMwODEuLmNkMjZjYzFhZWQ4MDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jXG5AQCAtMzYsNyAmIzQzOzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdCh2b2lkKVxuIFx0fTtcbiBcbiBcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XG4tXHRtZW0gPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIDQwOTYgKiA0MiwgMCk7XG4mIzQzO1x0bWVtID0gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgNDA5NiAqIDQyLCAwLCBmYWxzZSwgZmFsc2UpO1xuIFxuIFx0cm91dGluZyA9IGt2bV9nc2lfcm91dGluZ19jcmVhdGUoKTtcbiBcdHJvdXRpbmctXHUwMDNlbnIgPSAxO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXG5pbmRleCBkZmZlOTY1NGY0NWJkLi5iZmE1YWM4Y2UwMjk1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuQEAgLTExNiwxNSAmIzQzOzExNiwxNSBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqc3Bhd25fdm0oc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwgcHRocmVhZF90ICp2Y3B1X3RocmVhZCxcbiBcbiBcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7XG4gXG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTX1RIUCxcbi1cdFx0XHRcdCAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxuLVx0XHRcdFx0ICAgIE1FTV9SRUdJT05fU0laRSAvIGdldHBhZ2VzaXplKCksIDApO1xuJiM0MztcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVNfVEhQLFxuJiM0MztcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcbiYjNDM7XHRcdFx0ICAgICAgIE1FTV9SRUdJT05fU0laRSAvIGdldHBhZ2VzaXplKCkpO1xuIFxuIFx0LypcbiBcdCAqIEFsbG9jYXRlIGFuZCBtYXAgdHdvIHBhZ2VzIHNvIHRoYXQgdGhlIEdQQSBhY2Nlc3NlZCBieSBndWVzdF9jb2RlKClcbiBcdCAqIHN0YXlzIHZhbGlkIGFjcm9zcyB0aGUgbWVtc2xvdCBtb3ZlLlxuIFx0ICovXG4tXHRncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QpO1xuJiM0MztcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcdFRFU1RfQVNTRVJUKGdwYSA9PSBNRU1fUkVHSU9OX0dQQSwgXCYjMzQ7RmFpbGVkIHZtX3BoeV9wYWdlc19hbGxvY1xcblwmIzM0Oyk7XG4gXG4gXHR2aXJ0X21hcCh2bSwgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fR1BBLCAyKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuY1xuaW5kZXggM2RjYTg1ZTk1NDc4MS4uOGQxODIyNzE3YWJkYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNcbkBAIC02MiwxMSAmIzQzOzYyLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRURVNUX0FTU0VSVChyYywgXCYjMzQ7S1ZNX0NBUF9FWElUX09OX0VNVUxBVElPTl9GQUlMVVJFIGlzIHVuYXZhaWxhYmxlXCYjMzQ7KTtcbiBcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhJVF9PTl9FTVVMQVRJT05fRkFJTFVSRSwgMSk7XG4gXG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuLVx0XHRcdFx0ICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsXG4tXHRcdFx0XHQgICAgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFLCAwKTtcbiYjNDM7XHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuJiM0MztcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcbiYjNDM7XHRcdFx0ICAgICAgIE1FTV9SRUdJT05fU0laRSAvIFBBR0VfU0laRSk7XG4mIzQzO1xuIFx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUsXG4tXHRcdFx0XHQgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCk7XG4mIzQzO1x0XHRcdFx0IE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXHRURVNUX0FTU0VSVChncGEgPT0gTUVNX1JFR0lPTl9HUEEsIFwmIzM0O0ZhaWxlZCB2bV9waHlfcGFnZXNfYWxsb2NcJiMzNDspO1xuIFx0dmlydF9tYXAodm0sIE1FTV9SRUdJT05fR1ZBLCBNRU1fUkVHSU9OX0dQQSwgMSk7XG4gXHRodmEgPSBhZGRyX2dwYTJodmEodm0sIE1FTV9SRUdJT05fR1BBKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O0FsbCBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzIGFyZSByZXN0cmljdGVkIHRvIHVzZXItc3BhY2UgS1ZNIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBkbyBub3QgbW9kaWZ5IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM3YTMwNmQ3ZTg2OTk3MDRlMTZiMGJkZGQ3NWU1YTY5NDdkNDhjMjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDEzOjE2OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jCmluZGV4IDZiYjNkODI5MDZiMjIuLmIwZTNmYzhjZDc2YWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmMKQEAgLTU5NywxOCAmIzQzOzU5NywxNiBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IHRlc3RfcGFyYW1zICpwKQogCiAJdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwKIAkJCQkgICAgQ09ERV9BTkRfREFUQV9NRU1TTE9ULCBjb2RlX25wYWdlcywgMCk7Ci0Jdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fQ09ERV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7Ci0Jdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fREFUQV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7Ci0KLQl2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtJmd0O3NyY190eXBlLCBkYXRhX2dwYSAtIHB0X3NpemUsCi0JCQkJICAgIFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSwKLQkJCQkgICAgcC0mZ3Q7dGVzdF9kZXNjLSZndDtwdF9tZW1zbG90X2ZsYWdzKTsKLQl2bS0mZ3Q7bWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0gPSBQQUdFX1RBQkxFX01FTVNMT1Q7Ci0KLQl2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtJmd0O3NyY190eXBlLCBkYXRhX2dwYSwgVEVTVF9EQVRBX01FTVNMT1QsCi0JCQkJICAgIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSwKLQkJCQkgICAgcC0mZ3Q7dGVzdF9kZXNjLSZndDtkYXRhX21lbXNsb3RfZmxhZ3MpOwotCXZtLSZndDttZW1zbG90c1tNRU1fUkVHSU9OX1RFU1RfREFUQV0gPSBURVNUX0RBVEFfTUVNU0xPVDsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTsKJiM0MzsKJiM0MzsJX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCBwLSZndDtzcmNfdHlwZSwgZGF0YV9ncGEgLSBwdF9zaXplLAomIzQzOwkJCQkgUEFHRV9UQUJMRV9NRU1TTE9ULCBwdF9zaXplIC8gZ3Vlc3RfcGFnZV9zaXplLAomIzQzOwkJCQkgcC0mZ3Q7dGVzdF9kZXNjLSZndDtwdF9tZW1zbG90X2ZsYWdzKTsKJiM0MzsKJiM0MzsJX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgcC0mZ3Q7c3JjX3R5cGUsIGRhdGFfZ3BhLAomIzQzOwkJCQkgVEVTVF9EQVRBX01FTVNMT1QsIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSwKJiM0MzsJCQkJIHAtJmd0O3Rlc3RfZGVzYy0mZ3Q7ZGF0YV9tZW1zbG90X2ZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0dXBfdWNhbGwoc3RydWN0IGt2bV92bSAqdm0pCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMKaW5kZXggOWE2OWM0MzlhMGY4Zi4uNDVhODdiYTVhNzM3YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuYwpAQCAtMjMsNyAmIzQzOzIzLDYgQEAKICNkZWZpbmUgR0lDX0xQSV9PRkZTRVQJODE5MgogCiBzdGF0aWMgc2l6ZV90IG5yX2l0ZXJhdGlvbnMgPSAxMDAwOwotc3RhdGljIGdwYV90IGdwYV9iYXNlOwogCiBzdGF0aWMgc3RydWN0IGt2bV92bSAqdm07CiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7CkBAIC0xNDMsNiAmIzQzOzE0Miw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUoc2l6ZV90IG5yX2xwaXMpCiAKIHN0YXRpYyB2b2lkIHNldHVwX21lbXNsb3Qodm9pZCkKIHsKJiM0MzsJZ3BhX3QgZ3BhX2Jhc2U7CiAJc2l6ZV90IHBhZ2VzOwogCXNpemVfdCBzejsKIApAQCAtMTY0LDggJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90KHZvaWQpCiAKIAlwYWdlcyA9IHN6IC8gdm0tJmd0O3BhZ2Vfc2l6ZTsKIAlncGFfYmFzZSA9ICgodm1fY29tcHV0ZV9tYXhfZ2ZuKHZtKSAmIzQzOyAxKSAqIHZtLSZndDtwYWdlX3NpemUpIC0gc3o7Ci0Jdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgZ3BhX2Jhc2UsCi0JCQkJICAgIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMsIDApOwomIzQzOwl2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLAomIzQzOwkJCSAgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYLCBwYWdlcyk7CiB9CiAKICNkZWZpbmUgTFBJX1BST1BfREVGQVVMVF9QUklPCTB4YTAKQEAgLTE5MSwyOCAmIzQzOzE5MSwyNSBAQCBzdGF0aWMgdm9pZCBzZXR1cF90ZXN0X2RhdGEodm9pZCkKIAlncGFfdCBjbWRxX2Jhc2U7CiAKIAl0ZXN0X2RhdGEuZGV2aWNlX3RhYmxlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLAotCQkJCQkJICAgIGdwYV9iYXNlLAotCQkJCQkJICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7CiYjNDM7CQkJCQkJICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7CiAKIAl0ZXN0X2RhdGEuY29sbGVjdGlvbl90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0aywKLQkJCQkJCQlncGFfYmFzZSwKLQkJCQkJCQlURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCQlNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCi0JY21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBncGFfYmFzZSwKLQkJCQkgICAgICAgVEVTVF9NRU1TTE9UX0lOREVYKTsKJiM0MzsJY21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCXZpcnRfbWFwKHZtLCBjbWRxX2Jhc2UsIGNtZHFfYmFzZSwgcGFnZXNfcGVyXzY0ayk7CiAJdGVzdF9kYXRhLmNtZHFfYmFzZSA9IGNtZHFfYmFzZTsKIAl0ZXN0X2RhdGEuY21kcV9iYXNlX3ZhID0gKHZvaWQgKiljbWRxX2Jhc2U7CiAKIAl0ZXN0X2RhdGEuaXR0X3RhYmxlcyA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayAqIG5yX2RldmljZXMsCi0JCQkJCQkgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCSAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTsKIAogCXRlc3RfZGF0YS5scGlfcHJvcF90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0aywKLQkJCQkJCSAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCSAgICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7CiAJY29uZmlndXJlX2xwaXMoKTsKIAogCXRlc3RfZGF0YS5scGlfcGVuZF90YWJsZXMgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGsgKiBucl9jcHVzLAotCQkJCQkJICAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCSAgICAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCiAJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHRlc3RfZGF0YSk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaAppbmRleCA1YTdhNDU1YjUzODc1Li44OWI0ZmMyYWY3NTE2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgKQEAgLTMzLDYgJiM0MzszMyw4IEBACiAKICNkZWZpbmUgTlNFQ19QRVJfU0VDIDEwMDAwMDAwMDBMCiAKJiM0MzsjZGVmaW5lIEtWTV9JTlZBTElEX01FTVNMT1QgVUlOVF9NQVgKJiM0MzsKIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiB7CiAJc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgcmVnaW9uOwogCXN0cnVjdCBzcGFyc2ViaXQgKnVudXNlZF9waHlfcGFnZXM7CkBAIC04MCwxMSAmIzQzOzgyLDQ1IEBAIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbnMgewogCURFQ0xBUkVfSEFTSFRBQkxFKHNsb3RfaGFzaCwgOSk7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBNZW1vcnkgcmVnaW9uIHR5cGVzIGFyZSBwYXNzZWQgdG8gdmFyaW91cyBwYWdlIGFsbG9jYXRvcnMgdG8gY29tbXVuaWNhdGUKJiM0MzsgKiB2YXJpb3VzIHByb3BlcnRpZXMgYW5kIG1ldGFkYXRhIHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24uICBOb3RlLCB0aGUKJiM0MzsgKiBkZXNjcmlwdGlvbnMgYmVsb3cgZGVzY3JpYmVkIHRoZSBwcmltYXJ5IHVzYWdlIG9mIGVhY2ggdHlwZS4gIEluZGl2aWR1YWwKJiM0MzsgKiB0ZXN0cyBtYXkgYWxsb2NhdGUgbWVtb3J5IGZvciBvdGhlciBwdXJwb3Nlcy4KJiM0MzsgKgomIzQzOyAqIEJ5IGRlZmF1bHQsIGFsbCByZWdpb25zIGV4Y2VwdCBURVNUX0VYVFJBIGFyZSBtYXBwZWQgdG8gbWVtc2xvdCAmIzM5OzAmIzM5Oy4gIFRoZQomIzQzOyAqIFRFWFRfRVhUUkEgcmVnaW9uIGlzIGxlZnQgdW5tYXBwZWQgYXMgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0CiYjNDM7ICogc3BlY2lmaWMgYWxsb2NhdGlvbnMsIGkuZS4gc2hvdWxkIG5ldmVyIGJlIHVzZWQgYnkgY29yZS9pbmZyYXN0cnVjdHVyZSBjb2RlLgomIzQzOyAqIFRlc3RzIGNhbiBvdmVycmlkZSB0aGUgbWVtc2xvdCBmb3IgYW55IG9yIGFsbCB0eXBlcywgZS5nLiBzbyB0aGF0IGFsbCB0ZXN0CiYjNDM7ICogZGF0YSBpcyBhbGxvY2F0ZWQgZnJvbSBhIGN1cmF0ZWQgbWVtc2xvdC4KJiM0MzsgKi8KIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBDT0RFIHJlZ2lvbiBpcyB1c2VkIGJ5IGxpYi9lbGYgd2hlbiBsb2FkaW5nIHRoZSB0ZXN0JiMzOTtzIGNvZGUgaW50bwomIzQzOwkgKiBndWVzdCBtZW1vcnkuCiYjNDM7CSAqLwogCU1FTV9SRUdJT05fQ09ERSwKJiM0MzsJLyoKJiM0MzsJICogVGhlIERBVEEgcmVnaW9uIGlzIHVzZWQgdG8gYWxsb2NhdGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIGUuZy4gdkNQVQomIzQzOwkgKiBzdGFja3MsIFZNIGV4Y2VwdGlvbiB0YWJsZXMsIHg4NiYjMzk7cyBUU1MsIGV0Yy4KJiM0MzsJICovCiAJTUVNX1JFR0lPTl9EQVRBLAomIzQzOwkvKgomIzQzOwkgKiBUaGUgUFQgcmVnaW9uLCBhLmsuYS4gUGFnZSBUYWJsZSByZWdpb24sIGlzIHVzZWQgdG8gYWxsb2NhdGUgcGFnZQomIzQzOwkgKiB0YWJsZSBwYWdlcy4KJiM0MzsJICovCiAJTUVNX1JFR0lPTl9QVCwKJiM0MzsJLyoKJiM0MzsJICogVGhlIFRFU1RfREFUQSByZWdpb24gaXMgdXNlZCBmb3IgYWxsb2NhdGluZyB0ZXN0IGRhdGEgdGhhdCBpcyBlaXRoZXIKJiM0MzsJICogdGVzdCBzcGVjaWZpYywgYW5kL29yIGlzbiYjMzk7dCBjb25zaWRlcmVkIGEgJiMzNDtjb3JlJiMzNDsgZGF0YSBzdHJ1Y3R1cmUuCiYjNDM7CSAqLwogCU1FTV9SRUdJT05fVEVTVF9EQVRBLAomIzQzOwkvKgomIzQzOwkgKiBUaGUgVEVTVF9FWFRSQSByZWdpb24gaXMgZm9yIHNwZWNpYWwgc25vd2ZsYWtlcywgd2hlcmUgYSB0ZXN0IHdhbnRzCiYjNDM7CSAqIHRvIGNyZWF0ZSBhbmQgdXNlIGEgb25lLW9mZiBtZW1zbG90LCB3aXRob3V0IGltcGFjdGluZyAmIzM0O25vcm1hbCYjMzQ7IHRlc3QKJiM0MzsJICogZGF0YSBhbGxvY2F0aW9ucy4KJiM0MzsJICovCiYjNDM7CU1FTV9SRUdJT05fVEVTVF9FWFRSQSwKIAlOUl9NRU1fUkVHSU9OUywKIH07CiAKQEAgLTEyNywxMSAmIzQzOzE2Myw2IEBAIHN0cnVjdCBrdm1fdm0gewogCiAJc3RydWN0IGt2bV9iaW5hcnlfc3RhdHMgc3RhdHM7CiAKLQkvKgotCSAqIEtWTSByZWdpb24gc2xvdHMuIFRoZXNlIGFyZSB0aGUgZGVmYXVsdCBtZW1zbG90cyB1c2VkIGJ5IHBhZ2UKLQkgKiBhbGxvY2F0b3JzLCBlLmcuLCBsaWIvZWxmIHVzZXMgdGhlIG1lbXNsb3RzW01FTV9SRUdJT05fQ09ERV0KLQkgKiBtZW1zbG90LgotCSAqLwogCXUzMiBtZW1zbG90c1tOUl9NRU1fUkVHSU9OU107CiB9OwogCkBAIC0xNjksNyAmIzQzOzIwMCw4IEBAIG1lbXNsb3QycmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgbWVtc2xvdCk7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqdm1fZ2V0X21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sCiAJCQkJCQkJICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSkKIHsKLQlhc3NlcnQodHlwZSAmbHQ7IE5SX01FTV9SRUdJT05TKTsKJiM0MzsJVEVTVF9BU1NFUlQodHlwZSAmbHQ7IE5SX01FTV9SRUdJT05TLAomIzQzOwkJICAgICYjMzQ7SW52YWxpZCBtZW1vcnkgcmVnaW9uIHR5cGUgJiMzOTsldSYjMzk7JiMzNDssIHR5cGUpOwogCXJldHVybiBtZW1zbG90MnJlZ2lvbih2bSwgdm0tJmd0O21lbXNsb3RzW3R5cGVdKTsKIH0KIApAQCAtNzAyLDYgJiM0Mzs3MzQsMzYgQEAgdm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLAogCQlncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsCiAJCWludCBndWVzdF9tZW1mZF9mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7CiAKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sCiYjNDM7CQkJCQkgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwKJiM0MzsJCQkJCSAgICAgIHUzMiBzbG90KQomIzQzO3sKJiM0MzsJVEVTVF9BU1NFUlQodm0tJmd0O21lbXNsb3RzW3R5cGVdID09IEtWTV9JTlZBTElEX01FTVNMT1QsCiYjNDM7CQkgICAgJiMzNDtNZW1vcnkgcmVnaW9uIHR5cGUgJiMzOTsldSYjMzk7IHdhcyBhbHJlYWR5IG92ZXJyaWRkZW4gd2l0aCBzbG90PSV1JiMzNDssCiYjNDM7CQkgICAgdHlwZSwgdm0tJmd0O21lbXNsb3RzW3R5cGVdKTsKJiM0MzsKJiM0MzsJdm0tJmd0O21lbXNsb3RzW3R5cGVdID0gc2xvdDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwKJiM0MzsJCQkJCSAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwKJiM0MzsJCQkJCSAgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLAomIzQzOwkJCQkJICAgIGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsCiYjNDM7CQkJCQkgICAgdTMyIGZsYWdzKQomIzQzO3sKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIHR5cGUsIHNsb3QpOwomIzQzOwl2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHNyY190eXBlLCBncGEsIHNsb3QsIG5wYWdlcywgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwKJiM0MzsJCQkJCSAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsCiYjNDM7CQkJCQkgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsCiYjNDM7CQkJCQkgIGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMpCiYjNDM7ewomIzQzOwlfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIHR5cGUsIHNyY190eXBlLCBncGEsIHNsb3QsIG5wYWdlcywgMCk7CiYjNDM7fQomIzQzOwogI2lmbmRlZiB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5CiBzdGF0aWMgaW5saW5lIGJvb2wgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3Qga3ZtX3ZtICp2bSkKIHsKQEAgLTk5MCwyMyAmIzQzOzEwNTIsNDEgQEAgdm9pZCBrdm1fZ3NpX3JvdXRpbmdfd3JpdGUoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgKnJvdXRpbmcpOwogCiBjb25zdCBjaGFyICpleGl0X3JlYXNvbl9zdHIodW5zaWduZWQgaW50IGV4aXRfcmVhc29uKTsKIAotZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KTsKLWdwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLCBncGFfdCBtaW5fZ3BhLAotCQkJICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkKTsKLWdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGt2bV92bSAqdm0pOwomIzQzO2Jvb2wga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXModm9pZCk7CiYjNDM7CiYjNDM7Z3BhX3QgX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLCBncGFfdCBtaW5fZ3BhLAomIzQzOwkJCSAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKTsKJiM0MztncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLAomIzQzOwkJCSAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLCBib29sIHByb3RlY3RlZCk7CiAKLXN0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLAotCQkJCSAgICAgICBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdCkKJiM0MztzdGF0aWMgaW5saW5lIGdwYV90IHZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLAomIzQzOwkJCQkgICAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUpCiB7CiAJLyoKIAkgKiBCeSBkZWZhdWx0LCBhbGxvY2F0ZSBtZW1vcnkgYXMgcHJvdGVjdGVkIGZvciBWTXMgdGhhdCBzdXBwb3J0CiAJICogcHJvdGVjdGVkIG1lbW9yeSwgYXMgdGhlIG1ham9yaXR5IG9mIG1lbW9yeSBmb3Igc3VjaCBWTXMgaXMKIAkgKiBwcm90ZWN0ZWQsIGkuZS4gdXNpbmcgc2hhcmVkIG1lbW9yeSBpcyBlZmZlY3RpdmVseSBvcHQtaW4uCiAJICovCi0JcmV0dXJuIF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBudW0sIG1pbl9ncGEsIG1lbXNsb3QsCiYjNDM7CXJldHVybiBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIHR5cGUsCiAJCQkJICAgIHZtX2FyY2hfaGFzX3Byb3RlY3RlZF9tZW1vcnkodm0pKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sCiYjNDM7CQkJCSAgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMSwgdHlwZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIE1FTV9SRUdJT05fUFQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGt2bV92bSAqdm0pCiYjNDM7ewomIzQzOwlyZXR1cm4gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgMSk7CiYjNDM7fQomIzQzOwogLyoKICAqIF9fX192bV9jcmVhdGUoKSBkb2VzIEtWTV9DUkVBVEVfVk0gYW5kIGxpdHRsZSBlbHNlLiAgX192bV9jcmVhdGUoKSBhbHNvCiAgKiBsb2FkcyB0aGUgdGVzdCBiaW5hcnkgaW50byBndWVzdCBtZW1vcnkgYW5kIGNyZWF0ZXMgYW4gSVJRIGNoaXAgKHg4NiBvbmx5KS4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaAppbmRleCAyZDFhZmEwOTgxOWIwLi4xNWZhYWEwNjAxMjYyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oCkBAIC04LDcgJiM0Mzs4LDcgQEAKICNkZWZpbmUgU01SQU1fTUVNU0xPVAkoKDEgJmx0OyZsdDsgMTYpIHwgMSkKICNkZWZpbmUgU01SQU1fUEFHRVMJKFNNUkFNX1NJWkUgLyBQQUdFX1NJWkUpCiAKLXZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNtcmFtX2dwYSwKJiM0Mzt2b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHNtcmFtX2dwYSwKIAkJIGNvbnN0IHZvaWQgKnNtaV9oYW5kbGVyLCBzaXplX3QgaGFuZGxlcl9zaXplKTsKIAogdm9pZCBpbmplY3Rfc21pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuYwppbmRleCAwMTMyNWJmNGQzNmZjLi4yZGNhYTJjNGEwMzgzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmMKQEAgLTExNSw5ICYjNDM7MTE1LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKQogCWlmICh2bS0mZ3Q7bW11LnBnZF9jcmVhdGVkKQogCQlyZXR1cm47CiAKLQl2bS0mZ3Q7bW11LnBnZCA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsCi0JCQkJCSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsCi0JCQkJCSB2bS0mZ3Q7bWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pOwomIzQzOwl2bS0mZ3Q7bW11LnBnZCA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIG5yX3BhZ2VzKTsKIAl2bS0mZ3Q7bW11LnBnZF9jcmVhdGVkID0gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jCmluZGV4IDlkZGMwNDdkNWMyNzUuLjU3YjY1M2ZiZDBiMWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMKQEAgLTE3LDYgJiM0MzsxNyw3IEBACiAjaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKICNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2FsaWduLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAKICNkZWZpbmUgS1ZNX1VUSUxfTUlOX1BGTgkyCkBAIC0yODcsNiAmIzQzOzI4OCw3IEBAIF9fd2VhayB2b2lkIHZtX3BvcHVsYXRlX2d2YV9iaXRtYXAoc3RydWN0IGt2bV92bSAqdm0pCiBzdHJ1Y3Qga3ZtX3ZtICpfX19fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSkKIHsKIAlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJaW50IGk7CiAKIAl2bSA9IGNhbGxvYygxLCBzaXplb2YoKnZtKSk7CiAJVEVTVF9BU1NFUlQodm0gIT0gTlVMTCwgJiMzNDtJbnN1ZmZpY2llbnQgTWVtb3J5JiMzNDspOwpAQCAtMjk1LDYgJiM0MzsyOTcsOCBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX19fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSkKIAl2bS0mZ3Q7cmVnaW9ucy5ncGFfdHJlZSA9IFJCX1JPT1Q7CiAJdm0tJmd0O3JlZ2lvbnMuaHZhX3RyZWUgPSBSQl9ST09UOwogCWhhc2hfaW5pdCh2bS0mZ3Q7cmVnaW9ucy5zbG90X2hhc2gpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTlJfTUVNX1JFR0lPTlM7IGkmIzQzOyYjNDM7KQomIzQzOwkJdm0tJmd0O21lbXNsb3RzW2ldID0gS1ZNX0lOVkFMSURfTUVNU0xPVDsKIAogCXZtLSZndDttb2RlID0gc2hhcGUubW9kZTsKIAl2bS0mZ3Q7dHlwZSA9IHNoYXBlLnR5cGU7CkBAIC00OTEsNyAmIzQzOzQ5NSw3IEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLAogCQkJCQkJIG5yX2V4dHJhX3BhZ2VzKTsKIAlzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnNsb3QwOwogCXN0cnVjdCBrdm1fdm0gKnZtOwotCWludCBpLCBmbGFnczsKJiM0MzsJaW50IGZsYWdzOwogCiAJa3ZtX3NldF9maWxlc19ybGltaXQobnJfcnVubmFibGVfdmNwdXMpOwogCkBAIC01MDksOCAmIzQzOzUxMywxMCBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsIHUzMiBucl9ydW5uYWJsZV92Y3B1cywKIAkJZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDsKIAogCXZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsIDAsIG5yX3BhZ2VzLCBmbGFncyk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IE5SX01FTV9SRUdJT05TOyBpJiM0MzsmIzQzOykKLQkJdm0tJmd0O21lbXNsb3RzW2ldID0gMDsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgMCk7CiYjNDM7CV9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCAwKTsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgMCk7CiYjNDM7CV9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgMCk7CiAKIAlrdm1fdm1fZWxmX2xvYWQodm0sIHByb2dyYW1faW52b2NhdGlvbl9uYW1lKTsKIApAQCAtMTE4OSw2ICYjNDM7MTE5NSw4IEBAIG1lbXNsb3QycmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgbWVtc2xvdCkKIHsKIAlzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnJlZ2lvbjsKIAomIzQzOwlURVNUX0FTU0VSVChtZW1zbG90ICE9IEtWTV9JTlZBTElEX01FTVNMT1QsICYjMzQ7dm0tJmd0O21lbXNsb3RzW10gdW5wb3B1bGF0ZWQ/JiMzNDspOwomIzQzOwogCWhhc2hfZm9yX2VhY2hfcG9zc2libGUodm0tJmd0O3JlZ2lvbnMuc2xvdF9oYXNoLCByZWdpb24sIHNsb3Rfbm9kZSwKIAkJCSAgICAgICBtZW1zbG90KQogCQlpZiAocmVnaW9uLSZndDtyZWdpb24uc2xvdCA9PSBtZW1zbG90KQpAQCAtMTQ2NSw5ICYjNDM7MTQ3Myw3IEBAIHN0YXRpYyBndmFfdCBfX19fdm1fYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBzeiwgZ3ZhX3QgbWluX2d2YSwKIAl1NjQgcGFnZXMgPSAoc3ogJmd0OyZndDsgdm0tJmd0O3BhZ2Vfc2hpZnQpICYjNDM7ICgoc3ogJSB2bS0mZ3Q7cGFnZV9zaXplKSAhPSAwKTsKIAogCXZpcnRfcGdkX2FsbG9jKHZtKTsKLQlncGFfdCBncGEgPSBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXMsCi0JCQkJCSAgIEtWTV9VVElMX01JTl9QRk4gKiB2bS0mZ3Q7cGFnZV9zaXplLAotCQkJCQkgICB2bS0mZ3Q7bWVtc2xvdHNbdHlwZV0sIHByb3RlY3RlZCk7CiYjNDM7CWdwYV90IGdwYSA9IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlcywgdHlwZSwgcHJvdGVjdGVkKTsKIAogCS8qCiAJICogRmluZCBhbiB1bnVzZWQgcmFuZ2Ugb2YgdmlydHVhbCBwYWdlIGFkZHJlc3NlcyBvZiBhdCBsZWFzdApAQCAtMjAyNSwzMyAmIzQzOzIwMzEsMjEgQEAgY29uc3QgY2hhciAqZXhpdF9yZWFzb25fc3RyKHVuc2lnbmVkIGludCBleGl0X3JlYXNvbikKIH0KIAogLyoKLSAqIFBoeXNpY2FsIENvbnRpZ3VvdXMgUGFnZSBBbGxvY2F0b3IKLSAqCi0gKiBJbnB1dCBBcmdzOgotICogICB2bSAtIFZpcnR1YWwgTWFjaGluZQotICogICBudW0gLSBudW1iZXIgb2YgcGFnZXMKLSAqICAgbWluX2dwYSAtIFBoeXNpY2FsIGFkZHJlc3MgbWluaW11bQotICogICBtZW1zbG90IC0gTWVtb3J5IHJlZ2lvbiB0byBhbGxvY2F0ZSBwYWdlIGZyb20KLSAqICAgcHJvdGVjdGVkIC0gVHJ1ZSBpZiB0aGUgcGFnZXMgd2lsbCBiZSB1c2VkIGFzIHByb3RlY3RlZC9wcml2YXRlIG1lbW9yeQomIzQzOyAqIEFsbG9jYXRlIGNvbnRpZ3VvdXMgKGd1ZXN0KSBwaHlzaWNhbCBwYWdlcyBpbiBhIGdpdmVuIG1lbW9yeSByZWdpb24sIGF0IG9yCiYjNDM7ICogdGhlIG1pbmltdW0gc3BlY2lmaWMgR1BBLiAgSWYgdGhlIG1lbW9yeSBpcyBwcm90ZWN0ZWQvcHJpdmF0ZSwgYWxzbyBhZGQgdGhlCiYjNDM7ICogYWxsb2NhdGUgcGFnZXMgdG8gdGhlIHJlZ2lvbiYjMzk7cyBzZXQgb2YgcHJvdGVjdGVkIHBhZ2VzLCBlLmcuIHNvIHRoYXQgYXJjaAomIzQzOyAqIGNvZGUga25vd3Mgd2hpY2ggcGFnZXMgbmVlZCB0byBiZSBlbmNyeXB0ZWQgd2hlbiBsYXVuY2hpbmcgdGhlIFZNLgogICoKLSAqIE91dHB1dCBBcmdzOiBOb25lCi0gKgotICogUmV0dXJuOgotICogICBTdGFydGluZyBwaHlzaWNhbCBhZGRyZXNzCi0gKgotICogV2l0aGluIHRoZSBWTSBzcGVjaWZpZWQgYnkgdm0sIGxvY2F0ZXMgYSByYW5nZSBvZiBhdmFpbGFibGUgcGh5c2ljYWwKLSAqIHBhZ2VzIGF0IG9yIGFib3ZlIG1pbl9ncGEuIElmIGZvdW5kLCB0aGUgcGFnZXMgYXJlIG1hcmtlZCBhcyBpbiB1c2UKLSAqIGFuZCB0aGVpciBiYXNlIGFkZHJlc3MgaXMgcmV0dXJuZWQuIEEgVEVTVF9BU1NFUlQgZmFpbHVyZSBvY2N1cnMgaWYKLSAqIG5vdCBlbm91Z2ggcGFnZXMgYXJlIGF2YWlsYWJsZSBhdCBvciBhYm92ZSBtaW5fZ3BhLgomIzQzOyAqIE5vdGUsIHN1Y2Nlc3MgaXMgZ3VhcmFudGVlZCEKICAqLwotZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sCi0JCQkgICBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdCwKLQkJCSAgIGJvb2wgcHJvdGVjdGVkKQomIzQzO2dwYV90IF9fX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcywgZ3BhX3QgbWluX2dwYSwKJiM0MzsJCQkgICAgIHUzMiBtZW1zbG90LCBib29sIHByb3RlY3RlZCwgYm9vbCBuYXR1cmFsbHlfYWxpZ25lZCkKIHsKJiM0MzsJc2l6ZV90IGFsaWdubWVudCA9IG5hdHVyYWxseV9hbGlnbmVkID8gbnJfcGFnZXMgOiAxOwogCXN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uOwogCXNwYXJzZWJpdF9pZHhfdCBwZywgYmFzZTsKIAotCVRFU1RfQVNTRVJUKG51bSAmZ3Q7IDAsICYjMzQ7TXVzdCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZSYjMzQ7KTsKJiM0MzsJVEVTVF9BU1NFUlQobnJfcGFnZXMsICYjMzQ7TXVzdCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZSYjMzQ7KTsKIAogCVRFU1RfQVNTRVJUKChtaW5fZ3BhICUgdm0tJmd0O3BhZ2Vfc2l6ZSkgPT0gMCwgJiMzNDtNaW4gcGh5c2ljYWwgYWRkcmVzcyAmIzM0OwogCQkmIzM0O25vdCBkaXZpc2libGUgYnkgcGFnZSBzaXplLlxuJiMzNDsKQEAgLTIwNjIsNDMgJiM0MzsyMDU2LDc4IEBAIGdwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLAogCVRFU1RfQVNTRVJUKCFwcm90ZWN0ZWQgfHwgcmVnaW9uLSZndDtwcm90ZWN0ZWRfcGh5X3BhZ2VzLAogCQkgICAgJiMzNDtSZWdpb24gZG9lc24mIzM5O3Qgc3VwcG9ydCBwcm90ZWN0ZWQgbWVtb3J5JiMzNDspOwogCi0JYmFzZSA9IHBnID0gbWluX2dwYSAmZ3Q7Jmd0OyB2bS0mZ3Q7cGFnZV9zaGlmdDsKLQlkbyB7Ci0JCWZvciAoOyBwZyAmbHQ7IGJhc2UgJiM0MzsgbnVtOyAmIzQzOyYjNDM7cGcpIHsKLQkJCWlmICghc3BhcnNlYml0X2lzX3NldChyZWdpb24tJmd0O3VudXNlZF9waHlfcGFnZXMsIHBnKSkgewotCQkJCWJhc2UgPSBwZyA9IHNwYXJzZWJpdF9uZXh0X3NldChyZWdpb24tJmd0O3VudXNlZF9waHlfcGFnZXMsIHBnKTsKLQkJCQlicmVhazsKLQkJCX0KJiM0MzsJYmFzZSA9IG1pbl9ncGEgJmd0OyZndDsgdm0tJmd0O3BhZ2Vfc2hpZnQ7CiYjNDM7YWdhaW46CiYjNDM7CWJhc2UgPSBBTElHTihiYXNlLCBhbGlnbm1lbnQpOwomIzQzOwlmb3IgKHBnID0gYmFzZTsgcGcgJmx0OyBiYXNlICYjNDM7IG5yX3BhZ2VzOyAmIzQzOyYjNDM7cGcpIHsKJiM0MzsJCWlmICghc3BhcnNlYml0X2lzX3NldChyZWdpb24tJmd0O3VudXNlZF9waHlfcGFnZXMsIHBnKSkgewomIzQzOwkJCWJhc2UgPSBzcGFyc2ViaXRfbmV4dF9zZXQocmVnaW9uLSZndDt1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7CiYjNDM7CQkJaWYgKCFiYXNlKQomIzQzOwkJCQlnb3RvIGVub21lbTsKJiM0MzsJCQlnb3RvIGFnYWluOwogCQl9Ci0JfSB3aGlsZSAocGcgJmFtcDsmYW1wOyBwZyAhPSBiYXNlICYjNDM7IG51bSk7Ci0KLQlpZiAocGcgPT0gMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtObyBndWVzdCBwaHlzaWNhbCBwYWdlIGF2YWlsYWJsZSwgJiMzNDsKLQkJCSYjMzQ7bWluX2dwYTogMHglbHggcGFnZV9zaXplOiAweCV4IG1lbXNsb3Q6ICV1XG4mIzM0OywKLQkJCW1pbl9ncGEsIHZtLSZndDtwYWdlX3NpemUsIG1lbXNsb3QpOwotCQlmcHV0cygmIzM0Oy0tLS0gdm0gZHVtcCAtLS0tXG4mIzM0Oywgc3RkZXJyKTsKLQkJdm1fZHVtcChzdGRlcnIsIHZtLCAyKTsKLQkJYWJvcnQoKTsKIAl9CiAKLQlmb3IgKHBnID0gYmFzZTsgcGcgJmx0OyBiYXNlICYjNDM7IG51bTsgJiM0MzsmIzQzO3BnKSB7CiYjNDM7CWZvciAocGcgPSBiYXNlOyBwZyAmbHQ7IGJhc2UgJiM0MzsgbnJfcGFnZXM7ICYjNDM7JiM0MztwZykgewogCQlzcGFyc2ViaXRfY2xlYXIocmVnaW9uLSZndDt1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7CiAJCWlmIChwcm90ZWN0ZWQpCiAJCQlzcGFyc2ViaXRfc2V0KHJlZ2lvbi0mZ3Q7cHJvdGVjdGVkX3BoeV9wYWdlcywgcGcpOwogCX0KIAogCXJldHVybiBiYXNlICogdm0tJmd0O3BhZ2Vfc2l6ZTsKJiM0MzsKJiM0Mztlbm9tZW06CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O05vIGd1ZXN0IHBoeXNpY2FsIHBhZ2UgYXZhaWxhYmxlLCBtaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcbiYjMzQ7LAomIzQzOwkJbWluX2dwYSwgdm0tJmd0O3BhZ2Vfc2l6ZSwgbWVtc2xvdCk7CiYjNDM7CWZwdXRzKCYjMzQ7LS0tLSB2bSBkdW1wIC0tLS1cbiYjMzQ7LCBzdGRlcnIpOwomIzQzOwl2bV9kdW1wKHN0ZGVyciwgdm0sIDIpOwomIzQzOwlhYm9ydCgpOwomIzQzOwlfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsKIH0KIAotZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KQomIzQzO19fd2VhayBib29sIGt2bV9hcmNoX25lZWRzX25hdHVyYWxseV9hbGlnbmVkX3BhZ2VfdGFibGVzKHZvaWQpCiB7Ci0JcmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMSwgbWluX2dwYSwgbWVtc2xvdCk7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAotZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSkKJiM0MztncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLAomIzQzOwkJCSAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLCBib29sIHByb3RlY3RlZCkKIHsKLQlyZXR1cm4gdm1fcGh5X3BhZ2VfYWxsb2Modm0sIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUiwKLQkJCQkgdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fUFRdKTsKJiM0MzsJc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb24gPSB2bV9nZXRfbWVtX3JlZ2lvbih2bSwgdHlwZSk7CiYjNDM7CWJvb2wgbmF0dXJhbGx5X2FsaWduZWQgPSBmYWxzZTsKJiM0MzsJZ3BhX3QgbWluX2dwYTsKJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQocmVnaW9uLCAmIzM0O05vIHJlZ2lvbiBmb3IgdHlwZSAmIzM5OyV1JiMzOTssIG1lbXNsb3QgJiMzOTsldSYjMzk7JiMzNDssCiYjNDM7CQkgICAgdHlwZSwgdm0tJmd0O21lbXNsb3RzW3R5cGVdKTsKJiM0MzsKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgTUVNX1JFR0lPTl9DT0RFOgomIzQzOwljYXNlIE1FTV9SRUdJT05fREFUQToKJiM0MzsJY2FzZSBNRU1fUkVHSU9OX1RFU1RfREFUQToKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiB0aGUgcmVnaW9uIGlzIGJhY2tlZCBieSB0aGUgZGVmYXVsdCBtZW1zbG90IChpZD0wKSwgdXNlCiYjNDM7CQkgKiBzZWxmdGVzdHMmIzM5OyBoYXJkY29kZWQgbWluaW11bSBQRk4sIG90aGVyd2lzZSB1c2UgdGhlIGJhc2Ugb2YKJiM0MzsJCSAqIHRoZSBjdXN0b20gbWVtb3J5IHNsb3QgdGhhdCBiYWNrcyB0aGUgcmVnaW9uLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIXZtLSZndDttZW1zbG90c1t0eXBlXSkKJiM0MzsJCQltaW5fZ3BhID0gS1ZNX1VUSUxfTUlOX1BGTiAqIHZtLSZndDtwYWdlX3NpemU7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWluX2dwYSA9IHJlZ2lvbi0mZ3Q7cmVnaW9uLmd1ZXN0X3BoeXNfYWRkcjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1FTV9SRUdJT05fUFQ6CiYjNDM7CQltaW5fZ3BhID0gS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSOwomIzQzOwkJbmF0dXJhbGx5X2FsaWduZWQgPSBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcygpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUVNX1JFR0lPTl9URVNUX0VYVFJBOgomIzQzOwkJbWluX2dwYSA9IHJlZ2lvbi0mZ3Q7cmVnaW9uLmd1ZXN0X3BoeXNfYWRkcjsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJVEVTVF9GQUlMKCYjMzQ7SW52YWxpZCBtZW1vcnkgcmVnaW9uIHR5cGUgJiMzOTsldSYjMzk7JiMzNDssIHR5cGUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIF9fX192bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLCBtaW5fZ3BhLCB2bS0mZ3Q7bWVtc2xvdHNbdHlwZV0sCiYjNDM7CQkJCSAgICAgIHByb3RlY3RlZCwgbmF0dXJhbGx5X2FsaWduZWQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuYwppbmRleCA0N2JiZGUzZTIwNWEwLi5mY2Q0MWJjNmZiZGFlIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuYwpAQCAtOSw3ICYjNDM7OSw2IEBACiAjaW5jbHVkZSAmIzM0O3Byb2Nlc3Nvci5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dWNhbGxfY29tbW9uLmgmIzM0OwogCi0jZGVmaW5lIExPT05HQVJDSF9QQUdFX1RBQkxFX1BIWVNfTUlOCQkweDIwMDAwMAogI2RlZmluZSBMT09OR0FSQ0hfR1VFU1RfU1RBQ0tfVkFERFJfTUlOCQkweDIwMDAwMAogCiBzdGF0aWMgZ3BhX3QgaW52YWxpZF9wZ3RhYmxlWzRdOwpAQCAtNTcsOSAmIzQzOzU2LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKQogCWNoaWxkID0gdGFibGUgPSAwOwogCWZvciAoaSA9IDA7IGkgJmx0OyB2bS0mZ3Q7bW11LnBndGFibGVfbGV2ZWxzOyBpJiM0MzsmIzQzOykgewogCQlpbnZhbGlkX3BndGFibGVbaV0gPSBjaGlsZDsKLQkJdGFibGUgPSB2bV9waHlfcGFnZV9hbGxvYyh2bSwgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU4sCi0JCQkJdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fUFRdKTsKLQkJVEVTVF9BU1NFUlQodGFibGUsICYjMzQ7RmFpbCB0byBhbGxvY2F0ZSBwYWdlIHRhbGUgYXQgbGV2ZWwgJWRcbiYjMzQ7LCBpKTsKJiM0MzsJCXRhYmxlID0gdm1fYWxsb2NfcGFnZV90YWJsZSh2bSk7CiAJCXZpcnRfc2V0X3BndGFibGUodm0sIHRhYmxlLCBjaGlsZCk7CiAJCWNoaWxkID0gdGFibGU7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKaW5kZXggZGVkNTQyOWYzNDQ4My4uYzE3NWRjZDE0MTE0NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCkBAIC02OSw5ICYjNDM7NjksNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pCiAJaWYgKHZtLSZndDttbXUucGdkX2NyZWF0ZWQpCiAJCXJldHVybjsKIAotCXZtLSZndDttbXUucGdkID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywKLQkJCQkJIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUiwKLQkJCQkJIHZtLSZndDttZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7CiYjNDM7CXZtLSZndDttbXUucGdkID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgbnJfcGFnZXMpOwogCXZtLSZndDttbXUucGdkX2NyZWF0ZWQgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmMKaW5kZXggYTlhZGIzNzgyYjM1Mi4uMzNmNDlkNzQzYjVmZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuYwpAQCAtMjAsOSAmIzQzOzIwLDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKQogCWlmICh2bS0mZ3Q7bW11LnBnZF9jcmVhdGVkKQogCQlyZXR1cm47CiAKLQlncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIFBBR0VTX1BFUl9SRUdJT04sCi0JCQkJICAgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLAotCQkJCSAgIHZtLSZndDttZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7CiYjNDM7CWdwYSA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIFBBR0VTX1BFUl9SRUdJT04pOwogCW1lbXNldChhZGRyX2dwYTJodmEodm0sIGdwYSksIDB4ZmYsIFBBR0VTX1BFUl9SRUdJT04gKiB2bS0mZ3Q7cGFnZV9zaXplKTsKIAogCXZtLSZndDttbXUucGdkID0gZ3BhOwpAQCAtMzgsOCAmIzQzOzM2LDcgQEAgc3RhdGljIHU2NCB2aXJ0X2FsbG9jX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHJpKQogewogCXU2NCB0YWRkcjsKIAotCXRhZGRyID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAgcmkgJmx0OyA0ID8gUEFHRVNfUEVSX1JFR0lPTiA6IDEsCi0JCQkJICAgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLCAwKTsKJiM0MzsJdGFkZHIgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCByaSAmbHQ7IDQgPyBQQUdFU19QRVJfUkVHSU9OIDogMSk7CiAJbWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgdGFkZHIpLCAweGZmLCBQQUdFU19QRVJfUkVHSU9OICogdm0tJmd0O3BhZ2Vfc2l6ZSk7CiAKIAlyZXR1cm4gKHRhZGRyICZhbXA7IFJFR0lPTl9FTlRSWV9PUklHSU4pCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jCmluZGV4IGQzMWZhODFlYTA3NTYuLjQ3OWU5YTQ4MTY4N2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jCkBAIC01MjksNyAmIzQzOzUyOSwxMCBAQCB2b2lkIHRkcF9pZGVudGl0eV9tYXBfZGVmYXVsdF9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSkKIAogCS8qIE9ubHkgbWVtc2xvdCAwIGlzIG1hcHBlZCBoZXJlLCBlbnN1cmUgaXQmIzM5O3MgdGhlIG9ubHkgb25lIGJlaW5nIHVzZWQgKi8KIAlmb3IgKHMgPSAwOyBzICZsdDsgTlJfTUVNX1JFR0lPTlM7IHMmIzQzOyYjNDM7KQotCQlURVNUX0FTU0VSVF9FUSh2bS0mZ3Q7bWVtc2xvdHNbc10sIDApOwomIzQzOwkJVEVTVF9BU1NFUlQoIXZtLSZndDttZW1zbG90c1tzXSB8fAomIzQzOwkJCSAgICB2bS0mZ3Q7bWVtc2xvdHNbc10gPT0gS1ZNX0lOVkFMSURfTUVNU0xPVCwKJiM0MzsJCQkgICAgJiMzNDtVbmhhbmRsZWQgbWVtc2xvdCAmIzM5OyV1JiMzOTsgZm9yIHR5cGUgJiMzOTsldSYjMzk7JiMzNDssCiYjNDM7CQkJICAgIHZtLSZndDttZW1zbG90c1tzXSwgcyk7CiAKIAlpID0gKHJlZ2lvbi0mZ3Q7cmVnaW9uLmd1ZXN0X3BoeXNfYWRkciAmZ3Q7Jmd0OyB2bS0mZ3Q7cGFnZV9zaGlmdCkgLSAxOwogCWxhc3QgPSBpICYjNDM7IChyZWdpb24tJmd0O3JlZ2lvbi5tZW1vcnlfc2l6ZSAmZ3Q7Jmd0OyB2bS0mZ3Q7cGFnZV9zaGlmdCk7CkBAIC0xNDY1LDEzICYjNDM7MTQ2OCwxMyBAQCBib29sIGt2bV9hcmNoX2hhc19kZWZhdWx0X2lycWNoaXAodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLAomIzQzO3ZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgc21yYW1fZ3BhLAogCQkgY29uc3Qgdm9pZCAqc21pX2hhbmRsZXIsIHNpemVfdCBoYW5kbGVyX3NpemUpCiB7Ci0Jdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgc21yYW1fZ3BhLAotCQkJCSAgICBTTVJBTV9NRU1TTE9ULCBTTVJBTV9QQUdFUywgMCk7Ci0JVEVTVF9BU1NFUlQodm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBTTVJBTV9QQUdFUywgc21yYW1fZ3BhLAotCQkJCSAgICAgICBTTVJBTV9NRU1TTE9UKSA9PSBzbXJhbV9ncGEsCiYjNDM7CXZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsCiYjNDM7CQkJICAgICAgIHNtcmFtX2dwYSwgU01SQU1fTUVNU0xPVCwgU01SQU1fUEFHRVMpOwomIzQzOwomIzQzOwlURVNUX0FTU0VSVCh2bV9waHlfcGFnZXNfYWxsb2Modm0sIFNNUkFNX1BBR0VTLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpID09IHNtcmFtX2dwYSwKIAkJICAgICYjMzQ7Q291bGQgbm90IGFsbG9jYXRlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgU01SQU0mIzM0Oyk7CiAKIAltZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCBzbXJhbV9ncGEpLCAweDAsIFNNUkFNX1NJWkUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYwppbmRleCBlMTI5OTYxMWJlMzIyLi44NDRlYTliN2JiNDFjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYwpAQCAtMzM5LDcgJiM0MzszMzksOCBAQCBzdGF0aWMgYm9vbCBwcmVwYXJlX3ZtKHN0cnVjdCB2bV9kYXRhICpkYXRhLCBpbnQgbnNsb3RzLCB1NjQgKm1heHNsb3RzLAogCQlpZiAoc2xvdCA9PSBkYXRhLSZndDtuc2xvdHMpCiAJCQlucGFnZXMgJiM0Mzs9IHJlbXBhZ2VzOwogCi0JCWdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyhkYXRhLSZndDt2bSwgbnBhZ2VzLCBndWVzdF9hZGRyLCBzbG90KTsKJiM0MzsJCWdwYSA9IF9fX192bV9waHlfcGFnZXNfYWxsb2MoZGF0YS0mZ3Q7dm0sIG5wYWdlcywgZ3Vlc3RfYWRkciwgc2xvdCwKJiM0MzsJCQkJCSAgICAgZmFsc2UsIGZhbHNlKTsKIAkJVEVTVF9BU1NFUlQoZ3BhID09IGd1ZXN0X2FkZHIsCiAJCQkgICAgJiMzNDt2bV9waHlfcGFnZXNfYWxsb2MoKSBmYWlsZWQmIzM0Oyk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMKaW5kZXggMTVkODFiMmVkN2FkMy4uNzMzODdjYzNiY2E3NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMKQEAgLTEwMiwyNCAmIzQzOzEwMiwxNyBAQCBzdGF0aWMgdm9pZCBndWVzdF9kaXJ0eV90ZXN0X2RhdGEodm9pZCkKIAogc3RhdGljIHZvaWQgY3JlYXRlX21haW5fbWVtc2xvdChzdHJ1Y3Qga3ZtX3ZtICp2bSkKIHsKLQlpbnQgaTsKLQogCXZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsIDAsIE1BSU5fUEFHRV9DT1VOVCwgMCk7Ci0JLyogc2V0IHRoZSBhcnJheSBvZiBtZW1zbG90cyB0byB6ZXJvIGxpa2UgX192bV9jcmVhdGUgZG9lcyAqLwotCWZvciAoaSA9IDA7IGkgJmx0OyBOUl9NRU1fUkVHSU9OUzsgaSYjNDM7JiM0MzspCi0JCXZtLSZndDttZW1zbG90c1tpXSA9IDA7CiYjNDM7CV9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0NPREUsIDApOwomIzQzOwlfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgMCk7CiYjNDM7CV9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIDApOwogfQogCiBzdGF0aWMgdm9pZCBjcmVhdGVfdGVzdF9tZW1zbG90KHN0cnVjdCBrdm1fdm0gKnZtKQogewotCXZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwKLQkJCQkgICAgVk1fTUVNX1NSQ19BTk9OWU1PVVMsCi0JCQkJICAgIFRFU1RfREFUQV9TVEFSVF9HRk4gJmx0OyZsdDsgdm0tJmd0O3BhZ2Vfc2hpZnQsCi0JCQkJICAgIFRFU1RfREFUQV9NRU1TTE9ULAotCQkJCSAgICBURVNUX0RBVEFfUEFHRV9DT1VOVCwKLQkJCQkgICAgMAotCQkJCSAgICk7Ci0Jdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fVEVTVF9EQVRBXSA9IFRFU1RfREFUQV9NRU1TTE9UOwomIzQzOwl2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsCiYjNDM7CQkJICAgICAgIFRFU1RfREFUQV9TVEFSVF9HRk4gJmx0OyZsdDsgdm0tJmd0O3BhZ2Vfc2hpZnQsCiYjNDM7CQkJICAgICAgIFRFU1RfREFUQV9NRU1TTE9ULCBURVNUX0RBVEFfUEFHRV9DT1VOVCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNyZWF0ZV9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jCmluZGV4IGYzODM5Mjg0YWMwODEuLmNkMjZjYzFhZWQ4MDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuYwpAQCAtMzYsNyAmIzQzOzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdCh2b2lkKQogCX07CiAKIAl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfY29kZSk7Ci0JbWVtID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCA0MDk2ICogNDIsIDApOwomIzQzOwltZW0gPSBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCA0MDk2ICogNDIsIDAsIGZhbHNlLCBmYWxzZSk7CiAKIAlyb3V0aW5nID0ga3ZtX2dzaV9yb3V0aW5nX2NyZWF0ZSgpOwogCXJvdXRpbmctJmd0O25yID0gMTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jCmluZGV4IGRmZmU5NjU0ZjQ1YmQuLmJmYTVhYzhjZTAyOTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYwpAQCAtMTE2LDE1ICYjNDM7MTE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpzcGF3bl92bShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LCBwdGhyZWFkX3QgKnZjcHVfdGhyZWFkLAogCiAJdm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBndWVzdF9jb2RlKTsKIAotCXZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVNfVEhQLAotCQkJCSAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULAotCQkJCSAgICBNRU1fUkVHSU9OX1NJWkUgLyBnZXRwYWdlc2l6ZSgpLCAwKTsKJiM0MzsJdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsCiYjNDM7CQkJICAgICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsCiYjNDM7CQkJICAgICAgIE1FTV9SRUdJT05fU0laRSAvIGdldHBhZ2VzaXplKCkpOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBhbmQgbWFwIHR3byBwYWdlcyBzbyB0aGF0IHRoZSBHUEEgYWNjZXNzZWQgYnkgZ3Vlc3RfY29kZSgpCiAJICogc3RheXMgdmFsaWQgYWNyb3NzIHRoZSBtZW1zbG90IG1vdmUuCiAJICovCi0JZ3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9UKTsKJiM0MzsJZ3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCVRFU1RfQVNTRVJUKGdwYSA9PSBNRU1fUkVHSU9OX0dQQSwgJiMzNDtGYWlsZWQgdm1fcGh5X3BhZ2VzX2FsbG9jXG4mIzM0Oyk7CiAKIAl2aXJ0X21hcCh2bSwgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fR1BBLCAyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jCmluZGV4IDNkY2E4NWU5NTQ3ODEuLjhkMTgyMjcxN2FiZGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuYwpAQCAtNjIsMTEgJiM0Mzs2MiwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCVRFU1RfQVNTRVJUKHJjLCAmIzM0O0tWTV9DQVBfRVhJVF9PTl9FTVVMQVRJT05fRkFJTFVSRSBpcyB1bmF2YWlsYWJsZSYjMzQ7KTsKIAl2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYSVRfT05fRU1VTEFUSU9OX0ZBSUxVUkUsIDEpOwogCi0Jdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywKLQkJCQkgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCwKLQkJCQkgICAgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFLCAwKTsKJiM0MzsJdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywKJiM0MzsJCQkgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCwKJiM0MzsJCQkgICAgICAgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFKTsKJiM0MzsKIAlncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIE1FTV9SRUdJT05fU0laRSAvIFBBR0VfU0laRSwKLQkJCQkgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCk7CiYjNDM7CQkJCSBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCVRFU1RfQVNTRVJUKGdwYSA9PSBNRU1fUkVHSU9OX0dQQSwgJiMzNDtGYWlsZWQgdm1fcGh5X3BhZ2VzX2FsbG9jJiMzNDspOwogCXZpcnRfbWFwKHZtLCBNRU1fUkVHSU9OX0dWQSwgTUVNX1JFR0lPTl9HUEEsIDEpOwogCWh2YSA9IGFkZHJfZ3BhMmh2YSh2bSwgTUVNX1JFR0lPTl9HUEEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI1OQoJCQkJCQkJb3V0cHV0OiA3NwoJCQkJCQkJdGhvdWdodHM6IDY2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoaXMgZGlmZi4gQWxsIHRoZSBjaGFuZ2VzIGFyZSBuZWF0bHkgY29udGFpbmVkIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AuIFRoaXMgaXMgZ29vZCwgaXQgc2ltcGxpZmllcyB0aGUgYXNzZXNzbWVudC4gTm93LCBsZXQmIzM5O3MgcmVmcmVzaCBvdXIgbWVtb3J5IG9uIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFNwZWNpZmljYWxseSwgc2VjdGlvbiAyOiAmIzM0O1dIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSYjMzQ7LiBUaGUga2V5IGhlcmUgaXMgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBXZSYjMzk7cmUgbG9va2luZyBmb3IgbW9kaWZpY2F0aW9ucyB0aGF0IGZhbGwgKnN0cmljdGx5KiBpbnRvIGEgc3BlY2lmaWMgY2F0ZWdvcnkgd2hlcmUgZnV6emluZyBpcyBkZWVtZWQgdW5uZWNlc3NhcnkuCgpUaGUgZ3VpZGVsaW5lIHNwZWNpZmljYWxseSBjYWxscyBvdXQgJiMzNDtVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLi4uIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OyBCaW5nby4gQWxsIHRoZSBmaWxlcyBsaXN0ZWQg4oCTIHRoZSBgcGFnZV9mYXVsdF90ZXN0LmNgLCBgdmdpY19scGlfc3RyZXNzLmNgLCBhbGwgdGhlIGluY2x1ZGVzIGFuZCBsaWJyYXJ5IGNvZGUsIGFuZCB0aGUgdmFyaW91cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdGVzdHMg4oCTIHRoZXkgYWxsIHJlc2lkZSB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLiBUaGF0JiMzOTtzICpwcmVjaXNlbHkqIHVzZXItc3BhY2Ugc2VsZi10ZXN0IGNvZGUsIGFuZCBpdCYjMzk7cyBub3QgZ29pbmcgdG8gdG91Y2ggdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLiBUaGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gTm8ga2VybmVsIG1vZGlmaWNhdGlvbnMsIG5vIGZ1enppbmcgcmVxdWlyZWQuCgpUaGVyZWZvcmUsIFdvcnRoRnV6emluZyBpcyBkZWZpbml0aXZlbHkgYGZhbHNlYC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIFdlIG5lZWQgdG8gc2V0IHRoZSBwYXJhbWV0ZXJzIGxpa2Ugc286CiogICBXb3J0aEZ1enppbmc6IGBmYWxzZWAKKiAgIFJlYXNvbmluZzogJiMzNDtBbGwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgcmVzdHJpY3RlZCB0byB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBkbyBub3QgbW9kaWZ5IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7CiogICBGb2N1c1N5bWJvbHM6IFxbIF0gKGVtcHR5IGxpc3QpCiogICBFbmFibGVDb25maWdzOiBcWyBdIChlbXB0eSBsaXN0KQoKRG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7QWxsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIHJlc3RyaWN0ZWQgdG8gdXNlci1zcGFjZSBLVk0gc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8sIHdoaWNoIGRvIG5vdCBtb2RpZnkgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O0FsbCBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzIGFyZSByZXN0cmljdGVkIHRvIHVzZXItc3BhY2UgS1ZNIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLCB3aGljaCBkbyBub3QgbW9kaWZ5IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMzoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTM6MTY6MzAuMzk5MjAzNDYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNjQ0OTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiQWxsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIHJlc3RyaWN0ZWQgdG8gdXNlci1zcGFjZSBLVk0gc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8sIHdoaWNoIGRvIG5vdCBtb2RpZnkgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoxNjozMC4zOTkyMDk0MzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjI4MjY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM3YTMwNmQ3ZTg2OTk3MDRlMTZiMGJkZGQ3NWU1YTY5NDdkNDhjMjlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAxMzoxNjoyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcXG5pbmRleCA2YmIzZDgyOTA2YjIyLi5iMGUzZmM4Y2Q3NmFjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuY1xcbkBAIC01OTcsMTggKzU5NywxNiBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IHRlc3RfcGFyYW1zICpwKVxcbiBcXG4gXFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCxcXG4gXFx0XFx0XFx0XFx0ICAgIENPREVfQU5EX0RBVEFfTUVNU0xPVCwgY29kZV9ucGFnZXMsIDApO1xcbi1cXHR2bS1cXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9DT0RFXSA9IENPREVfQU5EX0RBVEFfTUVNU0xPVDtcXG4tXFx0dm0tXFx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fREFUQV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7XFxuLVxcbi1cXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtXFx1MDAzZXNyY190eXBlLCBkYXRhX2dwYSAtIHB0X3NpemUsXFxuLVxcdFxcdFxcdFxcdCAgICBQQUdFX1RBQkxFX01FTVNMT1QsIHB0X3NpemUgLyBndWVzdF9wYWdlX3NpemUsXFxuLVxcdFxcdFxcdFxcdCAgICBwLVxcdTAwM2V0ZXN0X2Rlc2MtXFx1MDAzZXB0X21lbXNsb3RfZmxhZ3MpO1xcbi1cXHR2bS1cXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0gPSBQQUdFX1RBQkxFX01FTVNMT1Q7XFxuLVxcbi1cXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtXFx1MDAzZXNyY190eXBlLCBkYXRhX2dwYSwgVEVTVF9EQVRBX01FTVNMT1QsXFxuLVxcdFxcdFxcdFxcdCAgICBkYXRhX3NpemUgLyBndWVzdF9wYWdlX3NpemUsXFxuLVxcdFxcdFxcdFxcdCAgICBwLVxcdTAwM2V0ZXN0X2Rlc2MtXFx1MDAzZWRhdGFfbWVtc2xvdF9mbGFncyk7XFxuLVxcdHZtLVxcdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1RFU1RfREFUQV0gPSBURVNUX0RBVEFfTUVNU0xPVDtcXG4rXFx0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTtcXG4rXFx0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTtcXG4rXFxuK1xcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgcC1cXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhIC0gcHRfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0IFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0IHAtXFx1MDAzZXRlc3RfZGVzYy1cXHUwMDNlcHRfbWVtc2xvdF9mbGFncyk7XFxuK1xcbitcXHRfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCBwLVxcdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEsXFxuK1xcdFxcdFxcdFxcdCBURVNUX0RBVEFfTUVNU0xPVCwgZGF0YV9zaXplIC8gZ3Vlc3RfcGFnZV9zaXplLFxcbitcXHRcXHRcXHRcXHQgcC1cXHUwMDNldGVzdF9kZXNjLVxcdTAwM2VkYXRhX21lbXNsb3RfZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBzZXR1cF91Y2FsbChzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXFxuaW5kZXggOWE2OWM0MzlhMGY4Zi4uNDVhODdiYTVhNzM3YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcXG5AQCAtMjMsNyArMjMsNiBAQFxcbiAjZGVmaW5lIEdJQ19MUElfT0ZGU0VUXFx0ODE5MlxcbiBcXG4gc3RhdGljIHNpemVfdCBucl9pdGVyYXRpb25zID0gMTAwMDtcXG4tc3RhdGljIGdwYV90IGdwYV9iYXNlO1xcbiBcXG4gc3RhdGljIHN0cnVjdCBrdm1fdm0gKnZtO1xcbiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XFxuQEAgLTE0Myw2ICsxNDIsNyBAQCBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHNpemVfdCBucl9scGlzKVxcbiBcXG4gc3RhdGljIHZvaWQgc2V0dXBfbWVtc2xvdCh2b2lkKVxcbiB7XFxuK1xcdGdwYV90IGdwYV9iYXNlO1xcbiBcXHRzaXplX3QgcGFnZXM7XFxuIFxcdHNpemVfdCBzejtcXG4gXFxuQEAgLTE2NCw4ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90KHZvaWQpXFxuIFxcbiBcXHRwYWdlcyA9IHN6IC8gdm0tXFx1MDAzZXBhZ2Vfc2l6ZTtcXG4gXFx0Z3BhX2Jhc2UgPSAoKHZtX2NvbXB1dGVfbWF4X2dmbih2bSkgKyAxKSAqIHZtLVxcdTAwM2VwYWdlX3NpemUpIC0gc3o7XFxuLVxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIGdwYV9iYXNlLFxcbi1cXHRcXHRcXHRcXHQgICAgVEVTVF9NRU1TTE9UX0lOREVYLCBwYWdlcywgMCk7XFxuK1xcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXFxuK1xcdFxcdFxcdCAgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYLCBwYWdlcyk7XFxuIH1cXG4gXFxuICNkZWZpbmUgTFBJX1BST1BfREVGQVVMVF9QUklPXFx0MHhhMFxcbkBAIC0xOTEsMjggKzE5MSwyNSBAQCBzdGF0aWMgdm9pZCBzZXR1cF90ZXN0X2RhdGEodm9pZClcXG4gXFx0Z3BhX3QgY21kcV9iYXNlO1xcbiBcXG4gXFx0dGVzdF9kYXRhLmRldmljZV90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdwYV9iYXNlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgVEVTVF9NRU1TTE9UX0lOREVYKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XFxuIFxcbiBcXHR0ZXN0X2RhdGEuY29sbGVjdGlvbl90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0Z3BhX2Jhc2UsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFRFU1RfTUVNU0xPVF9JTkRFWCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XFxuIFxcbi1cXHRjbWRxX2Jhc2UgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssIGdwYV9iYXNlLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgVEVTVF9NRU1TTE9UX0lOREVYKTtcXG4rXFx0Y21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xcbiBcXHR2aXJ0X21hcCh2bSwgY21kcV9iYXNlLCBjbWRxX2Jhc2UsIHBhZ2VzX3Blcl82NGspO1xcbiBcXHR0ZXN0X2RhdGEuY21kcV9iYXNlID0gY21kcV9iYXNlO1xcbiBcXHR0ZXN0X2RhdGEuY21kcV9iYXNlX3ZhID0gKHZvaWQgKiljbWRxX2Jhc2U7XFxuIFxcbiBcXHR0ZXN0X2RhdGEuaXR0X3RhYmxlcyA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayAqIG5yX2RldmljZXMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcXG4gXFxuIFxcdHRlc3RfZGF0YS5scGlfcHJvcF90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XFxuIFxcdGNvbmZpZ3VyZV9scGlzKCk7XFxuIFxcbiBcXHR0ZXN0X2RhdGEubHBpX3BlbmRfdGFibGVzID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrICogbnJfY3B1cyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcXG4gXFxuIFxcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCB0ZXN0X2RhdGEpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oXFxuaW5kZXggNWE3YTQ1NWI1Mzg3NS4uODliNGZjMmFmNzUxNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxcbkBAIC0zMyw2ICszMyw4IEBAXFxuIFxcbiAjZGVmaW5lIE5TRUNfUEVSX1NFQyAxMDAwMDAwMDAwTFxcbiBcXG4rI2RlZmluZSBLVk1fSU5WQUxJRF9NRU1TTE9UIFVJTlRfTUFYXFxuK1xcbiBzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24ge1xcbiBcXHRzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiByZWdpb247XFxuIFxcdHN0cnVjdCBzcGFyc2ViaXQgKnVudXNlZF9waHlfcGFnZXM7XFxuQEAgLTgwLDExICs4Miw0NSBAQCBzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb25zIHtcXG4gXFx0REVDTEFSRV9IQVNIVEFCTEUoc2xvdF9oYXNoLCA5KTtcXG4gfTtcXG4gXFxuKy8qXFxuKyAqIE1lbW9yeSByZWdpb24gdHlwZXMgYXJlIHBhc3NlZCB0byB2YXJpb3VzIHBhZ2UgYWxsb2NhdG9ycyB0byBjb21tdW5pY2F0ZVxcbisgKiB2YXJpb3VzIHByb3BlcnRpZXMgYW5kIG1ldGFkYXRhIHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24uICBOb3RlLCB0aGVcXG4rICogZGVzY3JpcHRpb25zIGJlbG93IGRlc2NyaWJlZCB0aGUgcHJpbWFyeSB1c2FnZSBvZiBlYWNoIHR5cGUuICBJbmRpdmlkdWFsXFxuKyAqIHRlc3RzIG1heSBhbGxvY2F0ZSBtZW1vcnkgZm9yIG90aGVyIHB1cnBvc2VzLlxcbisgKlxcbisgKiBCeSBkZWZhdWx0LCBhbGwgcmVnaW9ucyBleGNlcHQgVEVTVF9FWFRSQSBhcmUgbWFwcGVkIHRvIG1lbXNsb3QgJzAnLiAgVGhlXFxuKyAqIFRFWFRfRVhUUkEgcmVnaW9uIGlzIGxlZnQgdW5tYXBwZWQgYXMgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIG9ubHkgZm9yIHRlc3RcXG4rICogc3BlY2lmaWMgYWxsb2NhdGlvbnMsIGkuZS4gc2hvdWxkIG5ldmVyIGJlIHVzZWQgYnkgY29yZS9pbmZyYXN0cnVjdHVyZSBjb2RlLlxcbisgKiBUZXN0cyBjYW4gb3ZlcnJpZGUgdGhlIG1lbXNsb3QgZm9yIGFueSBvciBhbGwgdHlwZXMsIGUuZy4gc28gdGhhdCBhbGwgdGVzdFxcbisgKiBkYXRhIGlzIGFsbG9jYXRlZCBmcm9tIGEgY3VyYXRlZCBtZW1zbG90LlxcbisgKi9cXG4gZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHtcXG4rXFx0LypcXG4rXFx0ICogVGhlIENPREUgcmVnaW9uIGlzIHVzZWQgYnkgbGliL2VsZiB3aGVuIGxvYWRpbmcgdGhlIHRlc3QncyBjb2RlIGludG9cXG4rXFx0ICogZ3Vlc3QgbWVtb3J5LlxcbitcXHQgKi9cXG4gXFx0TUVNX1JFR0lPTl9DT0RFLFxcbitcXHQvKlxcbitcXHQgKiBUaGUgREFUQSByZWdpb24gaXMgdXNlZCB0byBhbGxvY2F0ZSBjb3JlIGRhdGEgc3RydWN0dXJlcywgZS5nLiB2Q1BVXFxuK1xcdCAqIHN0YWNrcywgVk0gZXhjZXB0aW9uIHRhYmxlcywgeDg2J3MgVFNTLCBldGMuXFxuK1xcdCAqL1xcbiBcXHRNRU1fUkVHSU9OX0RBVEEsXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBQVCByZWdpb24sIGEuay5hLiBQYWdlIFRhYmxlIHJlZ2lvbiwgaXMgdXNlZCB0byBhbGxvY2F0ZSBwYWdlXFxuK1xcdCAqIHRhYmxlIHBhZ2VzLlxcbitcXHQgKi9cXG4gXFx0TUVNX1JFR0lPTl9QVCxcXG4rXFx0LypcXG4rXFx0ICogVGhlIFRFU1RfREFUQSByZWdpb24gaXMgdXNlZCBmb3IgYWxsb2NhdGluZyB0ZXN0IGRhdGEgdGhhdCBpcyBlaXRoZXJcXG4rXFx0ICogdGVzdCBzcGVjaWZpYywgYW5kL29yIGlzbid0IGNvbnNpZGVyZWQgYSBcXFwiY29yZVxcXCIgZGF0YSBzdHJ1Y3R1cmUuXFxuK1xcdCAqL1xcbiBcXHRNRU1fUkVHSU9OX1RFU1RfREFUQSxcXG4rXFx0LypcXG4rXFx0ICogVGhlIFRFU1RfRVhUUkEgcmVnaW9uIGlzIGZvciBzcGVjaWFsIHNub3dmbGFrZXMsIHdoZXJlIGEgdGVzdCB3YW50c1xcbitcXHQgKiB0byBjcmVhdGUgYW5kIHVzZSBhIG9uZS1vZmYgbWVtc2xvdCwgd2l0aG91dCBpbXBhY3RpbmcgXFxcIm5vcm1hbFxcXCIgdGVzdFxcbitcXHQgKiBkYXRhIGFsbG9jYXRpb25zLlxcbitcXHQgKi9cXG4rXFx0TUVNX1JFR0lPTl9URVNUX0VYVFJBLFxcbiBcXHROUl9NRU1fUkVHSU9OUyxcXG4gfTtcXG4gXFxuQEAgLTEyNywxMSArMTYzLDYgQEAgc3RydWN0IGt2bV92bSB7XFxuIFxcbiBcXHRzdHJ1Y3Qga3ZtX2JpbmFyeV9zdGF0cyBzdGF0cztcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIEtWTSByZWdpb24gc2xvdHMuIFRoZXNlIGFyZSB0aGUgZGVmYXVsdCBtZW1zbG90cyB1c2VkIGJ5IHBhZ2VcXG4tXFx0ICogYWxsb2NhdG9ycywgZS5nLiwgbGliL2VsZiB1c2VzIHRoZSBtZW1zbG90c1tNRU1fUkVHSU9OX0NPREVdXFxuLVxcdCAqIG1lbXNsb3QuXFxuLVxcdCAqL1xcbiBcXHR1MzIgbWVtc2xvdHNbTlJfTUVNX1JFR0lPTlNdO1xcbiB9O1xcbiBcXG5AQCAtMTY5LDcgKzIwMCw4IEBAIG1lbXNsb3QycmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgbWVtc2xvdCk7XFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICp2bV9nZXRfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcXG4ge1xcbi1cXHRhc3NlcnQodHlwZSBcXHUwMDNjIE5SX01FTV9SRUdJT05TKTtcXG4rXFx0VEVTVF9BU1NFUlQodHlwZSBcXHUwMDNjIE5SX01FTV9SRUdJT05TLFxcbitcXHRcXHQgICAgXFxcIkludmFsaWQgbWVtb3J5IHJlZ2lvbiB0eXBlICcldSdcXFwiLCB0eXBlKTtcXG4gXFx0cmV0dXJuIG1lbXNsb3QycmVnaW9uKHZtLCB2bS1cXHUwMDNlbWVtc2xvdHNbdHlwZV0pO1xcbiB9XFxuIFxcbkBAIC03MDIsNiArNzM0LDM2IEBAIHZvaWQgdm1fbWVtX2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcXG4gXFx0XFx0Z3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcywgdTMyIGZsYWdzLFxcbiBcXHRcXHRpbnQgZ3Vlc3RfbWVtZmRfZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xcbiBcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiBzbG90KVxcbit7XFxuK1xcdFRFU1RfQVNTRVJUKHZtLVxcdTAwM2VtZW1zbG90c1t0eXBlXSA9PSBLVk1fSU5WQUxJRF9NRU1TTE9ULFxcbitcXHRcXHQgICAgXFxcIk1lbW9yeSByZWdpb24gdHlwZSAnJXUnIHdhcyBhbHJlYWR5IG92ZXJyaWRkZW4gd2l0aCBzbG90PSV1XFxcIixcXG4rXFx0XFx0ICAgIHR5cGUsIHZtLVxcdTAwM2VtZW1zbG90c1t0eXBlXSk7XFxuK1xcbitcXHR2bS1cXHUwMDNlbWVtc2xvdHNbdHlwZV0gPSBzbG90O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgZ3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHUzMiBmbGFncylcXG4re1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgdHlwZSwgc2xvdCk7XFxuK1xcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgc3JjX3R5cGUsIGdwYSwgc2xvdCwgbnBhZ2VzLCBmbGFncyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZ3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcylcXG4re1xcbitcXHRfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIHR5cGUsIHNyY190eXBlLCBncGEsIHNsb3QsIG5wYWdlcywgMCk7XFxuK31cXG4rXFxuICNpZm5kZWYgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4ge1xcbkBAIC05OTAsMjMgKzEwNTIsNDEgQEAgdm9pZCBrdm1fZ3NpX3JvdXRpbmdfd3JpdGUoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgKnJvdXRpbmcpO1xcbiBcXG4gY29uc3QgY2hhciAqZXhpdF9yZWFzb25fc3RyKHVuc2lnbmVkIGludCBleGl0X3JlYXNvbik7XFxuIFxcbi1ncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpO1xcbi1ncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSwgZ3BhX3QgbWluX2dwYSxcXG4tXFx0XFx0XFx0ICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkKTtcXG4tZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSk7XFxuK2Jvb2wga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXModm9pZCk7XFxuK1xcbitncGFfdCBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsIGdwYV90IG1pbl9ncGEsXFxuK1xcdFxcdFxcdCAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKTtcXG4rZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcXG4rXFx0XFx0XFx0ICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsIGJvb2wgcHJvdGVjdGVkKTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpXFxuK3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcXG4ge1xcbiBcXHQvKlxcbiBcXHQgKiBCeSBkZWZhdWx0LCBhbGxvY2F0ZSBtZW1vcnkgYXMgcHJvdGVjdGVkIGZvciBWTXMgdGhhdCBzdXBwb3J0XFxuIFxcdCAqIHByb3RlY3RlZCBtZW1vcnksIGFzIHRoZSBtYWpvcml0eSBvZiBtZW1vcnkgZm9yIHN1Y2ggVk1zIGlzXFxuIFxcdCAqIHByb3RlY3RlZCwgaS5lLiB1c2luZyBzaGFyZWQgbWVtb3J5IGlzIGVmZmVjdGl2ZWx5IG9wdC1pbi5cXG4gXFx0ICovXFxuLVxcdHJldHVybiBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnVtLCBtaW5fZ3BhLCBtZW1zbG90LFxcbitcXHRyZXR1cm4gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLCB0eXBlLFxcbiBcXHRcXHRcXHRcXHQgICAgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeSh2bSkpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGdwYV90IHZtX3BoeV9wYWdlX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLFxcbitcXHRcXHRcXHRcXHQgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcXG4re1xcbitcXHRyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAxLCB0eXBlKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMpXFxuK3tcXG4rXFx0cmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIE1FTV9SRUdJT05fUFQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGt2bV92bSAqdm0pXFxuK3tcXG4rXFx0cmV0dXJuIHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIDEpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBfX19fdm1fY3JlYXRlKCkgZG9lcyBLVk1fQ1JFQVRFX1ZNIGFuZCBsaXR0bGUgZWxzZS4gIF9fdm1fY3JlYXRlKCkgYWxzb1xcbiAgKiBsb2FkcyB0aGUgdGVzdCBiaW5hcnkgaW50byBndWVzdCBtZW1vcnkgYW5kIGNyZWF0ZXMgYW4gSVJRIGNoaXAgKHg4NiBvbmx5KS5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oXFxuaW5kZXggMmQxYWZhMDk4MTliMC4uMTVmYWFhMDYwMTI2MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcXG5AQCAtOCw3ICs4LDcgQEBcXG4gI2RlZmluZSBTTVJBTV9NRU1TTE9UXFx0KCgxIFxcdTAwM2NcXHUwMDNjIDE2KSB8IDEpXFxuICNkZWZpbmUgU01SQU1fUEFHRVNcXHQoU01SQU1fU0laRSAvIFBBR0VfU0laRSlcXG4gXFxuLXZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNtcmFtX2dwYSxcXG4rdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzbXJhbV9ncGEsXFxuIFxcdFxcdCBjb25zdCB2b2lkICpzbWlfaGFuZGxlciwgc2l6ZV90IGhhbmRsZXJfc2l6ZSk7XFxuIFxcbiB2b2lkIGluamVjdF9zbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcXG5pbmRleCAwMTMyNWJmNGQzNmZjLi4yZGNhYTJjNGEwMzgzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jXFxuQEAgLTExNSw5ICsxMTUsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pXFxuIFxcdGlmICh2bS1cXHUwMDNlbW11LnBnZF9jcmVhdGVkKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHR2bS1cXHUwMDNlbW11LnBnZCA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsXFxuLVxcdFxcdFxcdFxcdFxcdCBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsXFxuLVxcdFxcdFxcdFxcdFxcdCB2bS1cXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xcbitcXHR2bS1cXHUwMDNlbW11LnBnZCA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIG5yX3BhZ2VzKTtcXG4gXFx0dm0tXFx1MDAzZW1tdS5wZ2RfY3JlYXRlZCA9IHRydWU7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xcbmluZGV4IDlkZGMwNDdkNWMyNzUuLjU3YjY1M2ZiZDBiMWYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXFxuQEAgLTE3LDYgKzE3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9zdGF0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N0aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FsaWduLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgS1ZNX1VUSUxfTUlOX1BGTlxcdDJcXG5AQCAtMjg3LDYgKzI4OCw3IEBAIF9fd2VhayB2b2lkIHZtX3BvcHVsYXRlX2d2YV9iaXRtYXAoc3RydWN0IGt2bV92bSAqdm0pXFxuIHN0cnVjdCBrdm1fdm0gKl9fX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXHRpbnQgaTtcXG4gXFxuIFxcdHZtID0gY2FsbG9jKDEsIHNpemVvZigqdm0pKTtcXG4gXFx0VEVTVF9BU1NFUlQodm0gIT0gTlVMTCwgXFxcIkluc3VmZmljaWVudCBNZW1vcnlcXFwiKTtcXG5AQCAtMjk1LDYgKzI5Nyw4IEBAIHN0cnVjdCBrdm1fdm0gKl9fX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlKVxcbiBcXHR2bS1cXHUwMDNlcmVnaW9ucy5ncGFfdHJlZSA9IFJCX1JPT1Q7XFxuIFxcdHZtLVxcdTAwM2VyZWdpb25zLmh2YV90cmVlID0gUkJfUk9PVDtcXG4gXFx0aGFzaF9pbml0KHZtLVxcdTAwM2VyZWdpb25zLnNsb3RfaGFzaCk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgaSsrKVxcbitcXHRcXHR2bS1cXHUwMDNlbWVtc2xvdHNbaV0gPSBLVk1fSU5WQUxJRF9NRU1TTE9UO1xcbiBcXG4gXFx0dm0tXFx1MDAzZW1vZGUgPSBzaGFwZS5tb2RlO1xcbiBcXHR2bS1cXHUwMDNldHlwZSA9IHNoYXBlLnR5cGU7XFxuQEAgLTQ5MSw3ICs0OTUsNyBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsIHUzMiBucl9ydW5uYWJsZV92Y3B1cyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IG5yX2V4dHJhX3BhZ2VzKTtcXG4gXFx0c3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpzbG90MDtcXG4gXFx0c3RydWN0IGt2bV92bSAqdm07XFxuLVxcdGludCBpLCBmbGFncztcXG4rXFx0aW50IGZsYWdzO1xcbiBcXG4gXFx0a3ZtX3NldF9maWxlc19ybGltaXQobnJfcnVubmFibGVfdmNwdXMpO1xcbiBcXG5AQCAtNTA5LDggKzUxMywxMCBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsIHUzMiBucl9ydW5uYWJsZV92Y3B1cyxcXG4gXFx0XFx0ZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG4gXFxuIFxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsIDAsIG5yX3BhZ2VzLCBmbGFncyk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgaSsrKVxcbi1cXHRcXHR2bS1cXHUwMDNlbWVtc2xvdHNbaV0gPSAwO1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCAwKTtcXG4rXFx0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fUFQsIDApO1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9EQVRBLCAwKTtcXG4rXFx0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCAwKTtcXG4gXFxuIFxcdGt2bV92bV9lbGZfbG9hZCh2bSwgcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUpO1xcbiBcXG5AQCAtMTE4OSw2ICsxMTk1LDggQEAgbWVtc2xvdDJyZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIHUzMiBtZW1zbG90KVxcbiB7XFxuIFxcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uO1xcbiBcXG4rXFx0VEVTVF9BU1NFUlQobWVtc2xvdCAhPSBLVk1fSU5WQUxJRF9NRU1TTE9ULCBcXFwidm0tXFx1MDAzZW1lbXNsb3RzW10gdW5wb3B1bGF0ZWQ/XFxcIik7XFxuK1xcbiBcXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKHZtLVxcdTAwM2VyZWdpb25zLnNsb3RfaGFzaCwgcmVnaW9uLCBzbG90X25vZGUsXFxuIFxcdFxcdFxcdCAgICAgICBtZW1zbG90KVxcbiBcXHRcXHRpZiAocmVnaW9uLVxcdTAwM2VyZWdpb24uc2xvdCA9PSBtZW1zbG90KVxcbkBAIC0xNDY1LDkgKzE0NzMsNyBAQCBzdGF0aWMgZ3ZhX3QgX19fX3ZtX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3Qgc3osIGd2YV90IG1pbl9ndmEsXFxuIFxcdHU2NCBwYWdlcyA9IChzeiBcXHUwMDNlXFx1MDAzZSB2bS1cXHUwMDNlcGFnZV9zaGlmdCkgKyAoKHN6ICUgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSkgIT0gMCk7XFxuIFxcbiBcXHR2aXJ0X3BnZF9hbGxvYyh2bSk7XFxuLVxcdGdwYV90IGdwYSA9IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlcyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgS1ZNX1VUSUxfTUlOX1BGTiAqIHZtLVxcdTAwM2VwYWdlX3NpemUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHZtLVxcdTAwM2VtZW1zbG90c1t0eXBlXSwgcHJvdGVjdGVkKTtcXG4rXFx0Z3BhX3QgZ3BhID0gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzLCB0eXBlLCBwcm90ZWN0ZWQpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRmluZCBhbiB1bnVzZWQgcmFuZ2Ugb2YgdmlydHVhbCBwYWdlIGFkZHJlc3NlcyBvZiBhdCBsZWFzdFxcbkBAIC0yMDI1LDMzICsyMDMxLDIxIEBAIGNvbnN0IGNoYXIgKmV4aXRfcmVhc29uX3N0cih1bnNpZ25lZCBpbnQgZXhpdF9yZWFzb24pXFxuIH1cXG4gXFxuIC8qXFxuLSAqIFBoeXNpY2FsIENvbnRpZ3VvdXMgUGFnZSBBbGxvY2F0b3JcXG4tICpcXG4tICogSW5wdXQgQXJnczpcXG4tICogICB2bSAtIFZpcnR1YWwgTWFjaGluZVxcbi0gKiAgIG51bSAtIG51bWJlciBvZiBwYWdlc1xcbi0gKiAgIG1pbl9ncGEgLSBQaHlzaWNhbCBhZGRyZXNzIG1pbmltdW1cXG4tICogICBtZW1zbG90IC0gTWVtb3J5IHJlZ2lvbiB0byBhbGxvY2F0ZSBwYWdlIGZyb21cXG4tICogICBwcm90ZWN0ZWQgLSBUcnVlIGlmIHRoZSBwYWdlcyB3aWxsIGJlIHVzZWQgYXMgcHJvdGVjdGVkL3ByaXZhdGUgbWVtb3J5XFxuKyAqIEFsbG9jYXRlIGNvbnRpZ3VvdXMgKGd1ZXN0KSBwaHlzaWNhbCBwYWdlcyBpbiBhIGdpdmVuIG1lbW9yeSByZWdpb24sIGF0IG9yXFxuKyAqIHRoZSBtaW5pbXVtIHNwZWNpZmljIEdQQS4gIElmIHRoZSBtZW1vcnkgaXMgcHJvdGVjdGVkL3ByaXZhdGUsIGFsc28gYWRkIHRoZVxcbisgKiBhbGxvY2F0ZSBwYWdlcyB0byB0aGUgcmVnaW9uJ3Mgc2V0IG9mIHByb3RlY3RlZCBwYWdlcywgZS5nLiBzbyB0aGF0IGFyY2hcXG4rICogY29kZSBrbm93cyB3aGljaCBwYWdlcyBuZWVkIHRvIGJlIGVuY3J5cHRlZCB3aGVuIGxhdW5jaGluZyB0aGUgVk0uXFxuICAqXFxuLSAqIE91dHB1dCBBcmdzOiBOb25lXFxuLSAqXFxuLSAqIFJldHVybjpcXG4tICogICBTdGFydGluZyBwaHlzaWNhbCBhZGRyZXNzXFxuLSAqXFxuLSAqIFdpdGhpbiB0aGUgVk0gc3BlY2lmaWVkIGJ5IHZtLCBsb2NhdGVzIGEgcmFuZ2Ugb2YgYXZhaWxhYmxlIHBoeXNpY2FsXFxuLSAqIHBhZ2VzIGF0IG9yIGFib3ZlIG1pbl9ncGEuIElmIGZvdW5kLCB0aGUgcGFnZXMgYXJlIG1hcmtlZCBhcyBpbiB1c2VcXG4tICogYW5kIHRoZWlyIGJhc2UgYWRkcmVzcyBpcyByZXR1cm5lZC4gQSBURVNUX0FTU0VSVCBmYWlsdXJlIG9jY3VycyBpZlxcbi0gKiBub3QgZW5vdWdoIHBhZ2VzIGFyZSBhdmFpbGFibGUgYXQgb3IgYWJvdmUgbWluX2dwYS5cXG4rICogTm90ZSwgc3VjY2VzcyBpcyBndWFyYW50ZWVkIVxcbiAgKi9cXG4tZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sXFxuLVxcdFxcdFxcdCAgIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90LFxcbi1cXHRcXHRcXHQgICBib29sIHByb3RlY3RlZClcXG4rZ3BhX3QgX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLCBncGFfdCBtaW5fZ3BhLFxcbitcXHRcXHRcXHQgICAgIHUzMiBtZW1zbG90LCBib29sIHByb3RlY3RlZCwgYm9vbCBuYXR1cmFsbHlfYWxpZ25lZClcXG4ge1xcbitcXHRzaXplX3QgYWxpZ25tZW50ID0gbmF0dXJhbGx5X2FsaWduZWQgPyBucl9wYWdlcyA6IDE7XFxuIFxcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uO1xcbiBcXHRzcGFyc2ViaXRfaWR4X3QgcGcsIGJhc2U7XFxuIFxcbi1cXHRURVNUX0FTU0VSVChudW0gXFx1MDAzZSAwLCBcXFwiTXVzdCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZVxcXCIpO1xcbitcXHRURVNUX0FTU0VSVChucl9wYWdlcywgXFxcIk11c3QgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHBhZ2VcXFwiKTtcXG4gXFxuIFxcdFRFU1RfQVNTRVJUKChtaW5fZ3BhICUgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSkgPT0gMCwgXFxcIk1pbiBwaHlzaWNhbCBhZGRyZXNzIFxcXCJcXG4gXFx0XFx0XFxcIm5vdCBkaXZpc2libGUgYnkgcGFnZSBzaXplLlxcXFxuXFxcIlxcbkBAIC0yMDYyLDQzICsyMDU2LDc4IEBAIGdwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLFxcbiBcXHRURVNUX0FTU0VSVCghcHJvdGVjdGVkIHx8IHJlZ2lvbi1cXHUwMDNlcHJvdGVjdGVkX3BoeV9wYWdlcyxcXG4gXFx0XFx0ICAgIFxcXCJSZWdpb24gZG9lc24ndCBzdXBwb3J0IHByb3RlY3RlZCBtZW1vcnlcXFwiKTtcXG4gXFxuLVxcdGJhc2UgPSBwZyA9IG1pbl9ncGEgXFx1MDAzZVxcdTAwM2Ugdm0tXFx1MDAzZXBhZ2Vfc2hpZnQ7XFxuLVxcdGRvIHtcXG4tXFx0XFx0Zm9yICg7IHBnIFxcdTAwM2MgYmFzZSArIG51bTsgKytwZykge1xcbi1cXHRcXHRcXHRpZiAoIXNwYXJzZWJpdF9pc19zZXQocmVnaW9uLVxcdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZykpIHtcXG4tXFx0XFx0XFx0XFx0YmFzZSA9IHBnID0gc3BhcnNlYml0X25leHRfc2V0KHJlZ2lvbi1cXHUwMDNldW51c2VkX3BoeV9wYWdlcywgcGcpO1xcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbitcXHRiYXNlID0gbWluX2dwYSBcXHUwMDNlXFx1MDAzZSB2bS1cXHUwMDNlcGFnZV9zaGlmdDtcXG4rYWdhaW46XFxuK1xcdGJhc2UgPSBBTElHTihiYXNlLCBhbGlnbm1lbnQpO1xcbitcXHRmb3IgKHBnID0gYmFzZTsgcGcgXFx1MDAzYyBiYXNlICsgbnJfcGFnZXM7ICsrcGcpIHtcXG4rXFx0XFx0aWYgKCFzcGFyc2ViaXRfaXNfc2V0KHJlZ2lvbi1cXHUwMDNldW51c2VkX3BoeV9wYWdlcywgcGcpKSB7XFxuK1xcdFxcdFxcdGJhc2UgPSBzcGFyc2ViaXRfbmV4dF9zZXQocmVnaW9uLVxcdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XFxuK1xcdFxcdFxcdGlmICghYmFzZSlcXG4rXFx0XFx0XFx0XFx0Z290byBlbm9tZW07XFxuK1xcdFxcdFxcdGdvdG8gYWdhaW47XFxuIFxcdFxcdH1cXG4tXFx0fSB3aGlsZSAocGcgXFx1MDAyNlxcdTAwMjYgcGcgIT0gYmFzZSArIG51bSk7XFxuLVxcbi1cXHRpZiAocGcgPT0gMCkge1xcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIk5vIGd1ZXN0IHBoeXNpY2FsIHBhZ2UgYXZhaWxhYmxlLCBcXFwiXFxuLVxcdFxcdFxcdFxcXCJtaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdG1pbl9ncGEsIHZtLVxcdTAwM2VwYWdlX3NpemUsIG1lbXNsb3QpO1xcbi1cXHRcXHRmcHV0cyhcXFwiLS0tLSB2bSBkdW1wIC0tLS1cXFxcblxcXCIsIHN0ZGVycik7XFxuLVxcdFxcdHZtX2R1bXAoc3RkZXJyLCB2bSwgMik7XFxuLVxcdFxcdGFib3J0KCk7XFxuIFxcdH1cXG4gXFxuLVxcdGZvciAocGcgPSBiYXNlOyBwZyBcXHUwMDNjIGJhc2UgKyBudW07ICsrcGcpIHtcXG4rXFx0Zm9yIChwZyA9IGJhc2U7IHBnIFxcdTAwM2MgYmFzZSArIG5yX3BhZ2VzOyArK3BnKSB7XFxuIFxcdFxcdHNwYXJzZWJpdF9jbGVhcihyZWdpb24tXFx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKTtcXG4gXFx0XFx0aWYgKHByb3RlY3RlZClcXG4gXFx0XFx0XFx0c3BhcnNlYml0X3NldChyZWdpb24tXFx1MDAzZXByb3RlY3RlZF9waHlfcGFnZXMsIHBnKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGJhc2UgKiB2bS1cXHUwMDNlcGFnZV9zaXplO1xcbitcXG4rZW5vbWVtOlxcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIk5vIGd1ZXN0IHBoeXNpY2FsIHBhZ2UgYXZhaWxhYmxlLCBtaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcXFxcblxcXCIsXFxuK1xcdFxcdG1pbl9ncGEsIHZtLVxcdTAwM2VwYWdlX3NpemUsIG1lbXNsb3QpO1xcbitcXHRmcHV0cyhcXFwiLS0tLSB2bSBkdW1wIC0tLS1cXFxcblxcXCIsIHN0ZGVycik7XFxuK1xcdHZtX2R1bXAoc3RkZXJyLCB2bSwgMik7XFxuK1xcdGFib3J0KCk7XFxuK1xcdF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpO1xcbiB9XFxuIFxcbi1ncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpXFxuK19fd2VhayBib29sIGt2bV9hcmNoX25lZWRzX25hdHVyYWxseV9hbGlnbmVkX3BhZ2VfdGFibGVzKHZvaWQpXFxuIHtcXG4tXFx0cmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMSwgbWluX2dwYSwgbWVtc2xvdCk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4rZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcXG4rXFx0XFx0XFx0ICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsIGJvb2wgcHJvdGVjdGVkKVxcbiB7XFxuLVxcdHJldHVybiB2bV9waHlfcGFnZV9hbGxvYyh2bSwgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxcbi1cXHRcXHRcXHRcXHQgdm0tXFx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcXG4rXFx0c3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb24gPSB2bV9nZXRfbWVtX3JlZ2lvbih2bSwgdHlwZSk7XFxuK1xcdGJvb2wgbmF0dXJhbGx5X2FsaWduZWQgPSBmYWxzZTtcXG4rXFx0Z3BhX3QgbWluX2dwYTtcXG4rXFxuK1xcdFRFU1RfQVNTRVJUKHJlZ2lvbiwgXFxcIk5vIHJlZ2lvbiBmb3IgdHlwZSAnJXUnLCBtZW1zbG90ICcldSdcXFwiLFxcbitcXHRcXHQgICAgdHlwZSwgdm0tXFx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcXG4rXFxuK1xcdHN3aXRjaCAodHlwZSkge1xcbitcXHRjYXNlIE1FTV9SRUdJT05fQ09ERTpcXG4rXFx0Y2FzZSBNRU1fUkVHSU9OX0RBVEE6XFxuK1xcdGNhc2UgTUVNX1JFR0lPTl9URVNUX0RBVEE6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIElmIHRoZSByZWdpb24gaXMgYmFja2VkIGJ5IHRoZSBkZWZhdWx0IG1lbXNsb3QgKGlkPTApLCB1c2VcXG4rXFx0XFx0ICogc2VsZnRlc3RzJyBoYXJkY29kZWQgbWluaW11bSBQRk4sIG90aGVyd2lzZSB1c2UgdGhlIGJhc2Ugb2ZcXG4rXFx0XFx0ICogdGhlIGN1c3RvbSBtZW1vcnkgc2xvdCB0aGF0IGJhY2tzIHRoZSByZWdpb24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIXZtLVxcdTAwM2VtZW1zbG90c1t0eXBlXSlcXG4rXFx0XFx0XFx0bWluX2dwYSA9IEtWTV9VVElMX01JTl9QRk4gKiB2bS1cXHUwMDNlcGFnZV9zaXplO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG1pbl9ncGEgPSByZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1FTV9SRUdJT05fUFQ6XFxuK1xcdFxcdG1pbl9ncGEgPSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFI7XFxuK1xcdFxcdG5hdHVyYWxseV9hbGlnbmVkID0ga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXMoKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUVNX1JFR0lPTl9URVNUX0VYVFJBOlxcbitcXHRcXHRtaW5fZ3BhID0gcmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0VEVTVF9GQUlMKFxcXCJJbnZhbGlkIG1lbW9yeSByZWdpb24gdHlwZSAnJXUnXFxcIiwgdHlwZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIG1pbl9ncGEsIHZtLVxcdTAwM2VtZW1zbG90c1t0eXBlXSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcHJvdGVjdGVkLCBuYXR1cmFsbHlfYWxpZ25lZCk7XFxuIH1cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcXG5pbmRleCA0N2JiZGUzZTIwNWEwLi5mY2Q0MWJjNmZiZGFlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcXG5AQCAtOSw3ICs5LDYgQEBcXG4gI2luY2x1ZGUgXFxcInByb2Nlc3Nvci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidWNhbGxfY29tbW9uLmhcXFwiXFxuIFxcbi0jZGVmaW5lIExPT05HQVJDSF9QQUdFX1RBQkxFX1BIWVNfTUlOXFx0XFx0MHgyMDAwMDBcXG4gI2RlZmluZSBMT09OR0FSQ0hfR1VFU1RfU1RBQ0tfVkFERFJfTUlOXFx0XFx0MHgyMDAwMDBcXG4gXFxuIHN0YXRpYyBncGFfdCBpbnZhbGlkX3BndGFibGVbNF07XFxuQEAgLTU3LDkgKzU2LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxcbiBcXHRjaGlsZCA9IHRhYmxlID0gMDtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHZtLVxcdTAwM2VtbXUucGd0YWJsZV9sZXZlbHM7IGkrKykge1xcbiBcXHRcXHRpbnZhbGlkX3BndGFibGVbaV0gPSBjaGlsZDtcXG4tXFx0XFx0dGFibGUgPSB2bV9waHlfcGFnZV9hbGxvYyh2bSwgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU4sXFxuLVxcdFxcdFxcdFxcdHZtLVxcdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XFxuLVxcdFxcdFRFU1RfQVNTRVJUKHRhYmxlLCBcXFwiRmFpbCB0byBhbGxvY2F0ZSBwYWdlIHRhbGUgYXQgbGV2ZWwgJWRcXFxcblxcXCIsIGkpO1xcbitcXHRcXHR0YWJsZSA9IHZtX2FsbG9jX3BhZ2VfdGFibGUodm0pO1xcbiBcXHRcXHR2aXJ0X3NldF9wZ3RhYmxlKHZtLCB0YWJsZSwgY2hpbGQpO1xcbiBcXHRcXHRjaGlsZCA9IHRhYmxlO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuaW5kZXggZGVkNTQyOWYzNDQ4My4uYzE3NWRjZDE0MTE0NCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xcbkBAIC02OSw5ICs2OSw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4gXFx0aWYgKHZtLVxcdTAwM2VtbXUucGdkX2NyZWF0ZWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHZtLVxcdTAwM2VtbXUucGdkID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcyxcXG4tXFx0XFx0XFx0XFx0XFx0IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcXG4tXFx0XFx0XFx0XFx0XFx0IHZtLVxcdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XFxuK1xcdHZtLVxcdTAwM2VtbXUucGdkID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgbnJfcGFnZXMpO1xcbiBcXHR2bS1cXHUwMDNlbW11LnBnZF9jcmVhdGVkID0gdHJ1ZTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jXFxuaW5kZXggYTlhZGIzNzgyYjM1Mi4uMzNmNDlkNzQzYjVmZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcXG5AQCAtMjAsOSArMjAsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pXFxuIFxcdGlmICh2bS1cXHUwMDNlbW11LnBnZF9jcmVhdGVkKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIFBBR0VTX1BFUl9SRUdJT04sXFxuLVxcdFxcdFxcdFxcdCAgIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcXG4tXFx0XFx0XFx0XFx0ICAgdm0tXFx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcXG4rXFx0Z3BhID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgUEFHRVNfUEVSX1JFR0lPTik7XFxuIFxcdG1lbXNldChhZGRyX2dwYTJodmEodm0sIGdwYSksIDB4ZmYsIFBBR0VTX1BFUl9SRUdJT04gKiB2bS1cXHUwMDNlcGFnZV9zaXplKTtcXG4gXFxuIFxcdHZtLVxcdTAwM2VtbXUucGdkID0gZ3BhO1xcbkBAIC0zOCw4ICszNiw3IEBAIHN0YXRpYyB1NjQgdmlydF9hbGxvY19yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIGludCByaSlcXG4ge1xcbiBcXHR1NjQgdGFkZHI7XFxuIFxcbi1cXHR0YWRkciA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgIHJpIFxcdTAwM2MgNCA/IFBBR0VTX1BFUl9SRUdJT04gOiAxLFxcbi1cXHRcXHRcXHRcXHQgICBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsIDApO1xcbitcXHR0YWRkciA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIHJpIFxcdTAwM2MgNCA/IFBBR0VTX1BFUl9SRUdJT04gOiAxKTtcXG4gXFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgdGFkZHIpLCAweGZmLCBQQUdFU19QRVJfUkVHSU9OICogdm0tXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuIFxcbiBcXHRyZXR1cm4gKHRhZGRyIFxcdTAwMjYgUkVHSU9OX0VOVFJZX09SSUdJTilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xcbmluZGV4IGQzMWZhODFlYTA3NTYuLjQ3OWU5YTQ4MTY4N2QgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xcbkBAIC01MjksNyArNTI5LDEwIEBAIHZvaWQgdGRwX2lkZW50aXR5X21hcF9kZWZhdWx0X21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtKVxcbiBcXG4gXFx0LyogT25seSBtZW1zbG90IDAgaXMgbWFwcGVkIGhlcmUsIGVuc3VyZSBpdCdzIHRoZSBvbmx5IG9uZSBiZWluZyB1c2VkICovXFxuIFxcdGZvciAocyA9IDA7IHMgXFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgcysrKVxcbi1cXHRcXHRURVNUX0FTU0VSVF9FUSh2bS1cXHUwMDNlbWVtc2xvdHNbc10sIDApO1xcbitcXHRcXHRURVNUX0FTU0VSVCghdm0tXFx1MDAzZW1lbXNsb3RzW3NdIHx8XFxuK1xcdFxcdFxcdCAgICB2bS1cXHUwMDNlbWVtc2xvdHNbc10gPT0gS1ZNX0lOVkFMSURfTUVNU0xPVCxcXG4rXFx0XFx0XFx0ICAgIFxcXCJVbmhhbmRsZWQgbWVtc2xvdCAnJXUnIGZvciB0eXBlICcldSdcXFwiLFxcbitcXHRcXHRcXHQgICAgdm0tXFx1MDAzZW1lbXNsb3RzW3NdLCBzKTtcXG4gXFxuIFxcdGkgPSAocmVnaW9uLVxcdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyIFxcdTAwM2VcXHUwMDNlIHZtLVxcdTAwM2VwYWdlX3NoaWZ0KSAtIDE7XFxuIFxcdGxhc3QgPSBpICsgKHJlZ2lvbi1cXHUwMDNlcmVnaW9uLm1lbW9yeV9zaXplIFxcdTAwM2VcXHUwMDNlIHZtLVxcdTAwM2VwYWdlX3NoaWZ0KTtcXG5AQCAtMTQ2NSwxMyArMTQ2OCwxMyBAQCBib29sIGt2bV9hcmNoX2hhc19kZWZhdWx0X2lycWNoaXAodm9pZClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNtcmFtX2dwYSxcXG4rdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzbXJhbV9ncGEsXFxuIFxcdFxcdCBjb25zdCB2b2lkICpzbWlfaGFuZGxlciwgc2l6ZV90IGhhbmRsZXJfc2l6ZSlcXG4ge1xcbi1cXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBzbXJhbV9ncGEsXFxuLVxcdFxcdFxcdFxcdCAgICBTTVJBTV9NRU1TTE9ULCBTTVJBTV9QQUdFUywgMCk7XFxuLVxcdFRFU1RfQVNTRVJUKHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgU01SQU1fUEFHRVMsIHNtcmFtX2dwYSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFNNUkFNX01FTVNMT1QpID09IHNtcmFtX2dwYSxcXG4rXFx0dm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcXG4rXFx0XFx0XFx0ICAgICAgIHNtcmFtX2dwYSwgU01SQU1fTUVNU0xPVCwgU01SQU1fUEFHRVMpO1xcbitcXG4rXFx0VEVTVF9BU1NFUlQodm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBTTVJBTV9QQUdFUywgTUVNX1JFR0lPTl9URVNUX0VYVFJBKSA9PSBzbXJhbV9ncGEsXFxuIFxcdFxcdCAgICBcXFwiQ291bGQgbm90IGFsbG9jYXRlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgU01SQU1cXFwiKTtcXG4gXFxuIFxcdG1lbXNldChhZGRyX2dwYTJodmEodm0sIHNtcmFtX2dwYSksIDB4MCwgU01SQU1fU0laRSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcXG5pbmRleCBlMTI5OTYxMWJlMzIyLi44NDRlYTliN2JiNDFjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcXG5AQCAtMzM5LDcgKzMzOSw4IEBAIHN0YXRpYyBib29sIHByZXBhcmVfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEsIGludCBuc2xvdHMsIHU2NCAqbWF4c2xvdHMsXFxuIFxcdFxcdGlmIChzbG90ID09IGRhdGEtXFx1MDAzZW5zbG90cylcXG4gXFx0XFx0XFx0bnBhZ2VzICs9IHJlbXBhZ2VzO1xcbiBcXG4tXFx0XFx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKGRhdGEtXFx1MDAzZXZtLCBucGFnZXMsIGd1ZXN0X2FkZHIsIHNsb3QpO1xcbitcXHRcXHRncGEgPSBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKGRhdGEtXFx1MDAzZXZtLCBucGFnZXMsIGd1ZXN0X2FkZHIsIHNsb3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgZmFsc2UsIGZhbHNlKTtcXG4gXFx0XFx0VEVTVF9BU1NFUlQoZ3BhID09IGd1ZXN0X2FkZHIsXFxuIFxcdFxcdFxcdCAgICBcXFwidm1fcGh5X3BhZ2VzX2FsbG9jKCkgZmFpbGVkXFxcIik7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXFxuaW5kZXggMTVkODFiMmVkN2FkMy4uNzMzODdjYzNiY2E3NiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXFxuQEAgLTEwMiwyNCArMTAyLDE3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2RpcnR5X3Rlc3RfZGF0YSh2b2lkKVxcbiBcXG4gc3RhdGljIHZvaWQgY3JlYXRlX21haW5fbWVtc2xvdChzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4ge1xcbi1cXHRpbnQgaTtcXG4tXFxuIFxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsIDAsIE1BSU5fUEFHRV9DT1VOVCwgMCk7XFxuLVxcdC8qIHNldCB0aGUgYXJyYXkgb2YgbWVtc2xvdHMgdG8gemVybyBsaWtlIF9fdm1fY3JlYXRlIGRvZXMgKi9cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX01FTV9SRUdJT05TOyBpKyspXFxuLVxcdFxcdHZtLVxcdTAwM2VtZW1zbG90c1tpXSA9IDA7XFxuK1xcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0NPREUsIDApO1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgMCk7XFxuK1xcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIDApO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBjcmVhdGVfdGVzdF9tZW1zbG90KHN0cnVjdCBrdm1fdm0gKnZtKVxcbiB7XFxuLVxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSxcXG4tXFx0XFx0XFx0XFx0ICAgIFZNX01FTV9TUkNfQU5PTllNT1VTLFxcbi1cXHRcXHRcXHRcXHQgICAgVEVTVF9EQVRBX1NUQVJUX0dGTiBcXHUwMDNjXFx1MDAzYyB2bS1cXHUwMDNlcGFnZV9zaGlmdCxcXG4tXFx0XFx0XFx0XFx0ICAgIFRFU1RfREFUQV9NRU1TTE9ULFxcbi1cXHRcXHRcXHRcXHQgICAgVEVTVF9EQVRBX1BBR0VfQ09VTlQsXFxuLVxcdFxcdFxcdFxcdCAgICAwXFxuLVxcdFxcdFxcdFxcdCAgICk7XFxuLVxcdHZtLVxcdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1RFU1RfREFUQV0gPSBURVNUX0RBVEFfTUVNU0xPVDtcXG4rXFx0dm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxcbitcXHRcXHRcXHQgICAgICAgVEVTVF9EQVRBX1NUQVJUX0dGTiBcXHUwMDNjXFx1MDAzYyB2bS1cXHUwMDNlcGFnZV9zaGlmdCxcXG4rXFx0XFx0XFx0ICAgICAgIFRFU1RfREFUQV9NRU1TTE9ULCBURVNUX0RBVEFfUEFHRV9DT1VOVCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGNyZWF0ZV9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmNcXG5pbmRleCBmMzgzOTI4NGFjMDgxLi5jZDI2Y2MxYWVkODAzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jXFxuQEAgLTM2LDcgKzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdCh2b2lkKVxcbiBcXHR9O1xcbiBcXG4gXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XFxuLVxcdG1lbSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgNDA5NiAqIDQyLCAwKTtcXG4rXFx0bWVtID0gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgNDA5NiAqIDQyLCAwLCBmYWxzZSwgZmFsc2UpO1xcbiBcXG4gXFx0cm91dGluZyA9IGt2bV9nc2lfcm91dGluZ19jcmVhdGUoKTtcXG4gXFx0cm91dGluZy1cXHUwMDNlbnIgPSAxO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xcbmluZGV4IGRmZmU5NjU0ZjQ1YmQuLmJmYTVhYzhjZTAyOTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcXG5AQCAtMTE2LDE1ICsxMTYsMTUgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnNwYXduX3ZtKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsIHB0aHJlYWRfdCAqdmNwdV90aHJlYWQsXFxuIFxcbiBcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpO1xcbiBcXG4tXFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsXFxuLVxcdFxcdFxcdFxcdCAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxcbi1cXHRcXHRcXHRcXHQgICAgTUVNX1JFR0lPTl9TSVpFIC8gZ2V0cGFnZXNpemUoKSwgMCk7XFxuK1xcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVNfVEhQLFxcbitcXHRcXHRcXHQgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcXG4rXFx0XFx0XFx0ICAgICAgIE1FTV9SRUdJT05fU0laRSAvIGdldHBhZ2VzaXplKCkpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogQWxsb2NhdGUgYW5kIG1hcCB0d28gcGFnZXMgc28gdGhhdCB0aGUgR1BBIGFjY2Vzc2VkIGJ5IGd1ZXN0X2NvZGUoKVxcbiBcXHQgKiBzdGF5cyB2YWxpZCBhY3Jvc3MgdGhlIG1lbXNsb3QgbW92ZS5cXG4gXFx0ICovXFxuLVxcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCk7XFxuK1xcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcXG4gXFx0VEVTVF9BU1NFUlQoZ3BhID09IE1FTV9SRUdJT05fR1BBLCBcXFwiRmFpbGVkIHZtX3BoeV9wYWdlc19hbGxvY1xcXFxuXFxcIik7XFxuIFxcbiBcXHR2aXJ0X21hcCh2bSwgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fR1BBLCAyKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNcXG5pbmRleCAzZGNhODVlOTU0NzgxLi44ZDE4MjI3MTdhYmRjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jXFxuQEAgLTYyLDExICs2MiwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRURVNUX0FTU0VSVChyYywgXFxcIktWTV9DQVBfRVhJVF9PTl9FTVVMQVRJT05fRkFJTFVSRSBpcyB1bmF2YWlsYWJsZVxcXCIpO1xcbiBcXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYSVRfT05fRU1VTEFUSU9OX0ZBSUxVUkUsIDEpO1xcbiBcXG4tXFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcXG4tXFx0XFx0XFx0XFx0ICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsXFxuLVxcdFxcdFxcdFxcdCAgICBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUsIDApO1xcbitcXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxcbitcXHRcXHRcXHQgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcXG4rXFx0XFx0XFx0ICAgICAgIE1FTV9SRUdJT05fU0laRSAvIFBBR0VfU0laRSk7XFxuK1xcbiBcXHRncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIE1FTV9SRUdJT05fU0laRSAvIFBBR0VfU0laRSxcXG4tXFx0XFx0XFx0XFx0IE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QpO1xcbitcXHRcXHRcXHRcXHQgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcXG4gXFx0VEVTVF9BU1NFUlQoZ3BhID09IE1FTV9SRUdJT05fR1BBLCBcXFwiRmFpbGVkIHZtX3BoeV9wYWdlc19hbGxvY1xcXCIpO1xcbiBcXHR2aXJ0X21hcCh2bSwgTUVNX1JFR0lPTl9HVkEsIE1FTV9SRUdJT05fR1BBLCAxKTtcXG4gXFx0aHZhID0gYWRkcl9ncGEyaHZhKHZtLCBNRU1fUkVHSU9OX0dQQSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjE2OjMwLjg2MjEyNzg2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDc0MzUwMjc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJBbGwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgcmVzdHJpY3RlZCB0byB1c2VyLXNwYWNlIEtWTSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggZG8gbm90IG1vZGlmeSB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzdhMzA2ZDdlODY5OTcwNGUxNmIwYmRkZDc1ZTVhNjk0N2Q0OGMyOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTM6MTY6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcbmluZGV4IDZiYjNkODI5MDZiMjIuLmIwZTNmYzhjZDc2YWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuY1xuQEAgLTU5NywxOCArNTk3LDE2IEBAIHN0YXRpYyB2b2lkIHNldHVwX21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3QgdGVzdF9wYXJhbXMgKnApXG4gXG4gXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCAwLFxuIFx0XHRcdFx0ICAgIENPREVfQU5EX0RBVEFfTUVNU0xPVCwgY29kZV9ucGFnZXMsIDApO1xuLVx0dm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9DT0RFXSA9IENPREVfQU5EX0RBVEFfTUVNU0xPVDtcbi1cdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fREFUQV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7XG4tXG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhIC0gcHRfc2l6ZSxcbi1cdFx0XHRcdCAgICBQQUdFX1RBQkxFX01FTVNMT1QsIHB0X3NpemUgLyBndWVzdF9wYWdlX3NpemUsXG4tXHRcdFx0XHQgICAgcC1cdTAwM2V0ZXN0X2Rlc2MtXHUwMDNlcHRfbWVtc2xvdF9mbGFncyk7XG4tXHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSA9IFBBR0VfVEFCTEVfTUVNU0xPVDtcbi1cbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgcC1cdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEsIFRFU1RfREFUQV9NRU1TTE9ULFxuLVx0XHRcdFx0ICAgIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcbi1cdFx0XHRcdCAgICBwLVx1MDAzZXRlc3RfZGVzYy1cdTAwM2VkYXRhX21lbXNsb3RfZmxhZ3MpO1xuLVx0dm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9URVNUX0RBVEFdID0gVEVTVF9EQVRBX01FTVNMT1Q7XG4rXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCBDT0RFX0FORF9EQVRBX01FTVNMT1QpO1xuK1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTtcbitcbitcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgcC1cdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEgLSBwdF9zaXplLFxuK1x0XHRcdFx0IFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcbitcdFx0XHRcdCBwLVx1MDAzZXRlc3RfZGVzYy1cdTAwM2VwdF9tZW1zbG90X2ZsYWdzKTtcbitcbitcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIHAtXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhLFxuK1x0XHRcdFx0IFRFU1RfREFUQV9NRU1TTE9ULCBkYXRhX3NpemUgLyBndWVzdF9wYWdlX3NpemUsXG4rXHRcdFx0XHQgcC1cdTAwM2V0ZXN0X2Rlc2MtXHUwMDNlZGF0YV9tZW1zbG90X2ZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2V0dXBfdWNhbGwoc3RydWN0IGt2bV92bSAqdm0pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG5pbmRleCA5YTY5YzQzOWEwZjhmLi40NWE4N2JhNWE3MzdhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbkBAIC0yMyw3ICsyMyw2IEBAXG4gI2RlZmluZSBHSUNfTFBJX09GRlNFVFx0ODE5MlxuIFxuIHN0YXRpYyBzaXplX3QgbnJfaXRlcmF0aW9ucyA9IDEwMDA7XG4tc3RhdGljIGdwYV90IGdwYV9iYXNlO1xuIFxuIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiBzdGF0aWMgc3RydWN0IGt2bV92Y3B1ICoqdmNwdXM7XG5AQCAtMTQzLDYgKzE0Miw3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUoc2l6ZV90IG5yX2xwaXMpXG4gXG4gc3RhdGljIHZvaWQgc2V0dXBfbWVtc2xvdCh2b2lkKVxuIHtcbitcdGdwYV90IGdwYV9iYXNlO1xuIFx0c2l6ZV90IHBhZ2VzO1xuIFx0c2l6ZV90IHN6O1xuIFxuQEAgLTE2NCw4ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90KHZvaWQpXG4gXG4gXHRwYWdlcyA9IHN6IC8gdm0tXHUwMDNlcGFnZV9zaXplO1xuIFx0Z3BhX2Jhc2UgPSAoKHZtX2NvbXB1dGVfbWF4X2dmbih2bSkgKyAxKSAqIHZtLVx1MDAzZXBhZ2Vfc2l6ZSkgLSBzejtcbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIGdwYV9iYXNlLFxuLVx0XHRcdFx0ICAgIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMsIDApO1xuK1x0dm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbitcdFx0XHQgICAgICAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMpO1xuIH1cbiBcbiAjZGVmaW5lIExQSV9QUk9QX0RFRkFVTFRfUFJJT1x0MHhhMFxuQEAgLTE5MSwyOCArMTkxLDI1IEBAIHN0YXRpYyB2b2lkIHNldHVwX3Rlc3RfZGF0YSh2b2lkKVxuIFx0Z3BhX3QgY21kcV9iYXNlO1xuIFxuIFx0dGVzdF9kYXRhLmRldmljZV90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayxcbi1cdFx0XHRcdFx0XHQgICAgZ3BhX2Jhc2UsXG4tXHRcdFx0XHRcdFx0ICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4rXHRcdFx0XHRcdFx0ICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXG4gXHR0ZXN0X2RhdGEuY29sbGVjdGlvbl90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayxcbi1cdFx0XHRcdFx0XHRcdGdwYV9iYXNlLFxuLVx0XHRcdFx0XHRcdFx0VEVTVF9NRU1TTE9UX0lOREVYKTtcbitcdFx0XHRcdFx0XHRcdE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXG4tXHRjbWRxX2Jhc2UgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssIGdwYV9iYXNlLFxuLVx0XHRcdFx0ICAgICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4rXHRjbWRxX2Jhc2UgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXHR2aXJ0X21hcCh2bSwgY21kcV9iYXNlLCBjbWRxX2Jhc2UsIHBhZ2VzX3Blcl82NGspO1xuIFx0dGVzdF9kYXRhLmNtZHFfYmFzZSA9IGNtZHFfYmFzZTtcbiBcdHRlc3RfZGF0YS5jbWRxX2Jhc2VfdmEgPSAodm9pZCAqKWNtZHFfYmFzZTtcbiBcbiBcdHRlc3RfZGF0YS5pdHRfdGFibGVzID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrICogbnJfZGV2aWNlcyxcbi1cdFx0XHRcdFx0XHQgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpO1xuK1x0XHRcdFx0XHRcdCAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcbiBcdHRlc3RfZGF0YS5scGlfcHJvcF90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayxcbi1cdFx0XHRcdFx0XHQgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYKTtcbitcdFx0XHRcdFx0XHQgICAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFx0Y29uZmlndXJlX2xwaXMoKTtcbiBcbiBcdHRlc3RfZGF0YS5scGlfcGVuZF90YWJsZXMgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGsgKiBucl9jcHVzLFxuLVx0XHRcdFx0XHRcdCAgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYKTtcbitcdFx0XHRcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcbiBcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCB0ZXN0X2RhdGEpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuaW5kZXggNWE3YTQ1NWI1Mzg3NS4uODliNGZjMmFmNzUxNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbkBAIC0zMyw2ICszMyw4IEBAXG4gXG4gI2RlZmluZSBOU0VDX1BFUl9TRUMgMTAwMDAwMDAwMExcbiBcbisjZGVmaW5lIEtWTV9JTlZBTElEX01FTVNMT1QgVUlOVF9NQVhcbitcbiBzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24ge1xuIFx0c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgcmVnaW9uO1xuIFx0c3RydWN0IHNwYXJzZWJpdCAqdW51c2VkX3BoeV9wYWdlcztcbkBAIC04MCwxMSArODIsNDUgQEAgc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9ucyB7XG4gXHRERUNMQVJFX0hBU0hUQUJMRShzbG90X2hhc2gsIDkpO1xuIH07XG4gXG4rLypcbisgKiBNZW1vcnkgcmVnaW9uIHR5cGVzIGFyZSBwYXNzZWQgdG8gdmFyaW91cyBwYWdlIGFsbG9jYXRvcnMgdG8gY29tbXVuaWNhdGVcbisgKiB2YXJpb3VzIHByb3BlcnRpZXMgYW5kIG1ldGFkYXRhIHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24uICBOb3RlLCB0aGVcbisgKiBkZXNjcmlwdGlvbnMgYmVsb3cgZGVzY3JpYmVkIHRoZSBwcmltYXJ5IHVzYWdlIG9mIGVhY2ggdHlwZS4gIEluZGl2aWR1YWxcbisgKiB0ZXN0cyBtYXkgYWxsb2NhdGUgbWVtb3J5IGZvciBvdGhlciBwdXJwb3Nlcy5cbisgKlxuKyAqIEJ5IGRlZmF1bHQsIGFsbCByZWdpb25zIGV4Y2VwdCBURVNUX0VYVFJBIGFyZSBtYXBwZWQgdG8gbWVtc2xvdCAnMCcuICBUaGVcbisgKiBURVhUX0VYVFJBIHJlZ2lvbiBpcyBsZWZ0IHVubWFwcGVkIGFzIGl0J3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0XG4rICogc3BlY2lmaWMgYWxsb2NhdGlvbnMsIGkuZS4gc2hvdWxkIG5ldmVyIGJlIHVzZWQgYnkgY29yZS9pbmZyYXN0cnVjdHVyZSBjb2RlLlxuKyAqIFRlc3RzIGNhbiBvdmVycmlkZSB0aGUgbWVtc2xvdCBmb3IgYW55IG9yIGFsbCB0eXBlcywgZS5nLiBzbyB0aGF0IGFsbCB0ZXN0XG4rICogZGF0YSBpcyBhbGxvY2F0ZWQgZnJvbSBhIGN1cmF0ZWQgbWVtc2xvdC5cbisgKi9cbiBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUge1xuK1x0LypcbitcdCAqIFRoZSBDT0RFIHJlZ2lvbiBpcyB1c2VkIGJ5IGxpYi9lbGYgd2hlbiBsb2FkaW5nIHRoZSB0ZXN0J3MgY29kZSBpbnRvXG4rXHQgKiBndWVzdCBtZW1vcnkuXG4rXHQgKi9cbiBcdE1FTV9SRUdJT05fQ09ERSxcbitcdC8qXG4rXHQgKiBUaGUgREFUQSByZWdpb24gaXMgdXNlZCB0byBhbGxvY2F0ZSBjb3JlIGRhdGEgc3RydWN0dXJlcywgZS5nLiB2Q1BVXG4rXHQgKiBzdGFja3MsIFZNIGV4Y2VwdGlvbiB0YWJsZXMsIHg4NidzIFRTUywgZXRjLlxuK1x0ICovXG4gXHRNRU1fUkVHSU9OX0RBVEEsXG4rXHQvKlxuK1x0ICogVGhlIFBUIHJlZ2lvbiwgYS5rLmEuIFBhZ2UgVGFibGUgcmVnaW9uLCBpcyB1c2VkIHRvIGFsbG9jYXRlIHBhZ2VcbitcdCAqIHRhYmxlIHBhZ2VzLlxuK1x0ICovXG4gXHRNRU1fUkVHSU9OX1BULFxuK1x0LypcbitcdCAqIFRoZSBURVNUX0RBVEEgcmVnaW9uIGlzIHVzZWQgZm9yIGFsbG9jYXRpbmcgdGVzdCBkYXRhIHRoYXQgaXMgZWl0aGVyXG4rXHQgKiB0ZXN0IHNwZWNpZmljLCBhbmQvb3IgaXNuJ3QgY29uc2lkZXJlZCBhIFwiY29yZVwiIGRhdGEgc3RydWN0dXJlLlxuK1x0ICovXG4gXHRNRU1fUkVHSU9OX1RFU1RfREFUQSxcbitcdC8qXG4rXHQgKiBUaGUgVEVTVF9FWFRSQSByZWdpb24gaXMgZm9yIHNwZWNpYWwgc25vd2ZsYWtlcywgd2hlcmUgYSB0ZXN0IHdhbnRzXG4rXHQgKiB0byBjcmVhdGUgYW5kIHVzZSBhIG9uZS1vZmYgbWVtc2xvdCwgd2l0aG91dCBpbXBhY3RpbmcgXCJub3JtYWxcIiB0ZXN0XG4rXHQgKiBkYXRhIGFsbG9jYXRpb25zLlxuK1x0ICovXG4rXHRNRU1fUkVHSU9OX1RFU1RfRVhUUkEsXG4gXHROUl9NRU1fUkVHSU9OUyxcbiB9O1xuIFxuQEAgLTEyNywxMSArMTYzLDYgQEAgc3RydWN0IGt2bV92bSB7XG4gXG4gXHRzdHJ1Y3Qga3ZtX2JpbmFyeV9zdGF0cyBzdGF0cztcbiBcbi1cdC8qXG4tXHQgKiBLVk0gcmVnaW9uIHNsb3RzLiBUaGVzZSBhcmUgdGhlIGRlZmF1bHQgbWVtc2xvdHMgdXNlZCBieSBwYWdlXG4tXHQgKiBhbGxvY2F0b3JzLCBlLmcuLCBsaWIvZWxmIHVzZXMgdGhlIG1lbXNsb3RzW01FTV9SRUdJT05fQ09ERV1cbi1cdCAqIG1lbXNsb3QuXG4tXHQgKi9cbiBcdHUzMiBtZW1zbG90c1tOUl9NRU1fUkVHSU9OU107XG4gfTtcbiBcbkBAIC0xNjksNyArMjAwLDggQEAgbWVtc2xvdDJyZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIHUzMiBtZW1zbG90KTtcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqdm1fZ2V0X21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4gXHRcdFx0XHRcdFx0XHQgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKVxuIHtcbi1cdGFzc2VydCh0eXBlIFx1MDAzYyBOUl9NRU1fUkVHSU9OUyk7XG4rXHRURVNUX0FTU0VSVCh0eXBlIFx1MDAzYyBOUl9NRU1fUkVHSU9OUyxcbitcdFx0ICAgIFwiSW52YWxpZCBtZW1vcnkgcmVnaW9uIHR5cGUgJyV1J1wiLCB0eXBlKTtcbiBcdHJldHVybiBtZW1zbG90MnJlZ2lvbih2bSwgdm0tXHUwMDNlbWVtc2xvdHNbdHlwZV0pO1xuIH1cbiBcbkBAIC03MDIsNiArNzM0LDM2IEBAIHZvaWQgdm1fbWVtX2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcbiBcdFx0Z3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcywgdTMyIGZsYWdzLFxuIFx0XHRpbnQgZ3Vlc3RfbWVtZmRfZmQsIHU2NCBndWVzdF9tZW1mZF9vZmZzZXQpO1xuIFxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSxcbitcdFx0XHRcdFx0ICAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsXG4rXHRcdFx0XHRcdCAgICAgIHUzMiBzbG90KVxuK3tcbitcdFRFU1RfQVNTRVJUKHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdID09IEtWTV9JTlZBTElEX01FTVNMT1QsXG4rXHRcdCAgICBcIk1lbW9yeSByZWdpb24gdHlwZSAnJXUnIHdhcyBhbHJlYWR5IG92ZXJyaWRkZW4gd2l0aCBzbG90PSV1XCIsXG4rXHRcdCAgICB0eXBlLCB2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSk7XG4rXG4rXHR2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSA9IHNsb3Q7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4rXHRcdFx0XHRcdCAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSxcbitcdFx0XHRcdFx0ICAgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG4rXHRcdFx0XHRcdCAgICBncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLFxuK1x0XHRcdFx0XHQgICAgdTMyIGZsYWdzKVxuK3tcbitcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCB0eXBlLCBzbG90KTtcbitcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgc3JjX3R5cGUsIGdwYSwgc2xvdCwgbnBhZ2VzLCBmbGFncyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLFxuK1x0XHRcdFx0XHQgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLFxuK1x0XHRcdFx0XHQgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG4rXHRcdFx0XHRcdCAgZ3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcylcbit7XG4rXHRfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIHR5cGUsIHNyY190eXBlLCBncGEsIHNsb3QsIG5wYWdlcywgMCk7XG4rfVxuK1xuICNpZm5kZWYgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBrdm1fdm0gKnZtKVxuIHtcbkBAIC05OTAsMjMgKzEwNTIsNDEgQEAgdm9pZCBrdm1fZ3NpX3JvdXRpbmdfd3JpdGUoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgKnJvdXRpbmcpO1xuIFxuIGNvbnN0IGNoYXIgKmV4aXRfcmVhc29uX3N0cih1bnNpZ25lZCBpbnQgZXhpdF9yZWFzb24pO1xuIFxuLWdwYV90IHZtX3BoeV9wYWdlX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdCk7XG4tZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sIGdwYV90IG1pbl9ncGEsXG4tXHRcdFx0ICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkKTtcbi1ncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKTtcbitib29sIGt2bV9hcmNoX25lZWRzX25hdHVyYWxseV9hbGlnbmVkX3BhZ2VfdGFibGVzKHZvaWQpO1xuK1xuK2dwYV90IF9fX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcywgZ3BhX3QgbWluX2dwYSxcbitcdFx0XHQgICAgIHUzMiBtZW1zbG90LCBib29sIHByb3RlY3RlZCwgYm9vbCBuYXR1cmFsbHlfYWxpZ25lZCk7XG4rZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcbitcdFx0XHQgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwgYm9vbCBwcm90ZWN0ZWQpO1xuIFxuLXN0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLFxuLVx0XHRcdFx0ICAgICAgIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KVxuK3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsXG4rXHRcdFx0XHQgICAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUpXG4ge1xuIFx0LypcbiBcdCAqIEJ5IGRlZmF1bHQsIGFsbG9jYXRlIG1lbW9yeSBhcyBwcm90ZWN0ZWQgZm9yIFZNcyB0aGF0IHN1cHBvcnRcbiBcdCAqIHByb3RlY3RlZCBtZW1vcnksIGFzIHRoZSBtYWpvcml0eSBvZiBtZW1vcnkgZm9yIHN1Y2ggVk1zIGlzXG4gXHQgKiBwcm90ZWN0ZWQsIGkuZS4gdXNpbmcgc2hhcmVkIG1lbW9yeSBpcyBlZmZlY3RpdmVseSBvcHQtaW4uXG4gXHQgKi9cbi1cdHJldHVybiBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnVtLCBtaW5fZ3BhLCBtZW1zbG90LFxuK1x0cmV0dXJuIF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywgdHlwZSxcbiBcdFx0XHRcdCAgICB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHZtKSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sXG4rXHRcdFx0XHQgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcbit7XG4rXHRyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAxLCB0eXBlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMpXG4re1xuK1x0cmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIE1FTV9SRUdJT05fUFQpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGt2bV92bSAqdm0pXG4re1xuK1x0cmV0dXJuIHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIDEpO1xuK31cbitcbiAvKlxuICAqIF9fX192bV9jcmVhdGUoKSBkb2VzIEtWTV9DUkVBVEVfVk0gYW5kIGxpdHRsZSBlbHNlLiAgX192bV9jcmVhdGUoKSBhbHNvXG4gICogbG9hZHMgdGhlIHRlc3QgYmluYXJ5IGludG8gZ3Vlc3QgbWVtb3J5IGFuZCBjcmVhdGVzIGFuIElSUSBjaGlwICh4ODYgb25seSkuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oXG5pbmRleCAyZDFhZmEwOTgxOWIwLi4xNWZhYWEwNjAxMjYyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcbkBAIC04LDcgKzgsNyBAQFxuICNkZWZpbmUgU01SQU1fTUVNU0xPVFx0KCgxIFx1MDAzY1x1MDAzYyAxNikgfCAxKVxuICNkZWZpbmUgU01SQU1fUEFHRVNcdChTTVJBTV9TSVpFIC8gUEFHRV9TSVpFKVxuIFxuLXZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNtcmFtX2dwYSxcbit2b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHNtcmFtX2dwYSxcbiBcdFx0IGNvbnN0IHZvaWQgKnNtaV9oYW5kbGVyLCBzaXplX3QgaGFuZGxlcl9zaXplKTtcbiBcbiB2b2lkIGluamVjdF9zbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuY1xuaW5kZXggMDEzMjViZjRkMzZmYy4uMmRjYWEyYzRhMDM4MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcbkBAIC0xMTUsOSArMTE1LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFx0aWYgKHZtLVx1MDAzZW1tdS5wZ2RfY3JlYXRlZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0dm0tXHUwMDNlbW11LnBnZCA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsXG4tXHRcdFx0XHRcdCBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsXG4tXHRcdFx0XHRcdCB2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XG4rXHR2bS1cdTAwM2VtbXUucGdkID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgbnJfcGFnZXMpO1xuIFx0dm0tXHUwMDNlbW11LnBnZF9jcmVhdGVkID0gdHJ1ZTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG5pbmRleCA5ZGRjMDQ3ZDVjMjc1Li41N2I2NTNmYmQwYjFmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbkBAIC0xNyw2ICsxNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWxpZ24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gXG4gI2RlZmluZSBLVk1fVVRJTF9NSU5fUEZOXHQyXG5AQCAtMjg3LDYgKzI4OCw3IEBAIF9fd2VhayB2b2lkIHZtX3BvcHVsYXRlX2d2YV9iaXRtYXAoc3RydWN0IGt2bV92bSAqdm0pXG4gc3RydWN0IGt2bV92bSAqX19fX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXG4ge1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4rXHRpbnQgaTtcbiBcbiBcdHZtID0gY2FsbG9jKDEsIHNpemVvZigqdm0pKTtcbiBcdFRFU1RfQVNTRVJUKHZtICE9IE5VTEwsIFwiSW5zdWZmaWNpZW50IE1lbW9yeVwiKTtcbkBAIC0yOTUsNiArMjk3LDggQEAgc3RydWN0IGt2bV92bSAqX19fX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXG4gXHR2bS1cdTAwM2VyZWdpb25zLmdwYV90cmVlID0gUkJfUk9PVDtcbiBcdHZtLVx1MDAzZXJlZ2lvbnMuaHZhX3RyZWUgPSBSQl9ST09UO1xuIFx0aGFzaF9pbml0KHZtLVx1MDAzZXJlZ2lvbnMuc2xvdF9oYXNoKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX01FTV9SRUdJT05TOyBpKyspXG4rXHRcdHZtLVx1MDAzZW1lbXNsb3RzW2ldID0gS1ZNX0lOVkFMSURfTUVNU0xPVDtcbiBcbiBcdHZtLVx1MDAzZW1vZGUgPSBzaGFwZS5tb2RlO1xuIFx0dm0tXHUwMDNldHlwZSA9IHNoYXBlLnR5cGU7XG5AQCAtNDkxLDcgKzQ5NSw3IEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxuIFx0XHRcdFx0XHRcdCBucl9leHRyYV9wYWdlcyk7XG4gXHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnNsb3QwO1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4tXHRpbnQgaSwgZmxhZ3M7XG4rXHRpbnQgZmxhZ3M7XG4gXG4gXHRrdm1fc2V0X2ZpbGVzX3JsaW1pdChucl9ydW5uYWJsZV92Y3B1cyk7XG4gXG5AQCAtNTA5LDggKzUxMywxMCBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsIHUzMiBucl9ydW5uYWJsZV92Y3B1cyxcbiBcdFx0ZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcbiBcbiBcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsIDAsIG5yX3BhZ2VzLCBmbGFncyk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgaSsrKVxuLVx0XHR2bS1cdTAwM2VtZW1zbG90c1tpXSA9IDA7XG4rXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCAwKTtcbitcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCAwKTtcbitcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIDApO1xuK1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCAwKTtcbiBcbiBcdGt2bV92bV9lbGZfbG9hZCh2bSwgcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUpO1xuIFxuQEAgLTExODksNiArMTE5NSw4IEBAIG1lbXNsb3QycmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgbWVtc2xvdClcbiB7XG4gXHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnJlZ2lvbjtcbiBcbitcdFRFU1RfQVNTRVJUKG1lbXNsb3QgIT0gS1ZNX0lOVkFMSURfTUVNU0xPVCwgXCJ2bS1cdTAwM2VtZW1zbG90c1tdIHVucG9wdWxhdGVkP1wiKTtcbitcbiBcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUodm0tXHUwMDNlcmVnaW9ucy5zbG90X2hhc2gsIHJlZ2lvbiwgc2xvdF9ub2RlLFxuIFx0XHRcdCAgICAgICBtZW1zbG90KVxuIFx0XHRpZiAocmVnaW9uLVx1MDAzZXJlZ2lvbi5zbG90ID09IG1lbXNsb3QpXG5AQCAtMTQ2NSw5ICsxNDczLDcgQEAgc3RhdGljIGd2YV90IF9fX192bV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IHN6LCBndmFfdCBtaW5fZ3ZhLFxuIFx0dTY0IHBhZ2VzID0gKHN6IFx1MDAzZVx1MDAzZSB2bS1cdTAwM2VwYWdlX3NoaWZ0KSArICgoc3ogJSB2bS1cdTAwM2VwYWdlX3NpemUpICE9IDApO1xuIFxuIFx0dmlydF9wZ2RfYWxsb2Modm0pO1xuLVx0Z3BhX3QgZ3BhID0gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzLFxuLVx0XHRcdFx0XHQgICBLVk1fVVRJTF9NSU5fUEZOICogdm0tXHUwMDNlcGFnZV9zaXplLFxuLVx0XHRcdFx0XHQgICB2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSwgcHJvdGVjdGVkKTtcbitcdGdwYV90IGdwYSA9IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlcywgdHlwZSwgcHJvdGVjdGVkKTtcbiBcbiBcdC8qXG4gXHQgKiBGaW5kIGFuIHVudXNlZCByYW5nZSBvZiB2aXJ0dWFsIHBhZ2UgYWRkcmVzc2VzIG9mIGF0IGxlYXN0XG5AQCAtMjAyNSwzMyArMjAzMSwyMSBAQCBjb25zdCBjaGFyICpleGl0X3JlYXNvbl9zdHIodW5zaWduZWQgaW50IGV4aXRfcmVhc29uKVxuIH1cbiBcbiAvKlxuLSAqIFBoeXNpY2FsIENvbnRpZ3VvdXMgUGFnZSBBbGxvY2F0b3Jcbi0gKlxuLSAqIElucHV0IEFyZ3M6XG4tICogICB2bSAtIFZpcnR1YWwgTWFjaGluZVxuLSAqICAgbnVtIC0gbnVtYmVyIG9mIHBhZ2VzXG4tICogICBtaW5fZ3BhIC0gUGh5c2ljYWwgYWRkcmVzcyBtaW5pbXVtXG4tICogICBtZW1zbG90IC0gTWVtb3J5IHJlZ2lvbiB0byBhbGxvY2F0ZSBwYWdlIGZyb21cbi0gKiAgIHByb3RlY3RlZCAtIFRydWUgaWYgdGhlIHBhZ2VzIHdpbGwgYmUgdXNlZCBhcyBwcm90ZWN0ZWQvcHJpdmF0ZSBtZW1vcnlcbisgKiBBbGxvY2F0ZSBjb250aWd1b3VzIChndWVzdCkgcGh5c2ljYWwgcGFnZXMgaW4gYSBnaXZlbiBtZW1vcnkgcmVnaW9uLCBhdCBvclxuKyAqIHRoZSBtaW5pbXVtIHNwZWNpZmljIEdQQS4gIElmIHRoZSBtZW1vcnkgaXMgcHJvdGVjdGVkL3ByaXZhdGUsIGFsc28gYWRkIHRoZVxuKyAqIGFsbG9jYXRlIHBhZ2VzIHRvIHRoZSByZWdpb24ncyBzZXQgb2YgcHJvdGVjdGVkIHBhZ2VzLCBlLmcuIHNvIHRoYXQgYXJjaFxuKyAqIGNvZGUga25vd3Mgd2hpY2ggcGFnZXMgbmVlZCB0byBiZSBlbmNyeXB0ZWQgd2hlbiBsYXVuY2hpbmcgdGhlIFZNLlxuICAqXG4tICogT3V0cHV0IEFyZ3M6IE5vbmVcbi0gKlxuLSAqIFJldHVybjpcbi0gKiAgIFN0YXJ0aW5nIHBoeXNpY2FsIGFkZHJlc3Ncbi0gKlxuLSAqIFdpdGhpbiB0aGUgVk0gc3BlY2lmaWVkIGJ5IHZtLCBsb2NhdGVzIGEgcmFuZ2Ugb2YgYXZhaWxhYmxlIHBoeXNpY2FsXG4tICogcGFnZXMgYXQgb3IgYWJvdmUgbWluX2dwYS4gSWYgZm91bmQsIHRoZSBwYWdlcyBhcmUgbWFya2VkIGFzIGluIHVzZVxuLSAqIGFuZCB0aGVpciBiYXNlIGFkZHJlc3MgaXMgcmV0dXJuZWQuIEEgVEVTVF9BU1NFUlQgZmFpbHVyZSBvY2N1cnMgaWZcbi0gKiBub3QgZW5vdWdoIHBhZ2VzIGFyZSBhdmFpbGFibGUgYXQgb3IgYWJvdmUgbWluX2dwYS5cbisgKiBOb3RlLCBzdWNjZXNzIGlzIGd1YXJhbnRlZWQhXG4gICovXG4tZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sXG4tXHRcdFx0ICAgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QsXG4tXHRcdFx0ICAgYm9vbCBwcm90ZWN0ZWQpXG4rZ3BhX3QgX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLCBncGFfdCBtaW5fZ3BhLFxuK1x0XHRcdCAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKVxuIHtcbitcdHNpemVfdCBhbGlnbm1lbnQgPSBuYXR1cmFsbHlfYWxpZ25lZCA/IG5yX3BhZ2VzIDogMTtcbiBcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uO1xuIFx0c3BhcnNlYml0X2lkeF90IHBnLCBiYXNlO1xuIFxuLVx0VEVTVF9BU1NFUlQobnVtIFx1MDAzZSAwLCBcIk11c3QgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHBhZ2VcIik7XG4rXHRURVNUX0FTU0VSVChucl9wYWdlcywgXCJNdXN0IGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlXCIpO1xuIFxuIFx0VEVTVF9BU1NFUlQoKG1pbl9ncGEgJSB2bS1cdTAwM2VwYWdlX3NpemUpID09IDAsIFwiTWluIHBoeXNpY2FsIGFkZHJlc3MgXCJcbiBcdFx0XCJub3QgZGl2aXNpYmxlIGJ5IHBhZ2Ugc2l6ZS5cXG5cIlxuQEAgLTIwNjIsNDMgKzIwNTYsNzggQEAgZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sXG4gXHRURVNUX0FTU0VSVCghcHJvdGVjdGVkIHx8IHJlZ2lvbi1cdTAwM2Vwcm90ZWN0ZWRfcGh5X3BhZ2VzLFxuIFx0XHQgICAgXCJSZWdpb24gZG9lc24ndCBzdXBwb3J0IHByb3RlY3RlZCBtZW1vcnlcIik7XG4gXG4tXHRiYXNlID0gcGcgPSBtaW5fZ3BhIFx1MDAzZVx1MDAzZSB2bS1cdTAwM2VwYWdlX3NoaWZ0O1xuLVx0ZG8ge1xuLVx0XHRmb3IgKDsgcGcgXHUwMDNjIGJhc2UgKyBudW07ICsrcGcpIHtcbi1cdFx0XHRpZiAoIXNwYXJzZWJpdF9pc19zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKSkge1xuLVx0XHRcdFx0YmFzZSA9IHBnID0gc3BhcnNlYml0X25leHRfc2V0KHJlZ2lvbi1cdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4rXHRiYXNlID0gbWluX2dwYSBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdDtcbithZ2FpbjpcbitcdGJhc2UgPSBBTElHTihiYXNlLCBhbGlnbm1lbnQpO1xuK1x0Zm9yIChwZyA9IGJhc2U7IHBnIFx1MDAzYyBiYXNlICsgbnJfcGFnZXM7ICsrcGcpIHtcbitcdFx0aWYgKCFzcGFyc2ViaXRfaXNfc2V0KHJlZ2lvbi1cdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZykpIHtcbitcdFx0XHRiYXNlID0gc3BhcnNlYml0X25leHRfc2V0KHJlZ2lvbi1cdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XG4rXHRcdFx0aWYgKCFiYXNlKVxuK1x0XHRcdFx0Z290byBlbm9tZW07XG4rXHRcdFx0Z290byBhZ2FpbjtcbiBcdFx0fVxuLVx0fSB3aGlsZSAocGcgXHUwMDI2XHUwMDI2IHBnICE9IGJhc2UgKyBudW0pO1xuLVxuLVx0aWYgKHBnID09IDApIHtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwiTm8gZ3Vlc3QgcGh5c2ljYWwgcGFnZSBhdmFpbGFibGUsIFwiXG4tXHRcdFx0XCJtaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcXG5cIixcbi1cdFx0XHRtaW5fZ3BhLCB2bS1cdTAwM2VwYWdlX3NpemUsIG1lbXNsb3QpO1xuLVx0XHRmcHV0cyhcIi0tLS0gdm0gZHVtcCAtLS0tXFxuXCIsIHN0ZGVycik7XG4tXHRcdHZtX2R1bXAoc3RkZXJyLCB2bSwgMik7XG4tXHRcdGFib3J0KCk7XG4gXHR9XG4gXG4tXHRmb3IgKHBnID0gYmFzZTsgcGcgXHUwMDNjIGJhc2UgKyBudW07ICsrcGcpIHtcbitcdGZvciAocGcgPSBiYXNlOyBwZyBcdTAwM2MgYmFzZSArIG5yX3BhZ2VzOyArK3BnKSB7XG4gXHRcdHNwYXJzZWJpdF9jbGVhcihyZWdpb24tXHUwMDNldW51c2VkX3BoeV9wYWdlcywgcGcpO1xuIFx0XHRpZiAocHJvdGVjdGVkKVxuIFx0XHRcdHNwYXJzZWJpdF9zZXQocmVnaW9uLVx1MDAzZXByb3RlY3RlZF9waHlfcGFnZXMsIHBnKTtcbiBcdH1cbiBcbiBcdHJldHVybiBiYXNlICogdm0tXHUwMDNlcGFnZV9zaXplO1xuK1xuK2Vub21lbTpcbitcdGZwcmludGYoc3RkZXJyLCBcIk5vIGd1ZXN0IHBoeXNpY2FsIHBhZ2UgYXZhaWxhYmxlLCBtaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcXG5cIixcbitcdFx0bWluX2dwYSwgdm0tXHUwMDNlcGFnZV9zaXplLCBtZW1zbG90KTtcbitcdGZwdXRzKFwiLS0tLSB2bSBkdW1wIC0tLS1cXG5cIiwgc3RkZXJyKTtcbitcdHZtX2R1bXAoc3RkZXJyLCB2bSwgMik7XG4rXHRhYm9ydCgpO1xuK1x0X19idWlsdGluX3VucmVhY2hhYmxlKCk7XG4gfVxuIFxuLWdwYV90IHZtX3BoeV9wYWdlX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdClcbitfX3dlYWsgYm9vbCBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcyh2b2lkKVxuIHtcbi1cdHJldHVybiB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDEsIG1pbl9ncGEsIG1lbXNsb3QpO1xuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1ncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKVxuK2dwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsXG4rXHRcdFx0ICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsIGJvb2wgcHJvdGVjdGVkKVxuIHtcbi1cdHJldHVybiB2bV9waHlfcGFnZV9hbGxvYyh2bSwgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxuLVx0XHRcdFx0IHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbitcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uID0gdm1fZ2V0X21lbV9yZWdpb24odm0sIHR5cGUpO1xuK1x0Ym9vbCBuYXR1cmFsbHlfYWxpZ25lZCA9IGZhbHNlO1xuK1x0Z3BhX3QgbWluX2dwYTtcbitcbitcdFRFU1RfQVNTRVJUKHJlZ2lvbiwgXCJObyByZWdpb24gZm9yIHR5cGUgJyV1JywgbWVtc2xvdCAnJXUnXCIsXG4rXHRcdCAgICB0eXBlLCB2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSk7XG4rXG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgTUVNX1JFR0lPTl9DT0RFOlxuK1x0Y2FzZSBNRU1fUkVHSU9OX0RBVEE6XG4rXHRjYXNlIE1FTV9SRUdJT05fVEVTVF9EQVRBOlxuK1x0XHQvKlxuK1x0XHQgKiBJZiB0aGUgcmVnaW9uIGlzIGJhY2tlZCBieSB0aGUgZGVmYXVsdCBtZW1zbG90IChpZD0wKSwgdXNlXG4rXHRcdCAqIHNlbGZ0ZXN0cycgaGFyZGNvZGVkIG1pbmltdW0gUEZOLCBvdGhlcndpc2UgdXNlIHRoZSBiYXNlIG9mXG4rXHRcdCAqIHRoZSBjdXN0b20gbWVtb3J5IHNsb3QgdGhhdCBiYWNrcyB0aGUgcmVnaW9uLlxuK1x0XHQgKi9cbitcdFx0aWYgKCF2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSlcbitcdFx0XHRtaW5fZ3BhID0gS1ZNX1VUSUxfTUlOX1BGTiAqIHZtLVx1MDAzZXBhZ2Vfc2l6ZTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1pbl9ncGEgPSByZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkcjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1FTV9SRUdJT05fUFQ6XG4rXHRcdG1pbl9ncGEgPSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFI7XG4rXHRcdG5hdHVyYWxseV9hbGlnbmVkID0ga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXMoKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1FTV9SRUdJT05fVEVTVF9FWFRSQTpcbitcdFx0bWluX2dwYSA9IHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdFRFU1RfRkFJTChcIkludmFsaWQgbWVtb3J5IHJlZ2lvbiB0eXBlICcldSdcIiwgdHlwZSk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIF9fX192bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLCBtaW5fZ3BhLCB2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSxcbitcdFx0XHRcdCAgICAgIHByb3RlY3RlZCwgbmF0dXJhbGx5X2FsaWduZWQpO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcbmluZGV4IDQ3YmJkZTNlMjA1YTAuLmZjZDQxYmM2ZmJkYWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcbkBAIC05LDcgKzksNiBAQFxuICNpbmNsdWRlIFwicHJvY2Vzc29yLmhcIlxuICNpbmNsdWRlIFwidWNhbGxfY29tbW9uLmhcIlxuIFxuLSNkZWZpbmUgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU5cdFx0MHgyMDAwMDBcbiAjZGVmaW5lIExPT05HQVJDSF9HVUVTVF9TVEFDS19WQUREUl9NSU5cdFx0MHgyMDAwMDBcbiBcbiBzdGF0aWMgZ3BhX3QgaW52YWxpZF9wZ3RhYmxlWzRdO1xuQEAgLTU3LDkgKzU2LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFx0Y2hpbGQgPSB0YWJsZSA9IDA7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2bS1cdTAwM2VtbXUucGd0YWJsZV9sZXZlbHM7IGkrKykge1xuIFx0XHRpbnZhbGlkX3BndGFibGVbaV0gPSBjaGlsZDtcbi1cdFx0dGFibGUgPSB2bV9waHlfcGFnZV9hbGxvYyh2bSwgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU4sXG4tXHRcdFx0XHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XG4tXHRcdFRFU1RfQVNTRVJUKHRhYmxlLCBcIkZhaWwgdG8gYWxsb2NhdGUgcGFnZSB0YWxlIGF0IGxldmVsICVkXFxuXCIsIGkpO1xuK1x0XHR0YWJsZSA9IHZtX2FsbG9jX3BhZ2VfdGFibGUodm0pO1xuIFx0XHR2aXJ0X3NldF9wZ3RhYmxlKHZtLCB0YWJsZSwgY2hpbGQpO1xuIFx0XHRjaGlsZCA9IHRhYmxlO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5jMTc1ZGNkMTQxMTQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuQEAgLTY5LDkgKzY5LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFx0aWYgKHZtLVx1MDAzZW1tdS5wZ2RfY3JlYXRlZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0dm0tXHUwMDNlbW11LnBnZCA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsXG4tXHRcdFx0XHRcdCBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsXG4tXHRcdFx0XHRcdCB2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XG4rXHR2bS1cdTAwM2VtbXUucGdkID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgbnJfcGFnZXMpO1xuIFx0dm0tXHUwMDNlbW11LnBnZF9jcmVhdGVkID0gdHJ1ZTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jXG5pbmRleCBhOWFkYjM3ODJiMzUyLi4zM2Y0OWQ3NDNiNWZkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcbkBAIC0yMCw5ICsyMCw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBcdGlmICh2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQpXG4gXHRcdHJldHVybjtcbiBcbi1cdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgUEFHRVNfUEVSX1JFR0lPTixcbi1cdFx0XHRcdCAgIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcbi1cdFx0XHRcdCAgIHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbitcdGdwYSA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIFBBR0VTX1BFUl9SRUdJT04pO1xuIFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgZ3BhKSwgMHhmZiwgUEFHRVNfUEVSX1JFR0lPTiAqIHZtLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4gXG4gXHR2bS1cdTAwM2VtbXUucGdkID0gZ3BhO1xuQEAgLTM4LDggKzM2LDcgQEAgc3RhdGljIHU2NCB2aXJ0X2FsbG9jX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHJpKVxuIHtcbiBcdHU2NCB0YWRkcjtcbiBcbi1cdHRhZGRyID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAgcmkgXHUwMDNjIDQgPyBQQUdFU19QRVJfUkVHSU9OIDogMSxcbi1cdFx0XHRcdCAgIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUiwgMCk7XG4rXHR0YWRkciA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIHJpIFx1MDAzYyA0ID8gUEFHRVNfUEVSX1JFR0lPTiA6IDEpO1xuIFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgdGFkZHIpLCAweGZmLCBQQUdFU19QRVJfUkVHSU9OICogdm0tXHUwMDNlcGFnZV9zaXplKTtcbiBcbiBcdHJldHVybiAodGFkZHIgXHUwMDI2IFJFR0lPTl9FTlRSWV9PUklHSU4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuaW5kZXggZDMxZmE4MWVhMDc1Ni4uNDc5ZTlhNDgxNjg3ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuQEAgLTUyOSw3ICs1MjksMTAgQEAgdm9pZCB0ZHBfaWRlbnRpdHlfbWFwX2RlZmF1bHRfbWVtc2xvdHMoc3RydWN0IGt2bV92bSAqdm0pXG4gXG4gXHQvKiBPbmx5IG1lbXNsb3QgMCBpcyBtYXBwZWQgaGVyZSwgZW5zdXJlIGl0J3MgdGhlIG9ubHkgb25lIGJlaW5nIHVzZWQgKi9cbiBcdGZvciAocyA9IDA7IHMgXHUwMDNjIE5SX01FTV9SRUdJT05TOyBzKyspXG4tXHRcdFRFU1RfQVNTRVJUX0VRKHZtLVx1MDAzZW1lbXNsb3RzW3NdLCAwKTtcbitcdFx0VEVTVF9BU1NFUlQoIXZtLVx1MDAzZW1lbXNsb3RzW3NdIHx8XG4rXHRcdFx0ICAgIHZtLVx1MDAzZW1lbXNsb3RzW3NdID09IEtWTV9JTlZBTElEX01FTVNMT1QsXG4rXHRcdFx0ICAgIFwiVW5oYW5kbGVkIG1lbXNsb3QgJyV1JyBmb3IgdHlwZSAnJXUnXCIsXG4rXHRcdFx0ICAgIHZtLVx1MDAzZW1lbXNsb3RzW3NdLCBzKTtcbiBcbiBcdGkgPSAocmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHIgXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQpIC0gMTtcbiBcdGxhc3QgPSBpICsgKHJlZ2lvbi1cdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQpO1xuQEAgLTE0NjUsMTMgKzE0NjgsMTMgQEAgYm9vbCBrdm1fYXJjaF9oYXNfZGVmYXVsdF9pcnFjaGlwKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLFxuK3ZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgc21yYW1fZ3BhLFxuIFx0XHQgY29uc3Qgdm9pZCAqc21pX2hhbmRsZXIsIHNpemVfdCBoYW5kbGVyX3NpemUpXG4ge1xuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgc21yYW1fZ3BhLFxuLVx0XHRcdFx0ICAgIFNNUkFNX01FTVNMT1QsIFNNUkFNX1BBR0VTLCAwKTtcbi1cdFRFU1RfQVNTRVJUKHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgU01SQU1fUEFHRVMsIHNtcmFtX2dwYSxcbi1cdFx0XHRcdCAgICAgICBTTVJBTV9NRU1TTE9UKSA9PSBzbXJhbV9ncGEsXG4rXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuK1x0XHRcdCAgICAgICBzbXJhbV9ncGEsIFNNUkFNX01FTVNMT1QsIFNNUkFNX1BBR0VTKTtcbitcbitcdFRFU1RfQVNTRVJUKHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgU01SQU1fUEFHRVMsIE1FTV9SRUdJT05fVEVTVF9FWFRSQSkgPT0gc21yYW1fZ3BhLFxuIFx0XHQgICAgXCJDb3VsZCBub3QgYWxsb2NhdGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGZvciBTTVJBTVwiKTtcbiBcbiBcdG1lbXNldChhZGRyX2dwYTJodmEodm0sIHNtcmFtX2dwYSksIDB4MCwgU01SQU1fU0laRSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xuaW5kZXggZTEyOTk2MTFiZTMyMi4uODQ0ZWE5YjdiYjQxYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xuQEAgLTMzOSw3ICszMzksOCBAQCBzdGF0aWMgYm9vbCBwcmVwYXJlX3ZtKHN0cnVjdCB2bV9kYXRhICpkYXRhLCBpbnQgbnNsb3RzLCB1NjQgKm1heHNsb3RzLFxuIFx0XHRpZiAoc2xvdCA9PSBkYXRhLVx1MDAzZW5zbG90cylcbiBcdFx0XHRucGFnZXMgKz0gcmVtcGFnZXM7XG4gXG4tXHRcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyhkYXRhLVx1MDAzZXZtLCBucGFnZXMsIGd1ZXN0X2FkZHIsIHNsb3QpO1xuK1x0XHRncGEgPSBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKGRhdGEtXHUwMDNldm0sIG5wYWdlcywgZ3Vlc3RfYWRkciwgc2xvdCxcbitcdFx0XHRcdFx0ICAgICBmYWxzZSwgZmFsc2UpO1xuIFx0XHRURVNUX0FTU0VSVChncGEgPT0gZ3Vlc3RfYWRkcixcbiBcdFx0XHQgICAgXCJ2bV9waHlfcGFnZXNfYWxsb2MoKSBmYWlsZWRcIik7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xuaW5kZXggMTVkODFiMmVkN2FkMy4uNzMzODdjYzNiY2E3NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuY1xuQEAgLTEwMiwyNCArMTAyLDE3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2RpcnR5X3Rlc3RfZGF0YSh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGNyZWF0ZV9tYWluX21lbXNsb3Qoc3RydWN0IGt2bV92bSAqdm0pXG4ge1xuLVx0aW50IGk7XG4tXG4gXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCAwLCAwLCBNQUlOX1BBR0VfQ09VTlQsIDApO1xuLVx0Lyogc2V0IHRoZSBhcnJheSBvZiBtZW1zbG90cyB0byB6ZXJvIGxpa2UgX192bV9jcmVhdGUgZG9lcyAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IGkrKylcbi1cdFx0dm0tXHUwMDNlbWVtc2xvdHNbaV0gPSAwO1xuK1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgMCk7XG4rXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgMCk7XG4rXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9EQVRBLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgY3JlYXRlX3Rlc3RfbWVtc2xvdChzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiB7XG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sXG4tXHRcdFx0XHQgICAgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4tXHRcdFx0XHQgICAgVEVTVF9EQVRBX1NUQVJUX0dGTiBcdTAwM2NcdTAwM2Mgdm0tXHUwMDNlcGFnZV9zaGlmdCxcbi1cdFx0XHRcdCAgICBURVNUX0RBVEFfTUVNU0xPVCxcbi1cdFx0XHRcdCAgICBURVNUX0RBVEFfUEFHRV9DT1VOVCxcbi1cdFx0XHRcdCAgICAwXG4tXHRcdFx0XHQgICApO1xuLVx0dm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9URVNUX0RBVEFdID0gVEVTVF9EQVRBX01FTVNMT1Q7XG4rXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4rXHRcdFx0ICAgICAgIFRFU1RfREFUQV9TVEFSVF9HRk4gXHUwMDNjXHUwMDNjIHZtLVx1MDAzZXBhZ2Vfc2hpZnQsXG4rXHRcdFx0ICAgICAgIFRFU1RfREFUQV9NRU1TTE9ULCBURVNUX0RBVEFfUEFHRV9DT1VOVCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNyZWF0ZV9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuY1xuaW5kZXggZjM4MzkyODRhYzA4MS4uY2QyNmNjMWFlZDgwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmNcbkBAIC0zNiw3ICszNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3Qodm9pZClcbiBcdH07XG4gXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuLVx0bWVtID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCA0MDk2ICogNDIsIDApO1xuK1x0bWVtID0gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgNDA5NiAqIDQyLCAwLCBmYWxzZSwgZmFsc2UpO1xuIFxuIFx0cm91dGluZyA9IGt2bV9nc2lfcm91dGluZ19jcmVhdGUoKTtcbiBcdHJvdXRpbmctXHUwMDNlbnIgPSAxO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXG5pbmRleCBkZmZlOTY1NGY0NWJkLi5iZmE1YWM4Y2UwMjk1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuQEAgLTExNiwxNSArMTE2LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICpzcGF3bl92bShzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1LCBwdGhyZWFkX3QgKnZjcHVfdGhyZWFkLFxuIFxuIFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBndWVzdF9jb2RlKTtcbiBcbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVNfVEhQLFxuLVx0XHRcdFx0ICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsXG4tXHRcdFx0XHQgICAgTUVNX1JFR0lPTl9TSVpFIC8gZ2V0cGFnZXNpemUoKSwgMCk7XG4rXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTX1RIUCxcbitcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcbitcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9TSVpFIC8gZ2V0cGFnZXNpemUoKSk7XG4gXG4gXHQvKlxuIFx0ICogQWxsb2NhdGUgYW5kIG1hcCB0d28gcGFnZXMgc28gdGhhdCB0aGUgR1BBIGFjY2Vzc2VkIGJ5IGd1ZXN0X2NvZGUoKVxuIFx0ICogc3RheXMgdmFsaWQgYWNyb3NzIHRoZSBtZW1zbG90IG1vdmUuXG4gXHQgKi9cbi1cdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCk7XG4rXHRncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXHRURVNUX0FTU0VSVChncGEgPT0gTUVNX1JFR0lPTl9HUEEsIFwiRmFpbGVkIHZtX3BoeV9wYWdlc19hbGxvY1xcblwiKTtcbiBcbiBcdHZpcnRfbWFwKHZtLCBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9HUEEsIDIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jXG5pbmRleCAzZGNhODVlOTU0NzgxLi44ZDE4MjI3MTdhYmRjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuY1xuQEAgLTYyLDExICs2MiwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0VEVTVF9BU1NFUlQocmMsIFwiS1ZNX0NBUF9FWElUX09OX0VNVUxBVElPTl9GQUlMVVJFIGlzIHVuYXZhaWxhYmxlXCIpO1xuIFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9FWElUX09OX0VNVUxBVElPTl9GQUlMVVJFLCAxKTtcbiBcbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4tXHRcdFx0XHQgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcbi1cdFx0XHRcdCAgICBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUsIDApO1xuK1x0dm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbitcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcbitcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFKTtcbitcbiBcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFLFxuLVx0XHRcdFx0IE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QpO1xuK1x0XHRcdFx0IE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXHRURVNUX0FTU0VSVChncGEgPT0gTUVNX1JFR0lPTl9HUEEsIFwiRmFpbGVkIHZtX3BoeV9wYWdlc19hbGxvY1wiKTtcbiBcdHZpcnRfbWFwKHZtLCBNRU1fUkVHSU9OX0dWQSwgTUVNX1JFR0lPTl9HUEEsIDEpO1xuIFx0aHZhID0gYWRkcl9ncGEyaHZhKHZtLCBNRU1fUkVHSU9OX0dQQSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoxNjozMC44NjIxMzAzNDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzQzNDY5ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoaXMgZGlmZi4gQWxsIHRoZSBjaGFuZ2VzIGFyZSBuZWF0bHkgY29udGFpbmVkIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AuIFRoaXMgaXMgZ29vZCwgaXQgc2ltcGxpZmllcyB0aGUgYXNzZXNzbWVudC4gTm93LCBsZXQncyByZWZyZXNoIG91ciBtZW1vcnkgb24gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gU3BlY2lmaWNhbGx5LCBzZWN0aW9uIDI6IFwiV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlXCIuIFRoZSBrZXkgaGVyZSBpcyB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuIFdlJ3JlIGxvb2tpbmcgZm9yIG1vZGlmaWNhdGlvbnMgdGhhdCBmYWxsICpzdHJpY3RseSogaW50byBhIHNwZWNpZmljIGNhdGVnb3J5IHdoZXJlIGZ1enppbmcgaXMgZGVlbWVkIHVubmVjZXNzYXJ5LlxuXG5UaGUgZ3VpZGVsaW5lIHNwZWNpZmljYWxseSBjYWxscyBvdXQgXCJVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLi4uIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIiBCaW5nby4gQWxsIHRoZSBmaWxlcyBsaXN0ZWQg4oCTIHRoZSBgcGFnZV9mYXVsdF90ZXN0LmNgLCBgdmdpY19scGlfc3RyZXNzLmNgLCBhbGwgdGhlIGluY2x1ZGVzIGFuZCBsaWJyYXJ5IGNvZGUsIGFuZCB0aGUgdmFyaW91cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdGVzdHMg4oCTIHRoZXkgYWxsIHJlc2lkZSB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLiBUaGF0J3MgKnByZWNpc2VseSogdXNlci1zcGFjZSBzZWxmLXRlc3QgY29kZSwgYW5kIGl0J3Mgbm90IGdvaW5nIHRvIHRvdWNoIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIE5vIGtlcm5lbCBtb2RpZmljYXRpb25zLCBubyBmdXp6aW5nIHJlcXVpcmVkLlxuXG5UaGVyZWZvcmUsIFdvcnRoRnV6emluZyBpcyBkZWZpbml0aXZlbHkgYGZhbHNlYC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIFdlIG5lZWQgdG8gc2V0IHRoZSBwYXJhbWV0ZXJzIGxpa2Ugc286XG4qICAgV29ydGhGdXp6aW5nOiBgZmFsc2VgXG4qICAgUmVhc29uaW5nOiBcIkFsbCBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzIGFyZSByZXN0cmljdGVkIHRvIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8sIHdoaWNoIGRvIG5vdCBtb2RpZnkgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCJcbiogICBGb2N1c1N5bWJvbHM6IFxcWyBdIChlbXB0eSBsaXN0KVxuKiAgIEVuYWJsZUNvbmZpZ3M6IFxcWyBdIChlbXB0eSBsaXN0KVxuXG5Eb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI1OSwiT3V0cHV0VG9rZW5zIjo3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEzOjE2OjM1LjYwNTYwMjM3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJBbGwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgcmVzdHJpY3RlZCB0byB1c2VyLXNwYWNlIEtWTSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLywgd2hpY2ggZG8gbm90IG1vZGlmeSB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiQWxsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIHJlc3RyaWN0ZWQgdG8gdXNlci1zcGFjZSBLVk0gc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8sIHdoaWNoIGRvIG5vdCBtb2RpZnkgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMzoxNjozNS42MDU2MzI1MDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowsxtn7[1] Phase: Running StartedAt: 2026-09-03 13:16:47 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsxtn7[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-03 13:16:47 +0000 UTC FinishedAt: 2026-09-03 13:16:51 +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,}