Name: series-workflowbm8mg Phase: Failed StartedAt: 2026-08-19 09:14:15 +0000 UTC FinishedAt: 2026-08-19 09:35:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbm8mg[0] Phase: Succeeded StartedAt: 2026-08-19 09:14:15 +0000 UTC FinishedAt: 2026-08-19 09:35:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbm8mg[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 09:14:15 +0000 UTC FinishedAt: 2026-08-19 09:35:01 +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+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlcnNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIGEgQlBGIHNlbGZ0ZXN0IGluIHRvb2xzLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTY2ZDNjZTJhMzM5YmIzMDJhYzI5ZjEwMDg4NzBkYTdjZWE1ZTY3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA5OjM0OjMzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5pbmRleCA1MTRlNGU5ZGFhODI1Li4zNzkzNGNhNDlkZDdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuQEAgLTc3OSw2ICYjNDM7Nzc5LDEzIEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcbiBcdGNoYXIgKnRva2VuX3BhdGg7XG4gXHRpbnQgdG9rZW5fZmQ7XG4gXG4mIzQzO1x0Lyoga2VybmVsIG1vZHVsZSBCVEZzIHRvIGxvYWQsIGFzIHNwZWNpZmllZCB2aWEgYnBmX29iamVjdF9vcGVuX29wdHMgKi9cbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0Y2hhciAqKm5hbWVzO1xuJiM0MztcdFx0c2l6ZV90IG5yX25hbWVzO1xuJiM0MztcdFx0c3RydWN0IGhhc2htYXAgKm5hbWVzX21hcDtcbiYjNDM7XHR9ICprbW9kX2J0ZnM7XG4mIzQzO1xuIFx0Y2hhciBwYXRoW107XG4gfTtcbiBcbkBAIC01ODAzLDYgJiM0Mzs1ODEwLDEyMSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgc2l6ZV90IG1vZF9uYW1lX2hhc2hfZm4obG9uZyBrZXksIHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdHJfaGFzaCgoY2hhciAqKWtleSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG1vZF9uYW1lX2VxdWFsX2ZuKGxvbmcga2V5MSwgbG9uZyBrZXkyLCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3RyY21wKChjaGFyICopa2V5MSwgKGNoYXIgKilrZXkyKSA9PSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBicGZfb2JqZWN0X19mcmVlX2ttb2RfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1xuJiM0MztcdGlmICghb2JqLVx1MDAzZWttb2RfYnRmcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXMpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbnJfbmFtZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzW2ldKTtcbiYjNDM7XHRcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXMpO1xuJiM0MztcdH1cbiYjNDM7XHRoYXNobWFwX19mcmVlKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNfbWFwKTtcbiYjNDM7XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNla21vZF9idGZzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBicGZfb2JqZWN0X19pbml0X2ttb2RfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyAqb3B0cylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKiprbW9kX2J0Zl9uYW1lcztcbiYjNDM7XHRzaXplX3QgaSwga21vZF9idGZfbmFtZXNfY250O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGttb2RfYnRmX25hbWVzID0gT1BUU19HRVQob3B0cywga21vZF9idGZfbmFtZXMsIE5VTEwpO1xuJiM0MztcdGlmICgha21vZF9idGZfbmFtZXMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0a21vZF9idGZfbmFtZXNfY250ID0gT1BUU19HRVQob3B0cywga21vZF9idGZfbmFtZXNfY250LCAwKTtcbiYjNDM7XHRpZiAoIWttb2RfYnRmX25hbWVzX2NudCkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtrbW9kX2J0Zl9uYW1lc19jbnQgbXVzdCBiZSBzZXQgd2hlbiBrbW9kX2J0Zl9uYW1lcyBpcyBwcm92aWRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9iai1cdTAwM2VrbW9kX2J0ZnMgPSBjYWxsb2MoMSwgc2l6ZW9mKCpvYmotXHUwMDNla21vZF9idGZzKSk7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNla21vZF9idGZzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXMgPSBjYWxsb2Moa21vZF9idGZfbmFtZXNfY250LCBzaXplb2YoY2hhciAqKSk7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc19tYXAgPSBoYXNobWFwX19uZXcobW9kX25hbWVfaGFzaF9mbixcbiYjNDM7XHRcdFx0XHRcdFx0IG1vZF9uYW1lX2VxdWFsX2ZuLCBOVUxMKTtcbiYjNDM7XHRpZiAoSVNfRVJSKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNfbWFwKSkge1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzX21hcCk7XG4mIzQzO1x0XHRvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzX21hcCA9IE5VTEw7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrbW9kX2J0Zl9uYW1lc19jbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzaXplX3QgaWR4ID0gb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2Vucl9uYW1lcztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWttb2RfYnRmX25hbWVzW2ldIHx8ICFrbW9kX2J0Zl9uYW1lc1tpXVswXSkge1xuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O2ludmFsaWQga2VybmVsIG1vZHVsZSBCVEYgbmFtZSBhdCBpbmRleCAlenVcXG5cJiMzNDssIGkpO1xuJiM0MztcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0b2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc1tpZHhdID0gc3RyZHVwKGttb2RfYnRmX25hbWVzW2ldKTtcbiYjNDM7XHRcdGlmICghb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc1tpZHhdKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBoYXNobWFwX19hZGQob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc19tYXAsXG4mIzQzO1x0XHRcdFx0ICAgb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc1tpZHhdLCAwKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc1tpZHhdKTtcbiYjNDM7XHRcdFx0aWYgKGVyciA9PSAtRUVYSVNUKSB7XG4mIzQzO1x0XHRcdFx0cHJfd2FybihcJiMzNDtkdXBsaWNhdGUga21vZCBCVEYgbmFtZSAmIzM5OyVzJiMzOTsgaWdub3JlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdGttb2RfYnRmX25hbWVzW2ldKTtcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5yX25hbWVzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfb3V0OlxuJiM0MztcdGJwZl9vYmplY3RfX2ZyZWVfa21vZF9idGZzKG9iaik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaXNfa21vZF9idGZfbmVlZGVkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIW9iai1cdTAwM2VrbW9kX2J0ZnMgfHwgIW9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNfbWFwKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChoYXNobWFwX19maW5kKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNfbWFwLCBuYW1lLCBOVUxMKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtza2lwcGluZyBtb2R1bGUgQlRGICYjMzk7JXMmIzM5Oywgbm90IGluIGttb2RfYnRmX25hbWVzXFxuXCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGFsbF9uZWVkZWRfa21vZF9idGZzX2xvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG9iai1cdTAwM2VrbW9kX2J0ZnMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbnJfbmFtZXMgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbnJfbmFtZXMgPT0gb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBicGZfYnRmX2luZm8gaW5mbztcbkBAIC01ODY3LDYgJiM0Mzs1OTg5LDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoIWlzX2ttb2RfYnRmX25lZWRlZChvYmosIG5hbWUpKSB7XG4mIzQzO1x0XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRidGYgPSBidGZfZ2V0X2Zyb21fZmQoZmQsIG9iai1cdTAwM2VidGZfdm1saW51eCk7XG4gXHRcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTtcbiBcdFx0aWYgKGVycikge1xuQEAgLTU4OTEsNiAmIzQzOzYwMTgsOSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9jbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChhbGxfbmVlZGVkX2ttb2RfYnRmc19sb2FkZWQob2JqKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4gXHRpZiAoZXJyKSB7XG5AQCAtODUxNSw2ICYjNDM7ODY0NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsXG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2luaXRfbWFwcyhvYmosIG9wdHMpO1xuIFx0ZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X2luaXRfcHJvZ3Mob2JqLCBvcHRzKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9yZWxvcyhvYmopO1xuJiM0MztcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9faW5pdF9rbW9kX2J0ZnMob2JqLCBvcHRzKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTk2MjksNiAmIzQzOzk3NjAsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGNsb3NlKG9iai1cdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlanVtcHRhYmxlX21hcHMpO1xuIFxuJiM0MztcdGJwZl9vYmplY3RfX2ZyZWVfa21vZF9idGZzKG9iaik7XG4mIzQzO1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uMmY4ZmY2ZDJkM2RmNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0yMjQsMTAgJiM0MzsyMjQsMjQgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcbiBcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxuIFx0ICovXG4gXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuXG4mIzQzO1x0ICoga21vZF9idGZfbmFtZXNfY250IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW5cbiYjNDM7XHQgKiBrbW9kX2J0Zl9uYW1lcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElmIGttb2RfYnRmX25hbWVzIGlzIE5VTEwsIGFsbCBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkLCBwcmVzZXJ2aW5nXG4mIzQzO1x0ICogdGhlIGRlZmF1bHQgYmVoYXZpb3IuIE90aGVyd2lzZSwgb25seSB0aGUgc3BlY2lmaWVkIG1vZHVsZSBCVEZzXG4mIzQzO1x0ICogYXJlIGxvYWRlZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIGttb2RfYnRmX25hbWVzX2NudCBtdXN0IGJlIG5vbi16ZXJvIHdoZW4ga21vZF9idGZfbmFtZXMgaXNcbiYjNDM7XHQgKiBub24tTlVMTDsgb3RoZXJ3aXNlIC1FSU5WQUwgaXMgcmV0dXJuZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y29uc3QgY2hhciAqKmttb2RfYnRmX25hbWVzO1xuJiM0MztcdHNpemVfdCBrbW9kX2J0Zl9uYW1lc19jbnQ7XG4gXG4gXHRzaXplX3QgOjA7XG4gfTtcbi0jZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIGJwZl90b2tlbl9wYXRoXG4mIzQzOyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQga21vZF9idGZfbmFtZXNfY250XG4gXG4gLyoqXG4gICogQGJyaWVmICoqYnBmX29iamVjdF9fb3BlbigpKiogY3JlYXRlcyBhIGJwZl9vYmplY3QgYnkgb3BlbmluZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ttb2RfYnRmcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi42MWQyODQ1YTczMWZmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuY1xuQEAgLTAsMCAmIzQzOzEsMTk2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtrbW9kX2J0ZnMuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBidGZfc2tpcHBlZDtcbiYjNDM7c3RhdGljIGJvb2wgZHVwX2lnbm9yZWQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciBidGZfc2tpcF9mbXRbXSA9XG4mIzQzO1x0XCYjMzQ7bGliYnBmOiBza2lwcGluZyBtb2R1bGUgQlRGICYjMzk7JXMmIzM5Oywgbm90IGluIGttb2RfYnRmX25hbWVzXFxuXCYjMzQ7O1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciBkdXBfaWdub3JlX2ZtdFtdID1cbiYjNDM7XHRcJiMzNDtsaWJicGY6IGR1cGxpY2F0ZSBrbW9kIEJURiBuYW1lICYjMzk7JXMmIzM5OyBpZ25vcmVkXFxuXCYjMzQ7O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBsaWJicGZfcHJpbnRfY2IoZW51bSBsaWJicGZfcHJpbnRfbGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCxcbiYjNDM7XHRcdFx0ICAgdmFfbGlzdCBhcmdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFzdHJjbXAoZm10LCBidGZfc2tpcF9mbXQpKSB7XG4mIzQzO1x0XHRpZiAoIXN0cmNtcCh2YV9hcmcoYXJncywgY2hhciAqKSwgXCYjMzQ7YnBmX3Rlc3Rfbm9fY2ZpXCYjMzQ7KSlcbiYjNDM7XHRcdFx0YnRmX3NraXBwZWQgPSB0cnVlO1xuJiM0MztcdH0gZWxzZSBpZiAoIXN0cmNtcChmbXQsIGR1cF9pZ25vcmVfZm10KSkge1xuJiM0MztcdFx0aWYgKCFzdHJjbXAodmFfYXJnKGFyZ3MsIGNoYXIgKiksIFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7KSlcbiYjNDM7XHRcdFx0ZHVwX2lnbm9yZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGttb2RfYnRmc19wYXNzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHN0YXRpYyBjb25zdCBjaGFyICprbW9kc1tdID0geyBcJiMzNDticGZfdGVzdG1vZFwmIzM0OyB9O1xuJiM0MztcbiYjNDM7XHRERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuJiM0MztcdFx0Lmttb2RfYnRmX25hbWVzID0ga21vZHMsXG4mIzQzO1x0XHQua21vZF9idGZfbmFtZXNfY250ID0gMSxcbiYjNDM7XHQpO1xuJiM0MztcbiYjNDM7XHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2ttb2RfYnRmc19fb3Blbl9vcHRzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7XG4mIzQzO1x0QVNTRVJUX09LKHJldCwgXCYjMzQ7a21vZF9idGZzX19sb2FkXCYjMzQ7KTtcbiYjNDM7b3V0OlxuJiM0MztcdGttb2RfYnRmc19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga21vZF9idGZzX25vbmV4aXN0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHN0YXRpYyBjb25zdCBjaGFyICpub25leGlzdF9rbW9kc1tdID0geyBcJiMzNDttb2R1bGVfbm9uZXhpc3RcJiMzNDsgfTtcbiYjNDM7XG4mIzQzO1x0REVDTEFSRV9MSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5rbW9kX2J0Zl9uYW1lcyA9IG5vbmV4aXN0X2ttb2RzLFxuJiM0MztcdFx0Lmttb2RfYnRmX25hbWVzX2NudCA9IDEsXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbmx5IFwmIzM0O21vZHVsZV9ub25leGlzdFwmIzM0OyBpcyByZXF1ZXN0ZWQ7IHNpbmNlIGl0IGRvZXMgbm90IGV4aXN0IGluXG4mIzQzO1x0ICogdGhlIGtlcm5lbCwgbm8gbW9kdWxlIEJURiBnZXRzIGxvYWRlZC4gVGhlIEJQRiBwcm9ncmFtIHRoZW5cbiYjNDM7XHQgKiBmYWlscyB0byBsb2FkIGJlY2F1c2UgdGhlIHJlYWwgbmVlZGVkIG1vZHVsZSYjMzk7cyBCVEYgaXMgdW5hdmFpbGFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2tlbCA9IGttb2RfYnRmc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtrbW9kX2J0ZnNfX29wZW5fb3B0c1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga21vZF9idGZzX19sb2FkKHNrZWwpO1xuJiM0MztcdEFTU0VSVF9FUlIocmV0LCBcJiMzNDtrbW9kX2J0ZnNfX2xvYWRcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGttb2RfYnRmc19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga21vZF9idGZzX2R1cCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGttb2RfYnRmcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0bGliYnBmX3ByaW50X2ZuX3Qgb2xkX3ByaW50X2NiO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGNoYXIgKmR1cF9rbW9kc1tdID0geyBcJiMzNDticGZfdGVzdG1vZFwmIzM0OywgXCYjMzQ7YnBmX3Rlc3Rtb2RcJiMzNDsgfTtcbiYjNDM7XG4mIzQzO1x0LyogZHVwbGljYXRlIGVudHJ5IG9uIHB1cnBvc2U6IGxpYmJwZiBzaG91bGQgZGVkdXBlIGl0IHdpdGggYSB3YXJuaW5nICovXG4mIzQzO1x0REVDTEFSRV9MSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5rbW9kX2J0Zl9uYW1lcyA9IGR1cF9rbW9kcyxcbiYjNDM7XHRcdC5rbW9kX2J0Zl9uYW1lc19jbnQgPSAyLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdGR1cF9pZ25vcmVkID0gZmFsc2U7XG4mIzQzO1x0b2xkX3ByaW50X2NiID0gbGliYnBmX3NldF9wcmludChsaWJicGZfcHJpbnRfY2IpO1xuJiM0MztcbiYjNDM7XHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2ttb2RfYnRmc19fb3Blbl9vcHRzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfVFJVRShkdXBfaWdub3JlZCwgXCYjMzQ7ZHVwX2lnbm9yZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7XG4mIzQzO1x0QVNTRVJUX09LKHJldCwgXCYjMzQ7a21vZF9idGZzX19sb2FkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0a21vZF9idGZzX19kZXN0cm95KHNrZWwpO1xuJiM0MztvdXQ6XG4mIzQzO1x0bGliYnBmX3NldF9wcmludChvbGRfcHJpbnRfY2IpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfc2tpcCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGttb2RfYnRmcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0bGliYnBmX3ByaW50X2ZuX3Qgb2xkX3ByaW50X2NiO1xuJiM0MztcdGJvb2wgdGVzdG1vZF91bmxvYWRlZCA9IGZhbHNlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGNoYXIgKmttb2RzW10gPSB7IFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7IH07XG4mIzQzO1xuJiM0MztcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4mIzQzO1x0XHQua21vZF9idGZfbmFtZXMgPSBrbW9kcyxcbiYjNDM7XHRcdC5rbW9kX2J0Zl9uYW1lc19jbnQgPSAxLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdGJ0Zl9za2lwcGVkID0gZmFsc2U7XG4mIzQzO1x0b2xkX3ByaW50X2NiID0gbGliYnBmX3NldF9wcmludChsaWJicGZfcHJpbnRfY2IpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlbG9hZCBicGZfdGVzdG1vZCBhZnRlciBicGZfdGVzdF9ub19jZmkgdG8gZW5zdXJlIHRoZSB1bm5lZWRlZFxuJiM0MztcdCAqIG1vZHVsZSYjMzk7cyBCVEYgaXMgZW51bWVyYXRlZCBmaXJzdCBhbmQgc2tpcHBlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyh1bmxvYWRfYnBmX3Rlc3Rtb2QoZmFsc2UpLCBcJiMzNDt1bmxvYWQgYnBmX3Rlc3Rtb2RcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwX3ByaW50O1xuJiM0MztcdHRlc3Rtb2RfdW5sb2FkZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhsb2FkX21vZHVsZShcJiMzNDticGZfdGVzdF9ub19jZmkua29cJiMzNDssIGZhbHNlKSxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtsb2FkIHVubmVlZGVkIGJwZl90ZXN0X25vX2NmaSBtb2R1bGVcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwX3ByaW50O1xuJiM0MztcdGlmICghQVNTRVJUX09LKGxvYWRfYnBmX3Rlc3Rtb2QoZmFsc2UpLCBcJiMzNDtyZXN0b3JlIGJwZl90ZXN0bW9kXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cF9tb2R1bGU7XG4mIzQzO1x0dGVzdG1vZF91bmxvYWRlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2ttb2RfYnRmc19fb3Blbl9vcHRzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cF9tb2R1bGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGttb2RfYnRmc19fbG9hZChza2VsKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O2ttb2RfYnRmc19fbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXBfc2tlbDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX1RSVUUoYnRmX3NraXBwZWQsIFwmIzM0O2J0Zl9za2lwcGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO2NsZWFudXBfc2tlbDpcbiYjNDM7XHRrbW9kX2J0ZnNfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO2NsZWFudXBfbW9kdWxlOlxuJiM0MztcdEFTU0VSVF9PSyh1bmxvYWRfbW9kdWxlKFwmIzM0O2JwZl90ZXN0X25vX2NmaVwmIzM0OywgZmFsc2UpLFxuJiM0MztcdFx0ICBcJiMzNDt1bmxvYWQgdW5uZWVkZWQgYnBmX3Rlc3Rfbm9fY2ZpIG1vZHVsZVwmIzM0Oyk7XG4mIzQzO2NsZWFudXBfcHJpbnQ6XG4mIzQzO1x0aWYgKHRlc3Rtb2RfdW5sb2FkZWQpXG4mIzQzO1x0XHRBU1NFUlRfT0sobG9hZF9icGZfdGVzdG1vZChmYWxzZSksXG4mIzQzO1x0XHRcdCAgXCYjMzQ7cmVzdG9yZSBicGZfdGVzdG1vZCBvbiBlcnJvciBwYXRoXCYjMzQ7KTtcbiYjNDM7XHRsaWJicGZfc2V0X3ByaW50KG9sZF9wcmludF9jYik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGttb2RfYnRmc19ub19jbnQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrbW9kX2J0ZnMgKnNrZWwgPSBOVUxMO1xuJiM0MztcdHN0YXRpYyBjb25zdCBjaGFyICprbW9kc1tdID0geyBcJiMzNDticGZfdGVzdG1vZFwmIzM0OyB9O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGttb2RfYnRmX25hbWVzIHNldCBidXQga21vZF9idGZfbmFtZXNfY250IG5vdCBzZXQ6XG4mIzQzO1x0ICogb3BlbiBtdXN0IGZhaWwgd2l0aCAtRUlOVkFMLlxuJiM0MztcdCAqL1xuJiM0MztcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4mIzQzO1x0XHQua21vZF9idGZfbmFtZXMgPSBrbW9kcyxcbiYjNDM7XHQpO1xuJiM0MztcbiYjNDM7XHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0QVNTRVJUX05VTEwoc2tlbCwgXCYjMzQ7a21vZF9idGZzX19vcGVuX29wdHMgd2l0aG91dCBrbW9kX2J0Zl9uYW1lc19jbnRcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2ttb2RfYnRmcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2ttb2RfYnRmc19wYXNzXCYjMzQ7KSlcbiYjNDM7XHRcdGttb2RfYnRmc19wYXNzKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2ttb2RfYnRmc19ub25leGlzdFwmIzM0OykpXG4mIzQzO1x0XHRrbW9kX2J0ZnNfbm9uZXhpc3QoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7a21vZF9idGZzX2R1cFwmIzM0OykpXG4mIzQzO1x0XHRrbW9kX2J0ZnNfZHVwKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2ttb2RfYnRmc19za2lwXCYjMzQ7KSlcbiYjNDM7XHRcdGttb2RfYnRmc19za2lwKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2ttb2RfYnRmc19ub19jbnRcJiMzNDspKVxuJiM0MztcdFx0a21vZF9idGZzX25vX2NudCgpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjk2ODYwZDYwZTBkYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmcy5jXG5AQCAtMCwwICYjNDM7MSwxMyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRlc3Rfa21vZF9idGZzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXJzcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgYWRkcyBhIEJQRiBzZWxmdGVzdCBpbiB0b29scy8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk2NmQzY2UyYTMzOWJiMzAyYWMyOWYxMDA4ODcwZGE3Y2VhNWU2N2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTozNDozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCmluZGV4IDUxNGU0ZTlkYWE4MjUuLjM3OTM0Y2E0OWRkN2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwpAQCAtNzc5LDYgJiM0Mzs3NzksMTMgQEAgc3RydWN0IGJwZl9vYmplY3QgewogCWNoYXIgKnRva2VuX3BhdGg7CiAJaW50IHRva2VuX2ZkOwogCiYjNDM7CS8qIGtlcm5lbCBtb2R1bGUgQlRGcyB0byBsb2FkLCBhcyBzcGVjaWZpZWQgdmlhIGJwZl9vYmplY3Rfb3Blbl9vcHRzICovCiYjNDM7CXN0cnVjdCB7CiYjNDM7CQljaGFyICoqbmFtZXM7CiYjNDM7CQlzaXplX3QgbnJfbmFtZXM7CiYjNDM7CQlzdHJ1Y3QgaGFzaG1hcCAqbmFtZXNfbWFwOwomIzQzOwl9ICprbW9kX2J0ZnM7CiYjNDM7CiAJY2hhciBwYXRoW107CiB9OwogCkBAIC01ODAzLDYgJiM0Mzs1ODEwLDEyMSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCBtb2RfbmFtZV9oYXNoX2ZuKGxvbmcga2V5LCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3RyX2hhc2goKGNoYXIgKilrZXkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBtb2RfbmFtZV9lcXVhbF9mbihsb25nIGtleTEsIGxvbmcga2V5Miwgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0cmNtcCgoY2hhciAqKWtleTEsIChjaGFyICopa2V5MikgPT0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnBmX29iamVjdF9fZnJlZV9rbW9kX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKJiM0Mzt7CiYjNDM7CXNpemVfdCBpOwomIzQzOwomIzQzOwlpZiAoIW9iai0mZ3Q7a21vZF9idGZzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAob2JqLSZndDtrbW9kX2J0ZnMtJmd0O25hbWVzKSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgb2JqLSZndDtrbW9kX2J0ZnMtJmd0O25yX25hbWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQl6ZnJlZSgmYW1wO29iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lc1tpXSk7CiYjNDM7CQl6ZnJlZSgmYW1wO29iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lcyk7CiYjNDM7CX0KJiM0MzsJaGFzaG1hcF9fZnJlZShvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7bmFtZXNfbWFwKTsKJiM0MzsJemZyZWUoJmFtcDtvYmotJmd0O2ttb2RfYnRmcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX29iamVjdF9faW5pdF9rbW9kX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqKmttb2RfYnRmX25hbWVzOwomIzQzOwlzaXplX3QgaSwga21vZF9idGZfbmFtZXNfY250OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlrbW9kX2J0Zl9uYW1lcyA9IE9QVFNfR0VUKG9wdHMsIGttb2RfYnRmX25hbWVzLCBOVUxMKTsKJiM0MzsJaWYgKCFrbW9kX2J0Zl9uYW1lcykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlrbW9kX2J0Zl9uYW1lc19jbnQgPSBPUFRTX0dFVChvcHRzLCBrbW9kX2J0Zl9uYW1lc19jbnQsIDApOwomIzQzOwlpZiAoIWttb2RfYnRmX25hbWVzX2NudCkgewomIzQzOwkJcHJfd2FybigmIzM0O2ttb2RfYnRmX25hbWVzX2NudCBtdXN0IGJlIHNldCB3aGVuIGttb2RfYnRmX25hbWVzIGlzIHByb3ZpZGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlvYmotJmd0O2ttb2RfYnRmcyA9IGNhbGxvYygxLCBzaXplb2YoKm9iai0mZ3Q7a21vZF9idGZzKSk7CiYjNDM7CWlmICghb2JqLSZndDtrbW9kX2J0ZnMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJb2JqLSZndDtrbW9kX2J0ZnMtJmd0O25hbWVzID0gY2FsbG9jKGttb2RfYnRmX25hbWVzX2NudCwgc2l6ZW9mKGNoYXIgKikpOwomIzQzOwlpZiAoIW9iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lcykgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7bmFtZXNfbWFwID0gaGFzaG1hcF9fbmV3KG1vZF9uYW1lX2hhc2hfZm4sCiYjNDM7CQkJCQkJIG1vZF9uYW1lX2VxdWFsX2ZuLCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7bmFtZXNfbWFwKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7bmFtZXNfbWFwKTsKJiM0MzsJCW9iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lc19tYXAgPSBOVUxMOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBrbW9kX2J0Zl9uYW1lc19jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzaXplX3QgaWR4ID0gb2JqLSZndDtrbW9kX2J0ZnMtJmd0O25yX25hbWVzOwomIzQzOwomIzQzOwkJaWYgKCFrbW9kX2J0Zl9uYW1lc1tpXSB8fCAha21vZF9idGZfbmFtZXNbaV1bMF0pIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7aW52YWxpZCBrZXJuZWwgbW9kdWxlIEJURiBuYW1lIGF0IGluZGV4ICV6dVxuJiMzNDssIGkpOwomIzQzOwkJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byBlcnJfb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJb2JqLSZndDtrbW9kX2J0ZnMtJmd0O25hbWVzW2lkeF0gPSBzdHJkdXAoa21vZF9idGZfbmFtZXNbaV0pOwomIzQzOwkJaWYgKCFvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7bmFtZXNbaWR4XSkgewomIzQzOwkJCWVyciA9IC1FTk9NRU07CiYjNDM7CQkJZ290byBlcnJfb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0gaGFzaG1hcF9fYWRkKG9iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lc19tYXAsCiYjNDM7CQkJCSAgIG9iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lc1tpZHhdLCAwKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQl6ZnJlZSgmYW1wO29iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lc1tpZHhdKTsKJiM0MzsJCQlpZiAoZXJyID09IC1FRVhJU1QpIHsKJiM0MzsJCQkJcHJfd2FybigmIzM0O2R1cGxpY2F0ZSBrbW9kIEJURiBuYW1lICYjMzk7JXMmIzM5OyBpZ25vcmVkXG4mIzM0OywKJiM0MzsJCQkJCWttb2RfYnRmX25hbWVzW2ldKTsKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJfQomIzQzOwkJCWdvdG8gZXJyX291dDsKJiM0MzsJCX0KJiM0MzsJCW9iai0mZ3Q7a21vZF9idGZzLSZndDtucl9uYW1lcyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX291dDoKJiM0MzsJYnBmX29iamVjdF9fZnJlZV9rbW9kX2J0ZnMob2JqKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgaXNfa21vZF9idGZfbmVlZGVkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlpZiAoIW9iai0mZ3Q7a21vZF9idGZzIHx8ICFvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7bmFtZXNfbWFwKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWlmIChoYXNobWFwX19maW5kKG9iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lc19tYXAsIG5hbWUsIE5VTEwpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXByX2RlYnVnKCYjMzQ7c2tpcHBpbmcgbW9kdWxlIEJURiAmIzM5OyVzJiMzOTssIG5vdCBpbiBrbW9kX2J0Zl9uYW1lc1xuJiMzNDssIG5hbWUpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGFsbF9uZWVkZWRfa21vZF9idGZzX2xvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQomIzQzO3sKJiM0MzsJcmV0dXJuIG9iai0mZ3Q7a21vZF9idGZzICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIG9iai0mZ3Q7a21vZF9idGZzLSZndDtucl9uYW1lcyAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgb2JqLSZndDtrbW9kX2J0ZnMtJmd0O25yX25hbWVzID09IG9iai0mZ3Q7YnRmX21vZHVsZV9jbnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IGJwZl9idGZfaW5mbyBpbmZvOwpAQCAtNTg2Nyw2ICYjNDM7NTk4OSwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCWlmICghaXNfa21vZF9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHsKJiM0MzsJCQljbG9zZShmZCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCWJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLSZndDtidGZfdm1saW51eCk7CiAJCWVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTsKIAkJaWYgKGVycikgewpAQCAtNTg5MSw2ICYjNDM7NjAxOCw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCQkJYnJlYWs7CiAJCX0KIAkJb2JqLSZndDtidGZfbW9kdWxlX2NudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoYWxsX25lZWRlZF9rbW9kX2J0ZnNfbG9hZGVkKG9iaikpCiYjNDM7CQkJYnJlYWs7CiAJfQogCiAJaWYgKGVycikgewpAQCAtODUxNSw2ICYjNDM7ODY0NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsCiAJZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19pbml0X21hcHMob2JqLCBvcHRzKTsKIAllcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfaW5pdF9wcm9ncyhvYmosIG9wdHMpOwogCWVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9yZWxvcyhvYmopOwomIzQzOwllcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2luaXRfa21vZF9idGZzKG9iaiwgb3B0cyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTk2MjksNiAmIzQzOzk3NjAsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCWNsb3NlKG9iai0mZ3Q7anVtcHRhYmxlX21hcHNbaV0uZmQpOwogCXpmcmVlKCZhbXA7b2JqLSZndDtqdW1wdGFibGVfbWFwcyk7CiAKJiM0MzsJYnBmX29iamVjdF9fZnJlZV9rbW9kX2J0ZnMob2JqKTsKJiM0MzsKIAlmcmVlKG9iaik7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oCmluZGV4IGI5NjVhZDU3MTU0MDMuLjJmOGZmNmQyZDNkZjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuaApAQCAtMjI0LDEwICYjNDM7MjI0LDI0IEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7CiAJICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuCiAJICovCiAJY29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7CiYjNDM7CS8qCiYjNDM7CSAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuCiYjNDM7CSAqIGttb2RfYnRmX25hbWVzX2NudCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluCiYjNDM7CSAqIGttb2RfYnRmX25hbWVzLgomIzQzOwkgKgomIzQzOwkgKiBJZiBrbW9kX2J0Zl9uYW1lcyBpcyBOVUxMLCBhbGwgbW9kdWxlIEJURnMgYXJlIGxvYWRlZCwgcHJlc2VydmluZwomIzQzOwkgKiB0aGUgZGVmYXVsdCBiZWhhdmlvci4gT3RoZXJ3aXNlLCBvbmx5IHRoZSBzcGVjaWZpZWQgbW9kdWxlIEJURnMKJiM0MzsJICogYXJlIGxvYWRlZC4KJiM0MzsJICoKJiM0MzsJICoga21vZF9idGZfbmFtZXNfY250IG11c3QgYmUgbm9uLXplcm8gd2hlbiBrbW9kX2J0Zl9uYW1lcyBpcwomIzQzOwkgKiBub24tTlVMTDsgb3RoZXJ3aXNlIC1FSU5WQUwgaXMgcmV0dXJuZWQuCiYjNDM7CSAqLwomIzQzOwljb25zdCBjaGFyICoqa21vZF9idGZfbmFtZXM7CiYjNDM7CXNpemVfdCBrbW9kX2J0Zl9uYW1lc19jbnQ7CiAKIAlzaXplX3QgOjA7CiB9OwotI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aAomIzQzOyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQga21vZF9idGZfbmFtZXNfY250CiAKIC8qKgogICogQGJyaWVmICoqYnBmX29iamVjdF9fb3BlbigpKiogY3JlYXRlcyBhIGJwZl9vYmplY3QgYnkgb3BlbmluZwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi42MWQyODQ1YTczMWZmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmMKQEAgLTAsMCAmIzQzOzEsMTk2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7a21vZF9idGZzLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYnRmX3NraXBwZWQ7CiYjNDM7c3RhdGljIGJvb2wgZHVwX2lnbm9yZWQ7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgYnRmX3NraXBfZm10W10gPQomIzQzOwkmIzM0O2xpYmJwZjogc2tpcHBpbmcgbW9kdWxlIEJURiAmIzM5OyVzJiMzOTssIG5vdCBpbiBrbW9kX2J0Zl9uYW1lc1xuJiMzNDs7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZHVwX2lnbm9yZV9mbXRbXSA9CiYjNDM7CSYjMzQ7bGliYnBmOiBkdXBsaWNhdGUga21vZCBCVEYgbmFtZSAmIzM5OyVzJiMzOTsgaWdub3JlZFxuJiMzNDs7CiYjNDM7CiYjNDM7c3RhdGljIGludCBsaWJicGZfcHJpbnRfY2IoZW51bSBsaWJicGZfcHJpbnRfbGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwKJiM0MzsJCQkgICB2YV9saXN0IGFyZ3MpCiYjNDM7ewomIzQzOwlpZiAoIXN0cmNtcChmbXQsIGJ0Zl9za2lwX2ZtdCkpIHsKJiM0MzsJCWlmICghc3RyY21wKHZhX2FyZyhhcmdzLCBjaGFyICopLCAmIzM0O2JwZl90ZXN0X25vX2NmaSYjMzQ7KSkKJiM0MzsJCQlidGZfc2tpcHBlZCA9IHRydWU7CiYjNDM7CX0gZWxzZSBpZiAoIXN0cmNtcChmbXQsIGR1cF9pZ25vcmVfZm10KSkgewomIzQzOwkJaWYgKCFzdHJjbXAodmFfYXJnKGFyZ3MsIGNoYXIgKiksICYjMzQ7YnBmX3Rlc3Rtb2QmIzM0OykpCiYjNDM7CQkJZHVwX2lnbm9yZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfcGFzcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGttb2RfYnRmcyAqc2tlbCA9IE5VTEw7CiYjNDM7CWludCByZXQ7CiYjNDM7CXN0YXRpYyBjb25zdCBjaGFyICprbW9kc1tdID0geyAmIzM0O2JwZl90ZXN0bW9kJiMzNDsgfTsKJiM0MzsKJiM0MzsJREVDTEFSRV9MSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cywKJiM0MzsJCS5rbW9kX2J0Zl9uYW1lcyA9IGttb2RzLAomIzQzOwkJLmttb2RfYnRmX25hbWVzX2NudCA9IDEsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXNrZWwgPSBrbW9kX2J0ZnNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtrbW9kX2J0ZnNfX29wZW5fb3B0cyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7a21vZF9idGZzX19sb2FkJiMzNDspOwomIzQzO291dDoKJiM0MzsJa21vZF9idGZzX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfbm9uZXhpc3Qodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrbW9kX2J0ZnMgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwlzdGF0aWMgY29uc3QgY2hhciAqbm9uZXhpc3Rfa21vZHNbXSA9IHsgJiMzNDttb2R1bGVfbm9uZXhpc3QmIzM0OyB9OwomIzQzOwomIzQzOwlERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmttb2RfYnRmX25hbWVzID0gbm9uZXhpc3Rfa21vZHMsCiYjNDM7CQkua21vZF9idGZfbmFtZXNfY250ID0gMSwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT25seSAmIzM0O21vZHVsZV9ub25leGlzdCYjMzQ7IGlzIHJlcXVlc3RlZDsgc2luY2UgaXQgZG9lcyBub3QgZXhpc3QgaW4KJiM0MzsJICogdGhlIGtlcm5lbCwgbm8gbW9kdWxlIEJURiBnZXRzIGxvYWRlZC4gVGhlIEJQRiBwcm9ncmFtIHRoZW4KJiM0MzsJICogZmFpbHMgdG8gbG9hZCBiZWNhdXNlIHRoZSByZWFsIG5lZWRlZCBtb2R1bGUmIzM5O3MgQlRGIGlzIHVuYXZhaWxhYmxlLgomIzQzOwkgKi8KJiM0MzsJc2tlbCA9IGttb2RfYnRmc19fb3Blbl9vcHRzKCZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2ttb2RfYnRmc19fb3Blbl9vcHRzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGttb2RfYnRmc19fbG9hZChza2VsKTsKJiM0MzsJQVNTRVJUX0VSUihyZXQsICYjMzQ7a21vZF9idGZzX19sb2FkJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJa21vZF9idGZzX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfZHVwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDsKJiM0MzsJbGliYnBmX3ByaW50X2ZuX3Qgb2xkX3ByaW50X2NiOwomIzQzOwlpbnQgcmV0OwomIzQzOwlzdGF0aWMgY29uc3QgY2hhciAqZHVwX2ttb2RzW10gPSB7ICYjMzQ7YnBmX3Rlc3Rtb2QmIzM0OywgJiMzNDticGZfdGVzdG1vZCYjMzQ7IH07CiYjNDM7CiYjNDM7CS8qIGR1cGxpY2F0ZSBlbnRyeSBvbiBwdXJwb3NlOiBsaWJicGYgc2hvdWxkIGRlZHVwZSBpdCB3aXRoIGEgd2FybmluZyAqLwomIzQzOwlERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmttb2RfYnRmX25hbWVzID0gZHVwX2ttb2RzLAomIzQzOwkJLmttb2RfYnRmX25hbWVzX2NudCA9IDIsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CWR1cF9pZ25vcmVkID0gZmFsc2U7CiYjNDM7CW9sZF9wcmludF9jYiA9IGxpYmJwZl9zZXRfcHJpbnQobGliYnBmX3ByaW50X2NiKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGttb2RfYnRmc19fb3Blbl9vcHRzKCZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2ttb2RfYnRmc19fb3Blbl9vcHRzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9UUlVFKGR1cF9pZ25vcmVkLCAmIzM0O2R1cF9pZ25vcmVkJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7a21vZF9idGZzX19sb2FkJiMzNDspOwomIzQzOwomIzQzOwlrbW9kX2J0ZnNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7b3V0OgomIzQzOwlsaWJicGZfc2V0X3ByaW50KG9sZF9wcmludF9jYik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGttb2RfYnRmc19za2lwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDsKJiM0MzsJbGliYnBmX3ByaW50X2ZuX3Qgb2xkX3ByaW50X2NiOwomIzQzOwlib29sIHRlc3Rtb2RfdW5sb2FkZWQgPSBmYWxzZTsKJiM0MzsJaW50IHJldDsKJiM0MzsJc3RhdGljIGNvbnN0IGNoYXIgKmttb2RzW10gPSB7ICYjMzQ7YnBmX3Rlc3Rtb2QmIzM0OyB9OwomIzQzOwomIzQzOwlERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmttb2RfYnRmX25hbWVzID0ga21vZHMsCiYjNDM7CQkua21vZF9idGZfbmFtZXNfY250ID0gMSwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJYnRmX3NraXBwZWQgPSBmYWxzZTsKJiM0MzsJb2xkX3ByaW50X2NiID0gbGliYnBmX3NldF9wcmludChsaWJicGZfcHJpbnRfY2IpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWxvYWQgYnBmX3Rlc3Rtb2QgYWZ0ZXIgYnBmX3Rlc3Rfbm9fY2ZpIHRvIGVuc3VyZSB0aGUgdW5uZWVkZWQKJiM0MzsJICogbW9kdWxlJiMzOTtzIEJURiBpcyBlbnVtZXJhdGVkIGZpcnN0IGFuZCBza2lwcGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFBU1NFUlRfT0sodW5sb2FkX2JwZl90ZXN0bW9kKGZhbHNlKSwgJiMzNDt1bmxvYWQgYnBmX3Rlc3Rtb2QmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXBfcHJpbnQ7CiYjNDM7CXRlc3Rtb2RfdW5sb2FkZWQgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhsb2FkX21vZHVsZSgmIzM0O2JwZl90ZXN0X25vX2NmaS5rbyYjMzQ7LCBmYWxzZSksCiYjNDM7CQkgICAgICAgJiMzNDtsb2FkIHVubmVlZGVkIGJwZl90ZXN0X25vX2NmaSBtb2R1bGUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXBfcHJpbnQ7CiYjNDM7CWlmICghQVNTRVJUX09LKGxvYWRfYnBmX3Rlc3Rtb2QoZmFsc2UpLCAmIzM0O3Jlc3RvcmUgYnBmX3Rlc3Rtb2QmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXBfbW9kdWxlOwomIzQzOwl0ZXN0bW9kX3VubG9hZGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXNrZWwgPSBrbW9kX2J0ZnNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtrbW9kX2J0ZnNfX29wZW5fb3B0cyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cF9tb2R1bGU7CiYjNDM7CiYjNDM7CXJldCA9IGttb2RfYnRmc19fbG9hZChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2ttb2RfYnRmc19fbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cF9za2VsOwomIzQzOwomIzQzOwlBU1NFUlRfVFJVRShidGZfc2tpcHBlZCwgJiMzNDtidGZfc2tpcHBlZCYjMzQ7KTsKJiM0MzsKJiM0MztjbGVhbnVwX3NrZWw6CiYjNDM7CWttb2RfYnRmc19fZGVzdHJveShza2VsKTsKJiM0MztjbGVhbnVwX21vZHVsZToKJiM0MzsJQVNTRVJUX09LKHVubG9hZF9tb2R1bGUoJiMzNDticGZfdGVzdF9ub19jZmkmIzM0OywgZmFsc2UpLAomIzQzOwkJICAmIzM0O3VubG9hZCB1bm5lZWRlZCBicGZfdGVzdF9ub19jZmkgbW9kdWxlJiMzNDspOwomIzQzO2NsZWFudXBfcHJpbnQ6CiYjNDM7CWlmICh0ZXN0bW9kX3VubG9hZGVkKQomIzQzOwkJQVNTRVJUX09LKGxvYWRfYnBmX3Rlc3Rtb2QoZmFsc2UpLAomIzQzOwkJCSAgJiMzNDtyZXN0b3JlIGJwZl90ZXN0bW9kIG9uIGVycm9yIHBhdGgmIzM0Oyk7CiYjNDM7CWxpYmJwZl9zZXRfcHJpbnQob2xkX3ByaW50X2NiKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga21vZF9idGZzX25vX2NudCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGttb2RfYnRmcyAqc2tlbCA9IE5VTEw7CiYjNDM7CXN0YXRpYyBjb25zdCBjaGFyICprbW9kc1tdID0geyAmIzM0O2JwZl90ZXN0bW9kJiMzNDsgfTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICoga21vZF9idGZfbmFtZXMgc2V0IGJ1dCBrbW9kX2J0Zl9uYW1lc19jbnQgbm90IHNldDoKJiM0MzsJICogb3BlbiBtdXN0IGZhaWwgd2l0aCAtRUlOVkFMLgomIzQzOwkgKi8KJiM0MzsJREVDTEFSRV9MSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cywKJiM0MzsJCS5rbW9kX2J0Zl9uYW1lcyA9IGttb2RzLAomIzQzOwkpOwomIzQzOwomIzQzOwlza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJQVNTRVJUX05VTEwoc2tlbCwgJiMzNDtrbW9kX2J0ZnNfX29wZW5fb3B0cyB3aXRob3V0IGttb2RfYnRmX25hbWVzX2NudCYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9rbW9kX2J0ZnModm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghZW52Lmhhc190ZXN0bW9kKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtrbW9kX2J0ZnNfcGFzcyYjMzQ7KSkKJiM0MzsJCWttb2RfYnRmc19wYXNzKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7a21vZF9idGZzX25vbmV4aXN0JiMzNDspKQomIzQzOwkJa21vZF9idGZzX25vbmV4aXN0KCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7a21vZF9idGZzX2R1cCYjMzQ7KSkKJiM0MzsJCWttb2RfYnRmc19kdXAoKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtrbW9kX2J0ZnNfc2tpcCYjMzQ7KSkKJiM0MzsJCWttb2RfYnRmc19za2lwKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7a21vZF9idGZzX25vX2NudCYjMzQ7KSkKJiM0MzsJCWttb2RfYnRmc19ub19jbnQoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjk2ODYwZDYwZTBkYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuYwpAQCAtMCwwICYjNDM7MSwxMyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfdGVzdG1vZF9sb29wX3Rlc3QmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9rbW9kX2J0ZnMpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTQwCgkJCQkJCQlvdXRwdXQ6IDY1CgkJCQkJCQl0aG91Z2h0czogODExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIHNvbWUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGxvYWRpbmcga2VybmVsIG1vZHVsZSBCVEZzLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgYnBmX29iamVjdF9vcGVuX29wdHNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgbG9jYXRlZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhbGwgd2l0aGluIGB0b29scy9saWIvYnBmL2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnIOKAkyBpdCYjMzk7cyBhbGwgaW4gdXNlcnNwYWNlLCBhbmQgbm8ga2VybmVsIGNvZGUgaXMgdG91Y2hlZC4gVGhpcyBzZWVtcyBpbXBvcnRhbnQuCgpJIHRoZW4gY29uc2lkZXJlZCB3aGV0aGVyIGBsaWJicGZgIGhhcyBhbnkgaW4ta2VybmVsIGNvbXBvbmVudHMsIGJ1dCBxdWlja2x5IHJlbWluZGVkIG15c2VsZiB0aGF0IGl0JiMzOTtzIGEgdXNlcnNwYWNlIGxpYnJhcnkgdXNlZCBmb3IgbG9hZGluZyBCUEYgcHJvZ3JhbXMgaW50byB0aGUga2VybmVsLiBTbywgdGhlIGRpcmVjdCBpbXBhY3Qgb24gdGhlIGtlcm5lbCYjMzk7cyBleGVjdXRpb24gZmxvdyBzZWVtcyBtaW5pbWFsLCBvciByYXRoZXIsIGluZGlyZWN0LiBUaGUgcGF0Y2ggaXRzZWxmIGlzICpqdXN0KiBhIHVzZXJzcGFjZSBjaGFuZ2UuCgpUaGUgbmV4dCB0aGluZyB0aGF0IHBvcHBlZCBpbnRvIG15IGhlYWQgd2FzIFN5emthbGxlciBhbmQgaXRzIHJvbGUgaW4ga2VybmVsIGZ1enppbmcuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGNvZGUgY2hhbmdlcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scy4gU28gdGhlIGFuc3dlciBzaG91bGQgYmUgbm8uCgpUbyBjb25maXJtIG15IGV2YWx1YXRpb24sIEkgZGlkIGFub3RoZXIgcXVpY2sgY2hlY2sgb2YgdGhlIGRpZmYgYWdhaW4sIGNvbmZpcm1pbmcgbm8ga2VybmVsIGNoYW5nZXMuCgpUaGlzIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgdGhhdCB3ZSBkb24mIzM5O3QgdHlwaWNhbGx5IGZ1enogdXNlcnNwYWNlIGxpYnJhcmllcyBkaXJlY3RseSB3aXRoIFN5emthbGxlci4gTXkgZmluYWwgZGVjaXNpb24gaXMgYmFzZWQgb24gdGhlIGxvZ2ljIHRoYXQgY2hhbmdlcyB0byBgbGliYnBmYCBhbmQgc2VsZiB0ZXN0cyBzaG91bGRuJiMzOTt0IG5lY2Vzc2l0YXRlIGtlcm5lbCBmdXp6aW5nLgoKSSB0aGVuIHJldmlzaXRlZCB0aGUgaW5zdHJ1Y3Rpb25zLiBJdCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IGxpc3QgJiMzNDt1c2Vyc3BhY2UgdG9vbHMmIzM0OywgYnV0IGl0IGRvZXMgbGlzdCBzZXZlcmFsIGl0ZW1zIHRoYXQgaW5kaWNhdGUgbm9uLWZ1enphYmxlIGNoYW5nZXMsIHN1Y2ggYXMgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBhbmQgdW4tcmVhY2hhYmxlIGNvZGUgcGF0aHMuIFRoZSBjcml0ZXJpYSBzZWVtIG1vcmUgZm9jdXNlZCBvbiAqa2VybmVsKiBtb2RpZmljYXRpb25zLiBUaGUgcmVsZXZhbnQgc3RhdGVtZW50IGlzLCAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsgU2luY2UgdGhpcyBwYXRjaCBkb2VzICpub25lKiBvZiB0aGF0LCBJIGNhbiBjb25maWRlbnRseSBzYXkgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlcnNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIGEgQlBGIHNlbGZ0ZXN0IGluIHRvb2xzLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2Vyc3BhY2UgbGliYnBmIGxpYnJhcnkgYW5kIGFkZHMgYSBCUEYgc2VsZnRlc3QgaW4gdG9vbHMvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjM0OjM0LjkyMzc4MDgxMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODYxNDAzOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlcnNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIGEgQlBGIHNlbGZ0ZXN0IGluIHRvb2xzLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozNDozNC45MjM3ODgxMjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1ODgxMDIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk2NmQzY2UyYTMzOWJiMzAyYWMyOWYxMDA4ODcwZGE3Y2VhNWU2N2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDk6MzQ6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5pbmRleCA1MTRlNGU5ZGFhODI1Li4zNzkzNGNhNDlkZDdmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuQEAgLTc3OSw2ICs3NzksMTMgQEAgc3RydWN0IGJwZl9vYmplY3Qge1xcbiBcXHRjaGFyICp0b2tlbl9wYXRoO1xcbiBcXHRpbnQgdG9rZW5fZmQ7XFxuIFxcbitcXHQvKiBrZXJuZWwgbW9kdWxlIEJURnMgdG8gbG9hZCwgYXMgc3BlY2lmaWVkIHZpYSBicGZfb2JqZWN0X29wZW5fb3B0cyAqL1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHRjaGFyICoqbmFtZXM7XFxuK1xcdFxcdHNpemVfdCBucl9uYW1lcztcXG4rXFx0XFx0c3RydWN0IGhhc2htYXAgKm5hbWVzX21hcDtcXG4rXFx0fSAqa21vZF9idGZzO1xcbitcXG4gXFx0Y2hhciBwYXRoW107XFxuIH07XFxuIFxcbkBAIC01ODAzLDYgKzU4MTAsMTIxIEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgc2l6ZV90IG1vZF9uYW1lX2hhc2hfZm4obG9uZyBrZXksIHZvaWQgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gc3RyX2hhc2goKGNoYXIgKilrZXkpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBtb2RfbmFtZV9lcXVhbF9mbihsb25nIGtleTEsIGxvbmcga2V5Miwgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBzdHJjbXAoKGNoYXIgKilrZXkxLCAoY2hhciAqKWtleTIpID09IDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJwZl9vYmplY3RfX2ZyZWVfa21vZF9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuK3tcXG4rXFx0c2l6ZV90IGk7XFxuK1xcbitcXHRpZiAoIW9iai1cXHUwMDNla21vZF9idGZzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvYmotXFx1MDAzZWttb2RfYnRmcy1cXHUwMDNlbnJfbmFtZXM7IGkrKylcXG4rXFx0XFx0XFx0emZyZWUoXFx1MDAyNm9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VuYW1lc1tpXSk7XFxuK1xcdFxcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWttb2RfYnRmcy1cXHUwMDNlbmFtZXMpO1xcbitcXHR9XFxuK1xcdGhhc2htYXBfX2ZyZWUob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzX21hcCk7XFxuK1xcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWttb2RfYnRmcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnBmX29iamVjdF9faW5pdF9rbW9kX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKiprbW9kX2J0Zl9uYW1lcztcXG4rXFx0c2l6ZV90IGksIGttb2RfYnRmX25hbWVzX2NudDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGttb2RfYnRmX25hbWVzID0gT1BUU19HRVQob3B0cywga21vZF9idGZfbmFtZXMsIE5VTEwpO1xcbitcXHRpZiAoIWttb2RfYnRmX25hbWVzKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGttb2RfYnRmX25hbWVzX2NudCA9IE9QVFNfR0VUKG9wdHMsIGttb2RfYnRmX25hbWVzX2NudCwgMCk7XFxuK1xcdGlmICgha21vZF9idGZfbmFtZXNfY250KSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcImttb2RfYnRmX25hbWVzX2NudCBtdXN0IGJlIHNldCB3aGVuIGttb2RfYnRmX25hbWVzIGlzIHByb3ZpZGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdG9iai1cXHUwMDNla21vZF9idGZzID0gY2FsbG9jKDEsIHNpemVvZigqb2JqLVxcdTAwM2VrbW9kX2J0ZnMpKTtcXG4rXFx0aWYgKCFvYmotXFx1MDAzZWttb2RfYnRmcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRvYmotXFx1MDAzZWttb2RfYnRmcy1cXHUwMDNlbmFtZXMgPSBjYWxsb2Moa21vZF9idGZfbmFtZXNfY250LCBzaXplb2YoY2hhciAqKSk7XFxuK1xcdGlmICghb2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0b2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzX21hcCA9IGhhc2htYXBfX25ldyhtb2RfbmFtZV9oYXNoX2ZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgbW9kX25hbWVfZXF1YWxfZm4sIE5VTEwpO1xcbitcXHRpZiAoSVNfRVJSKG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VuYW1lc19tYXApKSB7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzX21hcCk7XFxuK1xcdFxcdG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VuYW1lc19tYXAgPSBOVUxMO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrbW9kX2J0Zl9uYW1lc19jbnQ7IGkrKykge1xcbitcXHRcXHRzaXplX3QgaWR4ID0gb2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5yX25hbWVzO1xcbitcXG4rXFx0XFx0aWYgKCFrbW9kX2J0Zl9uYW1lc1tpXSB8fCAha21vZF9idGZfbmFtZXNbaV1bMF0pIHtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwiaW52YWxpZCBrZXJuZWwgbW9kdWxlIEJURiBuYW1lIGF0IGluZGV4ICV6dVxcXFxuXFxcIiwgaSk7XFxuK1xcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0b2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzW2lkeF0gPSBzdHJkdXAoa21vZF9idGZfbmFtZXNbaV0pO1xcbitcXHRcXHRpZiAoIW9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VuYW1lc1tpZHhdKSB7XFxuK1xcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZXJyID0gaGFzaG1hcF9fYWRkKG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VuYW1lc19tYXAsXFxuK1xcdFxcdFxcdFxcdCAgIG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VuYW1lc1tpZHhdLCAwKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzW2lkeF0pO1xcbitcXHRcXHRcXHRpZiAoZXJyID09IC1FRVhJU1QpIHtcXG4rXFx0XFx0XFx0XFx0cHJfd2FybihcXFwiZHVwbGljYXRlIGttb2QgQlRGIG5hbWUgJyVzJyBpZ25vcmVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRrbW9kX2J0Zl9uYW1lc1tpXSk7XFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRvYmotXFx1MDAzZWttb2RfYnRmcy1cXHUwMDNlbnJfbmFtZXMrKztcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9vdXQ6XFxuK1xcdGJwZl9vYmplY3RfX2ZyZWVfa21vZF9idGZzKG9iaik7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGlzX2ttb2RfYnRmX25lZWRlZChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGlmICghb2JqLVxcdTAwM2VrbW9kX2J0ZnMgfHwgIW9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VuYW1lc19tYXApXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aWYgKGhhc2htYXBfX2ZpbmQob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzX21hcCwgbmFtZSwgTlVMTCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cHJfZGVidWcoXFxcInNraXBwaW5nIG1vZHVsZSBCVEYgJyVzJywgbm90IGluIGttb2RfYnRmX25hbWVzXFxcXG5cXFwiLCBuYW1lKTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBhbGxfbmVlZGVkX2ttb2RfYnRmc19sb2FkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4re1xcbitcXHRyZXR1cm4gb2JqLVxcdTAwM2VrbW9kX2J0ZnMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2Vucl9uYW1lcyBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2Vucl9uYW1lcyA9PSBvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfY250O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XFxuQEAgLTU4NjcsNiArNTk4OSwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICghaXNfa21vZF9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHtcXG4rXFx0XFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0YnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotXFx1MDAzZWJ0Zl92bWxpbnV4KTtcXG4gXFx0XFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuQEAgLTU4OTEsNiArNjAxOCw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfY250Kys7XFxuK1xcbitcXHRcXHRpZiAoYWxsX25lZWRlZF9rbW9kX2J0ZnNfbG9hZGVkKG9iaikpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoZXJyKSB7XFxuQEAgLTg1MTUsNiArODY0NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsXFxuIFxcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9faW5pdF9tYXBzKG9iaiwgb3B0cyk7XFxuIFxcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9pbml0X3Byb2dzKG9iaiwgb3B0cyk7XFxuIFxcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9yZWxvcyhvYmopO1xcbitcXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2luaXRfa21vZF9idGZzKG9iaiwgb3B0cyk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5AQCAtOTYyOSw2ICs5NzYwLDggQEAgdm9pZCBicGZfb2JqZWN0X19jbG9zZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRjbG9zZShvYmotXFx1MDAzZWp1bXB0YWJsZV9tYXBzW2ldLmZkKTtcXG4gXFx0emZyZWUoXFx1MDAyNm9iai1cXHUwMDNlanVtcHRhYmxlX21hcHMpO1xcbiBcXG4rXFx0YnBmX29iamVjdF9fZnJlZV9rbW9kX2J0ZnMob2JqKTtcXG4rXFxuIFxcdGZyZWUob2JqKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuaCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG5pbmRleCBiOTY1YWQ1NzE1NDAzLi4yZjhmZjZkMmQzZGY2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5oXFxuQEAgLTIyNCwxMCArMjI0LDI0IEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7XFxuIFxcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxcbiBcXHQgKi9cXG4gXFx0Y29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7XFxuK1xcdC8qXFxuK1xcdCAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuXFxuK1xcdCAqIGttb2RfYnRmX25hbWVzX2NudCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluXFxuK1xcdCAqIGttb2RfYnRmX25hbWVzLlxcbitcXHQgKlxcbitcXHQgKiBJZiBrbW9kX2J0Zl9uYW1lcyBpcyBOVUxMLCBhbGwgbW9kdWxlIEJURnMgYXJlIGxvYWRlZCwgcHJlc2VydmluZ1xcbitcXHQgKiB0aGUgZGVmYXVsdCBiZWhhdmlvci4gT3RoZXJ3aXNlLCBvbmx5IHRoZSBzcGVjaWZpZWQgbW9kdWxlIEJURnNcXG4rXFx0ICogYXJlIGxvYWRlZC5cXG4rXFx0ICpcXG4rXFx0ICoga21vZF9idGZfbmFtZXNfY250IG11c3QgYmUgbm9uLXplcm8gd2hlbiBrbW9kX2J0Zl9uYW1lcyBpc1xcbitcXHQgKiBub24tTlVMTDsgb3RoZXJ3aXNlIC1FSU5WQUwgaXMgcmV0dXJuZWQuXFxuK1xcdCAqL1xcbitcXHRjb25zdCBjaGFyICoqa21vZF9idGZfbmFtZXM7XFxuK1xcdHNpemVfdCBrbW9kX2J0Zl9uYW1lc19jbnQ7XFxuIFxcbiBcXHRzaXplX3QgOjA7XFxuIH07XFxuLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGhcXG4rI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBrbW9kX2J0Zl9uYW1lc19jbnRcXG4gXFxuIC8qKlxcbiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ttb2RfYnRmcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjYxZDI4NDVhNzMxZmZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmNcXG5AQCAtMCwwICsxLDE5NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwia21vZF9idGZzLnNrZWwuaFxcXCJcXG4rXFxuK3N0YXRpYyBib29sIGJ0Zl9za2lwcGVkO1xcbitzdGF0aWMgYm9vbCBkdXBfaWdub3JlZDtcXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyIGJ0Zl9za2lwX2ZtdFtdID1cXG4rXFx0XFxcImxpYmJwZjogc2tpcHBpbmcgbW9kdWxlIEJURiAnJXMnLCBub3QgaW4ga21vZF9idGZfbmFtZXNcXFxcblxcXCI7XFxuK3N0YXRpYyBjb25zdCBjaGFyIGR1cF9pZ25vcmVfZm10W10gPVxcbitcXHRcXFwibGliYnBmOiBkdXBsaWNhdGUga21vZCBCVEYgbmFtZSAnJXMnIGlnbm9yZWRcXFxcblxcXCI7XFxuK1xcbitzdGF0aWMgaW50IGxpYmJwZl9wcmludF9jYihlbnVtIGxpYmJwZl9wcmludF9sZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqZm10LFxcbitcXHRcXHRcXHQgICB2YV9saXN0IGFyZ3MpXFxuK3tcXG4rXFx0aWYgKCFzdHJjbXAoZm10LCBidGZfc2tpcF9mbXQpKSB7XFxuK1xcdFxcdGlmICghc3RyY21wKHZhX2FyZyhhcmdzLCBjaGFyICopLCBcXFwiYnBmX3Rlc3Rfbm9fY2ZpXFxcIikpXFxuK1xcdFxcdFxcdGJ0Zl9za2lwcGVkID0gdHJ1ZTtcXG4rXFx0fSBlbHNlIGlmICghc3RyY21wKGZtdCwgZHVwX2lnbm9yZV9mbXQpKSB7XFxuK1xcdFxcdGlmICghc3RyY21wKHZhX2FyZyhhcmdzLCBjaGFyICopLCBcXFwiYnBmX3Rlc3Rtb2RcXFwiKSlcXG4rXFx0XFx0XFx0ZHVwX2lnbm9yZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga21vZF9idGZzX3Bhc3Modm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RhdGljIGNvbnN0IGNoYXIgKmttb2RzW10gPSB7IFxcXCJicGZfdGVzdG1vZFxcXCIgfTtcXG4rXFxuK1xcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5rbW9kX2J0Zl9uYW1lcyA9IGttb2RzLFxcbitcXHRcXHQua21vZF9idGZfbmFtZXNfY250ID0gMSxcXG4rXFx0KTtcXG4rXFxuK1xcdHNrZWwgPSBrbW9kX2J0ZnNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwia21vZF9idGZzX19vcGVuX29wdHNcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7XFxuK1xcdEFTU0VSVF9PSyhyZXQsIFxcXCJrbW9kX2J0ZnNfX2xvYWRcXFwiKTtcXG4rb3V0OlxcbitcXHRrbW9kX2J0ZnNfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGttb2RfYnRmc19ub25leGlzdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrbW9kX2J0ZnMgKnNrZWwgPSBOVUxMO1xcbitcXHRpbnQgcmV0O1xcbitcXHRzdGF0aWMgY29uc3QgY2hhciAqbm9uZXhpc3Rfa21vZHNbXSA9IHsgXFxcIm1vZHVsZV9ub25leGlzdFxcXCIgfTtcXG4rXFxuK1xcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5rbW9kX2J0Zl9uYW1lcyA9IG5vbmV4aXN0X2ttb2RzLFxcbitcXHRcXHQua21vZF9idGZfbmFtZXNfY250ID0gMSxcXG4rXFx0KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9ubHkgXFxcIm1vZHVsZV9ub25leGlzdFxcXCIgaXMgcmVxdWVzdGVkOyBzaW5jZSBpdCBkb2VzIG5vdCBleGlzdCBpblxcbitcXHQgKiB0aGUga2VybmVsLCBubyBtb2R1bGUgQlRGIGdldHMgbG9hZGVkLiBUaGUgQlBGIHByb2dyYW0gdGhlblxcbitcXHQgKiBmYWlscyB0byBsb2FkIGJlY2F1c2UgdGhlIHJlYWwgbmVlZGVkIG1vZHVsZSdzIEJURiBpcyB1bmF2YWlsYWJsZS5cXG4rXFx0ICovXFxuK1xcdHNrZWwgPSBrbW9kX2J0ZnNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwia21vZF9idGZzX19vcGVuX29wdHNcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7XFxuK1xcdEFTU0VSVF9FUlIocmV0LCBcXFwia21vZF9idGZzX19sb2FkXFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGttb2RfYnRmc19fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga21vZF9idGZzX2R1cCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrbW9kX2J0ZnMgKnNrZWwgPSBOVUxMO1xcbitcXHRsaWJicGZfcHJpbnRfZm5fdCBvbGRfcHJpbnRfY2I7XFxuK1xcdGludCByZXQ7XFxuK1xcdHN0YXRpYyBjb25zdCBjaGFyICpkdXBfa21vZHNbXSA9IHsgXFxcImJwZl90ZXN0bW9kXFxcIiwgXFxcImJwZl90ZXN0bW9kXFxcIiB9O1xcbitcXG4rXFx0LyogZHVwbGljYXRlIGVudHJ5IG9uIHB1cnBvc2U6IGxpYmJwZiBzaG91bGQgZGVkdXBlIGl0IHdpdGggYSB3YXJuaW5nICovXFxuK1xcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5rbW9kX2J0Zl9uYW1lcyA9IGR1cF9rbW9kcyxcXG4rXFx0XFx0Lmttb2RfYnRmX25hbWVzX2NudCA9IDIsXFxuK1xcdCk7XFxuK1xcbitcXHRkdXBfaWdub3JlZCA9IGZhbHNlO1xcbitcXHRvbGRfcHJpbnRfY2IgPSBsaWJicGZfc2V0X3ByaW50KGxpYmJwZl9wcmludF9jYik7XFxuK1xcbitcXHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXFx1MDAyNm9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcImttb2RfYnRmc19fb3Blbl9vcHRzXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0QVNTRVJUX1RSVUUoZHVwX2lnbm9yZWQsIFxcXCJkdXBfaWdub3JlZFxcXCIpO1xcbitcXG4rXFx0cmV0ID0ga21vZF9idGZzX19sb2FkKHNrZWwpO1xcbitcXHRBU1NFUlRfT0socmV0LCBcXFwia21vZF9idGZzX19sb2FkXFxcIik7XFxuK1xcbitcXHRrbW9kX2J0ZnNfX2Rlc3Ryb3koc2tlbCk7XFxuK291dDpcXG4rXFx0bGliYnBmX3NldF9wcmludChvbGRfcHJpbnRfY2IpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfc2tpcCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrbW9kX2J0ZnMgKnNrZWwgPSBOVUxMO1xcbitcXHRsaWJicGZfcHJpbnRfZm5fdCBvbGRfcHJpbnRfY2I7XFxuK1xcdGJvb2wgdGVzdG1vZF91bmxvYWRlZCA9IGZhbHNlO1xcbitcXHRpbnQgcmV0O1xcbitcXHRzdGF0aWMgY29uc3QgY2hhciAqa21vZHNbXSA9IHsgXFxcImJwZl90ZXN0bW9kXFxcIiB9O1xcbitcXG4rXFx0REVDTEFSRV9MSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcXG4rXFx0XFx0Lmttb2RfYnRmX25hbWVzID0ga21vZHMsXFxuK1xcdFxcdC5rbW9kX2J0Zl9uYW1lc19jbnQgPSAxLFxcbitcXHQpO1xcbitcXG4rXFx0YnRmX3NraXBwZWQgPSBmYWxzZTtcXG4rXFx0b2xkX3ByaW50X2NiID0gbGliYnBmX3NldF9wcmludChsaWJicGZfcHJpbnRfY2IpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVsb2FkIGJwZl90ZXN0bW9kIGFmdGVyIGJwZl90ZXN0X25vX2NmaSB0byBlbnN1cmUgdGhlIHVubmVlZGVkXFxuK1xcdCAqIG1vZHVsZSdzIEJURiBpcyBlbnVtZXJhdGVkIGZpcnN0IGFuZCBza2lwcGVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFBU1NFUlRfT0sodW5sb2FkX2JwZl90ZXN0bW9kKGZhbHNlKSwgXFxcInVubG9hZCBicGZfdGVzdG1vZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXBfcHJpbnQ7XFxuK1xcdHRlc3Rtb2RfdW5sb2FkZWQgPSB0cnVlO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0sobG9hZF9tb2R1bGUoXFxcImJwZl90ZXN0X25vX2NmaS5rb1xcXCIsIGZhbHNlKSxcXG4rXFx0XFx0ICAgICAgIFxcXCJsb2FkIHVubmVlZGVkIGJwZl90ZXN0X25vX2NmaSBtb2R1bGVcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwX3ByaW50O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhsb2FkX2JwZl90ZXN0bW9kKGZhbHNlKSwgXFxcInJlc3RvcmUgYnBmX3Rlc3Rtb2RcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwX21vZHVsZTtcXG4rXFx0dGVzdG1vZF91bmxvYWRlZCA9IGZhbHNlO1xcbitcXG4rXFx0c2tlbCA9IGttb2RfYnRmc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJrbW9kX2J0ZnNfX29wZW5fb3B0c1xcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXBfbW9kdWxlO1xcbitcXG4rXFx0cmV0ID0ga21vZF9idGZzX19sb2FkKHNrZWwpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJrbW9kX2J0ZnNfX2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwX3NrZWw7XFxuK1xcbitcXHRBU1NFUlRfVFJVRShidGZfc2tpcHBlZCwgXFxcImJ0Zl9za2lwcGVkXFxcIik7XFxuK1xcbitjbGVhbnVwX3NrZWw6XFxuK1xcdGttb2RfYnRmc19fZGVzdHJveShza2VsKTtcXG4rY2xlYW51cF9tb2R1bGU6XFxuK1xcdEFTU0VSVF9PSyh1bmxvYWRfbW9kdWxlKFxcXCJicGZfdGVzdF9ub19jZmlcXFwiLCBmYWxzZSksXFxuK1xcdFxcdCAgXFxcInVubG9hZCB1bm5lZWRlZCBicGZfdGVzdF9ub19jZmkgbW9kdWxlXFxcIik7XFxuK2NsZWFudXBfcHJpbnQ6XFxuK1xcdGlmICh0ZXN0bW9kX3VubG9hZGVkKVxcbitcXHRcXHRBU1NFUlRfT0sobG9hZF9icGZfdGVzdG1vZChmYWxzZSksXFxuK1xcdFxcdFxcdCAgXFxcInJlc3RvcmUgYnBmX3Rlc3Rtb2Qgb24gZXJyb3IgcGF0aFxcXCIpO1xcbitcXHRsaWJicGZfc2V0X3ByaW50KG9sZF9wcmludF9jYik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGttb2RfYnRmc19ub19jbnQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcXG4rXFx0c3RhdGljIGNvbnN0IGNoYXIgKmttb2RzW10gPSB7IFxcXCJicGZfdGVzdG1vZFxcXCIgfTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGttb2RfYnRmX25hbWVzIHNldCBidXQga21vZF9idGZfbmFtZXNfY250IG5vdCBzZXQ6XFxuK1xcdCAqIG9wZW4gbXVzdCBmYWlsIHdpdGggLUVJTlZBTC5cXG4rXFx0ICovXFxuK1xcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5rbW9kX2J0Zl9uYW1lcyA9IGttb2RzLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGttb2RfYnRmc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0QVNTRVJUX05VTEwoc2tlbCwgXFxcImttb2RfYnRmc19fb3Blbl9vcHRzIHdpdGhvdXQga21vZF9idGZfbmFtZXNfY250XFxcIik7XFxuK31cXG4rXFxuK3ZvaWQgc2VyaWFsX3Rlc3Rfa21vZF9idGZzKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJrbW9kX2J0ZnNfcGFzc1xcXCIpKVxcbitcXHRcXHRrbW9kX2J0ZnNfcGFzcygpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImttb2RfYnRmc19ub25leGlzdFxcXCIpKVxcbitcXHRcXHRrbW9kX2J0ZnNfbm9uZXhpc3QoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJrbW9kX2J0ZnNfZHVwXFxcIikpXFxuK1xcdFxcdGttb2RfYnRmc19kdXAoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJrbW9kX2J0ZnNfc2tpcFxcXCIpKVxcbitcXHRcXHRrbW9kX2J0ZnNfc2tpcCgpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImttb2RfYnRmc19ub19jbnRcXFwiKSlcXG4rXFx0XFx0a21vZF9idGZzX25vX2NudCgpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjk2ODYwZDYwZTBkYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmNcXG5AQCAtMCwwICsxLDEzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuK1NFQyhcXFwiZmVudHJ5L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2ttb2RfYnRmcylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjM0OjM1LjQ4MzU2NzQ2NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMzAxNjAzNDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2Vyc3BhY2UgbGliYnBmIGxpYnJhcnkgYW5kIGFkZHMgYSBCUEYgc2VsZnRlc3QgaW4gdG9vbHMvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk2NmQzY2UyYTMzOWJiMzAyYWMyOWYxMDA4ODcwZGE3Y2VhNWU2N2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTozNDozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5pbmRleCA1MTRlNGU5ZGFhODI1Li4zNzkzNGNhNDlkZDdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuQEAgLTc3OSw2ICs3NzksMTMgQEAgc3RydWN0IGJwZl9vYmplY3Qge1xuIFx0Y2hhciAqdG9rZW5fcGF0aDtcbiBcdGludCB0b2tlbl9mZDtcbiBcbitcdC8qIGtlcm5lbCBtb2R1bGUgQlRGcyB0byBsb2FkLCBhcyBzcGVjaWZpZWQgdmlhIGJwZl9vYmplY3Rfb3Blbl9vcHRzICovXG4rXHRzdHJ1Y3Qge1xuK1x0XHRjaGFyICoqbmFtZXM7XG4rXHRcdHNpemVfdCBucl9uYW1lcztcbitcdFx0c3RydWN0IGhhc2htYXAgKm5hbWVzX21hcDtcbitcdH0gKmttb2RfYnRmcztcbitcbiBcdGNoYXIgcGF0aFtdO1xuIH07XG4gXG5AQCAtNTgwMyw2ICs1ODEwLDEyMSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgbW9kX25hbWVfaGFzaF9mbihsb25nIGtleSwgdm9pZCAqY3R4KVxuK3tcbitcdHJldHVybiBzdHJfaGFzaCgoY2hhciAqKWtleSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIG1vZF9uYW1lX2VxdWFsX2ZuKGxvbmcga2V5MSwgbG9uZyBrZXkyLCB2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIHN0cmNtcCgoY2hhciAqKWtleTEsIChjaGFyICopa2V5MikgPT0gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnBmX29iamVjdF9fZnJlZV9rbW9kX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbit7XG4rXHRzaXplX3QgaTtcbitcbitcdGlmICghb2JqLVx1MDAzZWttb2RfYnRmcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXMpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2Vucl9uYW1lczsgaSsrKVxuK1x0XHRcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNbaV0pO1xuK1x0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzKTtcbitcdH1cbitcdGhhc2htYXBfX2ZyZWUob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc19tYXApO1xuK1x0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWttb2RfYnRmcyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX29iamVjdF9faW5pdF9rbW9kX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyAqb3B0cylcbit7XG4rXHRjb25zdCBjaGFyICoqa21vZF9idGZfbmFtZXM7XG4rXHRzaXplX3QgaSwga21vZF9idGZfbmFtZXNfY250O1xuK1x0aW50IGVycjtcbitcbitcdGttb2RfYnRmX25hbWVzID0gT1BUU19HRVQob3B0cywga21vZF9idGZfbmFtZXMsIE5VTEwpO1xuK1x0aWYgKCFrbW9kX2J0Zl9uYW1lcylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRrbW9kX2J0Zl9uYW1lc19jbnQgPSBPUFRTX0dFVChvcHRzLCBrbW9kX2J0Zl9uYW1lc19jbnQsIDApO1xuK1x0aWYgKCFrbW9kX2J0Zl9uYW1lc19jbnQpIHtcbitcdFx0cHJfd2FybihcImttb2RfYnRmX25hbWVzX2NudCBtdXN0IGJlIHNldCB3aGVuIGttb2RfYnRmX25hbWVzIGlzIHByb3ZpZGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdG9iai1cdTAwM2VrbW9kX2J0ZnMgPSBjYWxsb2MoMSwgc2l6ZW9mKCpvYmotXHUwMDNla21vZF9idGZzKSk7XG4rXHRpZiAoIW9iai1cdTAwM2VrbW9kX2J0ZnMpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0b2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lcyA9IGNhbGxvYyhrbW9kX2J0Zl9uYW1lc19jbnQsIHNpemVvZihjaGFyICopKTtcbitcdGlmICghb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lcykge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzX21hcCA9IGhhc2htYXBfX25ldyhtb2RfbmFtZV9oYXNoX2ZuLFxuK1x0XHRcdFx0XHRcdCBtb2RfbmFtZV9lcXVhbF9mbiwgTlVMTCk7XG4rXHRpZiAoSVNfRVJSKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNfbWFwKSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNfbWFwKTtcbitcdFx0b2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc19tYXAgPSBOVUxMO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrbW9kX2J0Zl9uYW1lc19jbnQ7IGkrKykge1xuK1x0XHRzaXplX3QgaWR4ID0gb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2Vucl9uYW1lcztcbitcbitcdFx0aWYgKCFrbW9kX2J0Zl9uYW1lc1tpXSB8fCAha21vZF9idGZfbmFtZXNbaV1bMF0pIHtcbitcdFx0XHRwcl93YXJuKFwiaW52YWxpZCBrZXJuZWwgbW9kdWxlIEJURiBuYW1lIGF0IGluZGV4ICV6dVxcblwiLCBpKTtcbitcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbitcdFx0fVxuK1xuK1x0XHRvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzW2lkeF0gPSBzdHJkdXAoa21vZF9idGZfbmFtZXNbaV0pO1xuK1x0XHRpZiAoIW9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNbaWR4XSkge1xuK1x0XHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4rXG4rXHRcdGVyciA9IGhhc2htYXBfX2FkZChvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzX21hcCxcbitcdFx0XHRcdCAgIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNbaWR4XSwgMCk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzW2lkeF0pO1xuK1x0XHRcdGlmIChlcnIgPT0gLUVFWElTVCkge1xuK1x0XHRcdFx0cHJfd2FybihcImR1cGxpY2F0ZSBrbW9kIEJURiBuYW1lICclcycgaWdub3JlZFxcblwiLFxuK1x0XHRcdFx0XHRrbW9kX2J0Zl9uYW1lc1tpXSk7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4rXHRcdG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbnJfbmFtZXMrKztcbitcdH1cbitcdHJldHVybiAwO1xuK1xuK2Vycl9vdXQ6XG4rXHRicGZfb2JqZWN0X19mcmVlX2ttb2RfYnRmcyhvYmopO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGJvb2wgaXNfa21vZF9idGZfbmVlZGVkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aWYgKCFvYmotXHUwMDNla21vZF9idGZzIHx8ICFvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzX21hcClcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAoaGFzaG1hcF9fZmluZChvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzX21hcCwgbmFtZSwgTlVMTCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cHJfZGVidWcoXCJza2lwcGluZyBtb2R1bGUgQlRGICclcycsIG5vdCBpbiBrbW9kX2J0Zl9uYW1lc1xcblwiLCBuYW1lKTtcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgYWxsX25lZWRlZF9rbW9kX2J0ZnNfbG9hZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4re1xuK1x0cmV0dXJuIG9iai1cdTAwM2VrbW9kX2J0ZnMgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2Vucl9uYW1lcyBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5yX25hbWVzID09IG9iai1cdTAwM2VidGZfbW9kdWxlX2NudDtcbit9XG4rXG4gc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4ge1xuIFx0c3RydWN0IGJwZl9idGZfaW5mbyBpbmZvO1xuQEAgLTU4NjcsNiArNTk4OSwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuK1x0XHRpZiAoIWlzX2ttb2RfYnRmX25lZWRlZChvYmosIG5hbWUpKSB7XG4rXHRcdFx0Y2xvc2UoZmQpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG5AQCAtNTg5MSw2ICs2MDE4LDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250Kys7XG4rXG4rXHRcdGlmIChhbGxfbmVlZGVkX2ttb2RfYnRmc19sb2FkZWQob2JqKSlcbitcdFx0XHRicmVhaztcbiBcdH1cbiBcbiBcdGlmIChlcnIpIHtcbkBAIC04NTE1LDYgKzg2NDUsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9vYmplY3QgKmJwZl9vYmplY3Rfb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB2b2lkICpvYmpfYnVmLFxuIFx0ZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19pbml0X21hcHMob2JqLCBvcHRzKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9pbml0X3Byb2dzKG9iaiwgb3B0cyk7XG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2NvbGxlY3RfcmVsb3Mob2JqKTtcbitcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9faW5pdF9rbW9kX2J0ZnMob2JqLCBvcHRzKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTk2MjksNiArOTc2MCw4IEBAIHZvaWQgYnBmX29iamVjdF9fY2xvc2Uoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0Y2xvc2Uob2JqLVx1MDAzZWp1bXB0YWJsZV9tYXBzW2ldLmZkKTtcbiBcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VqdW1wdGFibGVfbWFwcyk7XG4gXG4rXHRicGZfb2JqZWN0X19mcmVlX2ttb2RfYnRmcyhvYmopO1xuK1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uMmY4ZmY2ZDJkM2RmNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0yMjQsMTAgKzIyNCwyNCBAQCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMge1xuIFx0ICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuXG4gXHQgKi9cbiBcdGNvbnN0IGNoYXIgKmJwZl90b2tlbl9wYXRoO1xuK1x0LypcbitcdCAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuXG4rXHQgKiBrbW9kX2J0Zl9uYW1lc19jbnQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpblxuK1x0ICoga21vZF9idGZfbmFtZXMuXG4rXHQgKlxuK1x0ICogSWYga21vZF9idGZfbmFtZXMgaXMgTlVMTCwgYWxsIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQsIHByZXNlcnZpbmdcbitcdCAqIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBPdGhlcndpc2UsIG9ubHkgdGhlIHNwZWNpZmllZCBtb2R1bGUgQlRGc1xuK1x0ICogYXJlIGxvYWRlZC5cbitcdCAqXG4rXHQgKiBrbW9kX2J0Zl9uYW1lc19jbnQgbXVzdCBiZSBub24temVybyB3aGVuIGttb2RfYnRmX25hbWVzIGlzXG4rXHQgKiBub24tTlVMTDsgb3RoZXJ3aXNlIC1FSU5WQUwgaXMgcmV0dXJuZWQuXG4rXHQgKi9cbitcdGNvbnN0IGNoYXIgKiprbW9kX2J0Zl9uYW1lcztcbitcdHNpemVfdCBrbW9kX2J0Zl9uYW1lc19jbnQ7XG4gXG4gXHRzaXplX3QgOjA7XG4gfTtcbi0jZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIGJwZl90b2tlbl9wYXRoXG4rI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBrbW9kX2J0Zl9uYW1lc19jbnRcbiBcbiAvKipcbiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjYxZDI4NDVhNzMxZmZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ttb2RfYnRmcy5jXG5AQCAtMCwwICsxLDE5NiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJrbW9kX2J0ZnMuc2tlbC5oXCJcbitcbitzdGF0aWMgYm9vbCBidGZfc2tpcHBlZDtcbitzdGF0aWMgYm9vbCBkdXBfaWdub3JlZDtcbitcbitzdGF0aWMgY29uc3QgY2hhciBidGZfc2tpcF9mbXRbXSA9XG4rXHRcImxpYmJwZjogc2tpcHBpbmcgbW9kdWxlIEJURiAnJXMnLCBub3QgaW4ga21vZF9idGZfbmFtZXNcXG5cIjtcbitzdGF0aWMgY29uc3QgY2hhciBkdXBfaWdub3JlX2ZtdFtdID1cbitcdFwibGliYnBmOiBkdXBsaWNhdGUga21vZCBCVEYgbmFtZSAnJXMnIGlnbm9yZWRcXG5cIjtcbitcbitzdGF0aWMgaW50IGxpYmJwZl9wcmludF9jYihlbnVtIGxpYmJwZl9wcmludF9sZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqZm10LFxuK1x0XHRcdCAgIHZhX2xpc3QgYXJncylcbit7XG4rXHRpZiAoIXN0cmNtcChmbXQsIGJ0Zl9za2lwX2ZtdCkpIHtcbitcdFx0aWYgKCFzdHJjbXAodmFfYXJnKGFyZ3MsIGNoYXIgKiksIFwiYnBmX3Rlc3Rfbm9fY2ZpXCIpKVxuK1x0XHRcdGJ0Zl9za2lwcGVkID0gdHJ1ZTtcbitcdH0gZWxzZSBpZiAoIXN0cmNtcChmbXQsIGR1cF9pZ25vcmVfZm10KSkge1xuK1x0XHRpZiAoIXN0cmNtcCh2YV9hcmcoYXJncywgY2hhciAqKSwgXCJicGZfdGVzdG1vZFwiKSlcbitcdFx0XHRkdXBfaWdub3JlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQga21vZF9idGZzX3Bhc3Modm9pZClcbit7XG4rXHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcbitcdGludCByZXQ7XG4rXHRzdGF0aWMgY29uc3QgY2hhciAqa21vZHNbXSA9IHsgXCJicGZfdGVzdG1vZFwiIH07XG4rXG4rXHRERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuK1x0XHQua21vZF9idGZfbmFtZXMgPSBrbW9kcyxcbitcdFx0Lmttb2RfYnRmX25hbWVzX2NudCA9IDEsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGttb2RfYnRmc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwia21vZF9idGZzX19vcGVuX29wdHNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cmV0ID0ga21vZF9idGZzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX09LKHJldCwgXCJrbW9kX2J0ZnNfX2xvYWRcIik7XG4rb3V0OlxuK1x0a21vZF9idGZzX19kZXN0cm95KHNrZWwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfbm9uZXhpc3Qodm9pZClcbit7XG4rXHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcbitcdGludCByZXQ7XG4rXHRzdGF0aWMgY29uc3QgY2hhciAqbm9uZXhpc3Rfa21vZHNbXSA9IHsgXCJtb2R1bGVfbm9uZXhpc3RcIiB9O1xuK1xuK1x0REVDTEFSRV9MSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbitcdFx0Lmttb2RfYnRmX25hbWVzID0gbm9uZXhpc3Rfa21vZHMsXG4rXHRcdC5rbW9kX2J0Zl9uYW1lc19jbnQgPSAxLFxuK1x0KTtcbitcbitcdC8qXG4rXHQgKiBPbmx5IFwibW9kdWxlX25vbmV4aXN0XCIgaXMgcmVxdWVzdGVkOyBzaW5jZSBpdCBkb2VzIG5vdCBleGlzdCBpblxuK1x0ICogdGhlIGtlcm5lbCwgbm8gbW9kdWxlIEJURiBnZXRzIGxvYWRlZC4gVGhlIEJQRiBwcm9ncmFtIHRoZW5cbitcdCAqIGZhaWxzIHRvIGxvYWQgYmVjYXVzZSB0aGUgcmVhbCBuZWVkZWQgbW9kdWxlJ3MgQlRGIGlzIHVuYXZhaWxhYmxlLlxuK1x0ICovXG4rXHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJrbW9kX2J0ZnNfX29wZW5fb3B0c1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7XG4rXHRBU1NFUlRfRVJSKHJldCwgXCJrbW9kX2J0ZnNfX2xvYWRcIik7XG4rXG4rb3V0OlxuK1x0a21vZF9idGZzX19kZXN0cm95KHNrZWwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfZHVwKHZvaWQpXG4re1xuK1x0c3RydWN0IGttb2RfYnRmcyAqc2tlbCA9IE5VTEw7XG4rXHRsaWJicGZfcHJpbnRfZm5fdCBvbGRfcHJpbnRfY2I7XG4rXHRpbnQgcmV0O1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKmR1cF9rbW9kc1tdID0geyBcImJwZl90ZXN0bW9kXCIsIFwiYnBmX3Rlc3Rtb2RcIiB9O1xuK1xuK1x0LyogZHVwbGljYXRlIGVudHJ5IG9uIHB1cnBvc2U6IGxpYmJwZiBzaG91bGQgZGVkdXBlIGl0IHdpdGggYSB3YXJuaW5nICovXG4rXHRERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuK1x0XHQua21vZF9idGZfbmFtZXMgPSBkdXBfa21vZHMsXG4rXHRcdC5rbW9kX2J0Zl9uYW1lc19jbnQgPSAyLFxuK1x0KTtcbitcbitcdGR1cF9pZ25vcmVkID0gZmFsc2U7XG4rXHRvbGRfcHJpbnRfY2IgPSBsaWJicGZfc2V0X3ByaW50KGxpYmJwZl9wcmludF9jYik7XG4rXG4rXHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJrbW9kX2J0ZnNfX29wZW5fb3B0c1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRBU1NFUlRfVFJVRShkdXBfaWdub3JlZCwgXCJkdXBfaWdub3JlZFwiKTtcbitcbitcdHJldCA9IGttb2RfYnRmc19fbG9hZChza2VsKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwia21vZF9idGZzX19sb2FkXCIpO1xuK1xuK1x0a21vZF9idGZzX19kZXN0cm95KHNrZWwpO1xuK291dDpcbitcdGxpYmJwZl9zZXRfcHJpbnQob2xkX3ByaW50X2NiKTtcbit9XG4rXG4rc3RhdGljIHZvaWQga21vZF9idGZzX3NraXAodm9pZClcbit7XG4rXHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcbitcdGxpYmJwZl9wcmludF9mbl90IG9sZF9wcmludF9jYjtcbitcdGJvb2wgdGVzdG1vZF91bmxvYWRlZCA9IGZhbHNlO1xuK1x0aW50IHJldDtcbitcdHN0YXRpYyBjb25zdCBjaGFyICprbW9kc1tdID0geyBcImJwZl90ZXN0bW9kXCIgfTtcbitcbitcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4rXHRcdC5rbW9kX2J0Zl9uYW1lcyA9IGttb2RzLFxuK1x0XHQua21vZF9idGZfbmFtZXNfY250ID0gMSxcbitcdCk7XG4rXG4rXHRidGZfc2tpcHBlZCA9IGZhbHNlO1xuK1x0b2xkX3ByaW50X2NiID0gbGliYnBmX3NldF9wcmludChsaWJicGZfcHJpbnRfY2IpO1xuK1xuK1x0LypcbitcdCAqIFJlbG9hZCBicGZfdGVzdG1vZCBhZnRlciBicGZfdGVzdF9ub19jZmkgdG8gZW5zdXJlIHRoZSB1bm5lZWRlZFxuK1x0ICogbW9kdWxlJ3MgQlRGIGlzIGVudW1lcmF0ZWQgZmlyc3QgYW5kIHNraXBwZWQuXG4rXHQgKi9cbitcdGlmICghQVNTRVJUX09LKHVubG9hZF9icGZfdGVzdG1vZChmYWxzZSksIFwidW5sb2FkIGJwZl90ZXN0bW9kXCIpKVxuK1x0XHRnb3RvIGNsZWFudXBfcHJpbnQ7XG4rXHR0ZXN0bW9kX3VubG9hZGVkID0gdHJ1ZTtcbitcbitcdGlmICghQVNTRVJUX09LKGxvYWRfbW9kdWxlKFwiYnBmX3Rlc3Rfbm9fY2ZpLmtvXCIsIGZhbHNlKSxcbitcdFx0ICAgICAgIFwibG9hZCB1bm5lZWRlZCBicGZfdGVzdF9ub19jZmkgbW9kdWxlXCIpKVxuK1x0XHRnb3RvIGNsZWFudXBfcHJpbnQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhsb2FkX2JwZl90ZXN0bW9kKGZhbHNlKSwgXCJyZXN0b3JlIGJwZl90ZXN0bW9kXCIpKVxuK1x0XHRnb3RvIGNsZWFudXBfbW9kdWxlO1xuK1x0dGVzdG1vZF91bmxvYWRlZCA9IGZhbHNlO1xuK1xuK1x0c2tlbCA9IGttb2RfYnRmc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwia21vZF9idGZzX19vcGVuX29wdHNcIikpXG4rXHRcdGdvdG8gY2xlYW51cF9tb2R1bGU7XG4rXG4rXHRyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwia21vZF9idGZzX19sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXBfc2tlbDtcbitcbitcdEFTU0VSVF9UUlVFKGJ0Zl9za2lwcGVkLCBcImJ0Zl9za2lwcGVkXCIpO1xuK1xuK2NsZWFudXBfc2tlbDpcbitcdGttb2RfYnRmc19fZGVzdHJveShza2VsKTtcbitjbGVhbnVwX21vZHVsZTpcbitcdEFTU0VSVF9PSyh1bmxvYWRfbW9kdWxlKFwiYnBmX3Rlc3Rfbm9fY2ZpXCIsIGZhbHNlKSxcbitcdFx0ICBcInVubG9hZCB1bm5lZWRlZCBicGZfdGVzdF9ub19jZmkgbW9kdWxlXCIpO1xuK2NsZWFudXBfcHJpbnQ6XG4rXHRpZiAodGVzdG1vZF91bmxvYWRlZClcbitcdFx0QVNTRVJUX09LKGxvYWRfYnBmX3Rlc3Rtb2QoZmFsc2UpLFxuK1x0XHRcdCAgXCJyZXN0b3JlIGJwZl90ZXN0bW9kIG9uIGVycm9yIHBhdGhcIik7XG4rXHRsaWJicGZfc2V0X3ByaW50KG9sZF9wcmludF9jYik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGttb2RfYnRmc19ub19jbnQodm9pZClcbit7XG4rXHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcbitcdHN0YXRpYyBjb25zdCBjaGFyICprbW9kc1tdID0geyBcImJwZl90ZXN0bW9kXCIgfTtcbitcbitcdC8qXG4rXHQgKiBrbW9kX2J0Zl9uYW1lcyBzZXQgYnV0IGttb2RfYnRmX25hbWVzX2NudCBub3Qgc2V0OlxuK1x0ICogb3BlbiBtdXN0IGZhaWwgd2l0aCAtRUlOVkFMLlxuK1x0ICovXG4rXHRERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuK1x0XHQua21vZF9idGZfbmFtZXMgPSBrbW9kcyxcbitcdCk7XG4rXG4rXHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4rXHRBU1NFUlRfTlVMTChza2VsLCBcImttb2RfYnRmc19fb3Blbl9vcHRzIHdpdGhvdXQga21vZF9idGZfbmFtZXNfY250XCIpO1xuK31cbitcbit2b2lkIHNlcmlhbF90ZXN0X2ttb2RfYnRmcyh2b2lkKVxuK3tcbitcdGlmICghZW52Lmhhc190ZXN0bW9kKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJrbW9kX2J0ZnNfcGFzc1wiKSlcbitcdFx0a21vZF9idGZzX3Bhc3MoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwia21vZF9idGZzX25vbmV4aXN0XCIpKVxuK1x0XHRrbW9kX2J0ZnNfbm9uZXhpc3QoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwia21vZF9idGZzX2R1cFwiKSlcbitcdFx0a21vZF9idGZzX2R1cCgpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJrbW9kX2J0ZnNfc2tpcFwiKSlcbitcdFx0a21vZF9idGZzX3NraXAoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwia21vZF9idGZzX25vX2NudFwiKSlcbitcdFx0a21vZF9idGZzX25vX2NudCgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iOTY4NjBkNjBlMGRhXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmNcbkBAIC0wLDAgKzEsMTMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbitcbitTRUMoXCJmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XCIpXG4raW50IEJQRl9QUk9HKHRlc3Rfa21vZF9idGZzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozNDozNS40ODM1Njk0NTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjMwMTU3NDA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIHNvbWUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGxvYWRpbmcga2VybmVsIG1vZHVsZSBCVEZzLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgYnBmX29iamVjdF9vcGVuX29wdHNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgbG9jYXRlZC4gSXQgbG9va3MgbGlrZSBpdCdzIGFsbCB3aXRoaW4gYHRvb2xzL2xpYi9icGYvYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcg4oCTIGl0J3MgYWxsIGluIHVzZXJzcGFjZSwgYW5kIG5vIGtlcm5lbCBjb2RlIGlzIHRvdWNoZWQuIFRoaXMgc2VlbXMgaW1wb3J0YW50LlxuXG5JIHRoZW4gY29uc2lkZXJlZCB3aGV0aGVyIGBsaWJicGZgIGhhcyBhbnkgaW4ta2VybmVsIGNvbXBvbmVudHMsIGJ1dCBxdWlja2x5IHJlbWluZGVkIG15c2VsZiB0aGF0IGl0J3MgYSB1c2Vyc3BhY2UgbGlicmFyeSB1c2VkIGZvciBsb2FkaW5nIEJQRiBwcm9ncmFtcyBpbnRvIHRoZSBrZXJuZWwuIFNvLCB0aGUgZGlyZWN0IGltcGFjdCBvbiB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIGZsb3cgc2VlbXMgbWluaW1hbCwgb3IgcmF0aGVyLCBpbmRpcmVjdC4gVGhlIHBhdGNoIGl0c2VsZiBpcyAqanVzdCogYSB1c2Vyc3BhY2UgY2hhbmdlLlxuXG5UaGUgbmV4dCB0aGluZyB0aGF0IHBvcHBlZCBpbnRvIG15IGhlYWQgd2FzIFN5emthbGxlciBhbmQgaXRzIHJvbGUgaW4ga2VybmVsIGZ1enppbmcuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGNvZGUgY2hhbmdlcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scy4gU28gdGhlIGFuc3dlciBzaG91bGQgYmUgbm8uXG5cblRvIGNvbmZpcm0gbXkgZXZhbHVhdGlvbiwgSSBkaWQgYW5vdGhlciBxdWljayBjaGVjayBvZiB0aGUgZGlmZiBhZ2FpbiwgY29uZmlybWluZyBubyBrZXJuZWwgY2hhbmdlcy5cblxuVGhpcyBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIHRoYXQgd2UgZG9uJ3QgdHlwaWNhbGx5IGZ1enogdXNlcnNwYWNlIGxpYnJhcmllcyBkaXJlY3RseSB3aXRoIFN5emthbGxlci4gTXkgZmluYWwgZGVjaXNpb24gaXMgYmFzZWQgb24gdGhlIGxvZ2ljIHRoYXQgY2hhbmdlcyB0byBgbGliYnBmYCBhbmQgc2VsZiB0ZXN0cyBzaG91bGRuJ3QgbmVjZXNzaXRhdGUga2VybmVsIGZ1enppbmcuXG5cbkkgdGhlbiByZXZpc2l0ZWQgdGhlIGluc3RydWN0aW9ucy4gSXQgZG9lc24ndCBleHBsaWNpdGx5IGxpc3QgXCJ1c2Vyc3BhY2UgdG9vbHNcIiwgYnV0IGl0IGRvZXMgbGlzdCBzZXZlcmFsIGl0ZW1zIHRoYXQgaW5kaWNhdGUgbm9uLWZ1enphYmxlIGNoYW5nZXMsIHN1Y2ggYXMgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBhbmQgdW4tcmVhY2hhYmxlIGNvZGUgcGF0aHMuIFRoZSBjcml0ZXJpYSBzZWVtIG1vcmUgZm9jdXNlZCBvbiAqa2VybmVsKiBtb2RpZmljYXRpb25zLiBUaGUgcmVsZXZhbnQgc3RhdGVtZW50IGlzLCBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCIgU2luY2UgdGhpcyBwYXRjaCBkb2VzICpub25lKiBvZiB0aGF0LCBJIGNhbiBjb25maWRlbnRseSBzYXkgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTQwLCJPdXRwdXRUb2tlbnMiOjY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzQ6NDcuNzg1MTQ2NTM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2Vyc3BhY2UgbGliYnBmIGxpYnJhcnkgYW5kIGFkZHMgYSBCUEYgc2VsZnRlc3QgaW4gdG9vbHMvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXJzcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgYWRkcyBhIEJQRiBzZWxmdGVzdCBpbiB0b29scy8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzQ6NDcuNzg1MTczMjA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowbm8mg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 09:14:15 +0000 UTC FinishedAt: 2026-08-19 09:34:49 +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+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlcnNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIGEgQlBGIHNlbGZ0ZXN0IGluIHRvb2xzLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTY2ZDNjZTJhMzM5YmIzMDJhYzI5ZjEwMDg4NzBkYTdjZWE1ZTY3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA5OjM0OjMzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5pbmRleCA1MTRlNGU5ZGFhODI1Li4zNzkzNGNhNDlkZDdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuQEAgLTc3OSw2ICYjNDM7Nzc5LDEzIEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcbiBcdGNoYXIgKnRva2VuX3BhdGg7XG4gXHRpbnQgdG9rZW5fZmQ7XG4gXG4mIzQzO1x0Lyoga2VybmVsIG1vZHVsZSBCVEZzIHRvIGxvYWQsIGFzIHNwZWNpZmllZCB2aWEgYnBmX29iamVjdF9vcGVuX29wdHMgKi9cbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0Y2hhciAqKm5hbWVzO1xuJiM0MztcdFx0c2l6ZV90IG5yX25hbWVzO1xuJiM0MztcdFx0c3RydWN0IGhhc2htYXAgKm5hbWVzX21hcDtcbiYjNDM7XHR9ICprbW9kX2J0ZnM7XG4mIzQzO1xuIFx0Y2hhciBwYXRoW107XG4gfTtcbiBcbkBAIC01ODAzLDYgJiM0Mzs1ODEwLDEyMSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgc2l6ZV90IG1vZF9uYW1lX2hhc2hfZm4obG9uZyBrZXksIHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdHJfaGFzaCgoY2hhciAqKWtleSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG1vZF9uYW1lX2VxdWFsX2ZuKGxvbmcga2V5MSwgbG9uZyBrZXkyLCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3RyY21wKChjaGFyICopa2V5MSwgKGNoYXIgKilrZXkyKSA9PSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBicGZfb2JqZWN0X19mcmVlX2ttb2RfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1xuJiM0MztcdGlmICghb2JqLVx1MDAzZWttb2RfYnRmcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXMpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbnJfbmFtZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzW2ldKTtcbiYjNDM7XHRcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXMpO1xuJiM0MztcdH1cbiYjNDM7XHRoYXNobWFwX19mcmVlKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNfbWFwKTtcbiYjNDM7XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNla21vZF9idGZzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBicGZfb2JqZWN0X19pbml0X2ttb2RfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyAqb3B0cylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKiprbW9kX2J0Zl9uYW1lcztcbiYjNDM7XHRzaXplX3QgaSwga21vZF9idGZfbmFtZXNfY250O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGttb2RfYnRmX25hbWVzID0gT1BUU19HRVQob3B0cywga21vZF9idGZfbmFtZXMsIE5VTEwpO1xuJiM0MztcdGlmICgha21vZF9idGZfbmFtZXMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0a21vZF9idGZfbmFtZXNfY250ID0gT1BUU19HRVQob3B0cywga21vZF9idGZfbmFtZXNfY250LCAwKTtcbiYjNDM7XHRpZiAoIWttb2RfYnRmX25hbWVzX2NudCkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtrbW9kX2J0Zl9uYW1lc19jbnQgbXVzdCBiZSBzZXQgd2hlbiBrbW9kX2J0Zl9uYW1lcyBpcyBwcm92aWRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9iai1cdTAwM2VrbW9kX2J0ZnMgPSBjYWxsb2MoMSwgc2l6ZW9mKCpvYmotXHUwMDNla21vZF9idGZzKSk7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNla21vZF9idGZzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXMgPSBjYWxsb2Moa21vZF9idGZfbmFtZXNfY250LCBzaXplb2YoY2hhciAqKSk7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc19tYXAgPSBoYXNobWFwX19uZXcobW9kX25hbWVfaGFzaF9mbixcbiYjNDM7XHRcdFx0XHRcdFx0IG1vZF9uYW1lX2VxdWFsX2ZuLCBOVUxMKTtcbiYjNDM7XHRpZiAoSVNfRVJSKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNfbWFwKSkge1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzX21hcCk7XG4mIzQzO1x0XHRvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzX21hcCA9IE5VTEw7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrbW9kX2J0Zl9uYW1lc19jbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzaXplX3QgaWR4ID0gb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2Vucl9uYW1lcztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWttb2RfYnRmX25hbWVzW2ldIHx8ICFrbW9kX2J0Zl9uYW1lc1tpXVswXSkge1xuJiM0MztcdFx0XHRwcl93YXJuKFwmIzM0O2ludmFsaWQga2VybmVsIG1vZHVsZSBCVEYgbmFtZSBhdCBpbmRleCAlenVcXG5cJiMzNDssIGkpO1xuJiM0MztcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0b2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc1tpZHhdID0gc3RyZHVwKGttb2RfYnRmX25hbWVzW2ldKTtcbiYjNDM7XHRcdGlmICghb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc1tpZHhdKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBoYXNobWFwX19hZGQob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc19tYXAsXG4mIzQzO1x0XHRcdFx0ICAgb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc1tpZHhdLCAwKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc1tpZHhdKTtcbiYjNDM7XHRcdFx0aWYgKGVyciA9PSAtRUVYSVNUKSB7XG4mIzQzO1x0XHRcdFx0cHJfd2FybihcJiMzNDtkdXBsaWNhdGUga21vZCBCVEYgbmFtZSAmIzM5OyVzJiMzOTsgaWdub3JlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdGttb2RfYnRmX25hbWVzW2ldKTtcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5yX25hbWVzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfb3V0OlxuJiM0MztcdGJwZl9vYmplY3RfX2ZyZWVfa21vZF9idGZzKG9iaik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaXNfa21vZF9idGZfbmVlZGVkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIW9iai1cdTAwM2VrbW9kX2J0ZnMgfHwgIW9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNfbWFwKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChoYXNobWFwX19maW5kKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNfbWFwLCBuYW1lLCBOVUxMKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtza2lwcGluZyBtb2R1bGUgQlRGICYjMzk7JXMmIzM5Oywgbm90IGluIGttb2RfYnRmX25hbWVzXFxuXCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGFsbF9uZWVkZWRfa21vZF9idGZzX2xvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG9iai1cdTAwM2VrbW9kX2J0ZnMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbnJfbmFtZXMgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbnJfbmFtZXMgPT0gb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBicGZfYnRmX2luZm8gaW5mbztcbkBAIC01ODY3LDYgJiM0Mzs1OTg5LDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoIWlzX2ttb2RfYnRmX25lZWRlZChvYmosIG5hbWUpKSB7XG4mIzQzO1x0XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRidGYgPSBidGZfZ2V0X2Zyb21fZmQoZmQsIG9iai1cdTAwM2VidGZfdm1saW51eCk7XG4gXHRcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTtcbiBcdFx0aWYgKGVycikge1xuQEAgLTU4OTEsNiAmIzQzOzYwMTgsOSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9jbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChhbGxfbmVlZGVkX2ttb2RfYnRmc19sb2FkZWQob2JqKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4gXHRpZiAoZXJyKSB7XG5AQCAtODUxNSw2ICYjNDM7ODY0NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsXG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2luaXRfbWFwcyhvYmosIG9wdHMpO1xuIFx0ZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X2luaXRfcHJvZ3Mob2JqLCBvcHRzKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9yZWxvcyhvYmopO1xuJiM0MztcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9faW5pdF9rbW9kX2J0ZnMob2JqLCBvcHRzKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTk2MjksNiAmIzQzOzk3NjAsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGNsb3NlKG9iai1cdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlanVtcHRhYmxlX21hcHMpO1xuIFxuJiM0MztcdGJwZl9vYmplY3RfX2ZyZWVfa21vZF9idGZzKG9iaik7XG4mIzQzO1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uMmY4ZmY2ZDJkM2RmNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0yMjQsMTAgJiM0MzsyMjQsMjQgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcbiBcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxuIFx0ICovXG4gXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuXG4mIzQzO1x0ICoga21vZF9idGZfbmFtZXNfY250IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW5cbiYjNDM7XHQgKiBrbW9kX2J0Zl9uYW1lcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElmIGttb2RfYnRmX25hbWVzIGlzIE5VTEwsIGFsbCBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkLCBwcmVzZXJ2aW5nXG4mIzQzO1x0ICogdGhlIGRlZmF1bHQgYmVoYXZpb3IuIE90aGVyd2lzZSwgb25seSB0aGUgc3BlY2lmaWVkIG1vZHVsZSBCVEZzXG4mIzQzO1x0ICogYXJlIGxvYWRlZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIGttb2RfYnRmX25hbWVzX2NudCBtdXN0IGJlIG5vbi16ZXJvIHdoZW4ga21vZF9idGZfbmFtZXMgaXNcbiYjNDM7XHQgKiBub24tTlVMTDsgb3RoZXJ3aXNlIC1FSU5WQUwgaXMgcmV0dXJuZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y29uc3QgY2hhciAqKmttb2RfYnRmX25hbWVzO1xuJiM0MztcdHNpemVfdCBrbW9kX2J0Zl9uYW1lc19jbnQ7XG4gXG4gXHRzaXplX3QgOjA7XG4gfTtcbi0jZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIGJwZl90b2tlbl9wYXRoXG4mIzQzOyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQga21vZF9idGZfbmFtZXNfY250XG4gXG4gLyoqXG4gICogQGJyaWVmICoqYnBmX29iamVjdF9fb3BlbigpKiogY3JlYXRlcyBhIGJwZl9vYmplY3QgYnkgb3BlbmluZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ttb2RfYnRmcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi42MWQyODQ1YTczMWZmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuY1xuQEAgLTAsMCAmIzQzOzEsMTk2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtrbW9kX2J0ZnMuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBidGZfc2tpcHBlZDtcbiYjNDM7c3RhdGljIGJvb2wgZHVwX2lnbm9yZWQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciBidGZfc2tpcF9mbXRbXSA9XG4mIzQzO1x0XCYjMzQ7bGliYnBmOiBza2lwcGluZyBtb2R1bGUgQlRGICYjMzk7JXMmIzM5Oywgbm90IGluIGttb2RfYnRmX25hbWVzXFxuXCYjMzQ7O1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciBkdXBfaWdub3JlX2ZtdFtdID1cbiYjNDM7XHRcJiMzNDtsaWJicGY6IGR1cGxpY2F0ZSBrbW9kIEJURiBuYW1lICYjMzk7JXMmIzM5OyBpZ25vcmVkXFxuXCYjMzQ7O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBsaWJicGZfcHJpbnRfY2IoZW51bSBsaWJicGZfcHJpbnRfbGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCxcbiYjNDM7XHRcdFx0ICAgdmFfbGlzdCBhcmdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFzdHJjbXAoZm10LCBidGZfc2tpcF9mbXQpKSB7XG4mIzQzO1x0XHRpZiAoIXN0cmNtcCh2YV9hcmcoYXJncywgY2hhciAqKSwgXCYjMzQ7YnBmX3Rlc3Rfbm9fY2ZpXCYjMzQ7KSlcbiYjNDM7XHRcdFx0YnRmX3NraXBwZWQgPSB0cnVlO1xuJiM0MztcdH0gZWxzZSBpZiAoIXN0cmNtcChmbXQsIGR1cF9pZ25vcmVfZm10KSkge1xuJiM0MztcdFx0aWYgKCFzdHJjbXAodmFfYXJnKGFyZ3MsIGNoYXIgKiksIFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7KSlcbiYjNDM7XHRcdFx0ZHVwX2lnbm9yZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGttb2RfYnRmc19wYXNzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHN0YXRpYyBjb25zdCBjaGFyICprbW9kc1tdID0geyBcJiMzNDticGZfdGVzdG1vZFwmIzM0OyB9O1xuJiM0MztcbiYjNDM7XHRERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuJiM0MztcdFx0Lmttb2RfYnRmX25hbWVzID0ga21vZHMsXG4mIzQzO1x0XHQua21vZF9idGZfbmFtZXNfY250ID0gMSxcbiYjNDM7XHQpO1xuJiM0MztcbiYjNDM7XHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2ttb2RfYnRmc19fb3Blbl9vcHRzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7XG4mIzQzO1x0QVNTRVJUX09LKHJldCwgXCYjMzQ7a21vZF9idGZzX19sb2FkXCYjMzQ7KTtcbiYjNDM7b3V0OlxuJiM0MztcdGttb2RfYnRmc19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga21vZF9idGZzX25vbmV4aXN0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHN0YXRpYyBjb25zdCBjaGFyICpub25leGlzdF9rbW9kc1tdID0geyBcJiMzNDttb2R1bGVfbm9uZXhpc3RcJiMzNDsgfTtcbiYjNDM7XG4mIzQzO1x0REVDTEFSRV9MSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5rbW9kX2J0Zl9uYW1lcyA9IG5vbmV4aXN0X2ttb2RzLFxuJiM0MztcdFx0Lmttb2RfYnRmX25hbWVzX2NudCA9IDEsXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbmx5IFwmIzM0O21vZHVsZV9ub25leGlzdFwmIzM0OyBpcyByZXF1ZXN0ZWQ7IHNpbmNlIGl0IGRvZXMgbm90IGV4aXN0IGluXG4mIzQzO1x0ICogdGhlIGtlcm5lbCwgbm8gbW9kdWxlIEJURiBnZXRzIGxvYWRlZC4gVGhlIEJQRiBwcm9ncmFtIHRoZW5cbiYjNDM7XHQgKiBmYWlscyB0byBsb2FkIGJlY2F1c2UgdGhlIHJlYWwgbmVlZGVkIG1vZHVsZSYjMzk7cyBCVEYgaXMgdW5hdmFpbGFibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2tlbCA9IGttb2RfYnRmc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtrbW9kX2J0ZnNfX29wZW5fb3B0c1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga21vZF9idGZzX19sb2FkKHNrZWwpO1xuJiM0MztcdEFTU0VSVF9FUlIocmV0LCBcJiMzNDtrbW9kX2J0ZnNfX2xvYWRcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGttb2RfYnRmc19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga21vZF9idGZzX2R1cCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGttb2RfYnRmcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0bGliYnBmX3ByaW50X2ZuX3Qgb2xkX3ByaW50X2NiO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGNoYXIgKmR1cF9rbW9kc1tdID0geyBcJiMzNDticGZfdGVzdG1vZFwmIzM0OywgXCYjMzQ7YnBmX3Rlc3Rtb2RcJiMzNDsgfTtcbiYjNDM7XG4mIzQzO1x0LyogZHVwbGljYXRlIGVudHJ5IG9uIHB1cnBvc2U6IGxpYmJwZiBzaG91bGQgZGVkdXBlIGl0IHdpdGggYSB3YXJuaW5nICovXG4mIzQzO1x0REVDTEFSRV9MSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5rbW9kX2J0Zl9uYW1lcyA9IGR1cF9rbW9kcyxcbiYjNDM7XHRcdC5rbW9kX2J0Zl9uYW1lc19jbnQgPSAyLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdGR1cF9pZ25vcmVkID0gZmFsc2U7XG4mIzQzO1x0b2xkX3ByaW50X2NiID0gbGliYnBmX3NldF9wcmludChsaWJicGZfcHJpbnRfY2IpO1xuJiM0MztcbiYjNDM7XHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2ttb2RfYnRmc19fb3Blbl9vcHRzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfVFJVRShkdXBfaWdub3JlZCwgXCYjMzQ7ZHVwX2lnbm9yZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7XG4mIzQzO1x0QVNTRVJUX09LKHJldCwgXCYjMzQ7a21vZF9idGZzX19sb2FkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0a21vZF9idGZzX19kZXN0cm95KHNrZWwpO1xuJiM0MztvdXQ6XG4mIzQzO1x0bGliYnBmX3NldF9wcmludChvbGRfcHJpbnRfY2IpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfc2tpcCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGttb2RfYnRmcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0bGliYnBmX3ByaW50X2ZuX3Qgb2xkX3ByaW50X2NiO1xuJiM0MztcdGJvb2wgdGVzdG1vZF91bmxvYWRlZCA9IGZhbHNlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGNoYXIgKmttb2RzW10gPSB7IFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7IH07XG4mIzQzO1xuJiM0MztcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4mIzQzO1x0XHQua21vZF9idGZfbmFtZXMgPSBrbW9kcyxcbiYjNDM7XHRcdC5rbW9kX2J0Zl9uYW1lc19jbnQgPSAxLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdGJ0Zl9za2lwcGVkID0gZmFsc2U7XG4mIzQzO1x0b2xkX3ByaW50X2NiID0gbGliYnBmX3NldF9wcmludChsaWJicGZfcHJpbnRfY2IpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlbG9hZCBicGZfdGVzdG1vZCBhZnRlciBicGZfdGVzdF9ub19jZmkgdG8gZW5zdXJlIHRoZSB1bm5lZWRlZFxuJiM0MztcdCAqIG1vZHVsZSYjMzk7cyBCVEYgaXMgZW51bWVyYXRlZCBmaXJzdCBhbmQgc2tpcHBlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyh1bmxvYWRfYnBmX3Rlc3Rtb2QoZmFsc2UpLCBcJiMzNDt1bmxvYWQgYnBmX3Rlc3Rtb2RcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwX3ByaW50O1xuJiM0MztcdHRlc3Rtb2RfdW5sb2FkZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhsb2FkX21vZHVsZShcJiMzNDticGZfdGVzdF9ub19jZmkua29cJiMzNDssIGZhbHNlKSxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtsb2FkIHVubmVlZGVkIGJwZl90ZXN0X25vX2NmaSBtb2R1bGVcJiMzNDspKVxuJiM0MztcdFx0Z290byBjbGVhbnVwX3ByaW50O1xuJiM0MztcdGlmICghQVNTRVJUX09LKGxvYWRfYnBmX3Rlc3Rtb2QoZmFsc2UpLCBcJiMzNDtyZXN0b3JlIGJwZl90ZXN0bW9kXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cF9tb2R1bGU7XG4mIzQzO1x0dGVzdG1vZF91bmxvYWRlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2ttb2RfYnRmc19fb3Blbl9vcHRzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cF9tb2R1bGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGttb2RfYnRmc19fbG9hZChza2VsKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O2ttb2RfYnRmc19fbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXBfc2tlbDtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX1RSVUUoYnRmX3NraXBwZWQsIFwmIzM0O2J0Zl9za2lwcGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO2NsZWFudXBfc2tlbDpcbiYjNDM7XHRrbW9kX2J0ZnNfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO2NsZWFudXBfbW9kdWxlOlxuJiM0MztcdEFTU0VSVF9PSyh1bmxvYWRfbW9kdWxlKFwmIzM0O2JwZl90ZXN0X25vX2NmaVwmIzM0OywgZmFsc2UpLFxuJiM0MztcdFx0ICBcJiMzNDt1bmxvYWQgdW5uZWVkZWQgYnBmX3Rlc3Rfbm9fY2ZpIG1vZHVsZVwmIzM0Oyk7XG4mIzQzO2NsZWFudXBfcHJpbnQ6XG4mIzQzO1x0aWYgKHRlc3Rtb2RfdW5sb2FkZWQpXG4mIzQzO1x0XHRBU1NFUlRfT0sobG9hZF9icGZfdGVzdG1vZChmYWxzZSksXG4mIzQzO1x0XHRcdCAgXCYjMzQ7cmVzdG9yZSBicGZfdGVzdG1vZCBvbiBlcnJvciBwYXRoXCYjMzQ7KTtcbiYjNDM7XHRsaWJicGZfc2V0X3ByaW50KG9sZF9wcmludF9jYik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGttb2RfYnRmc19ub19jbnQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrbW9kX2J0ZnMgKnNrZWwgPSBOVUxMO1xuJiM0MztcdHN0YXRpYyBjb25zdCBjaGFyICprbW9kc1tdID0geyBcJiMzNDticGZfdGVzdG1vZFwmIzM0OyB9O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGttb2RfYnRmX25hbWVzIHNldCBidXQga21vZF9idGZfbmFtZXNfY250IG5vdCBzZXQ6XG4mIzQzO1x0ICogb3BlbiBtdXN0IGZhaWwgd2l0aCAtRUlOVkFMLlxuJiM0MztcdCAqL1xuJiM0MztcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4mIzQzO1x0XHQua21vZF9idGZfbmFtZXMgPSBrbW9kcyxcbiYjNDM7XHQpO1xuJiM0MztcbiYjNDM7XHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0QVNTRVJUX05VTEwoc2tlbCwgXCYjMzQ7a21vZF9idGZzX19vcGVuX29wdHMgd2l0aG91dCBrbW9kX2J0Zl9uYW1lc19jbnRcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2ttb2RfYnRmcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2ttb2RfYnRmc19wYXNzXCYjMzQ7KSlcbiYjNDM7XHRcdGttb2RfYnRmc19wYXNzKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2ttb2RfYnRmc19ub25leGlzdFwmIzM0OykpXG4mIzQzO1x0XHRrbW9kX2J0ZnNfbm9uZXhpc3QoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7a21vZF9idGZzX2R1cFwmIzM0OykpXG4mIzQzO1x0XHRrbW9kX2J0ZnNfZHVwKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2ttb2RfYnRmc19za2lwXCYjMzQ7KSlcbiYjNDM7XHRcdGttb2RfYnRmc19za2lwKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2ttb2RfYnRmc19ub19jbnRcJiMzNDspKVxuJiM0MztcdFx0a21vZF9idGZzX25vX2NudCgpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjk2ODYwZDYwZTBkYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmcy5jXG5AQCAtMCwwICYjNDM7MSwxMyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRlc3Rfa21vZF9idGZzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXJzcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgYWRkcyBhIEJQRiBzZWxmdGVzdCBpbiB0b29scy8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk2NmQzY2UyYTMzOWJiMzAyYWMyOWYxMDA4ODcwZGE3Y2VhNWU2N2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTozNDozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCmluZGV4IDUxNGU0ZTlkYWE4MjUuLjM3OTM0Y2E0OWRkN2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwpAQCAtNzc5LDYgJiM0Mzs3NzksMTMgQEAgc3RydWN0IGJwZl9vYmplY3QgewogCWNoYXIgKnRva2VuX3BhdGg7CiAJaW50IHRva2VuX2ZkOwogCiYjNDM7CS8qIGtlcm5lbCBtb2R1bGUgQlRGcyB0byBsb2FkLCBhcyBzcGVjaWZpZWQgdmlhIGJwZl9vYmplY3Rfb3Blbl9vcHRzICovCiYjNDM7CXN0cnVjdCB7CiYjNDM7CQljaGFyICoqbmFtZXM7CiYjNDM7CQlzaXplX3QgbnJfbmFtZXM7CiYjNDM7CQlzdHJ1Y3QgaGFzaG1hcCAqbmFtZXNfbWFwOwomIzQzOwl9ICprbW9kX2J0ZnM7CiYjNDM7CiAJY2hhciBwYXRoW107CiB9OwogCkBAIC01ODAzLDYgJiM0Mzs1ODEwLDEyMSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCBtb2RfbmFtZV9oYXNoX2ZuKGxvbmcga2V5LCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3RyX2hhc2goKGNoYXIgKilrZXkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBtb2RfbmFtZV9lcXVhbF9mbihsb25nIGtleTEsIGxvbmcga2V5Miwgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0cmNtcCgoY2hhciAqKWtleTEsIChjaGFyICopa2V5MikgPT0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnBmX29iamVjdF9fZnJlZV9rbW9kX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKJiM0Mzt7CiYjNDM7CXNpemVfdCBpOwomIzQzOwomIzQzOwlpZiAoIW9iai0mZ3Q7a21vZF9idGZzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAob2JqLSZndDtrbW9kX2J0ZnMtJmd0O25hbWVzKSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgb2JqLSZndDtrbW9kX2J0ZnMtJmd0O25yX25hbWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQl6ZnJlZSgmYW1wO29iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lc1tpXSk7CiYjNDM7CQl6ZnJlZSgmYW1wO29iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lcyk7CiYjNDM7CX0KJiM0MzsJaGFzaG1hcF9fZnJlZShvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7bmFtZXNfbWFwKTsKJiM0MzsJemZyZWUoJmFtcDtvYmotJmd0O2ttb2RfYnRmcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX29iamVjdF9faW5pdF9rbW9kX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqKmttb2RfYnRmX25hbWVzOwomIzQzOwlzaXplX3QgaSwga21vZF9idGZfbmFtZXNfY250OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlrbW9kX2J0Zl9uYW1lcyA9IE9QVFNfR0VUKG9wdHMsIGttb2RfYnRmX25hbWVzLCBOVUxMKTsKJiM0MzsJaWYgKCFrbW9kX2J0Zl9uYW1lcykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlrbW9kX2J0Zl9uYW1lc19jbnQgPSBPUFRTX0dFVChvcHRzLCBrbW9kX2J0Zl9uYW1lc19jbnQsIDApOwomIzQzOwlpZiAoIWttb2RfYnRmX25hbWVzX2NudCkgewomIzQzOwkJcHJfd2FybigmIzM0O2ttb2RfYnRmX25hbWVzX2NudCBtdXN0IGJlIHNldCB3aGVuIGttb2RfYnRmX25hbWVzIGlzIHByb3ZpZGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlvYmotJmd0O2ttb2RfYnRmcyA9IGNhbGxvYygxLCBzaXplb2YoKm9iai0mZ3Q7a21vZF9idGZzKSk7CiYjNDM7CWlmICghb2JqLSZndDtrbW9kX2J0ZnMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJb2JqLSZndDtrbW9kX2J0ZnMtJmd0O25hbWVzID0gY2FsbG9jKGttb2RfYnRmX25hbWVzX2NudCwgc2l6ZW9mKGNoYXIgKikpOwomIzQzOwlpZiAoIW9iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lcykgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7bmFtZXNfbWFwID0gaGFzaG1hcF9fbmV3KG1vZF9uYW1lX2hhc2hfZm4sCiYjNDM7CQkJCQkJIG1vZF9uYW1lX2VxdWFsX2ZuLCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7bmFtZXNfbWFwKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7bmFtZXNfbWFwKTsKJiM0MzsJCW9iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lc19tYXAgPSBOVUxMOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBrbW9kX2J0Zl9uYW1lc19jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzaXplX3QgaWR4ID0gb2JqLSZndDtrbW9kX2J0ZnMtJmd0O25yX25hbWVzOwomIzQzOwomIzQzOwkJaWYgKCFrbW9kX2J0Zl9uYW1lc1tpXSB8fCAha21vZF9idGZfbmFtZXNbaV1bMF0pIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7aW52YWxpZCBrZXJuZWwgbW9kdWxlIEJURiBuYW1lIGF0IGluZGV4ICV6dVxuJiMzNDssIGkpOwomIzQzOwkJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byBlcnJfb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJb2JqLSZndDtrbW9kX2J0ZnMtJmd0O25hbWVzW2lkeF0gPSBzdHJkdXAoa21vZF9idGZfbmFtZXNbaV0pOwomIzQzOwkJaWYgKCFvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7bmFtZXNbaWR4XSkgewomIzQzOwkJCWVyciA9IC1FTk9NRU07CiYjNDM7CQkJZ290byBlcnJfb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0gaGFzaG1hcF9fYWRkKG9iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lc19tYXAsCiYjNDM7CQkJCSAgIG9iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lc1tpZHhdLCAwKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQl6ZnJlZSgmYW1wO29iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lc1tpZHhdKTsKJiM0MzsJCQlpZiAoZXJyID09IC1FRVhJU1QpIHsKJiM0MzsJCQkJcHJfd2FybigmIzM0O2R1cGxpY2F0ZSBrbW9kIEJURiBuYW1lICYjMzk7JXMmIzM5OyBpZ25vcmVkXG4mIzM0OywKJiM0MzsJCQkJCWttb2RfYnRmX25hbWVzW2ldKTsKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJfQomIzQzOwkJCWdvdG8gZXJyX291dDsKJiM0MzsJCX0KJiM0MzsJCW9iai0mZ3Q7a21vZF9idGZzLSZndDtucl9uYW1lcyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX291dDoKJiM0MzsJYnBmX29iamVjdF9fZnJlZV9rbW9kX2J0ZnMob2JqKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgaXNfa21vZF9idGZfbmVlZGVkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlpZiAoIW9iai0mZ3Q7a21vZF9idGZzIHx8ICFvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7bmFtZXNfbWFwKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWlmIChoYXNobWFwX19maW5kKG9iai0mZ3Q7a21vZF9idGZzLSZndDtuYW1lc19tYXAsIG5hbWUsIE5VTEwpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXByX2RlYnVnKCYjMzQ7c2tpcHBpbmcgbW9kdWxlIEJURiAmIzM5OyVzJiMzOTssIG5vdCBpbiBrbW9kX2J0Zl9uYW1lc1xuJiMzNDssIG5hbWUpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGFsbF9uZWVkZWRfa21vZF9idGZzX2xvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQomIzQzO3sKJiM0MzsJcmV0dXJuIG9iai0mZ3Q7a21vZF9idGZzICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIG9iai0mZ3Q7a21vZF9idGZzLSZndDtucl9uYW1lcyAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgb2JqLSZndDtrbW9kX2J0ZnMtJmd0O25yX25hbWVzID09IG9iai0mZ3Q7YnRmX21vZHVsZV9jbnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IGJwZl9idGZfaW5mbyBpbmZvOwpAQCAtNTg2Nyw2ICYjNDM7NTk4OSwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCWlmICghaXNfa21vZF9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHsKJiM0MzsJCQljbG9zZShmZCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCWJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLSZndDtidGZfdm1saW51eCk7CiAJCWVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTsKIAkJaWYgKGVycikgewpAQCAtNTg5MSw2ICYjNDM7NjAxOCw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCQkJYnJlYWs7CiAJCX0KIAkJb2JqLSZndDtidGZfbW9kdWxlX2NudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoYWxsX25lZWRlZF9rbW9kX2J0ZnNfbG9hZGVkKG9iaikpCiYjNDM7CQkJYnJlYWs7CiAJfQogCiAJaWYgKGVycikgewpAQCAtODUxNSw2ICYjNDM7ODY0NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsCiAJZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19pbml0X21hcHMob2JqLCBvcHRzKTsKIAllcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfaW5pdF9wcm9ncyhvYmosIG9wdHMpOwogCWVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9yZWxvcyhvYmopOwomIzQzOwllcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2luaXRfa21vZF9idGZzKG9iaiwgb3B0cyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTk2MjksNiAmIzQzOzk3NjAsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCWNsb3NlKG9iai0mZ3Q7anVtcHRhYmxlX21hcHNbaV0uZmQpOwogCXpmcmVlKCZhbXA7b2JqLSZndDtqdW1wdGFibGVfbWFwcyk7CiAKJiM0MzsJYnBmX29iamVjdF9fZnJlZV9rbW9kX2J0ZnMob2JqKTsKJiM0MzsKIAlmcmVlKG9iaik7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oCmluZGV4IGI5NjVhZDU3MTU0MDMuLjJmOGZmNmQyZDNkZjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuaApAQCAtMjI0LDEwICYjNDM7MjI0LDI0IEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7CiAJICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuCiAJICovCiAJY29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7CiYjNDM7CS8qCiYjNDM7CSAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuCiYjNDM7CSAqIGttb2RfYnRmX25hbWVzX2NudCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluCiYjNDM7CSAqIGttb2RfYnRmX25hbWVzLgomIzQzOwkgKgomIzQzOwkgKiBJZiBrbW9kX2J0Zl9uYW1lcyBpcyBOVUxMLCBhbGwgbW9kdWxlIEJURnMgYXJlIGxvYWRlZCwgcHJlc2VydmluZwomIzQzOwkgKiB0aGUgZGVmYXVsdCBiZWhhdmlvci4gT3RoZXJ3aXNlLCBvbmx5IHRoZSBzcGVjaWZpZWQgbW9kdWxlIEJURnMKJiM0MzsJICogYXJlIGxvYWRlZC4KJiM0MzsJICoKJiM0MzsJICoga21vZF9idGZfbmFtZXNfY250IG11c3QgYmUgbm9uLXplcm8gd2hlbiBrbW9kX2J0Zl9uYW1lcyBpcwomIzQzOwkgKiBub24tTlVMTDsgb3RoZXJ3aXNlIC1FSU5WQUwgaXMgcmV0dXJuZWQuCiYjNDM7CSAqLwomIzQzOwljb25zdCBjaGFyICoqa21vZF9idGZfbmFtZXM7CiYjNDM7CXNpemVfdCBrbW9kX2J0Zl9uYW1lc19jbnQ7CiAKIAlzaXplX3QgOjA7CiB9OwotI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aAomIzQzOyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQga21vZF9idGZfbmFtZXNfY250CiAKIC8qKgogICogQGJyaWVmICoqYnBmX29iamVjdF9fb3BlbigpKiogY3JlYXRlcyBhIGJwZl9vYmplY3QgYnkgb3BlbmluZwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi42MWQyODQ1YTczMWZmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmMKQEAgLTAsMCAmIzQzOzEsMTk2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7a21vZF9idGZzLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYnRmX3NraXBwZWQ7CiYjNDM7c3RhdGljIGJvb2wgZHVwX2lnbm9yZWQ7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgYnRmX3NraXBfZm10W10gPQomIzQzOwkmIzM0O2xpYmJwZjogc2tpcHBpbmcgbW9kdWxlIEJURiAmIzM5OyVzJiMzOTssIG5vdCBpbiBrbW9kX2J0Zl9uYW1lc1xuJiMzNDs7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgZHVwX2lnbm9yZV9mbXRbXSA9CiYjNDM7CSYjMzQ7bGliYnBmOiBkdXBsaWNhdGUga21vZCBCVEYgbmFtZSAmIzM5OyVzJiMzOTsgaWdub3JlZFxuJiMzNDs7CiYjNDM7CiYjNDM7c3RhdGljIGludCBsaWJicGZfcHJpbnRfY2IoZW51bSBsaWJicGZfcHJpbnRfbGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwKJiM0MzsJCQkgICB2YV9saXN0IGFyZ3MpCiYjNDM7ewomIzQzOwlpZiAoIXN0cmNtcChmbXQsIGJ0Zl9za2lwX2ZtdCkpIHsKJiM0MzsJCWlmICghc3RyY21wKHZhX2FyZyhhcmdzLCBjaGFyICopLCAmIzM0O2JwZl90ZXN0X25vX2NmaSYjMzQ7KSkKJiM0MzsJCQlidGZfc2tpcHBlZCA9IHRydWU7CiYjNDM7CX0gZWxzZSBpZiAoIXN0cmNtcChmbXQsIGR1cF9pZ25vcmVfZm10KSkgewomIzQzOwkJaWYgKCFzdHJjbXAodmFfYXJnKGFyZ3MsIGNoYXIgKiksICYjMzQ7YnBmX3Rlc3Rtb2QmIzM0OykpCiYjNDM7CQkJZHVwX2lnbm9yZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfcGFzcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGttb2RfYnRmcyAqc2tlbCA9IE5VTEw7CiYjNDM7CWludCByZXQ7CiYjNDM7CXN0YXRpYyBjb25zdCBjaGFyICprbW9kc1tdID0geyAmIzM0O2JwZl90ZXN0bW9kJiMzNDsgfTsKJiM0MzsKJiM0MzsJREVDTEFSRV9MSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cywKJiM0MzsJCS5rbW9kX2J0Zl9uYW1lcyA9IGttb2RzLAomIzQzOwkJLmttb2RfYnRmX25hbWVzX2NudCA9IDEsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXNrZWwgPSBrbW9kX2J0ZnNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtrbW9kX2J0ZnNfX29wZW5fb3B0cyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7a21vZF9idGZzX19sb2FkJiMzNDspOwomIzQzO291dDoKJiM0MzsJa21vZF9idGZzX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfbm9uZXhpc3Qodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrbW9kX2J0ZnMgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwlzdGF0aWMgY29uc3QgY2hhciAqbm9uZXhpc3Rfa21vZHNbXSA9IHsgJiMzNDttb2R1bGVfbm9uZXhpc3QmIzM0OyB9OwomIzQzOwomIzQzOwlERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmttb2RfYnRmX25hbWVzID0gbm9uZXhpc3Rfa21vZHMsCiYjNDM7CQkua21vZF9idGZfbmFtZXNfY250ID0gMSwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT25seSAmIzM0O21vZHVsZV9ub25leGlzdCYjMzQ7IGlzIHJlcXVlc3RlZDsgc2luY2UgaXQgZG9lcyBub3QgZXhpc3QgaW4KJiM0MzsJICogdGhlIGtlcm5lbCwgbm8gbW9kdWxlIEJURiBnZXRzIGxvYWRlZC4gVGhlIEJQRiBwcm9ncmFtIHRoZW4KJiM0MzsJICogZmFpbHMgdG8gbG9hZCBiZWNhdXNlIHRoZSByZWFsIG5lZWRlZCBtb2R1bGUmIzM5O3MgQlRGIGlzIHVuYXZhaWxhYmxlLgomIzQzOwkgKi8KJiM0MzsJc2tlbCA9IGttb2RfYnRmc19fb3Blbl9vcHRzKCZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2ttb2RfYnRmc19fb3Blbl9vcHRzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGttb2RfYnRmc19fbG9hZChza2VsKTsKJiM0MzsJQVNTRVJUX0VSUihyZXQsICYjMzQ7a21vZF9idGZzX19sb2FkJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJa21vZF9idGZzX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfZHVwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDsKJiM0MzsJbGliYnBmX3ByaW50X2ZuX3Qgb2xkX3ByaW50X2NiOwomIzQzOwlpbnQgcmV0OwomIzQzOwlzdGF0aWMgY29uc3QgY2hhciAqZHVwX2ttb2RzW10gPSB7ICYjMzQ7YnBmX3Rlc3Rtb2QmIzM0OywgJiMzNDticGZfdGVzdG1vZCYjMzQ7IH07CiYjNDM7CiYjNDM7CS8qIGR1cGxpY2F0ZSBlbnRyeSBvbiBwdXJwb3NlOiBsaWJicGYgc2hvdWxkIGRlZHVwZSBpdCB3aXRoIGEgd2FybmluZyAqLwomIzQzOwlERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmttb2RfYnRmX25hbWVzID0gZHVwX2ttb2RzLAomIzQzOwkJLmttb2RfYnRmX25hbWVzX2NudCA9IDIsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CWR1cF9pZ25vcmVkID0gZmFsc2U7CiYjNDM7CW9sZF9wcmludF9jYiA9IGxpYmJwZl9zZXRfcHJpbnQobGliYnBmX3ByaW50X2NiKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGttb2RfYnRmc19fb3Blbl9vcHRzKCZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2ttb2RfYnRmc19fb3Blbl9vcHRzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9UUlVFKGR1cF9pZ25vcmVkLCAmIzM0O2R1cF9pZ25vcmVkJiMzNDspOwomIzQzOwomIzQzOwlyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7a21vZF9idGZzX19sb2FkJiMzNDspOwomIzQzOwomIzQzOwlrbW9kX2J0ZnNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7b3V0OgomIzQzOwlsaWJicGZfc2V0X3ByaW50KG9sZF9wcmludF9jYik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGttb2RfYnRmc19za2lwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDsKJiM0MzsJbGliYnBmX3ByaW50X2ZuX3Qgb2xkX3ByaW50X2NiOwomIzQzOwlib29sIHRlc3Rtb2RfdW5sb2FkZWQgPSBmYWxzZTsKJiM0MzsJaW50IHJldDsKJiM0MzsJc3RhdGljIGNvbnN0IGNoYXIgKmttb2RzW10gPSB7ICYjMzQ7YnBmX3Rlc3Rtb2QmIzM0OyB9OwomIzQzOwomIzQzOwlERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmttb2RfYnRmX25hbWVzID0ga21vZHMsCiYjNDM7CQkua21vZF9idGZfbmFtZXNfY250ID0gMSwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJYnRmX3NraXBwZWQgPSBmYWxzZTsKJiM0MzsJb2xkX3ByaW50X2NiID0gbGliYnBmX3NldF9wcmludChsaWJicGZfcHJpbnRfY2IpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWxvYWQgYnBmX3Rlc3Rtb2QgYWZ0ZXIgYnBmX3Rlc3Rfbm9fY2ZpIHRvIGVuc3VyZSB0aGUgdW5uZWVkZWQKJiM0MzsJICogbW9kdWxlJiMzOTtzIEJURiBpcyBlbnVtZXJhdGVkIGZpcnN0IGFuZCBza2lwcGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFBU1NFUlRfT0sodW5sb2FkX2JwZl90ZXN0bW9kKGZhbHNlKSwgJiMzNDt1bmxvYWQgYnBmX3Rlc3Rtb2QmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXBfcHJpbnQ7CiYjNDM7CXRlc3Rtb2RfdW5sb2FkZWQgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhsb2FkX21vZHVsZSgmIzM0O2JwZl90ZXN0X25vX2NmaS5rbyYjMzQ7LCBmYWxzZSksCiYjNDM7CQkgICAgICAgJiMzNDtsb2FkIHVubmVlZGVkIGJwZl90ZXN0X25vX2NmaSBtb2R1bGUmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXBfcHJpbnQ7CiYjNDM7CWlmICghQVNTRVJUX09LKGxvYWRfYnBmX3Rlc3Rtb2QoZmFsc2UpLCAmIzM0O3Jlc3RvcmUgYnBmX3Rlc3Rtb2QmIzM0OykpCiYjNDM7CQlnb3RvIGNsZWFudXBfbW9kdWxlOwomIzQzOwl0ZXN0bW9kX3VubG9hZGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CXNrZWwgPSBrbW9kX2J0ZnNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtrbW9kX2J0ZnNfX29wZW5fb3B0cyYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cF9tb2R1bGU7CiYjNDM7CiYjNDM7CXJldCA9IGttb2RfYnRmc19fbG9hZChza2VsKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2ttb2RfYnRmc19fbG9hZCYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cF9za2VsOwomIzQzOwomIzQzOwlBU1NFUlRfVFJVRShidGZfc2tpcHBlZCwgJiMzNDtidGZfc2tpcHBlZCYjMzQ7KTsKJiM0MzsKJiM0MztjbGVhbnVwX3NrZWw6CiYjNDM7CWttb2RfYnRmc19fZGVzdHJveShza2VsKTsKJiM0MztjbGVhbnVwX21vZHVsZToKJiM0MzsJQVNTRVJUX09LKHVubG9hZF9tb2R1bGUoJiMzNDticGZfdGVzdF9ub19jZmkmIzM0OywgZmFsc2UpLAomIzQzOwkJICAmIzM0O3VubG9hZCB1bm5lZWRlZCBicGZfdGVzdF9ub19jZmkgbW9kdWxlJiMzNDspOwomIzQzO2NsZWFudXBfcHJpbnQ6CiYjNDM7CWlmICh0ZXN0bW9kX3VubG9hZGVkKQomIzQzOwkJQVNTRVJUX09LKGxvYWRfYnBmX3Rlc3Rtb2QoZmFsc2UpLAomIzQzOwkJCSAgJiMzNDtyZXN0b3JlIGJwZl90ZXN0bW9kIG9uIGVycm9yIHBhdGgmIzM0Oyk7CiYjNDM7CWxpYmJwZl9zZXRfcHJpbnQob2xkX3ByaW50X2NiKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga21vZF9idGZzX25vX2NudCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGttb2RfYnRmcyAqc2tlbCA9IE5VTEw7CiYjNDM7CXN0YXRpYyBjb25zdCBjaGFyICprbW9kc1tdID0geyAmIzM0O2JwZl90ZXN0bW9kJiMzNDsgfTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICoga21vZF9idGZfbmFtZXMgc2V0IGJ1dCBrbW9kX2J0Zl9uYW1lc19jbnQgbm90IHNldDoKJiM0MzsJICogb3BlbiBtdXN0IGZhaWwgd2l0aCAtRUlOVkFMLgomIzQzOwkgKi8KJiM0MzsJREVDTEFSRV9MSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cywKJiM0MzsJCS5rbW9kX2J0Zl9uYW1lcyA9IGttb2RzLAomIzQzOwkpOwomIzQzOwomIzQzOwlza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJQVNTRVJUX05VTEwoc2tlbCwgJiMzNDtrbW9kX2J0ZnNfX29wZW5fb3B0cyB3aXRob3V0IGttb2RfYnRmX25hbWVzX2NudCYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9rbW9kX2J0ZnModm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghZW52Lmhhc190ZXN0bW9kKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtrbW9kX2J0ZnNfcGFzcyYjMzQ7KSkKJiM0MzsJCWttb2RfYnRmc19wYXNzKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7a21vZF9idGZzX25vbmV4aXN0JiMzNDspKQomIzQzOwkJa21vZF9idGZzX25vbmV4aXN0KCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7a21vZF9idGZzX2R1cCYjMzQ7KSkKJiM0MzsJCWttb2RfYnRmc19kdXAoKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtrbW9kX2J0ZnNfc2tpcCYjMzQ7KSkKJiM0MzsJCWttb2RfYnRmc19za2lwKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7a21vZF9idGZzX25vX2NudCYjMzQ7KSkKJiM0MzsJCWttb2RfYnRmc19ub19jbnQoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjk2ODYwZDYwZTBkYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuYwpAQCAtMCwwICYjNDM7MSwxMyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfdGVzdG1vZF9sb29wX3Rlc3QmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9rbW9kX2J0ZnMpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwOTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTQwCgkJCQkJCQlvdXRwdXQ6IDY1CgkJCQkJCQl0aG91Z2h0czogODExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIHNvbWUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGxvYWRpbmcga2VybmVsIG1vZHVsZSBCVEZzLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgYnBmX29iamVjdF9vcGVuX29wdHNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgbG9jYXRlZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhbGwgd2l0aGluIGB0b29scy9saWIvYnBmL2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnIOKAkyBpdCYjMzk7cyBhbGwgaW4gdXNlcnNwYWNlLCBhbmQgbm8ga2VybmVsIGNvZGUgaXMgdG91Y2hlZC4gVGhpcyBzZWVtcyBpbXBvcnRhbnQuCgpJIHRoZW4gY29uc2lkZXJlZCB3aGV0aGVyIGBsaWJicGZgIGhhcyBhbnkgaW4ta2VybmVsIGNvbXBvbmVudHMsIGJ1dCBxdWlja2x5IHJlbWluZGVkIG15c2VsZiB0aGF0IGl0JiMzOTtzIGEgdXNlcnNwYWNlIGxpYnJhcnkgdXNlZCBmb3IgbG9hZGluZyBCUEYgcHJvZ3JhbXMgaW50byB0aGUga2VybmVsLiBTbywgdGhlIGRpcmVjdCBpbXBhY3Qgb24gdGhlIGtlcm5lbCYjMzk7cyBleGVjdXRpb24gZmxvdyBzZWVtcyBtaW5pbWFsLCBvciByYXRoZXIsIGluZGlyZWN0LiBUaGUgcGF0Y2ggaXRzZWxmIGlzICpqdXN0KiBhIHVzZXJzcGFjZSBjaGFuZ2UuCgpUaGUgbmV4dCB0aGluZyB0aGF0IHBvcHBlZCBpbnRvIG15IGhlYWQgd2FzIFN5emthbGxlciBhbmQgaXRzIHJvbGUgaW4ga2VybmVsIGZ1enppbmcuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGNvZGUgY2hhbmdlcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scy4gU28gdGhlIGFuc3dlciBzaG91bGQgYmUgbm8uCgpUbyBjb25maXJtIG15IGV2YWx1YXRpb24sIEkgZGlkIGFub3RoZXIgcXVpY2sgY2hlY2sgb2YgdGhlIGRpZmYgYWdhaW4sIGNvbmZpcm1pbmcgbm8ga2VybmVsIGNoYW5nZXMuCgpUaGlzIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgdGhhdCB3ZSBkb24mIzM5O3QgdHlwaWNhbGx5IGZ1enogdXNlcnNwYWNlIGxpYnJhcmllcyBkaXJlY3RseSB3aXRoIFN5emthbGxlci4gTXkgZmluYWwgZGVjaXNpb24gaXMgYmFzZWQgb24gdGhlIGxvZ2ljIHRoYXQgY2hhbmdlcyB0byBgbGliYnBmYCBhbmQgc2VsZiB0ZXN0cyBzaG91bGRuJiMzOTt0IG5lY2Vzc2l0YXRlIGtlcm5lbCBmdXp6aW5nLgoKSSB0aGVuIHJldmlzaXRlZCB0aGUgaW5zdHJ1Y3Rpb25zLiBJdCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IGxpc3QgJiMzNDt1c2Vyc3BhY2UgdG9vbHMmIzM0OywgYnV0IGl0IGRvZXMgbGlzdCBzZXZlcmFsIGl0ZW1zIHRoYXQgaW5kaWNhdGUgbm9uLWZ1enphYmxlIGNoYW5nZXMsIHN1Y2ggYXMgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBhbmQgdW4tcmVhY2hhYmxlIGNvZGUgcGF0aHMuIFRoZSBjcml0ZXJpYSBzZWVtIG1vcmUgZm9jdXNlZCBvbiAqa2VybmVsKiBtb2RpZmljYXRpb25zLiBUaGUgcmVsZXZhbnQgc3RhdGVtZW50IGlzLCAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsgU2luY2UgdGhpcyBwYXRjaCBkb2VzICpub25lKiBvZiB0aGF0LCBJIGNhbiBjb25maWRlbnRseSBzYXkgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlcnNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIGEgQlBGIHNlbGZ0ZXN0IGluIHRvb2xzLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2Vyc3BhY2UgbGliYnBmIGxpYnJhcnkgYW5kIGFkZHMgYSBCUEYgc2VsZnRlc3QgaW4gdG9vbHMvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDk6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjM0OjM0LjkyMzc4MDgxMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODYxNDAzOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlcnNwYWNlIGxpYmJwZiBsaWJyYXJ5IGFuZCBhZGRzIGEgQlBGIHNlbGZ0ZXN0IGluIHRvb2xzLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozNDozNC45MjM3ODgxMjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1ODgxMDIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk2NmQzY2UyYTMzOWJiMzAyYWMyOWYxMDA4ODcwZGE3Y2VhNWU2N2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDk6MzQ6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5pbmRleCA1MTRlNGU5ZGFhODI1Li4zNzkzNGNhNDlkZDdmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuQEAgLTc3OSw2ICs3NzksMTMgQEAgc3RydWN0IGJwZl9vYmplY3Qge1xcbiBcXHRjaGFyICp0b2tlbl9wYXRoO1xcbiBcXHRpbnQgdG9rZW5fZmQ7XFxuIFxcbitcXHQvKiBrZXJuZWwgbW9kdWxlIEJURnMgdG8gbG9hZCwgYXMgc3BlY2lmaWVkIHZpYSBicGZfb2JqZWN0X29wZW5fb3B0cyAqL1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHRjaGFyICoqbmFtZXM7XFxuK1xcdFxcdHNpemVfdCBucl9uYW1lcztcXG4rXFx0XFx0c3RydWN0IGhhc2htYXAgKm5hbWVzX21hcDtcXG4rXFx0fSAqa21vZF9idGZzO1xcbitcXG4gXFx0Y2hhciBwYXRoW107XFxuIH07XFxuIFxcbkBAIC01ODAzLDYgKzU4MTAsMTIxIEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgc2l6ZV90IG1vZF9uYW1lX2hhc2hfZm4obG9uZyBrZXksIHZvaWQgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gc3RyX2hhc2goKGNoYXIgKilrZXkpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBtb2RfbmFtZV9lcXVhbF9mbihsb25nIGtleTEsIGxvbmcga2V5Miwgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBzdHJjbXAoKGNoYXIgKilrZXkxLCAoY2hhciAqKWtleTIpID09IDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJwZl9vYmplY3RfX2ZyZWVfa21vZF9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuK3tcXG4rXFx0c2l6ZV90IGk7XFxuK1xcbitcXHRpZiAoIW9iai1cXHUwMDNla21vZF9idGZzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvYmotXFx1MDAzZWttb2RfYnRmcy1cXHUwMDNlbnJfbmFtZXM7IGkrKylcXG4rXFx0XFx0XFx0emZyZWUoXFx1MDAyNm9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VuYW1lc1tpXSk7XFxuK1xcdFxcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWttb2RfYnRmcy1cXHUwMDNlbmFtZXMpO1xcbitcXHR9XFxuK1xcdGhhc2htYXBfX2ZyZWUob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzX21hcCk7XFxuK1xcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWttb2RfYnRmcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnBmX29iamVjdF9faW5pdF9rbW9kX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKiprbW9kX2J0Zl9uYW1lcztcXG4rXFx0c2l6ZV90IGksIGttb2RfYnRmX25hbWVzX2NudDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGttb2RfYnRmX25hbWVzID0gT1BUU19HRVQob3B0cywga21vZF9idGZfbmFtZXMsIE5VTEwpO1xcbitcXHRpZiAoIWttb2RfYnRmX25hbWVzKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGttb2RfYnRmX25hbWVzX2NudCA9IE9QVFNfR0VUKG9wdHMsIGttb2RfYnRmX25hbWVzX2NudCwgMCk7XFxuK1xcdGlmICgha21vZF9idGZfbmFtZXNfY250KSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcImttb2RfYnRmX25hbWVzX2NudCBtdXN0IGJlIHNldCB3aGVuIGttb2RfYnRmX25hbWVzIGlzIHByb3ZpZGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdG9iai1cXHUwMDNla21vZF9idGZzID0gY2FsbG9jKDEsIHNpemVvZigqb2JqLVxcdTAwM2VrbW9kX2J0ZnMpKTtcXG4rXFx0aWYgKCFvYmotXFx1MDAzZWttb2RfYnRmcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRvYmotXFx1MDAzZWttb2RfYnRmcy1cXHUwMDNlbmFtZXMgPSBjYWxsb2Moa21vZF9idGZfbmFtZXNfY250LCBzaXplb2YoY2hhciAqKSk7XFxuK1xcdGlmICghb2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0b2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzX21hcCA9IGhhc2htYXBfX25ldyhtb2RfbmFtZV9oYXNoX2ZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgbW9kX25hbWVfZXF1YWxfZm4sIE5VTEwpO1xcbitcXHRpZiAoSVNfRVJSKG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VuYW1lc19tYXApKSB7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzX21hcCk7XFxuK1xcdFxcdG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VuYW1lc19tYXAgPSBOVUxMO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrbW9kX2J0Zl9uYW1lc19jbnQ7IGkrKykge1xcbitcXHRcXHRzaXplX3QgaWR4ID0gb2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5yX25hbWVzO1xcbitcXG4rXFx0XFx0aWYgKCFrbW9kX2J0Zl9uYW1lc1tpXSB8fCAha21vZF9idGZfbmFtZXNbaV1bMF0pIHtcXG4rXFx0XFx0XFx0cHJfd2FybihcXFwiaW52YWxpZCBrZXJuZWwgbW9kdWxlIEJURiBuYW1lIGF0IGluZGV4ICV6dVxcXFxuXFxcIiwgaSk7XFxuK1xcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0b2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzW2lkeF0gPSBzdHJkdXAoa21vZF9idGZfbmFtZXNbaV0pO1xcbitcXHRcXHRpZiAoIW9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VuYW1lc1tpZHhdKSB7XFxuK1xcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZXJyID0gaGFzaG1hcF9fYWRkKG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VuYW1lc19tYXAsXFxuK1xcdFxcdFxcdFxcdCAgIG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VuYW1lc1tpZHhdLCAwKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzW2lkeF0pO1xcbitcXHRcXHRcXHRpZiAoZXJyID09IC1FRVhJU1QpIHtcXG4rXFx0XFx0XFx0XFx0cHJfd2FybihcXFwiZHVwbGljYXRlIGttb2QgQlRGIG5hbWUgJyVzJyBpZ25vcmVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRrbW9kX2J0Zl9uYW1lc1tpXSk7XFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRvYmotXFx1MDAzZWttb2RfYnRmcy1cXHUwMDNlbnJfbmFtZXMrKztcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9vdXQ6XFxuK1xcdGJwZl9vYmplY3RfX2ZyZWVfa21vZF9idGZzKG9iaik7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGlzX2ttb2RfYnRmX25lZWRlZChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGlmICghb2JqLVxcdTAwM2VrbW9kX2J0ZnMgfHwgIW9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VuYW1lc19tYXApXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aWYgKGhhc2htYXBfX2ZpbmQob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5hbWVzX21hcCwgbmFtZSwgTlVMTCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cHJfZGVidWcoXFxcInNraXBwaW5nIG1vZHVsZSBCVEYgJyVzJywgbm90IGluIGttb2RfYnRmX25hbWVzXFxcXG5cXFwiLCBuYW1lKTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBhbGxfbmVlZGVkX2ttb2RfYnRmc19sb2FkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4re1xcbitcXHRyZXR1cm4gb2JqLVxcdTAwM2VrbW9kX2J0ZnMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2Vucl9uYW1lcyBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2Vucl9uYW1lcyA9PSBvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfY250O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XFxuQEAgLTU4NjcsNiArNTk4OSwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICghaXNfa21vZF9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHtcXG4rXFx0XFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0YnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotXFx1MDAzZWJ0Zl92bWxpbnV4KTtcXG4gXFx0XFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuQEAgLTU4OTEsNiArNjAxOCw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfY250Kys7XFxuK1xcbitcXHRcXHRpZiAoYWxsX25lZWRlZF9rbW9kX2J0ZnNfbG9hZGVkKG9iaikpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoZXJyKSB7XFxuQEAgLTg1MTUsNiArODY0NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsXFxuIFxcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9faW5pdF9tYXBzKG9iaiwgb3B0cyk7XFxuIFxcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9pbml0X3Byb2dzKG9iaiwgb3B0cyk7XFxuIFxcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9yZWxvcyhvYmopO1xcbitcXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2luaXRfa21vZF9idGZzKG9iaiwgb3B0cyk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5AQCAtOTYyOSw2ICs5NzYwLDggQEAgdm9pZCBicGZfb2JqZWN0X19jbG9zZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRjbG9zZShvYmotXFx1MDAzZWp1bXB0YWJsZV9tYXBzW2ldLmZkKTtcXG4gXFx0emZyZWUoXFx1MDAyNm9iai1cXHUwMDNlanVtcHRhYmxlX21hcHMpO1xcbiBcXG4rXFx0YnBmX29iamVjdF9fZnJlZV9rbW9kX2J0ZnMob2JqKTtcXG4rXFxuIFxcdGZyZWUob2JqKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuaCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG5pbmRleCBiOTY1YWQ1NzE1NDAzLi4yZjhmZjZkMmQzZGY2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5oXFxuQEAgLTIyNCwxMCArMjI0LDI0IEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7XFxuIFxcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxcbiBcXHQgKi9cXG4gXFx0Y29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7XFxuK1xcdC8qXFxuK1xcdCAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuXFxuK1xcdCAqIGttb2RfYnRmX25hbWVzX2NudCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluXFxuK1xcdCAqIGttb2RfYnRmX25hbWVzLlxcbitcXHQgKlxcbitcXHQgKiBJZiBrbW9kX2J0Zl9uYW1lcyBpcyBOVUxMLCBhbGwgbW9kdWxlIEJURnMgYXJlIGxvYWRlZCwgcHJlc2VydmluZ1xcbitcXHQgKiB0aGUgZGVmYXVsdCBiZWhhdmlvci4gT3RoZXJ3aXNlLCBvbmx5IHRoZSBzcGVjaWZpZWQgbW9kdWxlIEJURnNcXG4rXFx0ICogYXJlIGxvYWRlZC5cXG4rXFx0ICpcXG4rXFx0ICoga21vZF9idGZfbmFtZXNfY250IG11c3QgYmUgbm9uLXplcm8gd2hlbiBrbW9kX2J0Zl9uYW1lcyBpc1xcbitcXHQgKiBub24tTlVMTDsgb3RoZXJ3aXNlIC1FSU5WQUwgaXMgcmV0dXJuZWQuXFxuK1xcdCAqL1xcbitcXHRjb25zdCBjaGFyICoqa21vZF9idGZfbmFtZXM7XFxuK1xcdHNpemVfdCBrbW9kX2J0Zl9uYW1lc19jbnQ7XFxuIFxcbiBcXHRzaXplX3QgOjA7XFxuIH07XFxuLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGhcXG4rI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBrbW9kX2J0Zl9uYW1lc19jbnRcXG4gXFxuIC8qKlxcbiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ttb2RfYnRmcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjYxZDI4NDVhNzMxZmZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmNcXG5AQCAtMCwwICsxLDE5NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwia21vZF9idGZzLnNrZWwuaFxcXCJcXG4rXFxuK3N0YXRpYyBib29sIGJ0Zl9za2lwcGVkO1xcbitzdGF0aWMgYm9vbCBkdXBfaWdub3JlZDtcXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyIGJ0Zl9za2lwX2ZtdFtdID1cXG4rXFx0XFxcImxpYmJwZjogc2tpcHBpbmcgbW9kdWxlIEJURiAnJXMnLCBub3QgaW4ga21vZF9idGZfbmFtZXNcXFxcblxcXCI7XFxuK3N0YXRpYyBjb25zdCBjaGFyIGR1cF9pZ25vcmVfZm10W10gPVxcbitcXHRcXFwibGliYnBmOiBkdXBsaWNhdGUga21vZCBCVEYgbmFtZSAnJXMnIGlnbm9yZWRcXFxcblxcXCI7XFxuK1xcbitzdGF0aWMgaW50IGxpYmJwZl9wcmludF9jYihlbnVtIGxpYmJwZl9wcmludF9sZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqZm10LFxcbitcXHRcXHRcXHQgICB2YV9saXN0IGFyZ3MpXFxuK3tcXG4rXFx0aWYgKCFzdHJjbXAoZm10LCBidGZfc2tpcF9mbXQpKSB7XFxuK1xcdFxcdGlmICghc3RyY21wKHZhX2FyZyhhcmdzLCBjaGFyICopLCBcXFwiYnBmX3Rlc3Rfbm9fY2ZpXFxcIikpXFxuK1xcdFxcdFxcdGJ0Zl9za2lwcGVkID0gdHJ1ZTtcXG4rXFx0fSBlbHNlIGlmICghc3RyY21wKGZtdCwgZHVwX2lnbm9yZV9mbXQpKSB7XFxuK1xcdFxcdGlmICghc3RyY21wKHZhX2FyZyhhcmdzLCBjaGFyICopLCBcXFwiYnBmX3Rlc3Rtb2RcXFwiKSlcXG4rXFx0XFx0XFx0ZHVwX2lnbm9yZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga21vZF9idGZzX3Bhc3Modm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RhdGljIGNvbnN0IGNoYXIgKmttb2RzW10gPSB7IFxcXCJicGZfdGVzdG1vZFxcXCIgfTtcXG4rXFxuK1xcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5rbW9kX2J0Zl9uYW1lcyA9IGttb2RzLFxcbitcXHRcXHQua21vZF9idGZfbmFtZXNfY250ID0gMSxcXG4rXFx0KTtcXG4rXFxuK1xcdHNrZWwgPSBrbW9kX2J0ZnNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwia21vZF9idGZzX19vcGVuX29wdHNcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7XFxuK1xcdEFTU0VSVF9PSyhyZXQsIFxcXCJrbW9kX2J0ZnNfX2xvYWRcXFwiKTtcXG4rb3V0OlxcbitcXHRrbW9kX2J0ZnNfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGttb2RfYnRmc19ub25leGlzdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrbW9kX2J0ZnMgKnNrZWwgPSBOVUxMO1xcbitcXHRpbnQgcmV0O1xcbitcXHRzdGF0aWMgY29uc3QgY2hhciAqbm9uZXhpc3Rfa21vZHNbXSA9IHsgXFxcIm1vZHVsZV9ub25leGlzdFxcXCIgfTtcXG4rXFxuK1xcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5rbW9kX2J0Zl9uYW1lcyA9IG5vbmV4aXN0X2ttb2RzLFxcbitcXHRcXHQua21vZF9idGZfbmFtZXNfY250ID0gMSxcXG4rXFx0KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9ubHkgXFxcIm1vZHVsZV9ub25leGlzdFxcXCIgaXMgcmVxdWVzdGVkOyBzaW5jZSBpdCBkb2VzIG5vdCBleGlzdCBpblxcbitcXHQgKiB0aGUga2VybmVsLCBubyBtb2R1bGUgQlRGIGdldHMgbG9hZGVkLiBUaGUgQlBGIHByb2dyYW0gdGhlblxcbitcXHQgKiBmYWlscyB0byBsb2FkIGJlY2F1c2UgdGhlIHJlYWwgbmVlZGVkIG1vZHVsZSdzIEJURiBpcyB1bmF2YWlsYWJsZS5cXG4rXFx0ICovXFxuK1xcdHNrZWwgPSBrbW9kX2J0ZnNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwia21vZF9idGZzX19vcGVuX29wdHNcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7XFxuK1xcdEFTU0VSVF9FUlIocmV0LCBcXFwia21vZF9idGZzX19sb2FkXFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGttb2RfYnRmc19fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga21vZF9idGZzX2R1cCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrbW9kX2J0ZnMgKnNrZWwgPSBOVUxMO1xcbitcXHRsaWJicGZfcHJpbnRfZm5fdCBvbGRfcHJpbnRfY2I7XFxuK1xcdGludCByZXQ7XFxuK1xcdHN0YXRpYyBjb25zdCBjaGFyICpkdXBfa21vZHNbXSA9IHsgXFxcImJwZl90ZXN0bW9kXFxcIiwgXFxcImJwZl90ZXN0bW9kXFxcIiB9O1xcbitcXG4rXFx0LyogZHVwbGljYXRlIGVudHJ5IG9uIHB1cnBvc2U6IGxpYmJwZiBzaG91bGQgZGVkdXBlIGl0IHdpdGggYSB3YXJuaW5nICovXFxuK1xcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5rbW9kX2J0Zl9uYW1lcyA9IGR1cF9rbW9kcyxcXG4rXFx0XFx0Lmttb2RfYnRmX25hbWVzX2NudCA9IDIsXFxuK1xcdCk7XFxuK1xcbitcXHRkdXBfaWdub3JlZCA9IGZhbHNlO1xcbitcXHRvbGRfcHJpbnRfY2IgPSBsaWJicGZfc2V0X3ByaW50KGxpYmJwZl9wcmludF9jYik7XFxuK1xcbitcXHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXFx1MDAyNm9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcImttb2RfYnRmc19fb3Blbl9vcHRzXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0QVNTRVJUX1RSVUUoZHVwX2lnbm9yZWQsIFxcXCJkdXBfaWdub3JlZFxcXCIpO1xcbitcXG4rXFx0cmV0ID0ga21vZF9idGZzX19sb2FkKHNrZWwpO1xcbitcXHRBU1NFUlRfT0socmV0LCBcXFwia21vZF9idGZzX19sb2FkXFxcIik7XFxuK1xcbitcXHRrbW9kX2J0ZnNfX2Rlc3Ryb3koc2tlbCk7XFxuK291dDpcXG4rXFx0bGliYnBmX3NldF9wcmludChvbGRfcHJpbnRfY2IpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfc2tpcCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrbW9kX2J0ZnMgKnNrZWwgPSBOVUxMO1xcbitcXHRsaWJicGZfcHJpbnRfZm5fdCBvbGRfcHJpbnRfY2I7XFxuK1xcdGJvb2wgdGVzdG1vZF91bmxvYWRlZCA9IGZhbHNlO1xcbitcXHRpbnQgcmV0O1xcbitcXHRzdGF0aWMgY29uc3QgY2hhciAqa21vZHNbXSA9IHsgXFxcImJwZl90ZXN0bW9kXFxcIiB9O1xcbitcXG4rXFx0REVDTEFSRV9MSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcXG4rXFx0XFx0Lmttb2RfYnRmX25hbWVzID0ga21vZHMsXFxuK1xcdFxcdC5rbW9kX2J0Zl9uYW1lc19jbnQgPSAxLFxcbitcXHQpO1xcbitcXG4rXFx0YnRmX3NraXBwZWQgPSBmYWxzZTtcXG4rXFx0b2xkX3ByaW50X2NiID0gbGliYnBmX3NldF9wcmludChsaWJicGZfcHJpbnRfY2IpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVsb2FkIGJwZl90ZXN0bW9kIGFmdGVyIGJwZl90ZXN0X25vX2NmaSB0byBlbnN1cmUgdGhlIHVubmVlZGVkXFxuK1xcdCAqIG1vZHVsZSdzIEJURiBpcyBlbnVtZXJhdGVkIGZpcnN0IGFuZCBza2lwcGVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFBU1NFUlRfT0sodW5sb2FkX2JwZl90ZXN0bW9kKGZhbHNlKSwgXFxcInVubG9hZCBicGZfdGVzdG1vZFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXBfcHJpbnQ7XFxuK1xcdHRlc3Rtb2RfdW5sb2FkZWQgPSB0cnVlO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0sobG9hZF9tb2R1bGUoXFxcImJwZl90ZXN0X25vX2NmaS5rb1xcXCIsIGZhbHNlKSxcXG4rXFx0XFx0ICAgICAgIFxcXCJsb2FkIHVubmVlZGVkIGJwZl90ZXN0X25vX2NmaSBtb2R1bGVcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwX3ByaW50O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhsb2FkX2JwZl90ZXN0bW9kKGZhbHNlKSwgXFxcInJlc3RvcmUgYnBmX3Rlc3Rtb2RcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwX21vZHVsZTtcXG4rXFx0dGVzdG1vZF91bmxvYWRlZCA9IGZhbHNlO1xcbitcXG4rXFx0c2tlbCA9IGttb2RfYnRmc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJrbW9kX2J0ZnNfX29wZW5fb3B0c1xcXCIpKVxcbitcXHRcXHRnb3RvIGNsZWFudXBfbW9kdWxlO1xcbitcXG4rXFx0cmV0ID0ga21vZF9idGZzX19sb2FkKHNrZWwpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJrbW9kX2J0ZnNfX2xvYWRcXFwiKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwX3NrZWw7XFxuK1xcbitcXHRBU1NFUlRfVFJVRShidGZfc2tpcHBlZCwgXFxcImJ0Zl9za2lwcGVkXFxcIik7XFxuK1xcbitjbGVhbnVwX3NrZWw6XFxuK1xcdGttb2RfYnRmc19fZGVzdHJveShza2VsKTtcXG4rY2xlYW51cF9tb2R1bGU6XFxuK1xcdEFTU0VSVF9PSyh1bmxvYWRfbW9kdWxlKFxcXCJicGZfdGVzdF9ub19jZmlcXFwiLCBmYWxzZSksXFxuK1xcdFxcdCAgXFxcInVubG9hZCB1bm5lZWRlZCBicGZfdGVzdF9ub19jZmkgbW9kdWxlXFxcIik7XFxuK2NsZWFudXBfcHJpbnQ6XFxuK1xcdGlmICh0ZXN0bW9kX3VubG9hZGVkKVxcbitcXHRcXHRBU1NFUlRfT0sobG9hZF9icGZfdGVzdG1vZChmYWxzZSksXFxuK1xcdFxcdFxcdCAgXFxcInJlc3RvcmUgYnBmX3Rlc3Rtb2Qgb24gZXJyb3IgcGF0aFxcXCIpO1xcbitcXHRsaWJicGZfc2V0X3ByaW50KG9sZF9wcmludF9jYik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGttb2RfYnRmc19ub19jbnQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcXG4rXFx0c3RhdGljIGNvbnN0IGNoYXIgKmttb2RzW10gPSB7IFxcXCJicGZfdGVzdG1vZFxcXCIgfTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGttb2RfYnRmX25hbWVzIHNldCBidXQga21vZF9idGZfbmFtZXNfY250IG5vdCBzZXQ6XFxuK1xcdCAqIG9wZW4gbXVzdCBmYWlsIHdpdGggLUVJTlZBTC5cXG4rXFx0ICovXFxuK1xcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5rbW9kX2J0Zl9uYW1lcyA9IGttb2RzLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGttb2RfYnRmc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0QVNTRVJUX05VTEwoc2tlbCwgXFxcImttb2RfYnRmc19fb3Blbl9vcHRzIHdpdGhvdXQga21vZF9idGZfbmFtZXNfY250XFxcIik7XFxuK31cXG4rXFxuK3ZvaWQgc2VyaWFsX3Rlc3Rfa21vZF9idGZzKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJrbW9kX2J0ZnNfcGFzc1xcXCIpKVxcbitcXHRcXHRrbW9kX2J0ZnNfcGFzcygpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImttb2RfYnRmc19ub25leGlzdFxcXCIpKVxcbitcXHRcXHRrbW9kX2J0ZnNfbm9uZXhpc3QoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJrbW9kX2J0ZnNfZHVwXFxcIikpXFxuK1xcdFxcdGttb2RfYnRmc19kdXAoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJrbW9kX2J0ZnNfc2tpcFxcXCIpKVxcbitcXHRcXHRrbW9kX2J0ZnNfc2tpcCgpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImttb2RfYnRmc19ub19jbnRcXFwiKSlcXG4rXFx0XFx0a21vZF9idGZzX25vX2NudCgpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjk2ODYwZDYwZTBkYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmNcXG5AQCAtMCwwICsxLDEzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuK1NFQyhcXFwiZmVudHJ5L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2ttb2RfYnRmcylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA5OjM0OjM1LjQ4MzU2NzQ2NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMzAxNjAzNDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2Vyc3BhY2UgbGliYnBmIGxpYnJhcnkgYW5kIGFkZHMgYSBCUEYgc2VsZnRlc3QgaW4gdG9vbHMvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk2NmQzY2UyYTMzOWJiMzAyYWMyOWYxMDA4ODcwZGE3Y2VhNWU2N2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwOTozNDozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5pbmRleCA1MTRlNGU5ZGFhODI1Li4zNzkzNGNhNDlkZDdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuQEAgLTc3OSw2ICs3NzksMTMgQEAgc3RydWN0IGJwZl9vYmplY3Qge1xuIFx0Y2hhciAqdG9rZW5fcGF0aDtcbiBcdGludCB0b2tlbl9mZDtcbiBcbitcdC8qIGtlcm5lbCBtb2R1bGUgQlRGcyB0byBsb2FkLCBhcyBzcGVjaWZpZWQgdmlhIGJwZl9vYmplY3Rfb3Blbl9vcHRzICovXG4rXHRzdHJ1Y3Qge1xuK1x0XHRjaGFyICoqbmFtZXM7XG4rXHRcdHNpemVfdCBucl9uYW1lcztcbitcdFx0c3RydWN0IGhhc2htYXAgKm5hbWVzX21hcDtcbitcdH0gKmttb2RfYnRmcztcbitcbiBcdGNoYXIgcGF0aFtdO1xuIH07XG4gXG5AQCAtNTgwMyw2ICs1ODEwLDEyMSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgbW9kX25hbWVfaGFzaF9mbihsb25nIGtleSwgdm9pZCAqY3R4KVxuK3tcbitcdHJldHVybiBzdHJfaGFzaCgoY2hhciAqKWtleSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIG1vZF9uYW1lX2VxdWFsX2ZuKGxvbmcga2V5MSwgbG9uZyBrZXkyLCB2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIHN0cmNtcCgoY2hhciAqKWtleTEsIChjaGFyICopa2V5MikgPT0gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnBmX29iamVjdF9fZnJlZV9rbW9kX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbit7XG4rXHRzaXplX3QgaTtcbitcbitcdGlmICghb2JqLVx1MDAzZWttb2RfYnRmcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXMpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2Vucl9uYW1lczsgaSsrKVxuK1x0XHRcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNbaV0pO1xuK1x0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzKTtcbitcdH1cbitcdGhhc2htYXBfX2ZyZWUob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc19tYXApO1xuK1x0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWttb2RfYnRmcyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX29iamVjdF9faW5pdF9rbW9kX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyAqb3B0cylcbit7XG4rXHRjb25zdCBjaGFyICoqa21vZF9idGZfbmFtZXM7XG4rXHRzaXplX3QgaSwga21vZF9idGZfbmFtZXNfY250O1xuK1x0aW50IGVycjtcbitcbitcdGttb2RfYnRmX25hbWVzID0gT1BUU19HRVQob3B0cywga21vZF9idGZfbmFtZXMsIE5VTEwpO1xuK1x0aWYgKCFrbW9kX2J0Zl9uYW1lcylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRrbW9kX2J0Zl9uYW1lc19jbnQgPSBPUFRTX0dFVChvcHRzLCBrbW9kX2J0Zl9uYW1lc19jbnQsIDApO1xuK1x0aWYgKCFrbW9kX2J0Zl9uYW1lc19jbnQpIHtcbitcdFx0cHJfd2FybihcImttb2RfYnRmX25hbWVzX2NudCBtdXN0IGJlIHNldCB3aGVuIGttb2RfYnRmX25hbWVzIGlzIHByb3ZpZGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdG9iai1cdTAwM2VrbW9kX2J0ZnMgPSBjYWxsb2MoMSwgc2l6ZW9mKCpvYmotXHUwMDNla21vZF9idGZzKSk7XG4rXHRpZiAoIW9iai1cdTAwM2VrbW9kX2J0ZnMpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0b2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lcyA9IGNhbGxvYyhrbW9kX2J0Zl9uYW1lc19jbnQsIHNpemVvZihjaGFyICopKTtcbitcdGlmICghb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lcykge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzX21hcCA9IGhhc2htYXBfX25ldyhtb2RfbmFtZV9oYXNoX2ZuLFxuK1x0XHRcdFx0XHRcdCBtb2RfbmFtZV9lcXVhbF9mbiwgTlVMTCk7XG4rXHRpZiAoSVNfRVJSKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNfbWFwKSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNfbWFwKTtcbitcdFx0b2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VuYW1lc19tYXAgPSBOVUxMO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrbW9kX2J0Zl9uYW1lc19jbnQ7IGkrKykge1xuK1x0XHRzaXplX3QgaWR4ID0gb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2Vucl9uYW1lcztcbitcbitcdFx0aWYgKCFrbW9kX2J0Zl9uYW1lc1tpXSB8fCAha21vZF9idGZfbmFtZXNbaV1bMF0pIHtcbitcdFx0XHRwcl93YXJuKFwiaW52YWxpZCBrZXJuZWwgbW9kdWxlIEJURiBuYW1lIGF0IGluZGV4ICV6dVxcblwiLCBpKTtcbitcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbitcdFx0fVxuK1xuK1x0XHRvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzW2lkeF0gPSBzdHJkdXAoa21vZF9idGZfbmFtZXNbaV0pO1xuK1x0XHRpZiAoIW9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNbaWR4XSkge1xuK1x0XHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4rXG4rXHRcdGVyciA9IGhhc2htYXBfX2FkZChvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzX21hcCxcbitcdFx0XHRcdCAgIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbmFtZXNbaWR4XSwgMCk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzW2lkeF0pO1xuK1x0XHRcdGlmIChlcnIgPT0gLUVFWElTVCkge1xuK1x0XHRcdFx0cHJfd2FybihcImR1cGxpY2F0ZSBrbW9kIEJURiBuYW1lICclcycgaWdub3JlZFxcblwiLFxuK1x0XHRcdFx0XHRrbW9kX2J0Zl9uYW1lc1tpXSk7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4rXHRcdG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbnJfbmFtZXMrKztcbitcdH1cbitcdHJldHVybiAwO1xuK1xuK2Vycl9vdXQ6XG4rXHRicGZfb2JqZWN0X19mcmVlX2ttb2RfYnRmcyhvYmopO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGJvb2wgaXNfa21vZF9idGZfbmVlZGVkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aWYgKCFvYmotXHUwMDNla21vZF9idGZzIHx8ICFvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzX21hcClcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAoaGFzaG1hcF9fZmluZChvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5hbWVzX21hcCwgbmFtZSwgTlVMTCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cHJfZGVidWcoXCJza2lwcGluZyBtb2R1bGUgQlRGICclcycsIG5vdCBpbiBrbW9kX2J0Zl9uYW1lc1xcblwiLCBuYW1lKTtcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgYWxsX25lZWRlZF9rbW9kX2J0ZnNfbG9hZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4re1xuK1x0cmV0dXJuIG9iai1cdTAwM2VrbW9kX2J0ZnMgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2Vucl9uYW1lcyBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5yX25hbWVzID09IG9iai1cdTAwM2VidGZfbW9kdWxlX2NudDtcbit9XG4rXG4gc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4ge1xuIFx0c3RydWN0IGJwZl9idGZfaW5mbyBpbmZvO1xuQEAgLTU4NjcsNiArNTk4OSwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuK1x0XHRpZiAoIWlzX2ttb2RfYnRmX25lZWRlZChvYmosIG5hbWUpKSB7XG4rXHRcdFx0Y2xvc2UoZmQpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG5AQCAtNTg5MSw2ICs2MDE4LDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250Kys7XG4rXG4rXHRcdGlmIChhbGxfbmVlZGVkX2ttb2RfYnRmc19sb2FkZWQob2JqKSlcbitcdFx0XHRicmVhaztcbiBcdH1cbiBcbiBcdGlmIChlcnIpIHtcbkBAIC04NTE1LDYgKzg2NDUsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9vYmplY3QgKmJwZl9vYmplY3Rfb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB2b2lkICpvYmpfYnVmLFxuIFx0ZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19pbml0X21hcHMob2JqLCBvcHRzKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9pbml0X3Byb2dzKG9iaiwgb3B0cyk7XG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2NvbGxlY3RfcmVsb3Mob2JqKTtcbitcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9faW5pdF9rbW9kX2J0ZnMob2JqLCBvcHRzKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTk2MjksNiArOTc2MCw4IEBAIHZvaWQgYnBmX29iamVjdF9fY2xvc2Uoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0Y2xvc2Uob2JqLVx1MDAzZWp1bXB0YWJsZV9tYXBzW2ldLmZkKTtcbiBcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VqdW1wdGFibGVfbWFwcyk7XG4gXG4rXHRicGZfb2JqZWN0X19mcmVlX2ttb2RfYnRmcyhvYmopO1xuK1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uMmY4ZmY2ZDJkM2RmNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0yMjQsMTAgKzIyNCwyNCBAQCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMge1xuIFx0ICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuXG4gXHQgKi9cbiBcdGNvbnN0IGNoYXIgKmJwZl90b2tlbl9wYXRoO1xuK1x0LypcbitcdCAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuXG4rXHQgKiBrbW9kX2J0Zl9uYW1lc19jbnQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpblxuK1x0ICoga21vZF9idGZfbmFtZXMuXG4rXHQgKlxuK1x0ICogSWYga21vZF9idGZfbmFtZXMgaXMgTlVMTCwgYWxsIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQsIHByZXNlcnZpbmdcbitcdCAqIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBPdGhlcndpc2UsIG9ubHkgdGhlIHNwZWNpZmllZCBtb2R1bGUgQlRGc1xuK1x0ICogYXJlIGxvYWRlZC5cbitcdCAqXG4rXHQgKiBrbW9kX2J0Zl9uYW1lc19jbnQgbXVzdCBiZSBub24temVybyB3aGVuIGttb2RfYnRmX25hbWVzIGlzXG4rXHQgKiBub24tTlVMTDsgb3RoZXJ3aXNlIC1FSU5WQUwgaXMgcmV0dXJuZWQuXG4rXHQgKi9cbitcdGNvbnN0IGNoYXIgKiprbW9kX2J0Zl9uYW1lcztcbitcdHNpemVfdCBrbW9kX2J0Zl9uYW1lc19jbnQ7XG4gXG4gXHRzaXplX3QgOjA7XG4gfTtcbi0jZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIGJwZl90b2tlbl9wYXRoXG4rI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBrbW9kX2J0Zl9uYW1lc19jbnRcbiBcbiAvKipcbiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjYxZDI4NDVhNzMxZmZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ttb2RfYnRmcy5jXG5AQCAtMCwwICsxLDE5NiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJrbW9kX2J0ZnMuc2tlbC5oXCJcbitcbitzdGF0aWMgYm9vbCBidGZfc2tpcHBlZDtcbitzdGF0aWMgYm9vbCBkdXBfaWdub3JlZDtcbitcbitzdGF0aWMgY29uc3QgY2hhciBidGZfc2tpcF9mbXRbXSA9XG4rXHRcImxpYmJwZjogc2tpcHBpbmcgbW9kdWxlIEJURiAnJXMnLCBub3QgaW4ga21vZF9idGZfbmFtZXNcXG5cIjtcbitzdGF0aWMgY29uc3QgY2hhciBkdXBfaWdub3JlX2ZtdFtdID1cbitcdFwibGliYnBmOiBkdXBsaWNhdGUga21vZCBCVEYgbmFtZSAnJXMnIGlnbm9yZWRcXG5cIjtcbitcbitzdGF0aWMgaW50IGxpYmJwZl9wcmludF9jYihlbnVtIGxpYmJwZl9wcmludF9sZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqZm10LFxuK1x0XHRcdCAgIHZhX2xpc3QgYXJncylcbit7XG4rXHRpZiAoIXN0cmNtcChmbXQsIGJ0Zl9za2lwX2ZtdCkpIHtcbitcdFx0aWYgKCFzdHJjbXAodmFfYXJnKGFyZ3MsIGNoYXIgKiksIFwiYnBmX3Rlc3Rfbm9fY2ZpXCIpKVxuK1x0XHRcdGJ0Zl9za2lwcGVkID0gdHJ1ZTtcbitcdH0gZWxzZSBpZiAoIXN0cmNtcChmbXQsIGR1cF9pZ25vcmVfZm10KSkge1xuK1x0XHRpZiAoIXN0cmNtcCh2YV9hcmcoYXJncywgY2hhciAqKSwgXCJicGZfdGVzdG1vZFwiKSlcbitcdFx0XHRkdXBfaWdub3JlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQga21vZF9idGZzX3Bhc3Modm9pZClcbit7XG4rXHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcbitcdGludCByZXQ7XG4rXHRzdGF0aWMgY29uc3QgY2hhciAqa21vZHNbXSA9IHsgXCJicGZfdGVzdG1vZFwiIH07XG4rXG4rXHRERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuK1x0XHQua21vZF9idGZfbmFtZXMgPSBrbW9kcyxcbitcdFx0Lmttb2RfYnRmX25hbWVzX2NudCA9IDEsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGttb2RfYnRmc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwia21vZF9idGZzX19vcGVuX29wdHNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cmV0ID0ga21vZF9idGZzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX09LKHJldCwgXCJrbW9kX2J0ZnNfX2xvYWRcIik7XG4rb3V0OlxuK1x0a21vZF9idGZzX19kZXN0cm95KHNrZWwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfbm9uZXhpc3Qodm9pZClcbit7XG4rXHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcbitcdGludCByZXQ7XG4rXHRzdGF0aWMgY29uc3QgY2hhciAqbm9uZXhpc3Rfa21vZHNbXSA9IHsgXCJtb2R1bGVfbm9uZXhpc3RcIiB9O1xuK1xuK1x0REVDTEFSRV9MSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbitcdFx0Lmttb2RfYnRmX25hbWVzID0gbm9uZXhpc3Rfa21vZHMsXG4rXHRcdC5rbW9kX2J0Zl9uYW1lc19jbnQgPSAxLFxuK1x0KTtcbitcbitcdC8qXG4rXHQgKiBPbmx5IFwibW9kdWxlX25vbmV4aXN0XCIgaXMgcmVxdWVzdGVkOyBzaW5jZSBpdCBkb2VzIG5vdCBleGlzdCBpblxuK1x0ICogdGhlIGtlcm5lbCwgbm8gbW9kdWxlIEJURiBnZXRzIGxvYWRlZC4gVGhlIEJQRiBwcm9ncmFtIHRoZW5cbitcdCAqIGZhaWxzIHRvIGxvYWQgYmVjYXVzZSB0aGUgcmVhbCBuZWVkZWQgbW9kdWxlJ3MgQlRGIGlzIHVuYXZhaWxhYmxlLlxuK1x0ICovXG4rXHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJrbW9kX2J0ZnNfX29wZW5fb3B0c1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7XG4rXHRBU1NFUlRfRVJSKHJldCwgXCJrbW9kX2J0ZnNfX2xvYWRcIik7XG4rXG4rb3V0OlxuK1x0a21vZF9idGZzX19kZXN0cm95KHNrZWwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfZHVwKHZvaWQpXG4re1xuK1x0c3RydWN0IGttb2RfYnRmcyAqc2tlbCA9IE5VTEw7XG4rXHRsaWJicGZfcHJpbnRfZm5fdCBvbGRfcHJpbnRfY2I7XG4rXHRpbnQgcmV0O1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKmR1cF9rbW9kc1tdID0geyBcImJwZl90ZXN0bW9kXCIsIFwiYnBmX3Rlc3Rtb2RcIiB9O1xuK1xuK1x0LyogZHVwbGljYXRlIGVudHJ5IG9uIHB1cnBvc2U6IGxpYmJwZiBzaG91bGQgZGVkdXBlIGl0IHdpdGggYSB3YXJuaW5nICovXG4rXHRERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuK1x0XHQua21vZF9idGZfbmFtZXMgPSBkdXBfa21vZHMsXG4rXHRcdC5rbW9kX2J0Zl9uYW1lc19jbnQgPSAyLFxuK1x0KTtcbitcbitcdGR1cF9pZ25vcmVkID0gZmFsc2U7XG4rXHRvbGRfcHJpbnRfY2IgPSBsaWJicGZfc2V0X3ByaW50KGxpYmJwZl9wcmludF9jYik7XG4rXG4rXHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJrbW9kX2J0ZnNfX29wZW5fb3B0c1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRBU1NFUlRfVFJVRShkdXBfaWdub3JlZCwgXCJkdXBfaWdub3JlZFwiKTtcbitcbitcdHJldCA9IGttb2RfYnRmc19fbG9hZChza2VsKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwia21vZF9idGZzX19sb2FkXCIpO1xuK1xuK1x0a21vZF9idGZzX19kZXN0cm95KHNrZWwpO1xuK291dDpcbitcdGxpYmJwZl9zZXRfcHJpbnQob2xkX3ByaW50X2NiKTtcbit9XG4rXG4rc3RhdGljIHZvaWQga21vZF9idGZzX3NraXAodm9pZClcbit7XG4rXHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcbitcdGxpYmJwZl9wcmludF9mbl90IG9sZF9wcmludF9jYjtcbitcdGJvb2wgdGVzdG1vZF91bmxvYWRlZCA9IGZhbHNlO1xuK1x0aW50IHJldDtcbitcdHN0YXRpYyBjb25zdCBjaGFyICprbW9kc1tdID0geyBcImJwZl90ZXN0bW9kXCIgfTtcbitcbitcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4rXHRcdC5rbW9kX2J0Zl9uYW1lcyA9IGttb2RzLFxuK1x0XHQua21vZF9idGZfbmFtZXNfY250ID0gMSxcbitcdCk7XG4rXG4rXHRidGZfc2tpcHBlZCA9IGZhbHNlO1xuK1x0b2xkX3ByaW50X2NiID0gbGliYnBmX3NldF9wcmludChsaWJicGZfcHJpbnRfY2IpO1xuK1xuK1x0LypcbitcdCAqIFJlbG9hZCBicGZfdGVzdG1vZCBhZnRlciBicGZfdGVzdF9ub19jZmkgdG8gZW5zdXJlIHRoZSB1bm5lZWRlZFxuK1x0ICogbW9kdWxlJ3MgQlRGIGlzIGVudW1lcmF0ZWQgZmlyc3QgYW5kIHNraXBwZWQuXG4rXHQgKi9cbitcdGlmICghQVNTRVJUX09LKHVubG9hZF9icGZfdGVzdG1vZChmYWxzZSksIFwidW5sb2FkIGJwZl90ZXN0bW9kXCIpKVxuK1x0XHRnb3RvIGNsZWFudXBfcHJpbnQ7XG4rXHR0ZXN0bW9kX3VubG9hZGVkID0gdHJ1ZTtcbitcbitcdGlmICghQVNTRVJUX09LKGxvYWRfbW9kdWxlKFwiYnBmX3Rlc3Rfbm9fY2ZpLmtvXCIsIGZhbHNlKSxcbitcdFx0ICAgICAgIFwibG9hZCB1bm5lZWRlZCBicGZfdGVzdF9ub19jZmkgbW9kdWxlXCIpKVxuK1x0XHRnb3RvIGNsZWFudXBfcHJpbnQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhsb2FkX2JwZl90ZXN0bW9kKGZhbHNlKSwgXCJyZXN0b3JlIGJwZl90ZXN0bW9kXCIpKVxuK1x0XHRnb3RvIGNsZWFudXBfbW9kdWxlO1xuK1x0dGVzdG1vZF91bmxvYWRlZCA9IGZhbHNlO1xuK1xuK1x0c2tlbCA9IGttb2RfYnRmc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwia21vZF9idGZzX19vcGVuX29wdHNcIikpXG4rXHRcdGdvdG8gY2xlYW51cF9tb2R1bGU7XG4rXG4rXHRyZXQgPSBrbW9kX2J0ZnNfX2xvYWQoc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwia21vZF9idGZzX19sb2FkXCIpKVxuK1x0XHRnb3RvIGNsZWFudXBfc2tlbDtcbitcbitcdEFTU0VSVF9UUlVFKGJ0Zl9za2lwcGVkLCBcImJ0Zl9za2lwcGVkXCIpO1xuK1xuK2NsZWFudXBfc2tlbDpcbitcdGttb2RfYnRmc19fZGVzdHJveShza2VsKTtcbitjbGVhbnVwX21vZHVsZTpcbitcdEFTU0VSVF9PSyh1bmxvYWRfbW9kdWxlKFwiYnBmX3Rlc3Rfbm9fY2ZpXCIsIGZhbHNlKSxcbitcdFx0ICBcInVubG9hZCB1bm5lZWRlZCBicGZfdGVzdF9ub19jZmkgbW9kdWxlXCIpO1xuK2NsZWFudXBfcHJpbnQ6XG4rXHRpZiAodGVzdG1vZF91bmxvYWRlZClcbitcdFx0QVNTRVJUX09LKGxvYWRfYnBmX3Rlc3Rtb2QoZmFsc2UpLFxuK1x0XHRcdCAgXCJyZXN0b3JlIGJwZl90ZXN0bW9kIG9uIGVycm9yIHBhdGhcIik7XG4rXHRsaWJicGZfc2V0X3ByaW50KG9sZF9wcmludF9jYik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGttb2RfYnRmc19ub19jbnQodm9pZClcbit7XG4rXHRzdHJ1Y3Qga21vZF9idGZzICpza2VsID0gTlVMTDtcbitcdHN0YXRpYyBjb25zdCBjaGFyICprbW9kc1tdID0geyBcImJwZl90ZXN0bW9kXCIgfTtcbitcbitcdC8qXG4rXHQgKiBrbW9kX2J0Zl9uYW1lcyBzZXQgYnV0IGttb2RfYnRmX25hbWVzX2NudCBub3Qgc2V0OlxuK1x0ICogb3BlbiBtdXN0IGZhaWwgd2l0aCAtRUlOVkFMLlxuK1x0ICovXG4rXHRERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuK1x0XHQua21vZF9idGZfbmFtZXMgPSBrbW9kcyxcbitcdCk7XG4rXG4rXHRza2VsID0ga21vZF9idGZzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4rXHRBU1NFUlRfTlVMTChza2VsLCBcImttb2RfYnRmc19fb3Blbl9vcHRzIHdpdGhvdXQga21vZF9idGZfbmFtZXNfY250XCIpO1xuK31cbitcbit2b2lkIHNlcmlhbF90ZXN0X2ttb2RfYnRmcyh2b2lkKVxuK3tcbitcdGlmICghZW52Lmhhc190ZXN0bW9kKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJrbW9kX2J0ZnNfcGFzc1wiKSlcbitcdFx0a21vZF9idGZzX3Bhc3MoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwia21vZF9idGZzX25vbmV4aXN0XCIpKVxuK1x0XHRrbW9kX2J0ZnNfbm9uZXhpc3QoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwia21vZF9idGZzX2R1cFwiKSlcbitcdFx0a21vZF9idGZzX2R1cCgpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJrbW9kX2J0ZnNfc2tpcFwiKSlcbitcdFx0a21vZF9idGZzX3NraXAoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwia21vZF9idGZzX25vX2NudFwiKSlcbitcdFx0a21vZF9idGZzX25vX2NudCgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iOTY4NjBkNjBlMGRhXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmNcbkBAIC0wLDAgKzEsMTMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbitcbitTRUMoXCJmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XCIpXG4raW50IEJQRl9QUk9HKHRlc3Rfa21vZF9idGZzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwOTozNDozNS40ODM1Njk0NTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjMwMTU3NDA0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIHNvbWUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGxvYWRpbmcga2VybmVsIG1vZHVsZSBCVEZzLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgYnBmX29iamVjdF9vcGVuX29wdHNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgbG9jYXRlZC4gSXQgbG9va3MgbGlrZSBpdCdzIGFsbCB3aXRoaW4gYHRvb2xzL2xpYi9icGYvYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcg4oCTIGl0J3MgYWxsIGluIHVzZXJzcGFjZSwgYW5kIG5vIGtlcm5lbCBjb2RlIGlzIHRvdWNoZWQuIFRoaXMgc2VlbXMgaW1wb3J0YW50LlxuXG5JIHRoZW4gY29uc2lkZXJlZCB3aGV0aGVyIGBsaWJicGZgIGhhcyBhbnkgaW4ta2VybmVsIGNvbXBvbmVudHMsIGJ1dCBxdWlja2x5IHJlbWluZGVkIG15c2VsZiB0aGF0IGl0J3MgYSB1c2Vyc3BhY2UgbGlicmFyeSB1c2VkIGZvciBsb2FkaW5nIEJQRiBwcm9ncmFtcyBpbnRvIHRoZSBrZXJuZWwuIFNvLCB0aGUgZGlyZWN0IGltcGFjdCBvbiB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIGZsb3cgc2VlbXMgbWluaW1hbCwgb3IgcmF0aGVyLCBpbmRpcmVjdC4gVGhlIHBhdGNoIGl0c2VsZiBpcyAqanVzdCogYSB1c2Vyc3BhY2UgY2hhbmdlLlxuXG5UaGUgbmV4dCB0aGluZyB0aGF0IHBvcHBlZCBpbnRvIG15IGhlYWQgd2FzIFN5emthbGxlciBhbmQgaXRzIHJvbGUgaW4ga2VybmVsIGZ1enppbmcuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGNvZGUgY2hhbmdlcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scy4gU28gdGhlIGFuc3dlciBzaG91bGQgYmUgbm8uXG5cblRvIGNvbmZpcm0gbXkgZXZhbHVhdGlvbiwgSSBkaWQgYW5vdGhlciBxdWljayBjaGVjayBvZiB0aGUgZGlmZiBhZ2FpbiwgY29uZmlybWluZyBubyBrZXJuZWwgY2hhbmdlcy5cblxuVGhpcyBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIHRoYXQgd2UgZG9uJ3QgdHlwaWNhbGx5IGZ1enogdXNlcnNwYWNlIGxpYnJhcmllcyBkaXJlY3RseSB3aXRoIFN5emthbGxlci4gTXkgZmluYWwgZGVjaXNpb24gaXMgYmFzZWQgb24gdGhlIGxvZ2ljIHRoYXQgY2hhbmdlcyB0byBgbGliYnBmYCBhbmQgc2VsZiB0ZXN0cyBzaG91bGRuJ3QgbmVjZXNzaXRhdGUga2VybmVsIGZ1enppbmcuXG5cbkkgdGhlbiByZXZpc2l0ZWQgdGhlIGluc3RydWN0aW9ucy4gSXQgZG9lc24ndCBleHBsaWNpdGx5IGxpc3QgXCJ1c2Vyc3BhY2UgdG9vbHNcIiwgYnV0IGl0IGRvZXMgbGlzdCBzZXZlcmFsIGl0ZW1zIHRoYXQgaW5kaWNhdGUgbm9uLWZ1enphYmxlIGNoYW5nZXMsIHN1Y2ggYXMgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBhbmQgdW4tcmVhY2hhYmxlIGNvZGUgcGF0aHMuIFRoZSBjcml0ZXJpYSBzZWVtIG1vcmUgZm9jdXNlZCBvbiAqa2VybmVsKiBtb2RpZmljYXRpb25zLiBUaGUgcmVsZXZhbnQgc3RhdGVtZW50IGlzLCBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCIgU2luY2UgdGhpcyBwYXRjaCBkb2VzICpub25lKiBvZiB0aGF0LCBJIGNhbiBjb25maWRlbnRseSBzYXkgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTQwLCJPdXRwdXRUb2tlbnMiOjY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzQ6NDcuNzg1MTQ2NTM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2Vyc3BhY2UgbGliYnBmIGxpYnJhcnkgYW5kIGFkZHMgYSBCUEYgc2VsZnRlc3QgaW4gdG9vbHMvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXJzcGFjZSBsaWJicGYgbGlicmFyeSBhbmQgYWRkcyBhIEJQRiBzZWxmdGVzdCBpbiB0b29scy8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDk6MzQ6NDcuNzg1MTczMjA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowbm8mg[1] Phase: Running StartedAt: 2026-08-19 09:35:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbm8mg[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-19 09:35:02 +0000 UTC FinishedAt: 2026-08-19 09:35:07 +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,}