Name: series-workflow4vrlg Phase: Failed StartedAt: 2026-08-19 07:59:13 +0000 UTC FinishedAt: 2026-08-19 08:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vrlg[0] Phase: Succeeded StartedAt: 2026-08-19 07:59:13 +0000 UTC FinishedAt: 2026-08-19 08:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vrlg[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 07:59:13 +0000 UTC FinishedAt: 2026-08-19 08:44:52 +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+CgkJCTx0ZD4yMDI2LzA4LzE5IDA4OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiBhIGRlYnVnZnMgZmlsZSAobWVtYmxvY2tfZGVidWdfc2hvdykgdG8gcHJpbnQgbXVsdGlwbGUgZmxhZ3Mgc2VwYXJhdGVkIGJ5ICYjMzk7fCYjMzk7IGluc3RlYWQgb2YganVzdCB0aGUgZmlyc3Qgb25lLiBUaGlzIGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBrZXJuZWwmIzM5O3MgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA4OjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWU1M2RhOGJmMmVjZDdlZTY3ZGE2NjliOGU0NzdlYzRmNzgzMjQ4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA4OjQ0OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCA5Y2U4NjM0OWEyOWZhLi41ZDgwNmZlOTJjZDcxIDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtYmxvY2suY1xuQEAgLTI4ODYsNiAmIzQzOzI4ODYsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7XG4gXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9OT0lOSVQpXSA9IFwmIzM0O1JTVl9OSVRcJiMzNDssXG4gXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9LRVJOKV0gPSBcJiMzNDtSU1ZfS0VSTlwmIzM0OyxcbiBcdFtpbG9nMihNRU1CTE9DS19LSE9fU0NSQVRDSCldID0gXCYjMzQ7S0hPX1NDUkFUQ0hcJiMzNDssXG4mIzQzO1x0W2lsb2cyKE1FTUJMT0NLX1JTUlZfSFVHRVRMQildID0gXCYjMzQ7UlNWX0hVR0VUTEJcJiMzNDssXG4gfTtcbiBcbiBzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxuQEAgLTI4OTUsNiAmIzQzOzI4OTYsNyBAQCBzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxuIFx0aW50IGksIGosIG5pZDtcbiBcdHVuc2lnbmVkIGludCBjb3VudCA9IEFSUkFZX1NJWkUoZmxhZ25hbWUpO1xuIFx0cGh5c19hZGRyX3QgZW5kO1xuJiM0MztcdGJvb2wgZmlyc3Q7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0eXBlLVx1MDAzZWNudDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0cmVnID0gXHUwMDI2dHlwZS1cdTAwM2VyZWdpb25zW2ldO1xuQEAgLTI5MDgsMTQgJiM0MzsyOTEwLDE4IEBAIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXG4gXHRcdGVsc2VcbiBcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU0YyBcJiMzNDssICYjMzk7eCYjMzk7KTtcbiBcdFx0aWYgKHJlZy1cdTAwM2VmbGFncykge1xuJiM0MztcdFx0XHRmaXJzdCA9IHRydWU7XG4gXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgY291bnQ7IGomIzQzOyYjNDM7KSB7XG4tXHRcdFx0XHRpZiAocmVnLVx1MDAzZWZsYWdzIFx1MDAyNiAoMVUgXHUwMDNjXHUwMDNjIGopKSB7XG4tXHRcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JXNcXG5cJiMzNDssIGZsYWduYW1lW2pdKTtcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0aWYgKCEocmVnLVx1MDAzZWZsYWdzIFx1MDAyNiAoMVUgXHUwMDNjXHUwMDNjIGopKSlcbiYjNDM7XHRcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdGlmICghZmlyc3QpXG4mIzQzO1x0XHRcdFx0XHRzZXFfcHV0YyhtLCAmIzM5O3wmIzM5Oyk7XG4mIzQzO1x0XHRcdFx0c2VxX3B1dHMobSwgZmxhZ25hbWVbal0gPzogXCYjMzQ7VU5LTk9XTlwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0Zmlyc3QgPSBmYWxzZTtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKGogPT0gY291bnQpXG4tXHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyVzXFxuXCYjMzQ7LCBcJiMzNDtVTktOT1dOXCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKGZpcnN0KVxuJiM0MztcdFx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0O1VOS05PV05cJiMzNDspO1xuJiM0MztcdFx0XHRzZXFfcHV0YyhtLCAmIzM5O1xcbiYjMzk7KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyVzXFxuXCYjMzQ7LCBcJiMzNDtOT05FXCYjMzQ7KTtcbiBcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA4OjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IG9mIGEgZGVidWdmcyBmaWxlIChtZW1ibG9ja19kZWJ1Z19zaG93KSB0byBwcmludCBtdWx0aXBsZSBmbGFncyBzZXBhcmF0ZWQgYnkgJiMzOTt8JiMzOTsgaW5zdGVhZCBvZiBqdXN0IHRoZSBmaXJzdCBvbmUuIFRoaXMgaXMgYSBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGtlcm5lbCYjMzk7cyBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZTUzZGE4YmYyZWNkN2VlNjdkYTY2OWI4ZTQ3N2VjNGY3ODMyNDhmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMDg6NDQ6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suYwppbmRleCA5Y2U4NjM0OWEyOWZhLi41ZDgwNmZlOTJjZDcxIDEwMDY0NAotLS0gYS9tbS9tZW1ibG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWJsb2NrLmMKQEAgLTI4ODYsNiAmIzQzOzI4ODYsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7CiAJW2lsb2cyKE1FTUJMT0NLX1JTUlZfTk9JTklUKV0gPSAmIzM0O1JTVl9OSVQmIzM0OywKIAlbaWxvZzIoTUVNQkxPQ0tfUlNSVl9LRVJOKV0gPSAmIzM0O1JTVl9LRVJOJiMzNDssCiAJW2lsb2cyKE1FTUJMT0NLX0tIT19TQ1JBVENIKV0gPSAmIzM0O0tIT19TQ1JBVENIJiMzNDssCiYjNDM7CVtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9ICYjMzQ7UlNWX0hVR0VUTEImIzM0OywKIH07CiAKIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpCkBAIC0yODk1LDYgJiM0MzsyODk2LDcgQEAgc3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSkKIAlpbnQgaSwgaiwgbmlkOwogCXVuc2lnbmVkIGludCBjb3VudCA9IEFSUkFZX1NJWkUoZmxhZ25hbWUpOwogCXBoeXNfYWRkcl90IGVuZDsKJiM0MzsJYm9vbCBmaXJzdDsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB0eXBlLSZndDtjbnQ7IGkmIzQzOyYjNDM7KSB7CiAJCXJlZyA9ICZhbXA7dHlwZS0mZ3Q7cmVnaW9uc1tpXTsKQEAgLTI5MDgsMTQgJiM0MzsyOTEwLDE4IEBAIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpCiAJCWVsc2UKIAkJCXNlcV9wcmludGYobSwgJiMzNDslNGMgJiMzNDssICYjMzk7eCYjMzk7KTsKIAkJaWYgKHJlZy0mZ3Q7ZmxhZ3MpIHsKJiM0MzsJCQlmaXJzdCA9IHRydWU7CiAJCQlmb3IgKGogPSAwOyBqICZsdDsgY291bnQ7IGomIzQzOyYjNDM7KSB7Ci0JCQkJaWYgKHJlZy0mZ3Q7ZmxhZ3MgJmFtcDsgKDFVICZsdDsmbHQ7IGopKSB7Ci0JCQkJCXNlcV9wcmludGYobSwgJiMzNDslc1xuJiMzNDssIGZsYWduYW1lW2pdKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQomIzQzOwkJCQlpZiAoIShyZWctJmd0O2ZsYWdzICZhbXA7ICgxVSAmbHQ7Jmx0OyBqKSkpCiYjNDM7CQkJCQljb250aW51ZTsKJiM0MzsJCQkJaWYgKCFmaXJzdCkKJiM0MzsJCQkJCXNlcV9wdXRjKG0sICYjMzk7fCYjMzk7KTsKJiM0MzsJCQkJc2VxX3B1dHMobSwgZmxhZ25hbWVbal0gPzogJiMzNDtVTktOT1dOJiMzNDspOwomIzQzOwkJCQlmaXJzdCA9IGZhbHNlOwogCQkJfQotCQkJaWYgKGogPT0gY291bnQpCi0JCQkJc2VxX3ByaW50ZihtLCAmIzM0OyVzXG4mIzM0OywgJiMzNDtVTktOT1dOJiMzNDspOwomIzQzOwkJCWlmIChmaXJzdCkKJiM0MzsJCQkJc2VxX3B1dHMobSwgJiMzNDtVTktOT1dOJiMzNDspOwomIzQzOwkJCXNlcV9wdXRjKG0sICYjMzk7XG4mIzM5Oyk7CiAJCX0gZWxzZSB7CiAJCQlzZXFfcHJpbnRmKG0sICYjMzQ7JXNcbiYjMzQ7LCAmIzM0O05PTkUmIzM0Oyk7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbWJsb2NrIERlYnVnZnMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG1tL21lbWJsb2NrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBtZW1ibG9ja19kZWJ1Z19zaG93YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCBkZWJ1Z2ZzLCBJIHNlZS4mIzM0OyBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBhIG5ldyBmbGFnLCBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCwgdG8gdGhlIGBmbGFnbmFtZWAgYXJyYXksIHdoaWNoIGlzIGdvb2QuIFdlIG5lZWQgY29tcHJlaGVuc2l2ZSBmbGFnIHJlcHJlc2VudGF0aW9uLgoKVGhlIG1vcmUgc2lnbmlmaWNhbnQgY2hhbmdlLCBhbmQgcHJvYmFibHkgdGhlIHJlYXNvbiBmb3IgdGhpcyBwYXRjaCwgaXMgaG93IGZsYWdzIGFyZSBwcmludGVkIGluIHRoZSBgbWVtYmxvY2tfZGVidWdfc2hvd2Agb3V0cHV0LiBJdCYjMzk7cyBzd2l0Y2hpbmcgZnJvbSB0aGF0ICYjMzQ7Zmlyc3QgbWF0Y2ggYW5kIGJyZWFrJiMzNDsgYmVoYXZpb3IgdG8gcHJpbnRpbmcgKmFsbCogdGhlIG1hdGNoaW5nIGZsYWdzLCBzZXBhcmF0ZWQgYnkgYSBwaXBlIGB8YC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGltcHJvdmVtZW50LiBUaGUgcHJldmlvdXMgYmVoYXZpb3Igd2FzIGZydXN0cmF0aW5nIGFuZCBsaW1pdGVkLCBlc3BlY2lhbGx5IHdoZW4gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24uIFlvdSYjMzk7ZCBoYXZlIHRvIHRyYWNlIHRocm91Z2ggYW5kIGluZmVyIGEgYnVuY2ggb2YgaW5mb3JtYXRpb24hCgpTaW5jZSB0aGlzIGlzIGEgZGVidWdmcyBtb2RpZmljYXRpb24sIHRoZSBpbXBsaWNhdGlvbnMgYXJlIGNvbnRhaW5lZCB0byBkZWJ1ZyBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSB0aGUga2VybmVsLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYG1lbWJsb2NrX2RlYnVnX3Nob3dgIGlzIHVzZWQgZm9yIGRlYnVnZnMgb3V0cHV0LiBUaGVuIHdlIGNhbiBmdWxseSBhbmFseXplIHRoZSBlZmZlY3RzIG9mIHRoZSBwYXRjaCBvbiB0aGUgZGVidWcgaW5mb3JtYXRpb24gaXQgcHJvdmlkZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtYmxvY2tfZGVidWdfc2hvdyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1ibG9jay5jPTI4ODE9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnbmFtZVtdID0ge1xuLS1cbm1tL21lbWJsb2NrLmMtMjg5MS1cbm1tL21lbWJsb2NrLmM6Mjg5MjpzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxubW0vbWVtYmxvY2suYy0yODkzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIGBtZW1ibG9ja19kZWJ1Z19zaG93YCBVc2FnZSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgbWVtYmxvY2tfZGVidWdfc2hvd2AuIEkgY2FuJiMzOTt0IGp1c3QgZGl2ZSBpbiBhc3N1bWluZyBJIGtub3cgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMg4oCTIGJvdGggZGlyZWN0IGNhbGxzIGFuZCBhbnkgaW5kaXJlY3QgY2FsbHMgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIG1hY3Jvcy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aG9zZSB1c2VzIGlzIGNydWNpYWwuIElzIGl0IG9ubHkgdXNlZCBkdXJpbmcgZGVidWdnaW5nLCBvciBpcyBpdCBwcmVzZW50IGluIHByb2R1Y3Rpb24gY29kZSBwYXRocz8gVGhlIGltcGxpY2F0aW9ucyBhcmUgcXVpdGUgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB0aGUgYW5zd2VyLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQga2VybmVsIHN1YnN5c3RlbXMuIEtub3dpbmcgdGhlIHBsYWNlcyB3aGVyZSBpdCBpcyBjYWxsZWQgd2lsbCBsaWtlbHkgaW5mb3JtIG1lIG9uIHRoZSBvdmVyYWxsIGZ1bmN0aW9uIGFuZCBnb2FsIG9mIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1ibG9ja19kZWJ1Z19zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtYmxvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1ibG9jay5jPTI4ODE9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnbmFtZVtdID0ge1xuLS1cbm1tL21lbWJsb2NrLmMtMjg5MS1cbm1tL21lbWJsb2NrLmM6Mjg5MjpzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxubW0vbWVtYmxvY2suYy0yODkzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjMxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vbWVtYmxvY2suY2AqKgoKT2theSwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBtZW1ibG9jayBhbGxvY2F0b3IuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBtbS9tZW1ibG9jay5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgaXNzdWUgSSYjMzk7bSBkZWJ1Z2dpbmcgaXMgaW4gaG93IHRoZSBtZW1vcnkgYmxvY2sgbWFuYWdlbWVudCBpcyBzZXQgdXAsIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBoYXBwZW5zLiBCYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGlzIGNvZGUsIGEgZ29vZCBwbGFjZSB0byBzdGFydCBpcyBhcm91bmQgbGluZSAyODkyLiBJJiMzOTtsbCBmb2N1cyBteSBpbml0aWFsIGV4YW1pbmF0aW9uIGFyb3VuZCB0aGF0IGFyZWEsIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmdW5jdGlvbiBpcyB1c2VkIGluIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWJsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODkwOlx0fTtcbjI4OTE6XHRcbjI4OTI6XHRzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxuMjg5MzpcdHtcbjI4OTQ6XHRcdHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlID0gbS1cdTAwM2Vwcml2YXRlO1xuMjg5NTpcdFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmVnO1xuMjg5NjpcdFx0aW50IGksIGosIG5pZDtcbjI4OTc6XHRcdHVuc2lnbmVkIGludCBjb3VudCA9IEFSUkFZX1NJWkUoZmxhZ25hbWUpO1xuMjg5ODpcdFx0cGh5c19hZGRyX3QgZW5kO1xuMjg5OTpcdFx0Ym9vbCBmaXJzdDtcbjI5MDA6XHRcbjI5MDE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR5cGUtXHUwMDNlY250OyBpJiM0MzsmIzQzOykge1xuMjkwMjpcdFx0XHRyZWcgPSBcdTAwMjZ0eXBlLVx1MDAzZXJlZ2lvbnNbaV07XG4yOTAzOlx0XHRcdGVuZCA9IHJlZy1cdTAwM2ViYXNlICYjNDM7IHJlZy1cdTAwM2VzaXplIC0gMTtcbjI5MDQ6XHRcdFx0bmlkID0gbWVtYmxvY2tfZ2V0X3JlZ2lvbl9ub2RlKHJlZyk7XG4yOTA1Olx0XG4yOTA2Olx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JTRkOiBcJiMzNDssIGkpO1xuMjkwNzpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyVwYS4uJXBhIFwmIzM0OywgXHUwMDI2cmVnLVx1MDAzZWJhc2UsIFx1MDAyNmVuZCk7XG4yOTA4Olx0XHRcdGlmIChudW1hX3ZhbGlkX25vZGUobmlkKSlcbjI5MDk6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU0ZCBcJiMzNDssIG5pZCk7XG4yOTEwOlx0XHRcdGVsc2VcbjI5MTE6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU0YyBcJiMzNDssICYjMzk7eCYjMzk7KTtcbjI5MTI6XHRcdFx0aWYgKHJlZy1cdTAwM2VmbGFncykge1xuMjkxMzpcdFx0XHRcdGZpcnN0ID0gdHJ1ZTtcbjI5MTQ6XHRcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBjb3VudDsgaiYjNDM7JiM0MzspIHtcbjI5MTU6XHRcdFx0XHRcdGlmICghKHJlZy1cdTAwM2VmbGFncyBcdTAwMjYgKDFVIFx1MDAzY1x1MDAzYyBqKSkpXG4yOTE2Olx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjkxNzpcdFx0XHRcdFx0aWYgKCFmaXJzdClcbjI5MTg6XHRcdFx0XHRcdFx0c2VxX3B1dGMobSwgJiMzOTt8JiMzOTspO1xuMjkxOTpcdFx0XHRcdFx0c2VxX3B1dHMobSwgZmxhZ25hbWVbal0gPzogXCYjMzQ7VU5LTk9XTlwmIzM0Oyk7XG4yOTIwOlx0XHRcdFx0XHRmaXJzdCA9IGZhbHNlO1xuMjkyMTpcdFx0XHRcdH1cbjI5MjI6XHRcdFx0XHRpZiAoZmlyc3QpXG4yOTIzOlx0XHRcdFx0XHRzZXFfcHV0cyhtLCBcJiMzNDtVTktOT1dOXCYjMzQ7KTtcbjI5MjQ6XHRcdFx0XHRzZXFfcHV0YyhtLCAmIzM5O1xcbiYjMzk7KTtcbjI5MjU6XHRcdFx0fSBlbHNlIHtcbjI5MjY6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyVzXFxuXCYjMzQ7LCBcJiMzNDtOT05FXCYjMzQ7KTtcbjI5Mjc6XHRcdFx0fVxuMjkyODpcdFx0fVxuMjkyOTpcdFx0cmV0dXJuIDA7XG4yOTMwOlx0fVxuMjkzMTpcdERFRklORV9TSE9XX0FUVFJJQlVURShtZW1ibG9ja19kZWJ1Zyk7XG4yOTMyOlx0XG4yOTMzOlx0c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX2RlYnVnZnNfZXhwb3NlX2FycmF5cyhzdHJ1Y3QgZGVudHJ5ICpyb290KVxuMjkzNDpcdHtcbjI5MzU6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7bWVtb3J5XCYjMzQ7LCAwNDQ0LCByb290LFxuMjkzNjpcdFx0XHRcdCAgICBcdTAwMjZtZW1ibG9jay5tZW1vcnksIFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xuMjkzNzpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtyZXNlcnZlZFwmIzM0OywgMDQ0NCwgcm9vdCxcbjI5Mzg6XHRcdFx0XHQgICAgXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQsIFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xuMjkzOTpcdCNpZmRlZiBDT05GSUdfSEFWRV9NRU1CTE9DS19QSFlTX01BUFxuMjk0MDpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtwaHlzbWVtXCYjMzQ7LCAwNDQ0LCByb290LCBcdTAwMjZwaHlzbWVtLFxuMjk0MTpcdFx0XHRcdCAgICBcdTAwMjZtZW1ibG9ja19kZWJ1Z19mb3BzKTtcbjI5NDI6XHQjZW5kaWZcbjI5NDM6XHR9XG4yOTQ0Olx0XG4yOTQ1Olx0I2Vsc2VcbjI5NDY6XHRcbjI5NDc6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfZGVidWdmc19leHBvc2VfYXJyYXlzKHN0cnVjdCBkZW50cnkgKnJvb3QpIHsgfVxuMjk0ODpcdFxuMjk0OTpcdCNlbmRpZiAvKiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLICovXG4yOTUwOlx0XG4yOTUxOlx0c3RhdGljIGludCBtZW1ibG9ja19yZXNlcnZlX21lbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcbjI5NTI6XHR7XG4yOTUzOlx0XHRzdHJ1Y3QgcmVzZXJ2ZV9tZW1fdGFibGUgKm1hcDtcbjI5NTQ6XHRcdGNoYXIgdHh0c3pbMTZdO1xuMjk1NTpcdFxuMjk1NjpcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnJlc2VydmVfbWVtX2xvY2spO1xuMjk1NzpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHJlc2VydmVkX21lbV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbjI5NTg6XHRcdFx0bWFwID0gXHUwMDI2cmVzZXJ2ZWRfbWVtX3RhYmxlW2ldO1xuMjk1OTpcdFx0XHRpZiAoIW1hcC1cdTAwM2VzaXplKVxuMjk2MDpcdFx0XHRcdGNvbnRpbnVlO1xuMjk2MTpcdFxuMjk2MjpcdFx0XHRtZW1zZXQodHh0c3osIDAsIHNpemVvZih0eHRzeikpO1xuMjk2MzpcdFx0XHRzdHJpbmdfZ2V0X3NpemUobWFwLVx1MDAzZXNpemUsIDEsIFNUUklOR19VTklUU18yLCB0eHRzeiwgc2l6ZW9mKHR4dHN6KSk7XG4yOTY0Olx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JXNcXHRcXHQoJXMpXFxuXCYjMzQ7LCBtYXAtXHUwMDNlbmFtZSwgdHh0c3opO1xuMjk2NTpcdFx0fVxuMjk2NjpcdFxuMjk2NzpcdFx0cmV0dXJuIDA7XG4yOTY4Olx0fVxuMjk2OTpcdERFRklORV9TSE9XX0FUVFJJQlVURShtZW1ibG9ja19yZXNlcnZlX21lbSk7XG4yOTcwOlx0XG4yOTcxOlx0c3RhdGljIGludCBfX2luaXQgbWVtYmxvY2tfaW5pdF9kZWJ1Z2ZzKHZvaWQpXG4yOTcyOlx0e1xuMjk3MzpcdFx0c3RydWN0IGRlbnRyeSAqcm9vdDtcbjI5NzQ6XHRcbjI5NzU6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSBcdTAwMjZcdTAwMjYgIXJlc2VydmVkX21lbV9jb3VudClcbjI5NzY6XHRcdFx0cmV0dXJuIDA7XG4yOTc3Olx0XG4yOTc4Olx0XHRyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKFwmIzM0O21lbWJsb2NrXCYjMzQ7LCBOVUxMKTtcbjI5Nzk6XHRcbjI5ODA6XHRcdGlmIChyZXNlcnZlZF9tZW1fY291bnQpXG4yOTgxOlx0XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cmVzZXJ2ZV9tZW1fcGFyYW1cJiMzNDssIDA0NDQsIHJvb3QsIE5VTEwsXG4yOTgyOlx0XHRcdFx0XHQgICAgXHUwMDI2bWVtYmxvY2tfcmVzZXJ2ZV9tZW1fZm9wcyk7XG4yOTgzOlx0XG4yOTg0Olx0XHRtZW1ibG9ja19kZWJ1Z2ZzX2V4cG9zZV9hcnJheXMocm9vdCk7XG4yOTg1Olx0XHRyZXR1cm4gMDtcbjI5ODY6XHR9XG4yOTg3Olx0X19pbml0Y2FsbChtZW1ibG9ja19pbml0X2RlYnVnZnMpO1xuMjk4ODpcdFxuMjk4OTpcdCNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQyCgkJCQkJCQlvdXRwdXQ6IDg0CgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1mYWxzZTogQSBEZWJ1Z2ZzIEZvcm1hdHRpbmcgVHdlYWsqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbWVtYmxvY2tfZGVidWdfc2hvd2AuIEkga25vdyB0aGF0IGZ1bmN0aW9uIOKAkyBpdCYjMzk7cyB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciBmb3JtYXR0aW5nIHRoZSBvdXRwdXQgb2YgdGhvc2UgZGVidWdmcyBmaWxlczogYG1lbW9yeWAsIGByZXNlcnZlZGAsIGFuZCBgcGh5c21lbWAgdW5kZXIgYC9zeXMva2VybmVsL2RlYnVnL21lbWJsb2NrL2AuIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBjb3NtZXRpYyBjaGFuZ2U7IGl0JiMzOTtzIGFsbCBhYm91dCBob3cgdGhlIGRhdGEgaXMgKnByZXNlbnRlZCosIG5vdCB0aGUgdW5kZXJseWluZyBkYXRhIGl0c2VsZiBvciBpdHMgcHJvY2Vzc2luZy4gVGhlIGNvZGUgaXNuJiMzOTt0IGNoYW5naW5nIGhvdyBtZW1vcnkgaXMgbWFuYWdlZCBvciBob3cgdGhlIHN5c3RlbSBiZWhhdmVzLgoKVGhlIHByb21wdCBpcyBwcmV0dHkgY2xlYXI6IGlmIHRoZSBwYXRjaCBpcyAqb25seSogYWJvdXQgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIG9yIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMgbGlrZSBsb2dnaW5nLCB0cmFjZXBvaW50cywgb3IgZXZlbiBqdXN0IGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBjaGFuZ2UgaG93IHRoZSBjb2RlICp3b3JrcyosIHRoZW4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEdpdmVuIHRoaXMgaXMganVzdCBhIHJlZm9ybWF0dGluZyBvZiBkZWJ1ZyBvdXRwdXQuLi4geWVhaCwgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzLiBJdCYjMzk7cyBhIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZS4gU28sIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYGZhbHNlYCBpbiB0aGlzIGNhc2UuIFNpbXBsZSBhcyB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIG91dHB1dCBmb3JtYXQgb2YgYSBkZWJ1Z2ZzIGZpbGUgKG1lbWJsb2NrX2RlYnVnX3Nob3cpIHRvIHByaW50IG11bHRpcGxlIGZsYWdzIHNlcGFyYXRlZCBieSAmIzM5O3wmIzM5OyBpbnN0ZWFkIG9mIGp1c3QgdGhlIGZpcnN0IG9uZS4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUga2VybmVsJiMzOTtzIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiBhIGRlYnVnZnMgZmlsZSAobWVtYmxvY2tfZGVidWdfc2hvdykgdG8gcHJpbnQgbXVsdGlwbGUgZmxhZ3Mgc2VwYXJhdGVkIGJ5ICYjMzk7fCYjMzk7IGluc3RlYWQgb2YganVzdCB0aGUgZmlyc3Qgb25lLiBUaGlzIGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBrZXJuZWwmIzM5O3MgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NDQ6MjEuNDYzMzgxMTIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4Mjc3MzIwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IG9mIGEgZGVidWdmcyBmaWxlIChtZW1ibG9ja19kZWJ1Z19zaG93KSB0byBwcmludCBtdWx0aXBsZSBmbGFncyBzZXBhcmF0ZWQgYnkgJ3wnIGluc3RlYWQgb2YganVzdCB0aGUgZmlyc3Qgb25lLiBUaGlzIGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBrZXJuZWwncyBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA4OjQ0OjIxLjQ2MzM5NDM3M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0OTAzNTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFlNTNkYThiZjJlY2Q3ZWU2N2RhNjY5YjhlNDc3ZWM0Zjc4MzI0OGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDg6NDQ6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmNcXG5pbmRleCA5Y2U4NjM0OWEyOWZhLi41ZDgwNmZlOTJjZDcxIDEwMDY0NFxcbi0tLSBhL21tL21lbWJsb2NrLmNcXG4rKysgYi9tbS9tZW1ibG9jay5jXFxuQEAgLTI4ODYsNiArMjg4Niw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcXG4gXFx0W2lsb2cyKE1FTUJMT0NLX1JTUlZfTk9JTklUKV0gPSBcXFwiUlNWX05JVFxcXCIsXFxuIFxcdFtpbG9nMihNRU1CTE9DS19SU1JWX0tFUk4pXSA9IFxcXCJSU1ZfS0VSTlxcXCIsXFxuIFxcdFtpbG9nMihNRU1CTE9DS19LSE9fU0NSQVRDSCldID0gXFxcIktIT19TQ1JBVENIXFxcIixcXG4rXFx0W2lsb2cyKE1FTUJMT0NLX1JTUlZfSFVHRVRMQildID0gXFxcIlJTVl9IVUdFVExCXFxcIixcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXFxuQEAgLTI4OTUsNiArMjg5Niw3IEBAIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXFxuIFxcdGludCBpLCBqLCBuaWQ7XFxuIFxcdHVuc2lnbmVkIGludCBjb3VudCA9IEFSUkFZX1NJWkUoZmxhZ25hbWUpO1xcbiBcXHRwaHlzX2FkZHJfdCBlbmQ7XFxuK1xcdGJvb2wgZmlyc3Q7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdHlwZS1cXHUwMDNlY250OyBpKyspIHtcXG4gXFx0XFx0cmVnID0gXFx1MDAyNnR5cGUtXFx1MDAzZXJlZ2lvbnNbaV07XFxuQEAgLTI5MDgsMTQgKzI5MTAsMTggQEAgc3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlNGMgXFxcIiwgJ3gnKTtcXG4gXFx0XFx0aWYgKHJlZy1cXHUwMDNlZmxhZ3MpIHtcXG4rXFx0XFx0XFx0Zmlyc3QgPSB0cnVlO1xcbiBcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgY291bnQ7IGorKykge1xcbi1cXHRcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2VmbGFncyBcXHUwMDI2ICgxVSBcXHUwMDNjXFx1MDAzYyBqKSkge1xcbi1cXHRcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlc1xcXFxuXFxcIiwgZmxhZ25hbWVbal0pO1xcbi1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHRcXHRpZiAoIShyZWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgKDFVIFxcdTAwM2NcXHUwMDNjIGopKSlcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdGlmICghZmlyc3QpXFxuK1xcdFxcdFxcdFxcdFxcdHNlcV9wdXRjKG0sICd8Jyk7XFxuK1xcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIGZsYWduYW1lW2pdID86IFxcXCJVTktOT1dOXFxcIik7XFxuK1xcdFxcdFxcdFxcdGZpcnN0ID0gZmFsc2U7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKGogPT0gY291bnQpXFxuLVxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiVzXFxcXG5cXFwiLCBcXFwiVU5LTk9XTlxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZmlyc3QpXFxuK1xcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCJVTktOT1dOXFxcIik7XFxuK1xcdFxcdFxcdHNlcV9wdXRjKG0sICdcXFxcbicpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlc1xcXFxuXFxcIiwgXFxcIk5PTkVcXFwiKTtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwODo0NDoyMi43MTM2NDM5NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODU3NzQ1MjM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiBhIGRlYnVnZnMgZmlsZSAobWVtYmxvY2tfZGVidWdfc2hvdykgdG8gcHJpbnQgbXVsdGlwbGUgZmxhZ3Mgc2VwYXJhdGVkIGJ5ICd8JyBpbnN0ZWFkIG9mIGp1c3QgdGhlIGZpcnN0IG9uZS4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZTUzZGE4YmYyZWNkN2VlNjdkYTY2OWI4ZTQ3N2VjNGY3ODMyNDhmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDg6NDQ6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suY1xuaW5kZXggOWNlODYzNDlhMjlmYS4uNWQ4MDZmZTkyY2Q3MSAxMDA2NDRcbi0tLSBhL21tL21lbWJsb2NrLmNcbisrKyBiL21tL21lbWJsb2NrLmNcbkBAIC0yODg2LDYgKzI4ODYsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7XG4gXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9OT0lOSVQpXSA9IFwiUlNWX05JVFwiLFxuIFx0W2lsb2cyKE1FTUJMT0NLX1JTUlZfS0VSTildID0gXCJSU1ZfS0VSTlwiLFxuIFx0W2lsb2cyKE1FTUJMT0NLX0tIT19TQ1JBVENIKV0gPSBcIktIT19TQ1JBVENIXCIsXG4rXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9IVUdFVExCKV0gPSBcIlJTVl9IVUdFVExCXCIsXG4gfTtcbiBcbiBzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxuQEAgLTI4OTUsNiArMjg5Niw3IEBAIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXG4gXHRpbnQgaSwgaiwgbmlkO1xuIFx0dW5zaWduZWQgaW50IGNvdW50ID0gQVJSQVlfU0laRShmbGFnbmFtZSk7XG4gXHRwaHlzX2FkZHJfdCBlbmQ7XG4rXHRib29sIGZpcnN0O1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHlwZS1cdTAwM2VjbnQ7IGkrKykge1xuIFx0XHRyZWcgPSBcdTAwMjZ0eXBlLVx1MDAzZXJlZ2lvbnNbaV07XG5AQCAtMjkwOCwxNCArMjkxMCwxOCBAQCBzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxuIFx0XHRlbHNlXG4gXHRcdFx0c2VxX3ByaW50ZihtLCBcIiU0YyBcIiwgJ3gnKTtcbiBcdFx0aWYgKHJlZy1cdTAwM2VmbGFncykge1xuK1x0XHRcdGZpcnN0ID0gdHJ1ZTtcbiBcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBjb3VudDsgaisrKSB7XG4tXHRcdFx0XHRpZiAocmVnLVx1MDAzZWZsYWdzIFx1MDAyNiAoMVUgXHUwMDNjXHUwMDNjIGopKSB7XG4tXHRcdFx0XHRcdHNlcV9wcmludGYobSwgXCIlc1xcblwiLCBmbGFnbmFtZVtqXSk7XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuK1x0XHRcdFx0aWYgKCEocmVnLVx1MDAzZWZsYWdzIFx1MDAyNiAoMVUgXHUwMDNjXHUwMDNjIGopKSlcbitcdFx0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0XHRpZiAoIWZpcnN0KVxuK1x0XHRcdFx0XHRzZXFfcHV0YyhtLCAnfCcpO1xuK1x0XHRcdFx0c2VxX3B1dHMobSwgZmxhZ25hbWVbal0gPzogXCJVTktOT1dOXCIpO1xuK1x0XHRcdFx0Zmlyc3QgPSBmYWxzZTtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKGogPT0gY291bnQpXG4tXHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwiJXNcXG5cIiwgXCJVTktOT1dOXCIpO1xuK1x0XHRcdGlmIChmaXJzdClcbitcdFx0XHRcdHNlcV9wdXRzKG0sIFwiVU5LTk9XTlwiKTtcbitcdFx0XHRzZXFfcHV0YyhtLCAnXFxuJyk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0c2VxX3ByaW50ZihtLCBcIiVzXFxuXCIsIFwiTk9ORVwiKTtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NDQ6MjIuNzEzNjQ2MjgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzODU3MjMwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWJsb2NrIERlYnVnZnMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbW0vbWVtYmxvY2suY2AsIHNwZWNpZmljYWxseSB0aGUgYG1lbWJsb2NrX2RlYnVnX3Nob3dgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIGRlYnVnZnMsIEkgc2VlLlwiIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBhZGRpbmcgYSBuZXcgZmxhZywgYE1FTUJMT0NLX1JTUlZfSFVHRVRMQmAsIHRvIHRoZSBgZmxhZ25hbWVgIGFycmF5LCB3aGljaCBpcyBnb29kLiBXZSBuZWVkIGNvbXByZWhlbnNpdmUgZmxhZyByZXByZXNlbnRhdGlvbi5cblxuVGhlIG1vcmUgc2lnbmlmaWNhbnQgY2hhbmdlLCBhbmQgcHJvYmFibHkgdGhlIHJlYXNvbiBmb3IgdGhpcyBwYXRjaCwgaXMgaG93IGZsYWdzIGFyZSBwcmludGVkIGluIHRoZSBgbWVtYmxvY2tfZGVidWdfc2hvd2Agb3V0cHV0LiBJdCdzIHN3aXRjaGluZyBmcm9tIHRoYXQgXCJmaXJzdCBtYXRjaCBhbmQgYnJlYWtcIiBiZWhhdmlvciB0byBwcmludGluZyAqYWxsKiB0aGUgbWF0Y2hpbmcgZmxhZ3MsIHNlcGFyYXRlZCBieSBhIHBpcGUgYHxgLiBUaGF0J3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudC4gVGhlIHByZXZpb3VzIGJlaGF2aW9yIHdhcyBmcnVzdHJhdGluZyBhbmQgbGltaXRlZCwgZXNwZWNpYWxseSB3aGVuIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uLiBZb3UnZCBoYXZlIHRvIHRyYWNlIHRocm91Z2ggYW5kIGluZmVyIGEgYnVuY2ggb2YgaW5mb3JtYXRpb24hXG5cblNpbmNlIHRoaXMgaXMgYSBkZWJ1Z2ZzIG1vZGlmaWNhdGlvbiwgdGhlIGltcGxpY2F0aW9ucyBhcmUgY29udGFpbmVkIHRvIGRlYnVnIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBrZXJuZWwuIExldCdzIG1ha2Ugc3VyZSB0aGF0IGBtZW1ibG9ja19kZWJ1Z19zaG93YCBpcyB1c2VkIGZvciBkZWJ1Z2ZzIG91dHB1dC4gVGhlbiB3ZSBjYW4gZnVsbHkgYW5hbHl6ZSB0aGUgZWZmZWN0cyBvZiB0aGUgcGF0Y2ggb24gdGhlIGRlYnVnIGluZm9ybWF0aW9uIGl0IHByb3ZpZGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDAwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NDQ6MjcuMjUyMjIxMjg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTQ3ODY1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtYmxvY2tfZGVidWdfc2hvd1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1ibG9jay5jPTI4ODE9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnbmFtZVtdID0ge1xcbi0tXFxubW0vbWVtYmxvY2suYy0yODkxLVxcbm1tL21lbWJsb2NrLmM6Mjg5MjpzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxcbm1tL21lbWJsb2NrLmMtMjg5My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA4OjQ0OjI5LjcwNzAxODkxM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjMzMzc2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBgbWVtYmxvY2tfZGVidWdfc2hvd2AgVXNhZ2UqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgbWVtYmxvY2tfZGVidWdfc2hvd2AuIEkgY2FuJ3QganVzdCBkaXZlIGluIGFzc3VtaW5nIEkga25vdyB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMg4oCTIGJvdGggZGlyZWN0IGNhbGxzIGFuZCBhbnkgaW5kaXJlY3QgY2FsbHMgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIG1hY3Jvcy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aG9zZSB1c2VzIGlzIGNydWNpYWwuIElzIGl0IG9ubHkgdXNlZCBkdXJpbmcgZGVidWdnaW5nLCBvciBpcyBpdCBwcmVzZW50IGluIHByb2R1Y3Rpb24gY29kZSBwYXRocz8gVGhlIGltcGxpY2F0aW9ucyBhcmUgcXVpdGUgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB0aGUgYW5zd2VyLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIGFueSBvdGhlciByZWxldmFudCBrZXJuZWwgc3Vic3lzdGVtcy4gS25vd2luZyB0aGUgcGxhY2VzIHdoZXJlIGl0IGlzIGNhbGxlZCB3aWxsIGxpa2VseSBpbmZvcm0gbWUgb24gdGhlIG92ZXJhbGwgZnVuY3Rpb24gYW5kIGdvYWwgb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODkyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NDQ6MzIuODcwMzU4OTA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDMwOTM5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1ibG9ja19kZWJ1Z19zaG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWJsb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtYmxvY2suYz0yODgxPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcXG4tLVxcbm1tL21lbWJsb2NrLmMtMjg5MS1cXG5tbS9tZW1ibG9jay5jOjI4OTI6c3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcXG5tbS9tZW1ibG9jay5jLTI4OTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwODo0NDozMy4zOTQ2NzQ3ODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY1NzY3NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9tZW1ibG9jay5jYCoqXG5cbk9rYXksIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgbWVtYmxvY2sgYWxsb2NhdG9yLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBtbS9tZW1ibG9jay5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgaXNzdWUgSSdtIGRlYnVnZ2luZyBpcyBpbiBob3cgdGhlIG1lbW9yeSBibG9jayBtYW5hZ2VtZW50IGlzIHNldCB1cCwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGhhcHBlbnMuIEJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZSB3aXRoIHRoaXMgY29kZSwgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGlzIGFyb3VuZCBsaW5lIDI4OTIuIEknbGwgZm9jdXMgbXkgaW5pdGlhbCBleGFtaW5hdGlvbiBhcm91bmQgdGhhdCBhcmVhLCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZnVuY3Rpb24gaXMgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgb3ZlcmFsbCBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwODo0NDozNi42NjA0NDUyMjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtYmxvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODkwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg5MDpcXHR9O1xcbjI4OTE6XFx0XFxuMjg5MjpcXHRzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxcbjI4OTM6XFx0e1xcbjI4OTQ6XFx0XFx0c3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUgPSBtLVxcdTAwM2Vwcml2YXRlO1xcbjI4OTU6XFx0XFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmVnO1xcbjI4OTY6XFx0XFx0aW50IGksIGosIG5pZDtcXG4yODk3OlxcdFxcdHVuc2lnbmVkIGludCBjb3VudCA9IEFSUkFZX1NJWkUoZmxhZ25hbWUpO1xcbjI4OTg6XFx0XFx0cGh5c19hZGRyX3QgZW5kO1xcbjI4OTk6XFx0XFx0Ym9vbCBmaXJzdDtcXG4yOTAwOlxcdFxcbjI5MDE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHR5cGUtXFx1MDAzZWNudDsgaSsrKSB7XFxuMjkwMjpcXHRcXHRcXHRyZWcgPSBcXHUwMDI2dHlwZS1cXHUwMDNlcmVnaW9uc1tpXTtcXG4yOTAzOlxcdFxcdFxcdGVuZCA9IHJlZy1cXHUwMDNlYmFzZSArIHJlZy1cXHUwMDNlc2l6ZSAtIDE7XFxuMjkwNDpcXHRcXHRcXHRuaWQgPSBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUocmVnKTtcXG4yOTA1OlxcdFxcbjI5MDY6XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTRkOiBcXFwiLCBpKTtcXG4yOTA3OlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiVwYS4uJXBhIFxcXCIsIFxcdTAwMjZyZWctXFx1MDAzZWJhc2UsIFxcdTAwMjZlbmQpO1xcbjI5MDg6XFx0XFx0XFx0aWYgKG51bWFfdmFsaWRfbm9kZShuaWQpKVxcbjI5MDk6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTRkIFxcXCIsIG5pZCk7XFxuMjkxMDpcXHRcXHRcXHRlbHNlXFxuMjkxMTpcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlNGMgXFxcIiwgJ3gnKTtcXG4yOTEyOlxcdFxcdFxcdGlmIChyZWctXFx1MDAzZWZsYWdzKSB7XFxuMjkxMzpcXHRcXHRcXHRcXHRmaXJzdCA9IHRydWU7XFxuMjkxNDpcXHRcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgY291bnQ7IGorKykge1xcbjI5MTU6XFx0XFx0XFx0XFx0XFx0aWYgKCEocmVnLVxcdTAwM2VmbGFncyBcXHUwMDI2ICgxVSBcXHUwMDNjXFx1MDAzYyBqKSkpXFxuMjkxNjpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yOTE3OlxcdFxcdFxcdFxcdFxcdGlmICghZmlyc3QpXFxuMjkxODpcXHRcXHRcXHRcXHRcXHRcXHRzZXFfcHV0YyhtLCAnfCcpO1xcbjI5MTk6XFx0XFx0XFx0XFx0XFx0c2VxX3B1dHMobSwgZmxhZ25hbWVbal0gPzogXFxcIlVOS05PV05cXFwiKTtcXG4yOTIwOlxcdFxcdFxcdFxcdFxcdGZpcnN0ID0gZmFsc2U7XFxuMjkyMTpcXHRcXHRcXHRcXHR9XFxuMjkyMjpcXHRcXHRcXHRcXHRpZiAoZmlyc3QpXFxuMjkyMzpcXHRcXHRcXHRcXHRcXHRzZXFfcHV0cyhtLCBcXFwiVU5LTk9XTlxcXCIpO1xcbjI5MjQ6XFx0XFx0XFx0XFx0c2VxX3B1dGMobSwgJ1xcXFxuJyk7XFxuMjkyNTpcXHRcXHRcXHR9IGVsc2Uge1xcbjI5MjY6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJXNcXFxcblxcXCIsIFxcXCJOT05FXFxcIik7XFxuMjkyNzpcXHRcXHRcXHR9XFxuMjkyODpcXHRcXHR9XFxuMjkyOTpcXHRcXHRyZXR1cm4gMDtcXG4yOTMwOlxcdH1cXG4yOTMxOlxcdERFRklORV9TSE9XX0FUVFJJQlVURShtZW1ibG9ja19kZWJ1Zyk7XFxuMjkzMjpcXHRcXG4yOTMzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19kZWJ1Z2ZzX2V4cG9zZV9hcnJheXMoc3RydWN0IGRlbnRyeSAqcm9vdClcXG4yOTM0OlxcdHtcXG4yOTM1OlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcIm1lbW9yeVxcXCIsIDA0NDQsIHJvb3QsXFxuMjkzNjpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm1lbWJsb2NrLm1lbW9yeSwgXFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xcbjI5Mzc6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwicmVzZXJ2ZWRcXFwiLCAwNDQ0LCByb290LFxcbjI5Mzg6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZtZW1ibG9jay5yZXNlcnZlZCwgXFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xcbjI5Mzk6XFx0I2lmZGVmIENPTkZJR19IQVZFX01FTUJMT0NLX1BIWVNfTUFQXFxuMjk0MDpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJwaHlzbWVtXFxcIiwgMDQ0NCwgcm9vdCwgXFx1MDAyNnBoeXNtZW0sXFxuMjk0MTpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xcbjI5NDI6XFx0I2VuZGlmXFxuMjk0MzpcXHR9XFxuMjk0NDpcXHRcXG4yOTQ1OlxcdCNlbHNlXFxuMjk0NjpcXHRcXG4yOTQ3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19kZWJ1Z2ZzX2V4cG9zZV9hcnJheXMoc3RydWN0IGRlbnRyeSAqcm9vdCkgeyB9XFxuMjk0ODpcXHRcXG4yOTQ5OlxcdCNlbmRpZiAvKiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLICovXFxuMjk1MDpcXHRcXG4yOTUxOlxcdHN0YXRpYyBpbnQgbWVtYmxvY2tfcmVzZXJ2ZV9tZW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXFxuMjk1MjpcXHR7XFxuMjk1MzpcXHRcXHRzdHJ1Y3QgcmVzZXJ2ZV9tZW1fdGFibGUgKm1hcDtcXG4yOTU0OlxcdFxcdGNoYXIgdHh0c3pbMTZdO1xcbjI5NTU6XFx0XFxuMjk1NjpcXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNnJlc2VydmVfbWVtX2xvY2spO1xcbjI5NTc6XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyByZXNlcnZlZF9tZW1fY291bnQ7IGkrKykge1xcbjI5NTg6XFx0XFx0XFx0bWFwID0gXFx1MDAyNnJlc2VydmVkX21lbV90YWJsZVtpXTtcXG4yOTU5OlxcdFxcdFxcdGlmICghbWFwLVxcdTAwM2VzaXplKVxcbjI5NjA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjk2MTpcXHRcXG4yOTYyOlxcdFxcdFxcdG1lbXNldCh0eHRzeiwgMCwgc2l6ZW9mKHR4dHN6KSk7XFxuMjk2MzpcXHRcXHRcXHRzdHJpbmdfZ2V0X3NpemUobWFwLVxcdTAwM2VzaXplLCAxLCBTVFJJTkdfVU5JVFNfMiwgdHh0c3osIHNpemVvZih0eHRzeikpO1xcbjI5NjQ6XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJXNcXFxcdFxcXFx0KCVzKVxcXFxuXFxcIiwgbWFwLVxcdTAwM2VuYW1lLCB0eHRzeik7XFxuMjk2NTpcXHRcXHR9XFxuMjk2NjpcXHRcXG4yOTY3OlxcdFxcdHJldHVybiAwO1xcbjI5Njg6XFx0fVxcbjI5Njk6XFx0REVGSU5FX1NIT1dfQVRUUklCVVRFKG1lbWJsb2NrX3Jlc2VydmVfbWVtKTtcXG4yOTcwOlxcdFxcbjI5NzE6XFx0c3RhdGljIGludCBfX2luaXQgbWVtYmxvY2tfaW5pdF9kZWJ1Z2ZzKHZvaWQpXFxuMjk3MjpcXHR7XFxuMjk3MzpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xcbjI5NzQ6XFx0XFxuMjk3NTpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykgXFx1MDAyNlxcdTAwMjYgIXJlc2VydmVkX21lbV9jb3VudClcXG4yOTc2OlxcdFxcdFxcdHJldHVybiAwO1xcbjI5Nzc6XFx0XFxuMjk3ODpcXHRcXHRyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKFxcXCJtZW1ibG9ja1xcXCIsIE5VTEwpO1xcbjI5Nzk6XFx0XFxuMjk4MDpcXHRcXHRpZiAocmVzZXJ2ZWRfbWVtX2NvdW50KVxcbjI5ODE6XFx0XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwicmVzZXJ2ZV9tZW1fcGFyYW1cXFwiLCAwNDQ0LCByb290LCBOVUxMLFxcbjI5ODI6XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZtZW1ibG9ja19yZXNlcnZlX21lbV9mb3BzKTtcXG4yOTgzOlxcdFxcbjI5ODQ6XFx0XFx0bWVtYmxvY2tfZGVidWdmc19leHBvc2VfYXJyYXlzKHJvb3QpO1xcbjI5ODU6XFx0XFx0cmV0dXJuIDA7XFxuMjk4NjpcXHR9XFxuMjk4NzpcXHRfX2luaXRjYWxsKG1lbWJsb2NrX2luaXRfZGVidWdmcyk7XFxuMjk4ODpcXHRcXG4yOTg5OlxcdCNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NDQ6MzYuNjYwNjIwNTUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMDQ0NDg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IEEgRGVidWdmcyBGb3JtYXR0aW5nIFR3ZWFrKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbWVtYmxvY2tfZGVidWdfc2hvd2AuIEkga25vdyB0aGF0IGZ1bmN0aW9uIOKAkyBpdCdzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGZvcm1hdHRpbmcgdGhlIG91dHB1dCBvZiB0aG9zZSBkZWJ1Z2ZzIGZpbGVzOiBgbWVtb3J5YCwgYHJlc2VydmVkYCwgYW5kIGBwaHlzbWVtYCB1bmRlciBgL3N5cy9rZXJuZWwvZGVidWcvbWVtYmxvY2svYC4gVGhpcyBpcyBlc3NlbnRpYWxseSBhIGNvc21ldGljIGNoYW5nZTsgaXQncyBhbGwgYWJvdXQgaG93IHRoZSBkYXRhIGlzICpwcmVzZW50ZWQqLCBub3QgdGhlIHVuZGVybHlpbmcgZGF0YSBpdHNlbGYgb3IgaXRzIHByb2Nlc3NpbmcuIFRoZSBjb2RlIGlzbid0IGNoYW5naW5nIGhvdyBtZW1vcnkgaXMgbWFuYWdlZCBvciBob3cgdGhlIHN5c3RlbSBiZWhhdmVzLlxuXG5UaGUgcHJvbXB0IGlzIHByZXR0eSBjbGVhcjogaWYgdGhlIHBhdGNoIGlzICpvbmx5KiBhYm91dCBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGZpbGVzLCBjb21tZW50cywgb3IgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIHRyYWNlcG9pbnRzLCBvciBldmVuIGp1c3QgY29uc3RhbnRzIHRoYXQgZG9uJ3QgY2hhbmdlIGhvdyB0aGUgY29kZSAqd29ya3MqLCB0aGVuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBHaXZlbiB0aGlzIGlzIGp1c3QgYSByZWZvcm1hdHRpbmcgb2YgZGVidWcgb3V0cHV0Li4uIHllYWgsIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4gSXQncyBhIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZS4gU28sIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYGZhbHNlYCBpbiB0aGlzIGNhc2UuIFNpbXBsZSBhcyB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTQyLCJPdXRwdXRUb2tlbnMiOjg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NDQ6NDEuMjkxMDY4MzIyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiBhIGRlYnVnZnMgZmlsZSAobWVtYmxvY2tfZGVidWdfc2hvdykgdG8gcHJpbnQgbXVsdGlwbGUgZmxhZ3Mgc2VwYXJhdGVkIGJ5ICd8JyBpbnN0ZWFkIG9mIGp1c3QgdGhlIGZpcnN0IG9uZS4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IG9mIGEgZGVidWdmcyBmaWxlIChtZW1ibG9ja19kZWJ1Z19zaG93KSB0byBwcmludCBtdWx0aXBsZSBmbGFncyBzZXBhcmF0ZWQgYnkgJ3wnIGluc3RlYWQgb2YganVzdCB0aGUgZmlyc3Qgb25lLiBUaGlzIGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBrZXJuZWwncyBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA4OjQ0OjQxLjI5MTA5ODM5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vrlg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 07:59:13 +0000 UTC FinishedAt: 2026-08-19 08:44:42 +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+CgkJCTx0ZD4yMDI2LzA4LzE5IDA4OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiBhIGRlYnVnZnMgZmlsZSAobWVtYmxvY2tfZGVidWdfc2hvdykgdG8gcHJpbnQgbXVsdGlwbGUgZmxhZ3Mgc2VwYXJhdGVkIGJ5ICYjMzk7fCYjMzk7IGluc3RlYWQgb2YganVzdCB0aGUgZmlyc3Qgb25lLiBUaGlzIGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBrZXJuZWwmIzM5O3MgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA4OjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWU1M2RhOGJmMmVjZDdlZTY3ZGE2NjliOGU0NzdlYzRmNzgzMjQ4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDA4OjQ0OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCA5Y2U4NjM0OWEyOWZhLi41ZDgwNmZlOTJjZDcxIDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtYmxvY2suY1xuQEAgLTI4ODYsNiAmIzQzOzI4ODYsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7XG4gXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9OT0lOSVQpXSA9IFwmIzM0O1JTVl9OSVRcJiMzNDssXG4gXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9LRVJOKV0gPSBcJiMzNDtSU1ZfS0VSTlwmIzM0OyxcbiBcdFtpbG9nMihNRU1CTE9DS19LSE9fU0NSQVRDSCldID0gXCYjMzQ7S0hPX1NDUkFUQ0hcJiMzNDssXG4mIzQzO1x0W2lsb2cyKE1FTUJMT0NLX1JTUlZfSFVHRVRMQildID0gXCYjMzQ7UlNWX0hVR0VUTEJcJiMzNDssXG4gfTtcbiBcbiBzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxuQEAgLTI4OTUsNiAmIzQzOzI4OTYsNyBAQCBzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxuIFx0aW50IGksIGosIG5pZDtcbiBcdHVuc2lnbmVkIGludCBjb3VudCA9IEFSUkFZX1NJWkUoZmxhZ25hbWUpO1xuIFx0cGh5c19hZGRyX3QgZW5kO1xuJiM0MztcdGJvb2wgZmlyc3Q7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0eXBlLVx1MDAzZWNudDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0cmVnID0gXHUwMDI2dHlwZS1cdTAwM2VyZWdpb25zW2ldO1xuQEAgLTI5MDgsMTQgJiM0MzsyOTEwLDE4IEBAIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXG4gXHRcdGVsc2VcbiBcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU0YyBcJiMzNDssICYjMzk7eCYjMzk7KTtcbiBcdFx0aWYgKHJlZy1cdTAwM2VmbGFncykge1xuJiM0MztcdFx0XHRmaXJzdCA9IHRydWU7XG4gXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgY291bnQ7IGomIzQzOyYjNDM7KSB7XG4tXHRcdFx0XHRpZiAocmVnLVx1MDAzZWZsYWdzIFx1MDAyNiAoMVUgXHUwMDNjXHUwMDNjIGopKSB7XG4tXHRcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JXNcXG5cJiMzNDssIGZsYWduYW1lW2pdKTtcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0aWYgKCEocmVnLVx1MDAzZWZsYWdzIFx1MDAyNiAoMVUgXHUwMDNjXHUwMDNjIGopKSlcbiYjNDM7XHRcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdGlmICghZmlyc3QpXG4mIzQzO1x0XHRcdFx0XHRzZXFfcHV0YyhtLCAmIzM5O3wmIzM5Oyk7XG4mIzQzO1x0XHRcdFx0c2VxX3B1dHMobSwgZmxhZ25hbWVbal0gPzogXCYjMzQ7VU5LTk9XTlwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0Zmlyc3QgPSBmYWxzZTtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKGogPT0gY291bnQpXG4tXHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyVzXFxuXCYjMzQ7LCBcJiMzNDtVTktOT1dOXCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKGZpcnN0KVxuJiM0MztcdFx0XHRcdHNlcV9wdXRzKG0sIFwmIzM0O1VOS05PV05cJiMzNDspO1xuJiM0MztcdFx0XHRzZXFfcHV0YyhtLCAmIzM5O1xcbiYjMzk7KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyVzXFxuXCYjMzQ7LCBcJiMzNDtOT05FXCYjMzQ7KTtcbiBcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA4OjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IG9mIGEgZGVidWdmcyBmaWxlIChtZW1ibG9ja19kZWJ1Z19zaG93KSB0byBwcmludCBtdWx0aXBsZSBmbGFncyBzZXBhcmF0ZWQgYnkgJiMzOTt8JiMzOTsgaW5zdGVhZCBvZiBqdXN0IHRoZSBmaXJzdCBvbmUuIFRoaXMgaXMgYSBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGtlcm5lbCYjMzk7cyBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZTUzZGE4YmYyZWNkN2VlNjdkYTY2OWI4ZTQ3N2VjNGY3ODMyNDhmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMDg6NDQ6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suYwppbmRleCA5Y2U4NjM0OWEyOWZhLi41ZDgwNmZlOTJjZDcxIDEwMDY0NAotLS0gYS9tbS9tZW1ibG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWJsb2NrLmMKQEAgLTI4ODYsNiAmIzQzOzI4ODYsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7CiAJW2lsb2cyKE1FTUJMT0NLX1JTUlZfTk9JTklUKV0gPSAmIzM0O1JTVl9OSVQmIzM0OywKIAlbaWxvZzIoTUVNQkxPQ0tfUlNSVl9LRVJOKV0gPSAmIzM0O1JTVl9LRVJOJiMzNDssCiAJW2lsb2cyKE1FTUJMT0NLX0tIT19TQ1JBVENIKV0gPSAmIzM0O0tIT19TQ1JBVENIJiMzNDssCiYjNDM7CVtpbG9nMihNRU1CTE9DS19SU1JWX0hVR0VUTEIpXSA9ICYjMzQ7UlNWX0hVR0VUTEImIzM0OywKIH07CiAKIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpCkBAIC0yODk1LDYgJiM0MzsyODk2LDcgQEAgc3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSkKIAlpbnQgaSwgaiwgbmlkOwogCXVuc2lnbmVkIGludCBjb3VudCA9IEFSUkFZX1NJWkUoZmxhZ25hbWUpOwogCXBoeXNfYWRkcl90IGVuZDsKJiM0MzsJYm9vbCBmaXJzdDsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB0eXBlLSZndDtjbnQ7IGkmIzQzOyYjNDM7KSB7CiAJCXJlZyA9ICZhbXA7dHlwZS0mZ3Q7cmVnaW9uc1tpXTsKQEAgLTI5MDgsMTQgJiM0MzsyOTEwLDE4IEBAIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpCiAJCWVsc2UKIAkJCXNlcV9wcmludGYobSwgJiMzNDslNGMgJiMzNDssICYjMzk7eCYjMzk7KTsKIAkJaWYgKHJlZy0mZ3Q7ZmxhZ3MpIHsKJiM0MzsJCQlmaXJzdCA9IHRydWU7CiAJCQlmb3IgKGogPSAwOyBqICZsdDsgY291bnQ7IGomIzQzOyYjNDM7KSB7Ci0JCQkJaWYgKHJlZy0mZ3Q7ZmxhZ3MgJmFtcDsgKDFVICZsdDsmbHQ7IGopKSB7Ci0JCQkJCXNlcV9wcmludGYobSwgJiMzNDslc1xuJiMzNDssIGZsYWduYW1lW2pdKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQomIzQzOwkJCQlpZiAoIShyZWctJmd0O2ZsYWdzICZhbXA7ICgxVSAmbHQ7Jmx0OyBqKSkpCiYjNDM7CQkJCQljb250aW51ZTsKJiM0MzsJCQkJaWYgKCFmaXJzdCkKJiM0MzsJCQkJCXNlcV9wdXRjKG0sICYjMzk7fCYjMzk7KTsKJiM0MzsJCQkJc2VxX3B1dHMobSwgZmxhZ25hbWVbal0gPzogJiMzNDtVTktOT1dOJiMzNDspOwomIzQzOwkJCQlmaXJzdCA9IGZhbHNlOwogCQkJfQotCQkJaWYgKGogPT0gY291bnQpCi0JCQkJc2VxX3ByaW50ZihtLCAmIzM0OyVzXG4mIzM0OywgJiMzNDtVTktOT1dOJiMzNDspOwomIzQzOwkJCWlmIChmaXJzdCkKJiM0MzsJCQkJc2VxX3B1dHMobSwgJiMzNDtVTktOT1dOJiMzNDspOwomIzQzOwkJCXNlcV9wdXRjKG0sICYjMzk7XG4mIzM5Oyk7CiAJCX0gZWxzZSB7CiAJCQlzZXFfcHJpbnRmKG0sICYjMzQ7JXNcbiYjMzQ7LCAmIzM0O05PTkUmIzM0Oyk7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbWJsb2NrIERlYnVnZnMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG1tL21lbWJsb2NrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBtZW1ibG9ja19kZWJ1Z19zaG93YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCBkZWJ1Z2ZzLCBJIHNlZS4mIzM0OyBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBhIG5ldyBmbGFnLCBgTUVNQkxPQ0tfUlNSVl9IVUdFVExCYCwgdG8gdGhlIGBmbGFnbmFtZWAgYXJyYXksIHdoaWNoIGlzIGdvb2QuIFdlIG5lZWQgY29tcHJlaGVuc2l2ZSBmbGFnIHJlcHJlc2VudGF0aW9uLgoKVGhlIG1vcmUgc2lnbmlmaWNhbnQgY2hhbmdlLCBhbmQgcHJvYmFibHkgdGhlIHJlYXNvbiBmb3IgdGhpcyBwYXRjaCwgaXMgaG93IGZsYWdzIGFyZSBwcmludGVkIGluIHRoZSBgbWVtYmxvY2tfZGVidWdfc2hvd2Agb3V0cHV0LiBJdCYjMzk7cyBzd2l0Y2hpbmcgZnJvbSB0aGF0ICYjMzQ7Zmlyc3QgbWF0Y2ggYW5kIGJyZWFrJiMzNDsgYmVoYXZpb3IgdG8gcHJpbnRpbmcgKmFsbCogdGhlIG1hdGNoaW5nIGZsYWdzLCBzZXBhcmF0ZWQgYnkgYSBwaXBlIGB8YC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGltcHJvdmVtZW50LiBUaGUgcHJldmlvdXMgYmVoYXZpb3Igd2FzIGZydXN0cmF0aW5nIGFuZCBsaW1pdGVkLCBlc3BlY2lhbGx5IHdoZW4gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24uIFlvdSYjMzk7ZCBoYXZlIHRvIHRyYWNlIHRocm91Z2ggYW5kIGluZmVyIGEgYnVuY2ggb2YgaW5mb3JtYXRpb24hCgpTaW5jZSB0aGlzIGlzIGEgZGVidWdmcyBtb2RpZmljYXRpb24sIHRoZSBpbXBsaWNhdGlvbnMgYXJlIGNvbnRhaW5lZCB0byBkZWJ1ZyBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSB0aGUga2VybmVsLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYG1lbWJsb2NrX2RlYnVnX3Nob3dgIGlzIHVzZWQgZm9yIGRlYnVnZnMgb3V0cHV0LiBUaGVuIHdlIGNhbiBmdWxseSBhbmFseXplIHRoZSBlZmZlY3RzIG9mIHRoZSBwYXRjaCBvbiB0aGUgZGVidWcgaW5mb3JtYXRpb24gaXQgcHJvdmlkZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtYmxvY2tfZGVidWdfc2hvdyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1ibG9jay5jPTI4ODE9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnbmFtZVtdID0ge1xuLS1cbm1tL21lbWJsb2NrLmMtMjg5MS1cbm1tL21lbWJsb2NrLmM6Mjg5MjpzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxubW0vbWVtYmxvY2suYy0yODkzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIGBtZW1ibG9ja19kZWJ1Z19zaG93YCBVc2FnZSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgbWVtYmxvY2tfZGVidWdfc2hvd2AuIEkgY2FuJiMzOTt0IGp1c3QgZGl2ZSBpbiBhc3N1bWluZyBJIGtub3cgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMg4oCTIGJvdGggZGlyZWN0IGNhbGxzIGFuZCBhbnkgaW5kaXJlY3QgY2FsbHMgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIG1hY3Jvcy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aG9zZSB1c2VzIGlzIGNydWNpYWwuIElzIGl0IG9ubHkgdXNlZCBkdXJpbmcgZGVidWdnaW5nLCBvciBpcyBpdCBwcmVzZW50IGluIHByb2R1Y3Rpb24gY29kZSBwYXRocz8gVGhlIGltcGxpY2F0aW9ucyBhcmUgcXVpdGUgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB0aGUgYW5zd2VyLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQga2VybmVsIHN1YnN5c3RlbXMuIEtub3dpbmcgdGhlIHBsYWNlcyB3aGVyZSBpdCBpcyBjYWxsZWQgd2lsbCBsaWtlbHkgaW5mb3JtIG1lIG9uIHRoZSBvdmVyYWxsIGZ1bmN0aW9uIGFuZCBnb2FsIG9mIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1ibG9ja19kZWJ1Z19zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtYmxvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1ibG9jay5jPTI4ODE9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnbmFtZVtdID0ge1xuLS1cbm1tL21lbWJsb2NrLmMtMjg5MS1cbm1tL21lbWJsb2NrLmM6Mjg5MjpzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxubW0vbWVtYmxvY2suYy0yODkzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjMxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vbWVtYmxvY2suY2AqKgoKT2theSwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBtZW1ibG9jayBhbGxvY2F0b3IuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBtbS9tZW1ibG9jay5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgaXNzdWUgSSYjMzk7bSBkZWJ1Z2dpbmcgaXMgaW4gaG93IHRoZSBtZW1vcnkgYmxvY2sgbWFuYWdlbWVudCBpcyBzZXQgdXAsIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBoYXBwZW5zLiBCYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGlzIGNvZGUsIGEgZ29vZCBwbGFjZSB0byBzdGFydCBpcyBhcm91bmQgbGluZSAyODkyLiBJJiMzOTtsbCBmb2N1cyBteSBpbml0aWFsIGV4YW1pbmF0aW9uIGFyb3VuZCB0aGF0IGFyZWEsIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmdW5jdGlvbiBpcyB1c2VkIGluIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWJsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODkwOlx0fTtcbjI4OTE6XHRcbjI4OTI6XHRzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxuMjg5MzpcdHtcbjI4OTQ6XHRcdHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlID0gbS1cdTAwM2Vwcml2YXRlO1xuMjg5NTpcdFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmVnO1xuMjg5NjpcdFx0aW50IGksIGosIG5pZDtcbjI4OTc6XHRcdHVuc2lnbmVkIGludCBjb3VudCA9IEFSUkFZX1NJWkUoZmxhZ25hbWUpO1xuMjg5ODpcdFx0cGh5c19hZGRyX3QgZW5kO1xuMjg5OTpcdFx0Ym9vbCBmaXJzdDtcbjI5MDA6XHRcbjI5MDE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR5cGUtXHUwMDNlY250OyBpJiM0MzsmIzQzOykge1xuMjkwMjpcdFx0XHRyZWcgPSBcdTAwMjZ0eXBlLVx1MDAzZXJlZ2lvbnNbaV07XG4yOTAzOlx0XHRcdGVuZCA9IHJlZy1cdTAwM2ViYXNlICYjNDM7IHJlZy1cdTAwM2VzaXplIC0gMTtcbjI5MDQ6XHRcdFx0bmlkID0gbWVtYmxvY2tfZ2V0X3JlZ2lvbl9ub2RlKHJlZyk7XG4yOTA1Olx0XG4yOTA2Olx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JTRkOiBcJiMzNDssIGkpO1xuMjkwNzpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyVwYS4uJXBhIFwmIzM0OywgXHUwMDI2cmVnLVx1MDAzZWJhc2UsIFx1MDAyNmVuZCk7XG4yOTA4Olx0XHRcdGlmIChudW1hX3ZhbGlkX25vZGUobmlkKSlcbjI5MDk6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU0ZCBcJiMzNDssIG5pZCk7XG4yOTEwOlx0XHRcdGVsc2VcbjI5MTE6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyU0YyBcJiMzNDssICYjMzk7eCYjMzk7KTtcbjI5MTI6XHRcdFx0aWYgKHJlZy1cdTAwM2VmbGFncykge1xuMjkxMzpcdFx0XHRcdGZpcnN0ID0gdHJ1ZTtcbjI5MTQ6XHRcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBjb3VudDsgaiYjNDM7JiM0MzspIHtcbjI5MTU6XHRcdFx0XHRcdGlmICghKHJlZy1cdTAwM2VmbGFncyBcdTAwMjYgKDFVIFx1MDAzY1x1MDAzYyBqKSkpXG4yOTE2Olx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjkxNzpcdFx0XHRcdFx0aWYgKCFmaXJzdClcbjI5MTg6XHRcdFx0XHRcdFx0c2VxX3B1dGMobSwgJiMzOTt8JiMzOTspO1xuMjkxOTpcdFx0XHRcdFx0c2VxX3B1dHMobSwgZmxhZ25hbWVbal0gPzogXCYjMzQ7VU5LTk9XTlwmIzM0Oyk7XG4yOTIwOlx0XHRcdFx0XHRmaXJzdCA9IGZhbHNlO1xuMjkyMTpcdFx0XHRcdH1cbjI5MjI6XHRcdFx0XHRpZiAoZmlyc3QpXG4yOTIzOlx0XHRcdFx0XHRzZXFfcHV0cyhtLCBcJiMzNDtVTktOT1dOXCYjMzQ7KTtcbjI5MjQ6XHRcdFx0XHRzZXFfcHV0YyhtLCAmIzM5O1xcbiYjMzk7KTtcbjI5MjU6XHRcdFx0fSBlbHNlIHtcbjI5MjY6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyVzXFxuXCYjMzQ7LCBcJiMzNDtOT05FXCYjMzQ7KTtcbjI5Mjc6XHRcdFx0fVxuMjkyODpcdFx0fVxuMjkyOTpcdFx0cmV0dXJuIDA7XG4yOTMwOlx0fVxuMjkzMTpcdERFRklORV9TSE9XX0FUVFJJQlVURShtZW1ibG9ja19kZWJ1Zyk7XG4yOTMyOlx0XG4yOTMzOlx0c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX2RlYnVnZnNfZXhwb3NlX2FycmF5cyhzdHJ1Y3QgZGVudHJ5ICpyb290KVxuMjkzNDpcdHtcbjI5MzU6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7bWVtb3J5XCYjMzQ7LCAwNDQ0LCByb290LFxuMjkzNjpcdFx0XHRcdCAgICBcdTAwMjZtZW1ibG9jay5tZW1vcnksIFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xuMjkzNzpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtyZXNlcnZlZFwmIzM0OywgMDQ0NCwgcm9vdCxcbjI5Mzg6XHRcdFx0XHQgICAgXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQsIFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xuMjkzOTpcdCNpZmRlZiBDT05GSUdfSEFWRV9NRU1CTE9DS19QSFlTX01BUFxuMjk0MDpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtwaHlzbWVtXCYjMzQ7LCAwNDQ0LCByb290LCBcdTAwMjZwaHlzbWVtLFxuMjk0MTpcdFx0XHRcdCAgICBcdTAwMjZtZW1ibG9ja19kZWJ1Z19mb3BzKTtcbjI5NDI6XHQjZW5kaWZcbjI5NDM6XHR9XG4yOTQ0Olx0XG4yOTQ1Olx0I2Vsc2VcbjI5NDY6XHRcbjI5NDc6XHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtYmxvY2tfZGVidWdmc19leHBvc2VfYXJyYXlzKHN0cnVjdCBkZW50cnkgKnJvb3QpIHsgfVxuMjk0ODpcdFxuMjk0OTpcdCNlbmRpZiAvKiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLICovXG4yOTUwOlx0XG4yOTUxOlx0c3RhdGljIGludCBtZW1ibG9ja19yZXNlcnZlX21lbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcbjI5NTI6XHR7XG4yOTUzOlx0XHRzdHJ1Y3QgcmVzZXJ2ZV9tZW1fdGFibGUgKm1hcDtcbjI5NTQ6XHRcdGNoYXIgdHh0c3pbMTZdO1xuMjk1NTpcdFxuMjk1NjpcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNnJlc2VydmVfbWVtX2xvY2spO1xuMjk1NzpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHJlc2VydmVkX21lbV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbjI5NTg6XHRcdFx0bWFwID0gXHUwMDI2cmVzZXJ2ZWRfbWVtX3RhYmxlW2ldO1xuMjk1OTpcdFx0XHRpZiAoIW1hcC1cdTAwM2VzaXplKVxuMjk2MDpcdFx0XHRcdGNvbnRpbnVlO1xuMjk2MTpcdFxuMjk2MjpcdFx0XHRtZW1zZXQodHh0c3osIDAsIHNpemVvZih0eHRzeikpO1xuMjk2MzpcdFx0XHRzdHJpbmdfZ2V0X3NpemUobWFwLVx1MDAzZXNpemUsIDEsIFNUUklOR19VTklUU18yLCB0eHRzeiwgc2l6ZW9mKHR4dHN6KSk7XG4yOTY0Olx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7JXNcXHRcXHQoJXMpXFxuXCYjMzQ7LCBtYXAtXHUwMDNlbmFtZSwgdHh0c3opO1xuMjk2NTpcdFx0fVxuMjk2NjpcdFxuMjk2NzpcdFx0cmV0dXJuIDA7XG4yOTY4Olx0fVxuMjk2OTpcdERFRklORV9TSE9XX0FUVFJJQlVURShtZW1ibG9ja19yZXNlcnZlX21lbSk7XG4yOTcwOlx0XG4yOTcxOlx0c3RhdGljIGludCBfX2luaXQgbWVtYmxvY2tfaW5pdF9kZWJ1Z2ZzKHZvaWQpXG4yOTcyOlx0e1xuMjk3MzpcdFx0c3RydWN0IGRlbnRyeSAqcm9vdDtcbjI5NzQ6XHRcbjI5NzU6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLKSBcdTAwMjZcdTAwMjYgIXJlc2VydmVkX21lbV9jb3VudClcbjI5NzY6XHRcdFx0cmV0dXJuIDA7XG4yOTc3Olx0XG4yOTc4Olx0XHRyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKFwmIzM0O21lbWJsb2NrXCYjMzQ7LCBOVUxMKTtcbjI5Nzk6XHRcbjI5ODA6XHRcdGlmIChyZXNlcnZlZF9tZW1fY291bnQpXG4yOTgxOlx0XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cmVzZXJ2ZV9tZW1fcGFyYW1cJiMzNDssIDA0NDQsIHJvb3QsIE5VTEwsXG4yOTgyOlx0XHRcdFx0XHQgICAgXHUwMDI2bWVtYmxvY2tfcmVzZXJ2ZV9tZW1fZm9wcyk7XG4yOTgzOlx0XG4yOTg0Olx0XHRtZW1ibG9ja19kZWJ1Z2ZzX2V4cG9zZV9hcnJheXMocm9vdCk7XG4yOTg1Olx0XHRyZXR1cm4gMDtcbjI5ODY6XHR9XG4yOTg3Olx0X19pbml0Y2FsbChtZW1ibG9ja19pbml0X2RlYnVnZnMpO1xuMjk4ODpcdFxuMjk4OTpcdCNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQyCgkJCQkJCQlvdXRwdXQ6IDg0CgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1mYWxzZTogQSBEZWJ1Z2ZzIEZvcm1hdHRpbmcgVHdlYWsqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbWVtYmxvY2tfZGVidWdfc2hvd2AuIEkga25vdyB0aGF0IGZ1bmN0aW9uIOKAkyBpdCYjMzk7cyB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciBmb3JtYXR0aW5nIHRoZSBvdXRwdXQgb2YgdGhvc2UgZGVidWdmcyBmaWxlczogYG1lbW9yeWAsIGByZXNlcnZlZGAsIGFuZCBgcGh5c21lbWAgdW5kZXIgYC9zeXMva2VybmVsL2RlYnVnL21lbWJsb2NrL2AuIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBjb3NtZXRpYyBjaGFuZ2U7IGl0JiMzOTtzIGFsbCBhYm91dCBob3cgdGhlIGRhdGEgaXMgKnByZXNlbnRlZCosIG5vdCB0aGUgdW5kZXJseWluZyBkYXRhIGl0c2VsZiBvciBpdHMgcHJvY2Vzc2luZy4gVGhlIGNvZGUgaXNuJiMzOTt0IGNoYW5naW5nIGhvdyBtZW1vcnkgaXMgbWFuYWdlZCBvciBob3cgdGhlIHN5c3RlbSBiZWhhdmVzLgoKVGhlIHByb21wdCBpcyBwcmV0dHkgY2xlYXI6IGlmIHRoZSBwYXRjaCBpcyAqb25seSogYWJvdXQgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIG9yIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMgbGlrZSBsb2dnaW5nLCB0cmFjZXBvaW50cywgb3IgZXZlbiBqdXN0IGNvbnN0YW50cyB0aGF0IGRvbiYjMzk7dCBjaGFuZ2UgaG93IHRoZSBjb2RlICp3b3JrcyosIHRoZW4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEdpdmVuIHRoaXMgaXMganVzdCBhIHJlZm9ybWF0dGluZyBvZiBkZWJ1ZyBvdXRwdXQuLi4geWVhaCwgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzLiBJdCYjMzk7cyBhIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZS4gU28sIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYGZhbHNlYCBpbiB0aGlzIGNhc2UuIFNpbXBsZSBhcyB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIG91dHB1dCBmb3JtYXQgb2YgYSBkZWJ1Z2ZzIGZpbGUgKG1lbWJsb2NrX2RlYnVnX3Nob3cpIHRvIHByaW50IG11bHRpcGxlIGZsYWdzIHNlcGFyYXRlZCBieSAmIzM5O3wmIzM5OyBpbnN0ZWFkIG9mIGp1c3QgdGhlIGZpcnN0IG9uZS4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUga2VybmVsJiMzOTtzIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiBhIGRlYnVnZnMgZmlsZSAobWVtYmxvY2tfZGVidWdfc2hvdykgdG8gcHJpbnQgbXVsdGlwbGUgZmxhZ3Mgc2VwYXJhdGVkIGJ5ICYjMzk7fCYjMzk7IGluc3RlYWQgb2YganVzdCB0aGUgZmlyc3Qgb25lLiBUaGlzIGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBrZXJuZWwmIzM5O3MgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwODo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NDQ6MjEuNDYzMzgxMTIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4Mjc3MzIwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IG9mIGEgZGVidWdmcyBmaWxlIChtZW1ibG9ja19kZWJ1Z19zaG93KSB0byBwcmludCBtdWx0aXBsZSBmbGFncyBzZXBhcmF0ZWQgYnkgJ3wnIGluc3RlYWQgb2YganVzdCB0aGUgZmlyc3Qgb25lLiBUaGlzIGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBrZXJuZWwncyBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA4OjQ0OjIxLjQ2MzM5NDM3M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0OTAzNTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFlNTNkYThiZjJlY2Q3ZWU2N2RhNjY5YjhlNDc3ZWM0Zjc4MzI0OGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDg6NDQ6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmNcXG5pbmRleCA5Y2U4NjM0OWEyOWZhLi41ZDgwNmZlOTJjZDcxIDEwMDY0NFxcbi0tLSBhL21tL21lbWJsb2NrLmNcXG4rKysgYi9tbS9tZW1ibG9jay5jXFxuQEAgLTI4ODYsNiArMjg4Niw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcXG4gXFx0W2lsb2cyKE1FTUJMT0NLX1JTUlZfTk9JTklUKV0gPSBcXFwiUlNWX05JVFxcXCIsXFxuIFxcdFtpbG9nMihNRU1CTE9DS19SU1JWX0tFUk4pXSA9IFxcXCJSU1ZfS0VSTlxcXCIsXFxuIFxcdFtpbG9nMihNRU1CTE9DS19LSE9fU0NSQVRDSCldID0gXFxcIktIT19TQ1JBVENIXFxcIixcXG4rXFx0W2lsb2cyKE1FTUJMT0NLX1JTUlZfSFVHRVRMQildID0gXFxcIlJTVl9IVUdFVExCXFxcIixcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXFxuQEAgLTI4OTUsNiArMjg5Niw3IEBAIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXFxuIFxcdGludCBpLCBqLCBuaWQ7XFxuIFxcdHVuc2lnbmVkIGludCBjb3VudCA9IEFSUkFZX1NJWkUoZmxhZ25hbWUpO1xcbiBcXHRwaHlzX2FkZHJfdCBlbmQ7XFxuK1xcdGJvb2wgZmlyc3Q7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdHlwZS1cXHUwMDNlY250OyBpKyspIHtcXG4gXFx0XFx0cmVnID0gXFx1MDAyNnR5cGUtXFx1MDAzZXJlZ2lvbnNbaV07XFxuQEAgLTI5MDgsMTQgKzI5MTAsMTggQEAgc3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlNGMgXFxcIiwgJ3gnKTtcXG4gXFx0XFx0aWYgKHJlZy1cXHUwMDNlZmxhZ3MpIHtcXG4rXFx0XFx0XFx0Zmlyc3QgPSB0cnVlO1xcbiBcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgY291bnQ7IGorKykge1xcbi1cXHRcXHRcXHRcXHRpZiAocmVnLVxcdTAwM2VmbGFncyBcXHUwMDI2ICgxVSBcXHUwMDNjXFx1MDAzYyBqKSkge1xcbi1cXHRcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlc1xcXFxuXFxcIiwgZmxhZ25hbWVbal0pO1xcbi1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHRcXHRpZiAoIShyZWctXFx1MDAzZWZsYWdzIFxcdTAwMjYgKDFVIFxcdTAwM2NcXHUwMDNjIGopKSlcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdGlmICghZmlyc3QpXFxuK1xcdFxcdFxcdFxcdFxcdHNlcV9wdXRjKG0sICd8Jyk7XFxuK1xcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIGZsYWduYW1lW2pdID86IFxcXCJVTktOT1dOXFxcIik7XFxuK1xcdFxcdFxcdFxcdGZpcnN0ID0gZmFsc2U7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKGogPT0gY291bnQpXFxuLVxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiVzXFxcXG5cXFwiLCBcXFwiVU5LTk9XTlxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZmlyc3QpXFxuK1xcdFxcdFxcdFxcdHNlcV9wdXRzKG0sIFxcXCJVTktOT1dOXFxcIik7XFxuK1xcdFxcdFxcdHNlcV9wdXRjKG0sICdcXFxcbicpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlc1xcXFxuXFxcIiwgXFxcIk5PTkVcXFwiKTtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwODo0NDoyMi43MTM2NDM5NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODU3NzQ1MjM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiBhIGRlYnVnZnMgZmlsZSAobWVtYmxvY2tfZGVidWdfc2hvdykgdG8gcHJpbnQgbXVsdGlwbGUgZmxhZ3Mgc2VwYXJhdGVkIGJ5ICd8JyBpbnN0ZWFkIG9mIGp1c3QgdGhlIGZpcnN0IG9uZS4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZTUzZGE4YmYyZWNkN2VlNjdkYTY2OWI4ZTQ3N2VjNGY3ODMyNDhmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDg6NDQ6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suY1xuaW5kZXggOWNlODYzNDlhMjlmYS4uNWQ4MDZmZTkyY2Q3MSAxMDA2NDRcbi0tLSBhL21tL21lbWJsb2NrLmNcbisrKyBiL21tL21lbWJsb2NrLmNcbkBAIC0yODg2LDYgKzI4ODYsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYWduYW1lW10gPSB7XG4gXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9OT0lOSVQpXSA9IFwiUlNWX05JVFwiLFxuIFx0W2lsb2cyKE1FTUJMT0NLX1JTUlZfS0VSTildID0gXCJSU1ZfS0VSTlwiLFxuIFx0W2lsb2cyKE1FTUJMT0NLX0tIT19TQ1JBVENIKV0gPSBcIktIT19TQ1JBVENIXCIsXG4rXHRbaWxvZzIoTUVNQkxPQ0tfUlNSVl9IVUdFVExCKV0gPSBcIlJTVl9IVUdFVExCXCIsXG4gfTtcbiBcbiBzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxuQEAgLTI4OTUsNiArMjg5Niw3IEBAIHN0YXRpYyBpbnQgbWVtYmxvY2tfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXG4gXHRpbnQgaSwgaiwgbmlkO1xuIFx0dW5zaWduZWQgaW50IGNvdW50ID0gQVJSQVlfU0laRShmbGFnbmFtZSk7XG4gXHRwaHlzX2FkZHJfdCBlbmQ7XG4rXHRib29sIGZpcnN0O1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHlwZS1cdTAwM2VjbnQ7IGkrKykge1xuIFx0XHRyZWcgPSBcdTAwMjZ0eXBlLVx1MDAzZXJlZ2lvbnNbaV07XG5AQCAtMjkwOCwxNCArMjkxMCwxOCBAQCBzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxuIFx0XHRlbHNlXG4gXHRcdFx0c2VxX3ByaW50ZihtLCBcIiU0YyBcIiwgJ3gnKTtcbiBcdFx0aWYgKHJlZy1cdTAwM2VmbGFncykge1xuK1x0XHRcdGZpcnN0ID0gdHJ1ZTtcbiBcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBjb3VudDsgaisrKSB7XG4tXHRcdFx0XHRpZiAocmVnLVx1MDAzZWZsYWdzIFx1MDAyNiAoMVUgXHUwMDNjXHUwMDNjIGopKSB7XG4tXHRcdFx0XHRcdHNlcV9wcmludGYobSwgXCIlc1xcblwiLCBmbGFnbmFtZVtqXSk7XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuK1x0XHRcdFx0aWYgKCEocmVnLVx1MDAzZWZsYWdzIFx1MDAyNiAoMVUgXHUwMDNjXHUwMDNjIGopKSlcbitcdFx0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0XHRpZiAoIWZpcnN0KVxuK1x0XHRcdFx0XHRzZXFfcHV0YyhtLCAnfCcpO1xuK1x0XHRcdFx0c2VxX3B1dHMobSwgZmxhZ25hbWVbal0gPzogXCJVTktOT1dOXCIpO1xuK1x0XHRcdFx0Zmlyc3QgPSBmYWxzZTtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKGogPT0gY291bnQpXG4tXHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwiJXNcXG5cIiwgXCJVTktOT1dOXCIpO1xuK1x0XHRcdGlmIChmaXJzdClcbitcdFx0XHRcdHNlcV9wdXRzKG0sIFwiVU5LTk9XTlwiKTtcbitcdFx0XHRzZXFfcHV0YyhtLCAnXFxuJyk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0c2VxX3ByaW50ZihtLCBcIiVzXFxuXCIsIFwiTk9ORVwiKTtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NDQ6MjIuNzEzNjQ2MjgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzODU3MjMwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWJsb2NrIERlYnVnZnMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbW0vbWVtYmxvY2suY2AsIHNwZWNpZmljYWxseSB0aGUgYG1lbWJsb2NrX2RlYnVnX3Nob3dgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIGRlYnVnZnMsIEkgc2VlLlwiIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBhZGRpbmcgYSBuZXcgZmxhZywgYE1FTUJMT0NLX1JTUlZfSFVHRVRMQmAsIHRvIHRoZSBgZmxhZ25hbWVgIGFycmF5LCB3aGljaCBpcyBnb29kLiBXZSBuZWVkIGNvbXByZWhlbnNpdmUgZmxhZyByZXByZXNlbnRhdGlvbi5cblxuVGhlIG1vcmUgc2lnbmlmaWNhbnQgY2hhbmdlLCBhbmQgcHJvYmFibHkgdGhlIHJlYXNvbiBmb3IgdGhpcyBwYXRjaCwgaXMgaG93IGZsYWdzIGFyZSBwcmludGVkIGluIHRoZSBgbWVtYmxvY2tfZGVidWdfc2hvd2Agb3V0cHV0LiBJdCdzIHN3aXRjaGluZyBmcm9tIHRoYXQgXCJmaXJzdCBtYXRjaCBhbmQgYnJlYWtcIiBiZWhhdmlvciB0byBwcmludGluZyAqYWxsKiB0aGUgbWF0Y2hpbmcgZmxhZ3MsIHNlcGFyYXRlZCBieSBhIHBpcGUgYHxgLiBUaGF0J3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudC4gVGhlIHByZXZpb3VzIGJlaGF2aW9yIHdhcyBmcnVzdHJhdGluZyBhbmQgbGltaXRlZCwgZXNwZWNpYWxseSB3aGVuIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uLiBZb3UnZCBoYXZlIHRvIHRyYWNlIHRocm91Z2ggYW5kIGluZmVyIGEgYnVuY2ggb2YgaW5mb3JtYXRpb24hXG5cblNpbmNlIHRoaXMgaXMgYSBkZWJ1Z2ZzIG1vZGlmaWNhdGlvbiwgdGhlIGltcGxpY2F0aW9ucyBhcmUgY29udGFpbmVkIHRvIGRlYnVnIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBrZXJuZWwuIExldCdzIG1ha2Ugc3VyZSB0aGF0IGBtZW1ibG9ja19kZWJ1Z19zaG93YCBpcyB1c2VkIGZvciBkZWJ1Z2ZzIG91dHB1dC4gVGhlbiB3ZSBjYW4gZnVsbHkgYW5hbHl6ZSB0aGUgZWZmZWN0cyBvZiB0aGUgcGF0Y2ggb24gdGhlIGRlYnVnIGluZm9ybWF0aW9uIGl0IHByb3ZpZGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDAwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NDQ6MjcuMjUyMjIxMjg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTQ3ODY1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtYmxvY2tfZGVidWdfc2hvd1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1ibG9jay5jPTI4ODE9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnbmFtZVtdID0ge1xcbi0tXFxubW0vbWVtYmxvY2suYy0yODkxLVxcbm1tL21lbWJsb2NrLmM6Mjg5MjpzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxcbm1tL21lbWJsb2NrLmMtMjg5My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA4OjQ0OjI5LjcwNzAxODkxM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjMzMzc2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBgbWVtYmxvY2tfZGVidWdfc2hvd2AgVXNhZ2UqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgbWVtYmxvY2tfZGVidWdfc2hvd2AuIEkgY2FuJ3QganVzdCBkaXZlIGluIGFzc3VtaW5nIEkga25vdyB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMg4oCTIGJvdGggZGlyZWN0IGNhbGxzIGFuZCBhbnkgaW5kaXJlY3QgY2FsbHMgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzIG9yIG1hY3Jvcy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aG9zZSB1c2VzIGlzIGNydWNpYWwuIElzIGl0IG9ubHkgdXNlZCBkdXJpbmcgZGVidWdnaW5nLCBvciBpcyBpdCBwcmVzZW50IGluIHByb2R1Y3Rpb24gY29kZSBwYXRocz8gVGhlIGltcGxpY2F0aW9ucyBhcmUgcXVpdGUgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB0aGUgYW5zd2VyLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIGFueSBvdGhlciByZWxldmFudCBrZXJuZWwgc3Vic3lzdGVtcy4gS25vd2luZyB0aGUgcGxhY2VzIHdoZXJlIGl0IGlzIGNhbGxlZCB3aWxsIGxpa2VseSBpbmZvcm0gbWUgb24gdGhlIG92ZXJhbGwgZnVuY3Rpb24gYW5kIGdvYWwgb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODkyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NDQ6MzIuODcwMzU4OTA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDMwOTM5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1ibG9ja19kZWJ1Z19zaG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWJsb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtYmxvY2suYz0yODgxPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhZ25hbWVbXSA9IHtcXG4tLVxcbm1tL21lbWJsb2NrLmMtMjg5MS1cXG5tbS9tZW1ibG9jay5jOjI4OTI6c3RhdGljIGludCBtZW1ibG9ja19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSlcXG5tbS9tZW1ibG9jay5jLTI4OTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwODo0NDozMy4zOTQ2NzQ3ODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY1NzY3NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9tZW1ibG9jay5jYCoqXG5cbk9rYXksIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgbWVtYmxvY2sgYWxsb2NhdG9yLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBtbS9tZW1ibG9jay5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGUgaXNzdWUgSSdtIGRlYnVnZ2luZyBpcyBpbiBob3cgdGhlIG1lbW9yeSBibG9jayBtYW5hZ2VtZW50IGlzIHNldCB1cCwgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGhhcHBlbnMuIEJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZSB3aXRoIHRoaXMgY29kZSwgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGlzIGFyb3VuZCBsaW5lIDI4OTIuIEknbGwgZm9jdXMgbXkgaW5pdGlhbCBleGFtaW5hdGlvbiBhcm91bmQgdGhhdCBhcmVhLCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZnVuY3Rpb24gaXMgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgb3ZlcmFsbCBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwODo0NDozNi42NjA0NDUyMjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtYmxvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODkwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjg5MDpcXHR9O1xcbjI4OTE6XFx0XFxuMjg5MjpcXHRzdGF0aWMgaW50IG1lbWJsb2NrX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKVxcbjI4OTM6XFx0e1xcbjI4OTQ6XFx0XFx0c3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUgPSBtLVxcdTAwM2Vwcml2YXRlO1xcbjI4OTU6XFx0XFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmVnO1xcbjI4OTY6XFx0XFx0aW50IGksIGosIG5pZDtcXG4yODk3OlxcdFxcdHVuc2lnbmVkIGludCBjb3VudCA9IEFSUkFZX1NJWkUoZmxhZ25hbWUpO1xcbjI4OTg6XFx0XFx0cGh5c19hZGRyX3QgZW5kO1xcbjI4OTk6XFx0XFx0Ym9vbCBmaXJzdDtcXG4yOTAwOlxcdFxcbjI5MDE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHR5cGUtXFx1MDAzZWNudDsgaSsrKSB7XFxuMjkwMjpcXHRcXHRcXHRyZWcgPSBcXHUwMDI2dHlwZS1cXHUwMDNlcmVnaW9uc1tpXTtcXG4yOTAzOlxcdFxcdFxcdGVuZCA9IHJlZy1cXHUwMDNlYmFzZSArIHJlZy1cXHUwMDNlc2l6ZSAtIDE7XFxuMjkwNDpcXHRcXHRcXHRuaWQgPSBtZW1ibG9ja19nZXRfcmVnaW9uX25vZGUocmVnKTtcXG4yOTA1OlxcdFxcbjI5MDY6XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTRkOiBcXFwiLCBpKTtcXG4yOTA3OlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiVwYS4uJXBhIFxcXCIsIFxcdTAwMjZyZWctXFx1MDAzZWJhc2UsIFxcdTAwMjZlbmQpO1xcbjI5MDg6XFx0XFx0XFx0aWYgKG51bWFfdmFsaWRfbm9kZShuaWQpKVxcbjI5MDk6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJTRkIFxcXCIsIG5pZCk7XFxuMjkxMDpcXHRcXHRcXHRlbHNlXFxuMjkxMTpcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIlNGMgXFxcIiwgJ3gnKTtcXG4yOTEyOlxcdFxcdFxcdGlmIChyZWctXFx1MDAzZWZsYWdzKSB7XFxuMjkxMzpcXHRcXHRcXHRcXHRmaXJzdCA9IHRydWU7XFxuMjkxNDpcXHRcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgY291bnQ7IGorKykge1xcbjI5MTU6XFx0XFx0XFx0XFx0XFx0aWYgKCEocmVnLVxcdTAwM2VmbGFncyBcXHUwMDI2ICgxVSBcXHUwMDNjXFx1MDAzYyBqKSkpXFxuMjkxNjpcXHRcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yOTE3OlxcdFxcdFxcdFxcdFxcdGlmICghZmlyc3QpXFxuMjkxODpcXHRcXHRcXHRcXHRcXHRcXHRzZXFfcHV0YyhtLCAnfCcpO1xcbjI5MTk6XFx0XFx0XFx0XFx0XFx0c2VxX3B1dHMobSwgZmxhZ25hbWVbal0gPzogXFxcIlVOS05PV05cXFwiKTtcXG4yOTIwOlxcdFxcdFxcdFxcdFxcdGZpcnN0ID0gZmFsc2U7XFxuMjkyMTpcXHRcXHRcXHRcXHR9XFxuMjkyMjpcXHRcXHRcXHRcXHRpZiAoZmlyc3QpXFxuMjkyMzpcXHRcXHRcXHRcXHRcXHRzZXFfcHV0cyhtLCBcXFwiVU5LTk9XTlxcXCIpO1xcbjI5MjQ6XFx0XFx0XFx0XFx0c2VxX3B1dGMobSwgJ1xcXFxuJyk7XFxuMjkyNTpcXHRcXHRcXHR9IGVsc2Uge1xcbjI5MjY6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJXNcXFxcblxcXCIsIFxcXCJOT05FXFxcIik7XFxuMjkyNzpcXHRcXHRcXHR9XFxuMjkyODpcXHRcXHR9XFxuMjkyOTpcXHRcXHRyZXR1cm4gMDtcXG4yOTMwOlxcdH1cXG4yOTMxOlxcdERFRklORV9TSE9XX0FUVFJJQlVURShtZW1ibG9ja19kZWJ1Zyk7XFxuMjkzMjpcXHRcXG4yOTMzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19kZWJ1Z2ZzX2V4cG9zZV9hcnJheXMoc3RydWN0IGRlbnRyeSAqcm9vdClcXG4yOTM0OlxcdHtcXG4yOTM1OlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcIm1lbW9yeVxcXCIsIDA0NDQsIHJvb3QsXFxuMjkzNjpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm1lbWJsb2NrLm1lbW9yeSwgXFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xcbjI5Mzc6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwicmVzZXJ2ZWRcXFwiLCAwNDQ0LCByb290LFxcbjI5Mzg6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZtZW1ibG9jay5yZXNlcnZlZCwgXFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xcbjI5Mzk6XFx0I2lmZGVmIENPTkZJR19IQVZFX01FTUJMT0NLX1BIWVNfTUFQXFxuMjk0MDpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJwaHlzbWVtXFxcIiwgMDQ0NCwgcm9vdCwgXFx1MDAyNnBoeXNtZW0sXFxuMjk0MTpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm1lbWJsb2NrX2RlYnVnX2ZvcHMpO1xcbjI5NDI6XFx0I2VuZGlmXFxuMjk0MzpcXHR9XFxuMjk0NDpcXHRcXG4yOTQ1OlxcdCNlbHNlXFxuMjk0NjpcXHRcXG4yOTQ3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19kZWJ1Z2ZzX2V4cG9zZV9hcnJheXMoc3RydWN0IGRlbnRyeSAqcm9vdCkgeyB9XFxuMjk0ODpcXHRcXG4yOTQ5OlxcdCNlbmRpZiAvKiBDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLICovXFxuMjk1MDpcXHRcXG4yOTUxOlxcdHN0YXRpYyBpbnQgbWVtYmxvY2tfcmVzZXJ2ZV9tZW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpXFxuMjk1MjpcXHR7XFxuMjk1MzpcXHRcXHRzdHJ1Y3QgcmVzZXJ2ZV9tZW1fdGFibGUgKm1hcDtcXG4yOTU0OlxcdFxcdGNoYXIgdHh0c3pbMTZdO1xcbjI5NTU6XFx0XFxuMjk1NjpcXHRcXHRndWFyZChtdXRleCkoXFx1MDAyNnJlc2VydmVfbWVtX2xvY2spO1xcbjI5NTc6XFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyByZXNlcnZlZF9tZW1fY291bnQ7IGkrKykge1xcbjI5NTg6XFx0XFx0XFx0bWFwID0gXFx1MDAyNnJlc2VydmVkX21lbV90YWJsZVtpXTtcXG4yOTU5OlxcdFxcdFxcdGlmICghbWFwLVxcdTAwM2VzaXplKVxcbjI5NjA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjk2MTpcXHRcXG4yOTYyOlxcdFxcdFxcdG1lbXNldCh0eHRzeiwgMCwgc2l6ZW9mKHR4dHN6KSk7XFxuMjk2MzpcXHRcXHRcXHRzdHJpbmdfZ2V0X3NpemUobWFwLVxcdTAwM2VzaXplLCAxLCBTVFJJTkdfVU5JVFNfMiwgdHh0c3osIHNpemVvZih0eHRzeikpO1xcbjI5NjQ6XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJXNcXFxcdFxcXFx0KCVzKVxcXFxuXFxcIiwgbWFwLVxcdTAwM2VuYW1lLCB0eHRzeik7XFxuMjk2NTpcXHRcXHR9XFxuMjk2NjpcXHRcXG4yOTY3OlxcdFxcdHJldHVybiAwO1xcbjI5Njg6XFx0fVxcbjI5Njk6XFx0REVGSU5FX1NIT1dfQVRUUklCVVRFKG1lbWJsb2NrX3Jlc2VydmVfbWVtKTtcXG4yOTcwOlxcdFxcbjI5NzE6XFx0c3RhdGljIGludCBfX2luaXQgbWVtYmxvY2tfaW5pdF9kZWJ1Z2ZzKHZvaWQpXFxuMjk3MjpcXHR7XFxuMjk3MzpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xcbjI5NzQ6XFx0XFxuMjk3NTpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfS0VFUF9NRU1CTE9DSykgXFx1MDAyNlxcdTAwMjYgIXJlc2VydmVkX21lbV9jb3VudClcXG4yOTc2OlxcdFxcdFxcdHJldHVybiAwO1xcbjI5Nzc6XFx0XFxuMjk3ODpcXHRcXHRyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKFxcXCJtZW1ibG9ja1xcXCIsIE5VTEwpO1xcbjI5Nzk6XFx0XFxuMjk4MDpcXHRcXHRpZiAocmVzZXJ2ZWRfbWVtX2NvdW50KVxcbjI5ODE6XFx0XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwicmVzZXJ2ZV9tZW1fcGFyYW1cXFwiLCAwNDQ0LCByb290LCBOVUxMLFxcbjI5ODI6XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZtZW1ibG9ja19yZXNlcnZlX21lbV9mb3BzKTtcXG4yOTgzOlxcdFxcbjI5ODQ6XFx0XFx0bWVtYmxvY2tfZGVidWdmc19leHBvc2VfYXJyYXlzKHJvb3QpO1xcbjI5ODU6XFx0XFx0cmV0dXJuIDA7XFxuMjk4NjpcXHR9XFxuMjk4NzpcXHRfX2luaXRjYWxsKG1lbWJsb2NrX2luaXRfZGVidWdmcyk7XFxuMjk4ODpcXHRcXG4yOTg5OlxcdCNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NDQ6MzYuNjYwNjIwNTUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMDQ0NDg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IEEgRGVidWdmcyBGb3JtYXR0aW5nIFR3ZWFrKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbWVtYmxvY2tfZGVidWdfc2hvd2AuIEkga25vdyB0aGF0IGZ1bmN0aW9uIOKAkyBpdCdzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGZvcm1hdHRpbmcgdGhlIG91dHB1dCBvZiB0aG9zZSBkZWJ1Z2ZzIGZpbGVzOiBgbWVtb3J5YCwgYHJlc2VydmVkYCwgYW5kIGBwaHlzbWVtYCB1bmRlciBgL3N5cy9rZXJuZWwvZGVidWcvbWVtYmxvY2svYC4gVGhpcyBpcyBlc3NlbnRpYWxseSBhIGNvc21ldGljIGNoYW5nZTsgaXQncyBhbGwgYWJvdXQgaG93IHRoZSBkYXRhIGlzICpwcmVzZW50ZWQqLCBub3QgdGhlIHVuZGVybHlpbmcgZGF0YSBpdHNlbGYgb3IgaXRzIHByb2Nlc3NpbmcuIFRoZSBjb2RlIGlzbid0IGNoYW5naW5nIGhvdyBtZW1vcnkgaXMgbWFuYWdlZCBvciBob3cgdGhlIHN5c3RlbSBiZWhhdmVzLlxuXG5UaGUgcHJvbXB0IGlzIHByZXR0eSBjbGVhcjogaWYgdGhlIHBhdGNoIGlzICpvbmx5KiBhYm91dCBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGZpbGVzLCBjb21tZW50cywgb3IgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIHRyYWNlcG9pbnRzLCBvciBldmVuIGp1c3QgY29uc3RhbnRzIHRoYXQgZG9uJ3QgY2hhbmdlIGhvdyB0aGUgY29kZSAqd29ya3MqLCB0aGVuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBHaXZlbiB0aGlzIGlzIGp1c3QgYSByZWZvcm1hdHRpbmcgb2YgZGVidWcgb3V0cHV0Li4uIHllYWgsIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4gSXQncyBhIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZS4gU28sIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYGZhbHNlYCBpbiB0aGlzIGNhc2UuIFNpbXBsZSBhcyB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTQyLCJPdXRwdXRUb2tlbnMiOjg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDg6NDQ6NDEuMjkxMDY4MzIyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgb3V0cHV0IGZvcm1hdCBvZiBhIGRlYnVnZnMgZmlsZSAobWVtYmxvY2tfZGVidWdfc2hvdykgdG8gcHJpbnQgbXVsdGlwbGUgZmxhZ3Mgc2VwYXJhdGVkIGJ5ICd8JyBpbnN0ZWFkIG9mIGp1c3QgdGhlIGZpcnN0IG9uZS4gVGhpcyBpcyBhIHB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZSB0aGF0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IG9mIGEgZGVidWdmcyBmaWxlIChtZW1ibG9ja19kZWJ1Z19zaG93KSB0byBwcmludCBtdWx0aXBsZSBmbGFncyBzZXBhcmF0ZWQgYnkgJ3wnIGluc3RlYWQgb2YganVzdCB0aGUgZmlyc3Qgb25lLiBUaGlzIGlzIGEgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlIHRoYXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBrZXJuZWwncyBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA4OjQ0OjQxLjI5MTA5ODM5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4vrlg[1] Phase: Running StartedAt: 2026-08-19 08:44:52 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4vrlg[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-19 08:44:52 +0000 UTC FinishedAt: 2026-08-19 08:44:56 +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,}