Name: series-workflownsvss Phase: Failed StartedAt: 2026-07-30 12:59:15 +0000 UTC FinishedAt: 2026-07-30 13:18:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsvss[0] Phase: Succeeded StartedAt: 2026-07-30 12:59:15 +0000 UTC FinishedAt: 2026-07-30 13:18:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsvss[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 12:59:15 +0000 UTC FinishedAt: 2026-07-30 13:18:40 +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+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gpIGJ5IGFkZGluZyBhbiBTQ1RQIHRlc3QgYW5kIHJlbGF0ZWQgcGFyc2luZyBsb2dpYy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTFiNmRkNTFmZjJhYjI0ODk5OTJjNWFhM2FkMTY1YjYyNzQ4OWJhMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDEzOjE4OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuaW5kZXggODUzZGJjMWIwMGQ3YS4uYjQ0ODMyNDUyN2Q4YiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXG5AQCAtMzQsNiAmIzQzOzM0LDcgQEAgdGVzdHM9XCYjMzQ7XG4gXHRhY3Rpb25fc2V0XHRcdFx0XHRzZXQ6IFNFVCBhY3Rpb24gcmV3cml0ZXMgZmllbGRzXG4gXHR0cnVuY1x0XHRcdFx0XHR0cnVuYzogb3V0cHV0IHRydW5jYXRpb25cbiBcdGljbXB2Nlx0XHRcdFx0XHRpY21wdjY6IElDTVB2NiBlY2hvIHR5cGUgbWF0Y2hcbiYjNDM7XHRzY3RwX2Nvbm5lY3RfdjRcdFx0XHRcdHNjdHA6IFNDVFAgZmxvdyBrZXkgbWF0Y2hpbmdcbiBcdHBzYW1wbGVcdFx0XHRcdFx0cHNhbXBsZTogU2FtcGxpbmcgcGFja2V0cyB3aXRoIHBzYW1wbGVcJiMzNDtcbiBcbiBpbmZvKCkge1xuQEAgLTYxMSw2ICYjNDM7NjEyLDEyNiBAQCB0ZXN0X2ljbXB2NigpIHtcbiBcdHJldHVybiAwXG4gfVxuIFxuJiM0MzsjIENoZWNrIGZvciBhbiBTQ1RQIGVuZHBvaW50IHZpYSAvcHJvYywgd2hpY2ggd29ya3Mgd2l0aG91dCBzY3RwX2RpYWcuXG4mIzQzO3NjdHBfZXBzX2hhcygpIHtcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyQxXCYjMzQ7IGF3ayAtdiBwPVwmIzM0OyQyXCYjMzQ7ICYjMzk7JDY9PXAmIzM5OyAvcHJvYy9uZXQvc2N0cC9lcHMgfCBncmVwIC1xIC5cbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBzY3RwX2Nvbm5lY3RfdjQgdGVzdFxuJiM0MzsjIC0gc2N0cChkc3Q9NDQ0MykgbWF0Y2hlcyBjbGllbnQtdG8tc2VydmVyIElOSVRcbiYjNDM7IyAtIHNjdHAoc3JjPTQ0NDMpIG1hdGNoZXMgc2VydmVyLXRvLWNsaWVudCBJTklULUFDS1xuJiM0MzsjIC0gcmVtb3ZlIGZsb3dzIGFuZCB2ZXJpZnkgY29ubmVjdGlvbiBmYWlscywgcmVpbnN0YWxsIGFuZCByZWNvdmVyXG4mIzQzO3Rlc3Rfc2N0cF9jb25uZWN0X3Y0KCkge1xuJiM0MztcdGxvY2FsIHQ9XCYjMzQ7dGVzdF9zY3RwX2Nvbm5lY3RfdjRcJiMzNDtcbiYjNDM7XHRsb2NhbCBzcnZfaXA9MTcyLjMxLjExMC4yMFxuJiM0MztcbiYjNDM7XHRtb2Rwcm9iZSAtcSBzY3RwIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7XHRzb2NhdCAtViAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXEgXCYjMzQ7ZGVmaW5lIFdJVEhfU0NUUFwmIzM0OyB8fCByZXR1cm4gXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztcbiYjNDM7XHRzYnhfYWRkIFwmIzM0OyR0XCYjMzQ7IHx8IHJldHVybiAkP1xuJiM0MztcdG92c19hZGRfZHAgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0aW5mbyBcJiMzNDtjcmVhdGUgbmFtZXNwYWNlc1wmIzM0O1xuJiM0MztcdGZvciBucyBpbiBjbGllbnQgc2VydmVyOyBkb1xuJiM0MztcdFx0b3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7c2N0cDRcJiMzNDsgXCYjMzQ7JG5zXCYjMzQ7IFxcXG4mIzQzO1x0XHQgICAgXCYjMzQ7JHtuczowOjF9MFwmIzM0OyBcJiMzNDske25zOjA6MX0xXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO1x0ZG9uZVxuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBhZGRyIGFkZCAxNzIuMzEuMTEwLjEwLzI0IGRldiBjMVxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGxpbmsgc2V0IGMxIHVwXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgYWRkciBhZGQgXCYjMzQ7JHtzcnZfaXB9LzI0XCYjMzQ7IGRldiBzMVxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwXG4mIzQzO1xuJiM0MztcdCMgUHJvYmU6IGNoZWNrIGlmIGtlcm5lbCBzdXBwb3J0cyBzY3RwIGZsb3cga2V5LlxuJiM0MztcdG92c19hZGRfZmxvdyBcJiMzNDskdFwmIzM0OyBzY3RwNCBcXFxuJiM0MztcdCAgICAmIzM5O2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MykmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzImIzM5OyBcdTAwMjZcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cbiYjNDM7XHRcdGluZm8gXCYjMzQ7bm8gc3VwcG9ydCBmb3Igc2N0cCBrZXkgLSBza2lwcGluZ1wmIzM0O1xuJiM0MztcdFx0b3ZzX2V4aXRfc2lnXG4mIzQzO1x0XHRyZXR1cm4gJGtzZnRfc2tpcFxuJiM0MztcdGZpXG4mIzQzO1x0b3ZzX2RlbF9mbG93cyBcJiMzNDskdFwmIzM0OyBzY3RwNFxuJiM0MztcbiYjNDM7XHQjIEFSUCBmb3J3YXJkaW5nXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCkmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzEmIzM5OyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHQjIFNDVFAgcG9ydCBtYXRjaGluZzogZHN0IGZvciByZXF1ZXN0LCBzcmMgZm9yIHJlcGx5XG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKSYjMzk7IFxcXG4mIzQzO1x0ICAgICYjMzk7MiYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKHNyYz00NDQzKSYjMzk7IFxcXG4mIzQzO1x0ICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7c2VydmVyXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxuJiM0MztcdGxvY2FsIHNlcnZlcl9waWQ9XCYjMzQ7JHBpZFwmIzM0O1xuJiM0MztcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRpbmZvIFwmIzM0O3ZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIHdpdGggcG9ydC1rZXllZCBmbG93c1wmIzM0O1xuJiM0MztcdG92c19zYnggXCYjMzQ7JHRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcJiMzNDsgXHUwMDNjL2Rldi9udWxsIFxcXG4mIzQzO1x0ICAgIHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdG92c19kZWxfZmxvd3MgXCYjMzQ7JHRcJiMzNDsgc2N0cDRcbiYjNDM7XG4mIzQzO1x0aW5mbyBcJiMzNDt2ZXJpZnkgY29ubmVjdGlvbiBmYWlscyB3aXRob3V0IGZsb3dzXCYjMzQ7XG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCkmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzEmIzM5OyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRraWxsIC1URVJNIFwmIzM0OyRzZXJ2ZXJfcGlkXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRsb2NhbCBpPTBcbiYjNDM7XHR3aGlsZSBraWxsIC0wIFwmIzM0OyRzZXJ2ZXJfcGlkXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JGlcJiMzNDsgLWx0IDUgXTsgZG9cbiYjNDM7XHQgICAgc2xlZXAgMC4yXG4mIzQzO1x0ICAgIGk9JCgoaSAmIzQzOyAxKSlcbiYjNDM7XHRkb25lXG4mIzQzO1x0b3ZzX25ldG5zX3NwYXduX2RhZW1vbiBcJiMzNDskdFwmIzM0OyBcJiMzNDtzZXJ2ZXJcJiMzNDsgXFxcbiYjNDM7XHQgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUXG4mIzQzO1x0c2VydmVyX3BpZD1cJiMzNDskcGlkXCYjMzQ7XG4mIzQzO1x0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdG92c19zYnggXCYjMzQ7JHRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcJiMzNDsgXHUwMDNjL2Rldi9udWxsIFxcXG4mIzQzO1x0ICAgIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcXFxuJiM0MztcdCAgICBcdTAwMjZcdTAwMjYgeyBpbmZvIFwmIzM0O2Nvbm5lY3Rpb24gc2hvdWxkIGZhaWwgd2l0aG91dCBmbG93c1wmIzM0O1xuJiM0MztcdCAgICAgICAgIHJldHVybiAxOyB9XG4mIzQzO1xuJiM0MztcdGluZm8gXCYjMzQ7cmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnlcJiMzNDtcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoZHN0PTQ0NDMpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoc3JjPTQ0NDMpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0a2lsbCAtVEVSTSBcJiMzNDskc2VydmVyX3BpZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0aT0wXG4mIzQzO1x0d2hpbGUga2lsbCAtMCBcJiMzNDskc2VydmVyX3BpZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyRpXCYjMzQ7IC1sdCA1IF07IGRvXG4mIzQzO1x0ICAgIHNsZWVwIDAuMlxuJiM0MztcdCAgICBpPSQoKGkgJiM0MzsgMSkpXG4mIzQzO1x0ZG9uZVxuJiM0MztcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7c2VydmVyXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxuJiM0MztcdHNlcnZlcl9waWQ9XCYjMzQ7JHBpZFwmIzM0O1xuJiM0MztcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRvdnNfc2J4IFwmIzM0OyR0XCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXG4mIzQzO1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcJiMzNDtTQ1RQNC1DT05ORUNUOiR7c3J2X2lwfTo0NDQzXCYjMzQ7IFx1MDAzYy9kZXYvbnVsbCBcXFxuJiM0MztcdCAgICB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMFxuJiM0Mzt9XG4mIzQzO1xuICMgcHNhbXBsZSB0ZXN0XG4gIyAtIHVzZSBwc2FtcGxlIHRvIG9ic2VydmUgcGFja2V0c1xuIHRlc3RfcHNhbXBsZSgpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weVxuaW5kZXggZjNlZGQxOTgyMjNmMS4uOTQ0MjkyYmY5MzQ5MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHlcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQCBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHN5c1xuIGltcG9ydCB0aW1lXG4gaW1wb3J0IHR5cGVzXG4mIzQzO2ltcG9ydCB1bml0dGVzdFxuIGltcG9ydCB1dWlkXG4gXG4gdHJ5OlxuQEAgLTE5ODQsNiAmIzQzOzE5ODUsMTEgQEAgY2xhc3Mgb3Zza2V5KG5sYSk6XG4gICAgICAgICAgICAgICAgIFwmIzM0O3VkcFwmIzM0OyxcbiAgICAgICAgICAgICAgICAgb3Zza2V5Lm92c19rZXlfdWRwLFxuICAgICAgICAgICAgICksXG4mIzQzOyAgICAgICAgICAgIChcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O09WU19LRVlfQVRUUl9TQ1RQXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7c2N0cFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIG92c2tleS5vdnNfa2V5X3NjdHAsXG4mIzQzOyAgICAgICAgICAgICksXG4gICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICBcJiMzNDtPVlNfS0VZX0FUVFJfSUNNUFwmIzM0OyxcbiAgICAgICAgICAgICAgICAgXCYjMzQ7aWNtcFwmIzM0OyxcbkBAIC0zMTY1LDUgJiM0MzszMTcxLDgxIEBAIGRlZiBtYWluKGFyZ3YpOlxuICAgICByZXR1cm4gMFxuIFxuIFxuJiM0MztkZWYgX2luaXRfb3Zza2V5X25sYXMoKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O0luaXRpYWxpemUgcmVxdWlyZWQgTkxBIGNsYXNzZXMgZm9yIG92c2tleSBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgbmxtc2dfYXRvbXMuZW5jYXBfb3Zza2V5ID0gZW5jYXBfb3Zza2V5XG4mIzQzOyAgICBubG1zZ19hdG9tcy5vdnNrZXkgPSBvdnNrZXlcbiYjNDM7ICAgIG5sbXNnX2F0b21zLm92c2FjdGlvbnMgPSBvdnNhY3Rpb25zXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9wYXJzZV9mbG93KGZsb3dzdHIpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UGFyc2UgYSBmbG93IHN0cmluZyBhbmQgcmV0dXJuIHRoZSBrZXkuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBrZXkgPSBvdnNrZXkoKVxuJiM0MzsgICAga2V5W1wmIzM0O2F0dHJzXCYjMzQ7XSA9IFtdXG4mIzQzOyAgICByZW1haW5kZXIgPSBrZXkucGFyc2UoZmxvd3N0cilcbiYjNDM7ICAgIGlmIHJlbWFpbmRlcjpcbiYjNDM7ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGZcJiMzNDt1bnBhcnNlZCByZW1haW5kZXI6IHtyZW1haW5kZXIhcn1cJiMzNDspXG4mIzQzOyAgICByZXR1cm4ga2V5XG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9maW5kX2F0dHIoa2V5LCBhdHRyX25hbWUpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7RmluZCBhbiBhdHRyaWJ1dGUgaW4gcGFyc2VkIGtleS5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIGZvciBhdHRyIGluIGtleVtcJiMzNDthdHRyc1wmIzM0O106XG4mIzQzOyAgICAgICAgaWYgYXR0clswXSA9PSBhdHRyX25hbWU6XG4mIzQzOyAgICAgICAgICAgIHJldHVybiBhdHRyWzFdXG4mIzQzOyAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7XG4mIzQzO2NsYXNzIFRlc3RPdnNLZXlQYXJzZSh1bml0dGVzdC5UZXN0Q2FzZSk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtVbml0IHRlc3RzIGZvciBvdnNrZXkucGFyc2UoKSBmbG93IHN0cmluZyBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIEBjbGFzc21ldGhvZFxuJiM0MzsgICAgZGVmIHNldFVwQ2xhc3MoY2xzKTpcbiYjNDM7ICAgICAgICBfaW5pdF9vdnNrZXlfbmxhcygpXG4mIzQzO1xuJiM0MzsgICAgZGVmIHRlc3Rfc2N0cF9kc3Qoc2VsZik6XG4mIzQzOyAgICAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGVzdCBTQ1RQIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcJiMzNDtzY3RwKGRzdD00NDQzKVwmIzM0OylcbiYjNDM7ICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXksIFwmIzM0O09WU19LRVlfQVRUUl9TQ1RQXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsIFwmIzM0O1NDVFAga2V5IG5vdCBmb3VuZFwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXCYjMzQ7ZHN0XCYjMzQ7XSwgNDQ0MylcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9zY3RwX3NyYyhzZWxmKTpcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtUZXN0IFNDVFAgc291cmNlIHBvcnQgcGFyc2luZy5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcJiMzNDtzY3RwKHNyYz00NDQzKVwmIzM0OylcbiYjNDM7ICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXksIFwmIzM0O09WU19LRVlfQVRUUl9TQ1RQXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsIFwmIzM0O1NDVFAga2V5IG5vdCBmb3VuZFwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXCYjMzQ7c3JjXCYjMzQ7XSwgNDQ0MylcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9zY3RwX3NyY19hbmRfZHN0KHNlbGYpOlxuJiM0MzsgICAgICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgU0NUUCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcJiMzNDtzY3RwKHNyYz0xMjM0LGRzdD01Njc4KVwmIzM0OylcbiYjNDM7ICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXksIFwmIzM0O09WU19LRVlfQVRUUl9TQ1RQXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsIFwmIzM0O1NDVFAga2V5IG5vdCBmb3VuZFwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXCYjMzQ7c3JjXCYjMzQ7XSwgMTIzNClcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXCYjMzQ7ZHN0XCYjMzQ7XSwgNTY3OClcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9zY3RwX3JvdW5kdHJpcChzZWxmKTpcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtUZXN0IHBhcnNlIC1cdTAwM2UgZHBzdHIgLVx1MDAzZSBwYXJzZSBrZWVwcyB0aGUgU0NUUCBrZXkuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXCYjMzQ7c2N0cChkc3Q9NDQ0MylcJiMzNDspXG4mIzQzOyAgICAgICAga2V5MiA9IG92c2tleSgpXG4mIzQzOyAgICAgICAga2V5MltcJiMzNDthdHRyc1wmIzM0O10gPSBbXVxuJiM0MzsgICAgICAgIHJlbWFpbmRlciA9IGtleTIucGFyc2Uoa2V5LmRwc3RyKCkpXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1haW5kZXIsIFwmIzM0O1wmIzM0OywgXCYjMzQ7cm91bmQtdHJpcCBsZWZ0IHVucGFyc2VkIHRleHRcJiMzNDspXG4mIzQzOyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5MiwgXCYjMzQ7T1ZTX0tFWV9BVFRSX1NDVFBcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCYjMzQ7U0NUUCBrZXkgbG9zdCBpbiByb3VuZC10cmlwXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtkc3RcJiMzNDtdLCA0NDQzKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiB0ZXN0X292c2tleV9wYXJzZSgpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGVzdCBvdnNrZXkucGFyc2UoKSBtZXRob2QgZm9yIHZhcmlvdXMgZmxvdyBrZXkgdHlwZXMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKS5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdE92c0tleVBhcnNlKVxuJiM0MzsgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIodmVyYm9zaXR5PTIpXG4mIzQzOyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKVxuJiM0MzsgICAgcmV0dXJuIDAgaWYgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSBlbHNlIDFcbiYjNDM7XG4mIzQzO1xuIGlmIF9fbmFtZV9fID09IFwmIzM0O19fbWFpbl9fXCYjMzQ7OlxuJiM0MzsgICAgaWYgbGVuKHN5cy5hcmd2KSBcdTAwM2UgMSBhbmQgc3lzLmFyZ3ZbMV0gPT0gXCYjMzQ7LS10ZXN0XCYjMzQ7OlxuJiM0MzsgICAgICAgIHN5cy5leGl0KHRlc3Rfb3Zza2V5X3BhcnNlKCkpXG4gICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoKSBieSBhZGRpbmcgYW4gU0NUUCB0ZXN0IGFuZCByZWxhdGVkIHBhcnNpbmcgbG9naWMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkxYjZkZDUxZmYyYWIyNDg5OTkyYzVhYTNhZDE2NWI2Mjc0ODliYTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAxMzoxODoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaAppbmRleCA4NTNkYmMxYjAwZDdhLi5iNDQ4MzI0NTI3ZDhiIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoCkBAIC0zNCw2ICYjNDM7MzQsNyBAQCB0ZXN0cz0mIzM0OwogCWFjdGlvbl9zZXQJCQkJc2V0OiBTRVQgYWN0aW9uIHJld3JpdGVzIGZpZWxkcwogCXRydW5jCQkJCQl0cnVuYzogb3V0cHV0IHRydW5jYXRpb24KIAlpY21wdjYJCQkJCWljbXB2NjogSUNNUHY2IGVjaG8gdHlwZSBtYXRjaAomIzQzOwlzY3RwX2Nvbm5lY3RfdjQJCQkJc2N0cDogU0NUUCBmbG93IGtleSBtYXRjaGluZwogCXBzYW1wbGUJCQkJCXBzYW1wbGU6IFNhbXBsaW5nIHBhY2tldHMgd2l0aCBwc2FtcGxlJiMzNDsKIAogaW5mbygpIHsKQEAgLTYxMSw2ICYjNDM7NjEyLDEyNiBAQCB0ZXN0X2ljbXB2NigpIHsKIAlyZXR1cm4gMAogfQogCiYjNDM7IyBDaGVjayBmb3IgYW4gU0NUUCBlbmRwb2ludCB2aWEgL3Byb2MsIHdoaWNoIHdvcmtzIHdpdGhvdXQgc2N0cF9kaWFnLgomIzQzO3NjdHBfZXBzX2hhcygpIHsKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyQxJiMzNDsgYXdrIC12IHA9JiMzNDskMiYjMzQ7ICYjMzk7JDY9PXAmIzM5OyAvcHJvYy9uZXQvc2N0cC9lcHMgfCBncmVwIC1xIC4KJiM0Mzt9CiYjNDM7CiYjNDM7IyBzY3RwX2Nvbm5lY3RfdjQgdGVzdAomIzQzOyMgLSBzY3RwKGRzdD00NDQzKSBtYXRjaGVzIGNsaWVudC10by1zZXJ2ZXIgSU5JVAomIzQzOyMgLSBzY3RwKHNyYz00NDQzKSBtYXRjaGVzIHNlcnZlci10by1jbGllbnQgSU5JVC1BQ0sKJiM0MzsjIC0gcmVtb3ZlIGZsb3dzIGFuZCB2ZXJpZnkgY29ubmVjdGlvbiBmYWlscywgcmVpbnN0YWxsIGFuZCByZWNvdmVyCiYjNDM7dGVzdF9zY3RwX2Nvbm5lY3RfdjQoKSB7CiYjNDM7CWxvY2FsIHQ9JiMzNDt0ZXN0X3NjdHBfY29ubmVjdF92NCYjMzQ7CiYjNDM7CWxvY2FsIHNydl9pcD0xNzIuMzEuMTEwLjIwCiYjNDM7CiYjNDM7CW1vZHByb2JlIC1xIHNjdHAgMiZndDsvZGV2L251bGwgfHwgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7CiYjNDM7CXNvY2F0IC1WIDImZ3Q7JmFtcDsxIHwgZ3JlcCAtcSAmIzM0O2RlZmluZSBXSVRIX1NDVFAmIzM0OyB8fCByZXR1cm4gJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MzsKJiM0MzsJc2J4X2FkZCAmIzM0OyR0JiMzNDsgfHwgcmV0dXJuICQ/CiYjNDM7CW92c19hZGRfZHAgJiMzNDskdCYjMzQ7IHNjdHA0IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CWluZm8gJiMzNDtjcmVhdGUgbmFtZXNwYWNlcyYjMzQ7CiYjNDM7CWZvciBucyBpbiBjbGllbnQgc2VydmVyOyBkbwomIzQzOwkJb3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgJiMzNDskdCYjMzQ7ICYjMzQ7c2N0cDQmIzM0OyAmIzM0OyRucyYjMzQ7IFwKJiM0MzsJCSAgICAmIzM0OyR7bnM6MDoxfTAmIzM0OyAmIzM0OyR7bnM6MDoxfTEmIzM0OyB8fCByZXR1cm4gMQomIzQzOwlkb25lCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMTAvMjQgZGV2IGMxCiYjNDM7CWlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGxpbmsgc2V0IGMxIHVwCiYjNDM7CWlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGFkZHIgYWRkICYjMzQ7JHtzcnZfaXB9LzI0JiMzNDsgZGV2IHMxCiYjNDM7CWlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwCiYjNDM7CiYjNDM7CSMgUHJvYmU6IGNoZWNrIGlmIGtlcm5lbCBzdXBwb3J0cyBzY3RwIGZsb3cga2V5LgomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MiYjMzk7ICZhbXA7Jmd0Oy9kZXYvbnVsbAomIzQzOwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KJiM0MzsJCWluZm8gJiMzNDtubyBzdXBwb3J0IGZvciBzY3RwIGtleSAtIHNraXBwaW5nJiMzNDsKJiM0MzsJCW92c19leGl0X3NpZwomIzQzOwkJcmV0dXJuICRrc2Z0X3NraXAKJiM0MzsJZmkKJiM0MzsJb3ZzX2RlbF9mbG93cyAmIzM0OyR0JiMzNDsgc2N0cDQKJiM0MzsKJiM0MzsJIyBBUlAgZm9yd2FyZGluZwomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsJb3ZzX2FkZF9mbG93ICYjMzQ7JHQmIzM0OyBzY3RwNCBcCiYjNDM7CSAgICAmIzM5O2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CSMgU0NUUCBwb3J0IG1hdGNoaW5nOiBkc3QgZm9yIHJlcXVlc3QsIHNyYyBmb3IgcmVwbHkKJiM0MzsJb3ZzX2FkZF9mbG93ICYjMzQ7JHQmIzM0OyBzY3RwNCBcCiYjNDM7CSAgICAmIzM5O2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MykmIzM5OyBcCiYjNDM7CSAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKHNyYz00NDQzKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19uZXRuc19zcGF3bl9kYWVtb24gJiMzNDskdCYjMzQ7ICYjMzQ7c2VydmVyJiMzNDsgXAomIzQzOwkgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUCiYjNDM7CWxvY2FsIHNlcnZlcl9waWQ9JiMzNDskcGlkJiMzNDsKJiM0MzsJb3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CWluZm8gJiMzNDt2ZXJpZnkgU0NUUCBhc3NvY2lhdGlvbiB3aXRoIHBvcnQta2V5ZWQgZmxvd3MmIzM0OwomIzQzOwlvdnNfc2J4ICYjMzQ7JHQmIzM0OyBpcCBuZXRucyBleGVjIGNsaWVudCBcCiYjNDM7CSAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gJiMzNDtTQ1RQNC1DT05ORUNUOiR7c3J2X2lwfTo0NDQzJiMzNDsgJmx0Oy9kZXYvbnVsbCBcCiYjNDM7CSAgICB8fCByZXR1cm4gMQomIzQzOwomIzQzOwlvdnNfZGVsX2Zsb3dzICYjMzQ7JHQmIzM0OyBzY3RwNAomIzQzOwomIzQzOwlpbmZvICYjMzQ7dmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMgd2l0aG91dCBmbG93cyYjMzQ7CiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDQgXAomIzQzOwkgICAgJiMzOTtpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCkmIzM5OyBcCiYjNDM7CSAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJa2lsbCAtVEVSTSAmIzM0OyRzZXJ2ZXJfcGlkJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJbG9jYWwgaT0wCiYjNDM7CXdoaWxlIGtpbGwgLTAgJiMzNDskc2VydmVyX3BpZCYjMzQ7IDImZ3Q7L2Rldi9udWxsICZhbXA7JmFtcDsgWyAmIzM0OyRpJiMzNDsgLWx0IDUgXTsgZG8KJiM0MzsJICAgIHNsZWVwIDAuMgomIzQzOwkgICAgaT0kKChpICYjNDM7IDEpKQomIzQzOwlkb25lCiYjNDM7CW92c19uZXRuc19zcGF3bl9kYWVtb24gJiMzNDskdCYjMzQ7ICYjMzQ7c2VydmVyJiMzNDsgXAomIzQzOwkgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUCiYjNDM7CXNlcnZlcl9waWQ9JiMzNDskcGlkJiMzNDsKJiM0MzsJb3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19zYnggJiMzNDskdCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFwKJiM0MzsJICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiAmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDMmIzM0OyAmbHQ7L2Rldi9udWxsIFwKJiM0MzsJICAgICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgXAomIzQzOwkgICAgJmFtcDsmYW1wOyB7IGluZm8gJiMzNDtjb25uZWN0aW9uIHNob3VsZCBmYWlsIHdpdGhvdXQgZmxvd3MmIzM0OwomIzQzOwkgICAgICAgICByZXR1cm4gMTsgfQomIzQzOwomIzQzOwlpbmZvICYjMzQ7cmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnkmIzM0OwomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MiYjMzk7IHx8IHJldHVybiAxCiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDQgXAomIzQzOwkgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoc3JjPTQ0NDMpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJa2lsbCAtVEVSTSAmIzM0OyRzZXJ2ZXJfcGlkJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJaT0wCiYjNDM7CXdoaWxlIGtpbGwgLTAgJiMzNDskc2VydmVyX3BpZCYjMzQ7IDImZ3Q7L2Rldi9udWxsICZhbXA7JmFtcDsgWyAmIzM0OyRpJiMzNDsgLWx0IDUgXTsgZG8KJiM0MzsJICAgIHNsZWVwIDAuMgomIzQzOwkgICAgaT0kKChpICYjNDM7IDEpKQomIzQzOwlkb25lCiYjNDM7CW92c19uZXRuc19zcGF3bl9kYWVtb24gJiMzNDskdCYjMzQ7ICYjMzQ7c2VydmVyJiMzNDsgXAomIzQzOwkgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUCiYjNDM7CXNlcnZlcl9waWQ9JiMzNDskcGlkJiMzNDsKJiM0MzsJb3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19zYnggJiMzNDskdCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFwKJiM0MzsJICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiAmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDMmIzM0OyAmbHQ7L2Rldi9udWxsIFwKJiM0MzsJICAgIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwogIyBwc2FtcGxlIHRlc3QKICMgLSB1c2UgcHNhbXBsZSB0byBvYnNlcnZlIHBhY2tldHMKIHRlc3RfcHNhbXBsZSgpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5CmluZGV4IGYzZWRkMTk4MjIzZjEuLjk0NDI5MmJmOTM0OTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weQpAQCAtMTUsNiAmIzQzOzE1LDcgQEAgaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCB0eXBlcwomIzQzO2ltcG9ydCB1bml0dGVzdAogaW1wb3J0IHV1aWQKIAogdHJ5OgpAQCAtMTk4NCw2ICYjNDM7MTk4NSwxMSBAQCBjbGFzcyBvdnNrZXkobmxhKToKICAgICAgICAgICAgICAgICAmIzM0O3VkcCYjMzQ7LAogICAgICAgICAgICAgICAgIG92c2tleS5vdnNfa2V5X3VkcCwKICAgICAgICAgICAgICksCiYjNDM7ICAgICAgICAgICAgKAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O09WU19LRVlfQVRUUl9TQ1RQJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7c2N0cCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICBvdnNrZXkub3ZzX2tleV9zY3RwLAomIzQzOyAgICAgICAgICAgICksCiAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgJiMzNDtPVlNfS0VZX0FUVFJfSUNNUCYjMzQ7LAogICAgICAgICAgICAgICAgICYjMzQ7aWNtcCYjMzQ7LApAQCAtMzE2NSw1ICYjNDM7MzE3MSw4MSBAQCBkZWYgbWFpbihhcmd2KToKICAgICByZXR1cm4gMAogCiAKJiM0MztkZWYgX2luaXRfb3Zza2V5X25sYXMoKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7SW5pdGlhbGl6ZSByZXF1aXJlZCBOTEEgY2xhc3NlcyBmb3Igb3Zza2V5IHBhcnNpbmcuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIG5sbXNnX2F0b21zLmVuY2FwX292c2tleSA9IGVuY2FwX292c2tleQomIzQzOyAgICBubG1zZ19hdG9tcy5vdnNrZXkgPSBvdnNrZXkKJiM0MzsgICAgbmxtc2dfYXRvbXMub3ZzYWN0aW9ucyA9IG92c2FjdGlvbnMKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3BhcnNlX2Zsb3coZmxvd3N0cik6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1BhcnNlIGEgZmxvdyBzdHJpbmcgYW5kIHJldHVybiB0aGUga2V5LiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBrZXkgPSBvdnNrZXkoKQomIzQzOyAgICBrZXlbJiMzNDthdHRycyYjMzQ7XSA9IFtdCiYjNDM7ICAgIHJlbWFpbmRlciA9IGtleS5wYXJzZShmbG93c3RyKQomIzQzOyAgICBpZiByZW1haW5kZXI6CiYjNDM7ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGYmIzM0O3VucGFyc2VkIHJlbWFpbmRlcjoge3JlbWFpbmRlciFyfSYjMzQ7KQomIzQzOyAgICByZXR1cm4ga2V5CiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9maW5kX2F0dHIoa2V5LCBhdHRyX25hbWUpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtGaW5kIGFuIGF0dHJpYnV0ZSBpbiBwYXJzZWQga2V5LiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBmb3IgYXR0ciBpbiBrZXlbJiMzNDthdHRycyYjMzQ7XToKJiM0MzsgICAgICAgIGlmIGF0dHJbMF0gPT0gYXR0cl9uYW1lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBhdHRyWzFdCiYjNDM7ICAgIHJldHVybiBOb25lCiYjNDM7CiYjNDM7CiYjNDM7Y2xhc3MgVGVzdE92c0tleVBhcnNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7VW5pdCB0ZXN0cyBmb3Igb3Zza2V5LnBhcnNlKCkgZmxvdyBzdHJpbmcgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgQGNsYXNzbWV0aG9kCiYjNDM7ICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CiYjNDM7ICAgICAgICBfaW5pdF9vdnNrZXlfbmxhcygpCiYjNDM7CiYjNDM7ICAgIGRlZiB0ZXN0X3NjdHBfZHN0KHNlbGYpOgomIzQzOyAgICAgICAgJiMzNDsmIzM0OyYjMzQ7VGVzdCBTQ1RQIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7c2N0cChkc3Q9NDQ0MykmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfU0NUUCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtTQ1RQIGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O2RzdCYjMzQ7XSwgNDQ0MykKJiM0MzsKJiM0MzsgICAgZGVmIHRlc3Rfc2N0cF9zcmMoc2VsZik6CiYjNDM7ICAgICAgICAmIzM0OyYjMzQ7JiMzNDtUZXN0IFNDVFAgc291cmNlIHBvcnQgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7c2N0cChzcmM9NDQ0MykmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfU0NUUCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtTQ1RQIGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O3NyYyYjMzQ7XSwgNDQ0MykKJiM0MzsKJiM0MzsgICAgZGVmIHRlc3Rfc2N0cF9zcmNfYW5kX2RzdChzZWxmKToKJiM0MzsgICAgICAgICYjMzQ7JiMzNDsmIzM0O1Rlc3QgU0NUUCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7c2N0cChzcmM9MTIzNCxkc3Q9NTY3OCkmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfU0NUUCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtTQ1RQIGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O3NyYyYjMzQ7XSwgMTIzNCkKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O2RzdCYjMzQ7XSwgNTY3OCkKJiM0MzsKJiM0MzsgICAgZGVmIHRlc3Rfc2N0cF9yb3VuZHRyaXAoc2VsZik6CiYjNDM7ICAgICAgICAmIzM0OyYjMzQ7JiMzNDtUZXN0IHBhcnNlIC0mZ3Q7IGRwc3RyIC0mZ3Q7IHBhcnNlIGtlZXBzIHRoZSBTQ1RQIGtleS4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7c2N0cChkc3Q9NDQ0MykmIzM0OykKJiM0MzsgICAgICAgIGtleTIgPSBvdnNrZXkoKQomIzQzOyAgICAgICAga2V5MlsmIzM0O2F0dHJzJiMzNDtdID0gW10KJiM0MzsgICAgICAgIHJlbWFpbmRlciA9IGtleTIucGFyc2Uoa2V5LmRwc3RyKCkpCiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbWFpbmRlciwgJiMzNDsmIzM0OywgJiMzNDtyb3VuZC10cmlwIGxlZnQgdW5wYXJzZWQgdGV4dCYjMzQ7KQomIzQzOyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5MiwgJiMzNDtPVlNfS0VZX0FUVFJfU0NUUCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtTQ1RQIGtleSBsb3N0IGluIHJvdW5kLXRyaXAmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O2RzdCYjMzQ7XSwgNDQ0MykKJiM0MzsKJiM0MzsKJiM0MztkZWYgdGVzdF9vdnNrZXlfcGFyc2UoKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7VGVzdCBvdnNrZXkucGFyc2UoKSBtZXRob2QgZm9yIHZhcmlvdXMgZmxvdyBrZXkgdHlwZXMuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdExvYWRlcigpLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0T3ZzS2V5UGFyc2UpCiYjNDM7ICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yKQomIzQzOyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKQomIzQzOyAgICByZXR1cm4gMCBpZiByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpIGVsc2UgMQomIzQzOwomIzQzOwogaWYgX19uYW1lX18gPT0gJiMzNDtfX21haW5fXyYjMzQ7OgomIzQzOyAgICBpZiBsZW4oc3lzLmFyZ3YpICZndDsgMSBhbmQgc3lzLmFyZ3ZbMV0gPT0gJiMzNDstLXRlc3QmIzM0OzoKJiM0MzsgICAgICAgIHN5cy5leGl0KHRlc3Rfb3Zza2V5X3BhcnNlKCkpCiAgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndikpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMjIKCQkJCQkJCW91dHB1dDogNzcKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggU2VsZnRlc3QgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weWAuICBFc3NlbnRpYWxseSwgaXQmIzM5O3MgaW50cm9kdWNpbmcgYSBuZXcgdGVzdCwgYHNjdHBfY29ubmVjdF92NGAsIGludG8gdGhlIE9wZW4gdlN3aXRjaCBzZWxmdGVzdHMsIGFuZCBiZWVmaW5nIHVwIHRoZSBQeXRob24gc2NyaXB0IHRvIGhhbmRsZSBTQ1RQIGZsb3cga2V5cy4gR29vZCwgZ29vZC4gIFB1cmVseSBzZWxmdGVzdCBzdHVmZi4gTm8ga2VybmVsIGNvcmUgbW9kaWZpY2F0aW9ucywgbm8gZHJpdmVyIGNoYW5nZXMsIGFuZCBub3RoaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoaXMgZG9lc24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBhbGwgdGhlIHBhdGNoIHRvdWNoZXMuIFllcCwgY29uZmlybWVkLiBPbmx5IHRob3NlIHR3byBmaWxlcy4gQWxsIHJpZ2h0LCBJJiMzOTttIHNhdGlzZmllZC4KCkkgd2lsbCBjb25maWRlbnRseSBtYXJrICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgYXMgZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoKSBieSBhZGRpbmcgYW4gU0NUUCB0ZXN0IGFuZCByZWxhdGVkIHBhcnNpbmcgbG9naWMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaCkgYnkgYWRkaW5nIGFuIFNDVFAgdGVzdCBhbmQgcmVsYXRlZCBwYXJzaW5nIGxvZ2ljLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxODoyMy4xODI4Mjk3MDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODkzMjI2NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoKSBieSBhZGRpbmcgYW4gU0NUUCB0ZXN0IGFuZCByZWxhdGVkIHBhcnNpbmcgbG9naWMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MTg6MjMuMTgyODM3MjIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjU4MTYyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5MWI2ZGQ1MWZmMmFiMjQ4OTk5MmM1YWEzYWQxNjViNjI3NDg5YmEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDEzOjE4OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxcbmluZGV4IDg1M2RiYzFiMDBkN2EuLmI0NDgzMjQ1MjdkOGIgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXFxuQEAgLTM0LDYgKzM0LDcgQEAgdGVzdHM9XFxcIlxcbiBcXHRhY3Rpb25fc2V0XFx0XFx0XFx0XFx0c2V0OiBTRVQgYWN0aW9uIHJld3JpdGVzIGZpZWxkc1xcbiBcXHR0cnVuY1xcdFxcdFxcdFxcdFxcdHRydW5jOiBvdXRwdXQgdHJ1bmNhdGlvblxcbiBcXHRpY21wdjZcXHRcXHRcXHRcXHRcXHRpY21wdjY6IElDTVB2NiBlY2hvIHR5cGUgbWF0Y2hcXG4rXFx0c2N0cF9jb25uZWN0X3Y0XFx0XFx0XFx0XFx0c2N0cDogU0NUUCBmbG93IGtleSBtYXRjaGluZ1xcbiBcXHRwc2FtcGxlXFx0XFx0XFx0XFx0XFx0cHNhbXBsZTogU2FtcGxpbmcgcGFja2V0cyB3aXRoIHBzYW1wbGVcXFwiXFxuIFxcbiBpbmZvKCkge1xcbkBAIC02MTEsNiArNjEyLDEyNiBAQCB0ZXN0X2ljbXB2NigpIHtcXG4gXFx0cmV0dXJuIDBcXG4gfVxcbiBcXG4rIyBDaGVjayBmb3IgYW4gU0NUUCBlbmRwb2ludCB2aWEgL3Byb2MsIHdoaWNoIHdvcmtzIHdpdGhvdXQgc2N0cF9kaWFnLlxcbitzY3RwX2Vwc19oYXMoKSB7XFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiQxXFxcIiBhd2sgLXYgcD1cXFwiJDJcXFwiICckNj09cCcgL3Byb2MvbmV0L3NjdHAvZXBzIHwgZ3JlcCAtcSAuXFxuK31cXG4rXFxuKyMgc2N0cF9jb25uZWN0X3Y0IHRlc3RcXG4rIyAtIHNjdHAoZHN0PTQ0NDMpIG1hdGNoZXMgY2xpZW50LXRvLXNlcnZlciBJTklUXFxuKyMgLSBzY3RwKHNyYz00NDQzKSBtYXRjaGVzIHNlcnZlci10by1jbGllbnQgSU5JVC1BQ0tcXG4rIyAtIHJlbW92ZSBmbG93cyBhbmQgdmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMsIHJlaW5zdGFsbCBhbmQgcmVjb3Zlclxcbit0ZXN0X3NjdHBfY29ubmVjdF92NCgpIHtcXG4rXFx0bG9jYWwgdD1cXFwidGVzdF9zY3RwX2Nvbm5lY3RfdjRcXFwiXFxuK1xcdGxvY2FsIHNydl9pcD0xNzIuMzEuMTEwLjIwXFxuK1xcbitcXHRtb2Rwcm9iZSAtcSBzY3RwIDJcXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0c29jYXQgLVYgMlxcdTAwM2VcXHUwMDI2MSB8IGdyZXAgLXEgXFxcImRlZmluZSBXSVRIX1NDVFBcXFwiIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFxuK1xcdHNieF9hZGQgXFxcIiR0XFxcIiB8fCByZXR1cm4gJD9cXG4rXFx0b3ZzX2FkZF9kcCBcXFwiJHRcXFwiIHNjdHA0IHx8IHJldHVybiAxXFxuK1xcbitcXHRpbmZvIFxcXCJjcmVhdGUgbmFtZXNwYWNlc1xcXCJcXG4rXFx0Zm9yIG5zIGluIGNsaWVudCBzZXJ2ZXI7IGRvXFxuK1xcdFxcdG92c19hZGRfbmV0bnNfYW5kX3ZldGhzIFxcXCIkdFxcXCIgXFxcInNjdHA0XFxcIiBcXFwiJG5zXFxcIiBcXFxcXFxuK1xcdFxcdCAgICBcXFwiJHtuczowOjF9MFxcXCIgXFxcIiR7bnM6MDoxfTFcXFwiIHx8IHJldHVybiAxXFxuK1xcdGRvbmVcXG4rXFxuK1xcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMTAvMjQgZGV2IGMxXFxuK1xcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGxpbmsgc2V0IGMxIHVwXFxuK1xcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGFkZHIgYWRkIFxcXCIke3Nydl9pcH0vMjRcXFwiIGRldiBzMVxcbitcXHRpcCBuZXRucyBleGVjIHNlcnZlciBpcCBsaW5rIHNldCBzMSB1cFxcbitcXG4rXFx0IyBQcm9iZTogY2hlY2sgaWYga2VybmVsIHN1cHBvcnRzIHNjdHAgZmxvdyBrZXkuXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA0IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoZHN0PTQ0NDMpJyBcXFxcXFxuK1xcdCAgICAnMicgXFx1MDAyNlxcdTAwM2UvZGV2L251bGxcXG4rXFx0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXFxuK1xcdFxcdGluZm8gXFxcIm5vIHN1cHBvcnQgZm9yIHNjdHAga2V5IC0gc2tpcHBpbmdcXFwiXFxuK1xcdFxcdG92c19leGl0X3NpZ1xcbitcXHRcXHRyZXR1cm4gJGtzZnRfc2tpcFxcbitcXHRmaVxcbitcXHRvdnNfZGVsX2Zsb3dzIFxcXCIkdFxcXCIgc2N0cDRcXG4rXFxuK1xcdCMgQVJQIGZvcndhcmRpbmdcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDQgXFxcXFxcbitcXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgXFxcXFxcbitcXHQgICAgJzInIHx8IHJldHVybiAxXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA0IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCknIFxcXFxcXG4rXFx0ICAgICcxJyB8fCByZXR1cm4gMVxcbitcXG4rXFx0IyBTQ1RQIHBvcnQgbWF0Y2hpbmc6IGRzdCBmb3IgcmVxdWVzdCwgc3JjIGZvciByZXBseVxcbitcXHRvdnNfYWRkX2Zsb3cgXFxcIiR0XFxcIiBzY3RwNCBcXFxcXFxuK1xcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKScgXFxcXFxcbitcXHQgICAgJzInIHx8IHJldHVybiAxXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA0IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoc3JjPTQ0NDMpJyBcXFxcXFxuK1xcdCAgICAnMScgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXFxcIiR0XFxcIiBcXFwic2VydmVyXFxcIiBcXFxcXFxuK1xcdCAgICBzb2NhdCAtdSBTQ1RQNC1MSVNURU46NDQ0MyBTVERPVVRcXG4rXFx0bG9jYWwgc2VydmVyX3BpZD1cXFwiJHBpZFxcXCJcXG4rXFx0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxXFxuK1xcbitcXHRpbmZvIFxcXCJ2ZXJpZnkgU0NUUCBhc3NvY2lhdGlvbiB3aXRoIHBvcnQta2V5ZWQgZmxvd3NcXFwiXFxuK1xcdG92c19zYnggXFxcIiR0XFxcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxcXFxuK1xcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXFxcIlNDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcXFwiIFxcdTAwM2MvZGV2L251bGwgXFxcXFxcbitcXHQgICAgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdG92c19kZWxfZmxvd3MgXFxcIiR0XFxcIiBzY3RwNFxcbitcXG4rXFx0aW5mbyBcXFwidmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMgd2l0aG91dCBmbG93c1xcXCJcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDQgXFxcXFxcbitcXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgXFxcXFxcbitcXHQgICAgJzInIHx8IHJldHVybiAxXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA0IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCknIFxcXFxcXG4rXFx0ICAgICcxJyB8fCByZXR1cm4gMVxcbitcXG4rXFx0a2lsbCAtVEVSTSBcXFwiJHNlcnZlcl9waWRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGxvY2FsIGk9MFxcbitcXHR3aGlsZSBraWxsIC0wIFxcXCIkc2VydmVyX3BpZFxcXCIgMlxcdTAwM2UvZGV2L251bGwgXFx1MDAyNlxcdTAwMjYgWyBcXFwiJGlcXFwiIC1sdCA1IF07IGRvXFxuK1xcdCAgICBzbGVlcCAwLjJcXG4rXFx0ICAgIGk9JCgoaSArIDEpKVxcbitcXHRkb25lXFxuK1xcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXFxcIiR0XFxcIiBcXFwic2VydmVyXFxcIiBcXFxcXFxuK1xcdCAgICBzb2NhdCAtdSBTQ1RQNC1MSVNURU46NDQ0MyBTVERPVVRcXG4rXFx0c2VydmVyX3BpZD1cXFwiJHBpZFxcXCJcXG4rXFx0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxXFxuK1xcbitcXHRvdnNfc2J4IFxcXCIkdFxcXCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcXFxcbitcXHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFxcXCJTQ1RQNC1DT05ORUNUOiR7c3J2X2lwfTo0NDQzXFxcIiBcXHUwMDNjL2Rldi9udWxsIFxcXFxcXG4rXFx0ICAgIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSBcXFxcXFxuK1xcdCAgICBcXHUwMDI2XFx1MDAyNiB7IGluZm8gXFxcImNvbm5lY3Rpb24gc2hvdWxkIGZhaWwgd2l0aG91dCBmbG93c1xcXCJcXG4rXFx0ICAgICAgICAgcmV0dXJuIDE7IH1cXG4rXFxuK1xcdGluZm8gXFxcInJlaW5zdGFsbCBmbG93cyBhbmQgdmVyaWZ5IHJlY292ZXJ5XFxcIlxcbitcXHRvdnNfYWRkX2Zsb3cgXFxcIiR0XFxcIiBzY3RwNCBcXFxcXFxuK1xcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKScgXFxcXFxcbitcXHQgICAgJzInIHx8IHJldHVybiAxXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA0IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoc3JjPTQ0NDMpJyBcXFxcXFxuK1xcdCAgICAnMScgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdGtpbGwgLVRFUk0gXFxcIiRzZXJ2ZXJfcGlkXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRpPTBcXG4rXFx0d2hpbGUga2lsbCAtMCBcXFwiJHNlcnZlcl9waWRcXFwiIDJcXHUwMDNlL2Rldi9udWxsIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRpXFxcIiAtbHQgNSBdOyBkb1xcbitcXHQgICAgc2xlZXAgMC4yXFxuK1xcdCAgICBpPSQoKGkgKyAxKSlcXG4rXFx0ZG9uZVxcbitcXHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFxcXCIkdFxcXCIgXFxcInNlcnZlclxcXCIgXFxcXFxcbitcXHQgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUXFxuK1xcdHNlcnZlcl9waWQ9XFxcIiRwaWRcXFwiXFxuK1xcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxcbitcXG4rXFx0b3ZzX3NieCBcXFwiJHRcXFwiIGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXFxcXG4rXFx0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcXFwiU0NUUDQtQ09OTkVDVDoke3Nydl9pcH06NDQ0M1xcXCIgXFx1MDAzYy9kZXYvbnVsbCBcXFxcXFxuK1xcdCAgICB8fCByZXR1cm4gMVxcbitcXG4rXFx0cmV0dXJuIDBcXG4rfVxcbitcXG4gIyBwc2FtcGxlIHRlc3RcXG4gIyAtIHVzZSBwc2FtcGxlIHRvIG9ic2VydmUgcGFja2V0c1xcbiB0ZXN0X3BzYW1wbGUoKSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5XFxuaW5kZXggZjNlZGQxOTgyMjNmMS4uOTQ0MjkyYmY5MzQ5MSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weVxcbkBAIC0xNSw2ICsxNSw3IEBAIGltcG9ydCBzdHJ1Y3RcXG4gaW1wb3J0IHN5c1xcbiBpbXBvcnQgdGltZVxcbiBpbXBvcnQgdHlwZXNcXG4raW1wb3J0IHVuaXR0ZXN0XFxuIGltcG9ydCB1dWlkXFxuIFxcbiB0cnk6XFxuQEAgLTE5ODQsNiArMTk4NSwxMSBAQCBjbGFzcyBvdnNrZXkobmxhKTpcXG4gICAgICAgICAgICAgICAgIFxcXCJ1ZHBcXFwiLFxcbiAgICAgICAgICAgICAgICAgb3Zza2V5Lm92c19rZXlfdWRwLFxcbiAgICAgICAgICAgICApLFxcbisgICAgICAgICAgICAoXFxuKyAgICAgICAgICAgICAgICBcXFwiT1ZTX0tFWV9BVFRSX1NDVFBcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcInNjdHBcXFwiLFxcbisgICAgICAgICAgICAgICAgb3Zza2V5Lm92c19rZXlfc2N0cCxcXG4rICAgICAgICAgICAgKSxcXG4gICAgICAgICAgICAgKFxcbiAgICAgICAgICAgICAgICAgXFxcIk9WU19LRVlfQVRUUl9JQ01QXFxcIixcXG4gICAgICAgICAgICAgICAgIFxcXCJpY21wXFxcIixcXG5AQCAtMzE2NSw1ICszMTcxLDgxIEBAIGRlZiBtYWluKGFyZ3YpOlxcbiAgICAgcmV0dXJuIDBcXG4gXFxuIFxcbitkZWYgX2luaXRfb3Zza2V5X25sYXMoKTpcXG4rICAgIFxcXCJcXFwiXFxcIkluaXRpYWxpemUgcmVxdWlyZWQgTkxBIGNsYXNzZXMgZm9yIG92c2tleSBwYXJzaW5nLlxcXCJcXFwiXFxcIlxcbisgICAgbmxtc2dfYXRvbXMuZW5jYXBfb3Zza2V5ID0gZW5jYXBfb3Zza2V5XFxuKyAgICBubG1zZ19hdG9tcy5vdnNrZXkgPSBvdnNrZXlcXG4rICAgIG5sbXNnX2F0b21zLm92c2FjdGlvbnMgPSBvdnNhY3Rpb25zXFxuK1xcbitcXG4rZGVmIF9wYXJzZV9mbG93KGZsb3dzdHIpOlxcbisgICAgXFxcIlxcXCJcXFwiUGFyc2UgYSBmbG93IHN0cmluZyBhbmQgcmV0dXJuIHRoZSBrZXkuXFxcIlxcXCJcXFwiXFxuKyAgICBrZXkgPSBvdnNrZXkoKVxcbisgICAga2V5W1xcXCJhdHRyc1xcXCJdID0gW11cXG4rICAgIHJlbWFpbmRlciA9IGtleS5wYXJzZShmbG93c3RyKVxcbisgICAgaWYgcmVtYWluZGVyOlxcbisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZlxcXCJ1bnBhcnNlZCByZW1haW5kZXI6IHtyZW1haW5kZXIhcn1cXFwiKVxcbisgICAgcmV0dXJuIGtleVxcbitcXG4rXFxuK2RlZiBfZmluZF9hdHRyKGtleSwgYXR0cl9uYW1lKTpcXG4rICAgIFxcXCJcXFwiXFxcIkZpbmQgYW4gYXR0cmlidXRlIGluIHBhcnNlZCBrZXkuXFxcIlxcXCJcXFwiXFxuKyAgICBmb3IgYXR0ciBpbiBrZXlbXFxcImF0dHJzXFxcIl06XFxuKyAgICAgICAgaWYgYXR0clswXSA9PSBhdHRyX25hbWU6XFxuKyAgICAgICAgICAgIHJldHVybiBhdHRyWzFdXFxuKyAgICByZXR1cm4gTm9uZVxcbitcXG4rXFxuK2NsYXNzIFRlc3RPdnNLZXlQYXJzZSh1bml0dGVzdC5UZXN0Q2FzZSk6XFxuKyAgICBcXFwiXFxcIlxcXCJVbml0IHRlc3RzIGZvciBvdnNrZXkucGFyc2UoKSBmbG93IHN0cmluZyBwYXJzaW5nLlxcXCJcXFwiXFxcIlxcbitcXG4rICAgIEBjbGFzc21ldGhvZFxcbisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKTpcXG4rICAgICAgICBfaW5pdF9vdnNrZXlfbmxhcygpXFxuK1xcbisgICAgZGVmIHRlc3Rfc2N0cF9kc3Qoc2VsZik6XFxuKyAgICAgICAgXFxcIlxcXCJcXFwiVGVzdCBTQ1RQIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy5cXFwiXFxcIlxcXCJcXG4rICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcXFwic2N0cChkc3Q9NDQ0MylcXFwiKVxcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXFxcIk9WU19LRVlfQVRUUl9TQ1RQXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcXFwiU0NUUCBrZXkgbm90IGZvdW5kXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXFxcImRzdFxcXCJdLCA0NDQzKVxcbitcXG4rICAgIGRlZiB0ZXN0X3NjdHBfc3JjKHNlbGYpOlxcbisgICAgICAgIFxcXCJcXFwiXFxcIlRlc3QgU0NUUCBzb3VyY2UgcG9ydCBwYXJzaW5nLlxcXCJcXFwiXFxcIlxcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFxcXCJzY3RwKHNyYz00NDQzKVxcXCIpXFxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcXFwiT1ZTX0tFWV9BVFRSX1NDVFBcXFwiKVxcbisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsIFxcXCJTQ1RQIGtleSBub3QgZm91bmRcXFwiKVxcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcXFwic3JjXFxcIl0sIDQ0NDMpXFxuK1xcbisgICAgZGVmIHRlc3Rfc2N0cF9zcmNfYW5kX2RzdChzZWxmKTpcXG4rICAgICAgICBcXFwiXFxcIlxcXCJUZXN0IFNDVFAgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBwb3J0IHBhcnNpbmcuXFxcIlxcXCJcXFwiXFxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXFxcInNjdHAoc3JjPTEyMzQsZHN0PTU2NzgpXFxcIilcXG4rICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXksIFxcXCJPVlNfS0VZX0FUVFJfU0NUUFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXFxcIlNDVFAga2V5IG5vdCBmb3VuZFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1xcXCJzcmNcXFwiXSwgMTIzNClcXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXFxcImRzdFxcXCJdLCA1Njc4KVxcbitcXG4rICAgIGRlZiB0ZXN0X3NjdHBfcm91bmR0cmlwKHNlbGYpOlxcbisgICAgICAgIFxcXCJcXFwiXFxcIlRlc3QgcGFyc2UgLVxcdTAwM2UgZHBzdHIgLVxcdTAwM2UgcGFyc2Uga2VlcHMgdGhlIFNDVFAga2V5LlxcXCJcXFwiXFxcIlxcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFxcXCJzY3RwKGRzdD00NDQzKVxcXCIpXFxuKyAgICAgICAga2V5MiA9IG92c2tleSgpXFxuKyAgICAgICAga2V5MltcXFwiYXR0cnNcXFwiXSA9IFtdXFxuKyAgICAgICAgcmVtYWluZGVyID0ga2V5Mi5wYXJzZShrZXkuZHBzdHIoKSlcXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbWFpbmRlciwgXFxcIlxcXCIsIFxcXCJyb3VuZC10cmlwIGxlZnQgdW5wYXJzZWQgdGV4dFxcXCIpXFxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5MiwgXFxcIk9WU19LRVlfQVRUUl9TQ1RQXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcXFwiU0NUUCBrZXkgbG9zdCBpbiByb3VuZC10cmlwXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXFxcImRzdFxcXCJdLCA0NDQzKVxcbitcXG4rXFxuK2RlZiB0ZXN0X292c2tleV9wYXJzZSgpOlxcbisgICAgXFxcIlxcXCJcXFwiVGVzdCBvdnNrZXkucGFyc2UoKSBtZXRob2QgZm9yIHZhcmlvdXMgZmxvdyBrZXkgdHlwZXMuXFxcIlxcXCJcXFwiXFxuKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKS5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdE92c0tleVBhcnNlKVxcbisgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIodmVyYm9zaXR5PTIpXFxuKyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKVxcbisgICAgcmV0dXJuIDAgaWYgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSBlbHNlIDFcXG4rXFxuK1xcbiBpZiBfX25hbWVfXyA9PSBcXFwiX19tYWluX19cXFwiOlxcbisgICAgaWYgbGVuKHN5cy5hcmd2KSBcXHUwMDNlIDEgYW5kIHN5cy5hcmd2WzFdID09IFxcXCItLXRlc3RcXFwiOlxcbisgICAgICAgIHN5cy5leGl0KHRlc3Rfb3Zza2V5X3BhcnNlKCkpXFxuICAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MTg6MjMuNjA5MzM0ODg2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTQ2NjcxNDY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaCkgYnkgYWRkaW5nIGFuIFNDVFAgdGVzdCBhbmQgcmVsYXRlZCBwYXJzaW5nIGxvZ2ljLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkxYjZkZDUxZmYyYWIyNDg5OTkyYzVhYTNhZDE2NWI2Mjc0ODliYTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxMzoxODoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuaW5kZXggODUzZGJjMWIwMGQ3YS4uYjQ0ODMyNDUyN2Q4YiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXG5AQCAtMzQsNiArMzQsNyBAQCB0ZXN0cz1cIlxuIFx0YWN0aW9uX3NldFx0XHRcdFx0c2V0OiBTRVQgYWN0aW9uIHJld3JpdGVzIGZpZWxkc1xuIFx0dHJ1bmNcdFx0XHRcdFx0dHJ1bmM6IG91dHB1dCB0cnVuY2F0aW9uXG4gXHRpY21wdjZcdFx0XHRcdFx0aWNtcHY2OiBJQ01QdjYgZWNobyB0eXBlIG1hdGNoXG4rXHRzY3RwX2Nvbm5lY3RfdjRcdFx0XHRcdHNjdHA6IFNDVFAgZmxvdyBrZXkgbWF0Y2hpbmdcbiBcdHBzYW1wbGVcdFx0XHRcdFx0cHNhbXBsZTogU2FtcGxpbmcgcGFja2V0cyB3aXRoIHBzYW1wbGVcIlxuIFxuIGluZm8oKSB7XG5AQCAtNjExLDYgKzYxMiwxMjYgQEAgdGVzdF9pY21wdjYoKSB7XG4gXHRyZXR1cm4gMFxuIH1cbiBcbisjIENoZWNrIGZvciBhbiBTQ1RQIGVuZHBvaW50IHZpYSAvcHJvYywgd2hpY2ggd29ya3Mgd2l0aG91dCBzY3RwX2RpYWcuXG4rc2N0cF9lcHNfaGFzKCkge1xuK1x0aXAgbmV0bnMgZXhlYyBcIiQxXCIgYXdrIC12IHA9XCIkMlwiICckNj09cCcgL3Byb2MvbmV0L3NjdHAvZXBzIHwgZ3JlcCAtcSAuXG4rfVxuK1xuKyMgc2N0cF9jb25uZWN0X3Y0IHRlc3RcbisjIC0gc2N0cChkc3Q9NDQ0MykgbWF0Y2hlcyBjbGllbnQtdG8tc2VydmVyIElOSVRcbisjIC0gc2N0cChzcmM9NDQ0MykgbWF0Y2hlcyBzZXJ2ZXItdG8tY2xpZW50IElOSVQtQUNLXG4rIyAtIHJlbW92ZSBmbG93cyBhbmQgdmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMsIHJlaW5zdGFsbCBhbmQgcmVjb3ZlclxuK3Rlc3Rfc2N0cF9jb25uZWN0X3Y0KCkge1xuK1x0bG9jYWwgdD1cInRlc3Rfc2N0cF9jb25uZWN0X3Y0XCJcbitcdGxvY2FsIHNydl9pcD0xNzIuMzEuMTEwLjIwXG4rXG4rXHRtb2Rwcm9iZSAtcSBzY3RwIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIFwiJGtzZnRfc2tpcFwiXG4rXHRzb2NhdCAtViAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXEgXCJkZWZpbmUgV0lUSF9TQ1RQXCIgfHwgcmV0dXJuIFwiJGtzZnRfc2tpcFwiXG4rXG4rXHRzYnhfYWRkIFwiJHRcIiB8fCByZXR1cm4gJD9cbitcdG92c19hZGRfZHAgXCIkdFwiIHNjdHA0IHx8IHJldHVybiAxXG4rXG4rXHRpbmZvIFwiY3JlYXRlIG5hbWVzcGFjZXNcIlxuK1x0Zm9yIG5zIGluIGNsaWVudCBzZXJ2ZXI7IGRvXG4rXHRcdG92c19hZGRfbmV0bnNfYW5kX3ZldGhzIFwiJHRcIiBcInNjdHA0XCIgXCIkbnNcIiBcXFxuK1x0XHQgICAgXCIke25zOjA6MX0wXCIgXCIke25zOjA6MX0xXCIgfHwgcmV0dXJuIDFcbitcdGRvbmVcbitcbitcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMTAvMjQgZGV2IGMxXG4rXHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBsaW5rIHNldCBjMSB1cFxuK1x0aXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgYWRkciBhZGQgXCIke3Nydl9pcH0vMjRcIiBkZXYgczFcbitcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwXG4rXG4rXHQjIFByb2JlOiBjaGVjayBpZiBrZXJuZWwgc3VwcG9ydHMgc2N0cCBmbG93IGtleS5cbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDQgXFxcbitcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKScgXFxcbitcdCAgICAnMicgXHUwMDI2XHUwMDNlL2Rldi9udWxsXG4rXHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cbitcdFx0aW5mbyBcIm5vIHN1cHBvcnQgZm9yIHNjdHAga2V5IC0gc2tpcHBpbmdcIlxuK1x0XHRvdnNfZXhpdF9zaWdcbitcdFx0cmV0dXJuICRrc2Z0X3NraXBcbitcdGZpXG4rXHRvdnNfZGVsX2Zsb3dzIFwiJHRcIiBzY3RwNFxuK1xuK1x0IyBBUlAgZm9yd2FyZGluZ1xuK1x0b3ZzX2FkZF9mbG93IFwiJHRcIiBzY3RwNCBcXFxuK1x0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCknIFxcXG4rXHQgICAgJzInIHx8IHJldHVybiAxXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA0IFxcXG4rXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgXFxcbitcdCAgICAnMScgfHwgcmV0dXJuIDFcbitcbitcdCMgU0NUUCBwb3J0IG1hdGNoaW5nOiBkc3QgZm9yIHJlcXVlc3QsIHNyYyBmb3IgcmVwbHlcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDQgXFxcbitcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKScgXFxcbitcdCAgICAnMicgfHwgcmV0dXJuIDFcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDQgXFxcbitcdCAgICAnaW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKHNyYz00NDQzKScgXFxcbitcdCAgICAnMScgfHwgcmV0dXJuIDFcbitcbitcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXCIkdFwiIFwic2VydmVyXCIgXFxcbitcdCAgICBzb2NhdCAtdSBTQ1RQNC1MSVNURU46NDQ0MyBTVERPVVRcbitcdGxvY2FsIHNlcnZlcl9waWQ9XCIkcGlkXCJcbitcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxuK1xuK1x0aW5mbyBcInZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIHdpdGggcG9ydC1rZXllZCBmbG93c1wiXG4rXHRvdnNfc2J4IFwiJHRcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxuK1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcIlNDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcIiBcdTAwM2MvZGV2L251bGwgXFxcbitcdCAgICB8fCByZXR1cm4gMVxuK1xuK1x0b3ZzX2RlbF9mbG93cyBcIiR0XCIgc2N0cDRcbitcbitcdGluZm8gXCJ2ZXJpZnkgY29ubmVjdGlvbiBmYWlscyB3aXRob3V0IGZsb3dzXCJcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDQgXFxcbitcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJyBcXFxuK1x0ICAgICcyJyB8fCByZXR1cm4gMVxuK1x0b3ZzX2FkZF9mbG93IFwiJHRcIiBzY3RwNCBcXFxuK1x0ICAgICdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCknIFxcXG4rXHQgICAgJzEnIHx8IHJldHVybiAxXG4rXG4rXHRraWxsIC1URVJNIFwiJHNlcnZlcl9waWRcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRsb2NhbCBpPTBcbitcdHdoaWxlIGtpbGwgLTAgXCIkc2VydmVyX3BpZFwiIDJcdTAwM2UvZGV2L251bGwgXHUwMDI2XHUwMDI2IFsgXCIkaVwiIC1sdCA1IF07IGRvXG4rXHQgICAgc2xlZXAgMC4yXG4rXHQgICAgaT0kKChpICsgMSkpXG4rXHRkb25lXG4rXHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFwiJHRcIiBcInNlcnZlclwiIFxcXG4rXHQgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUXG4rXHRzZXJ2ZXJfcGlkPVwiJHBpZFwiXG4rXHRvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDQ0NDMgfHwgcmV0dXJuIDFcbitcbitcdG92c19zYnggXCIkdFwiIGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXG4rXHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwiU0NUUDQtQ09OTkVDVDoke3Nydl9pcH06NDQ0M1wiIFx1MDAzYy9kZXYvbnVsbCBcXFxuK1x0ICAgIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcXFxuK1x0ICAgIFx1MDAyNlx1MDAyNiB7IGluZm8gXCJjb25uZWN0aW9uIHNob3VsZCBmYWlsIHdpdGhvdXQgZmxvd3NcIlxuK1x0ICAgICAgICAgcmV0dXJuIDE7IH1cbitcbitcdGluZm8gXCJyZWluc3RhbGwgZmxvd3MgYW5kIHZlcmlmeSByZWNvdmVyeVwiXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA0IFxcXG4rXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MyknIFxcXG4rXHQgICAgJzInIHx8IHJldHVybiAxXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA0IFxcXG4rXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChzcmM9NDQ0MyknIFxcXG4rXHQgICAgJzEnIHx8IHJldHVybiAxXG4rXG4rXHRraWxsIC1URVJNIFwiJHNlcnZlcl9waWRcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRpPTBcbitcdHdoaWxlIGtpbGwgLTAgXCIkc2VydmVyX3BpZFwiIDJcdTAwM2UvZGV2L251bGwgXHUwMDI2XHUwMDI2IFsgXCIkaVwiIC1sdCA1IF07IGRvXG4rXHQgICAgc2xlZXAgMC4yXG4rXHQgICAgaT0kKChpICsgMSkpXG4rXHRkb25lXG4rXHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFwiJHRcIiBcInNlcnZlclwiIFxcXG4rXHQgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUXG4rXHRzZXJ2ZXJfcGlkPVwiJHBpZFwiXG4rXHRvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDQ0NDMgfHwgcmV0dXJuIDFcbitcbitcdG92c19zYnggXCIkdFwiIGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXG4rXHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwiU0NUUDQtQ09OTkVDVDoke3Nydl9pcH06NDQ0M1wiIFx1MDAzYy9kZXYvbnVsbCBcXFxuK1x0ICAgIHx8IHJldHVybiAxXG4rXG4rXHRyZXR1cm4gMFxuK31cbitcbiAjIHBzYW1wbGUgdGVzdFxuICMgLSB1c2UgcHNhbXBsZSB0byBvYnNlcnZlIHBhY2tldHNcbiB0ZXN0X3BzYW1wbGUoKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHlcbmluZGV4IGYzZWRkMTk4MjIzZjEuLjk0NDI5MmJmOTM0OTEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5XG5AQCAtMTUsNiArMTUsNyBAQCBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHN5c1xuIGltcG9ydCB0aW1lXG4gaW1wb3J0IHR5cGVzXG4raW1wb3J0IHVuaXR0ZXN0XG4gaW1wb3J0IHV1aWRcbiBcbiB0cnk6XG5AQCAtMTk4NCw2ICsxOTg1LDExIEBAIGNsYXNzIG92c2tleShubGEpOlxuICAgICAgICAgICAgICAgICBcInVkcFwiLFxuICAgICAgICAgICAgICAgICBvdnNrZXkub3ZzX2tleV91ZHAsXG4gICAgICAgICAgICAgKSxcbisgICAgICAgICAgICAoXG4rICAgICAgICAgICAgICAgIFwiT1ZTX0tFWV9BVFRSX1NDVFBcIixcbisgICAgICAgICAgICAgICAgXCJzY3RwXCIsXG4rICAgICAgICAgICAgICAgIG92c2tleS5vdnNfa2V5X3NjdHAsXG4rICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgIFwiT1ZTX0tFWV9BVFRSX0lDTVBcIixcbiAgICAgICAgICAgICAgICAgXCJpY21wXCIsXG5AQCAtMzE2NSw1ICszMTcxLDgxIEBAIGRlZiBtYWluKGFyZ3YpOlxuICAgICByZXR1cm4gMFxuIFxuIFxuK2RlZiBfaW5pdF9vdnNrZXlfbmxhcygpOlxuKyAgICBcIlwiXCJJbml0aWFsaXplIHJlcXVpcmVkIE5MQSBjbGFzc2VzIGZvciBvdnNrZXkgcGFyc2luZy5cIlwiXCJcbisgICAgbmxtc2dfYXRvbXMuZW5jYXBfb3Zza2V5ID0gZW5jYXBfb3Zza2V5XG4rICAgIG5sbXNnX2F0b21zLm92c2tleSA9IG92c2tleVxuKyAgICBubG1zZ19hdG9tcy5vdnNhY3Rpb25zID0gb3ZzYWN0aW9uc1xuK1xuK1xuK2RlZiBfcGFyc2VfZmxvdyhmbG93c3RyKTpcbisgICAgXCJcIlwiUGFyc2UgYSBmbG93IHN0cmluZyBhbmQgcmV0dXJuIHRoZSBrZXkuXCJcIlwiXG4rICAgIGtleSA9IG92c2tleSgpXG4rICAgIGtleVtcImF0dHJzXCJdID0gW11cbisgICAgcmVtYWluZGVyID0ga2V5LnBhcnNlKGZsb3dzdHIpXG4rICAgIGlmIHJlbWFpbmRlcjpcbisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZlwidW5wYXJzZWQgcmVtYWluZGVyOiB7cmVtYWluZGVyIXJ9XCIpXG4rICAgIHJldHVybiBrZXlcbitcbitcbitkZWYgX2ZpbmRfYXR0cihrZXksIGF0dHJfbmFtZSk6XG4rICAgIFwiXCJcIkZpbmQgYW4gYXR0cmlidXRlIGluIHBhcnNlZCBrZXkuXCJcIlwiXG4rICAgIGZvciBhdHRyIGluIGtleVtcImF0dHJzXCJdOlxuKyAgICAgICAgaWYgYXR0clswXSA9PSBhdHRyX25hbWU6XG4rICAgICAgICAgICAgcmV0dXJuIGF0dHJbMV1cbisgICAgcmV0dXJuIE5vbmVcbitcbitcbitjbGFzcyBUZXN0T3ZzS2V5UGFyc2UodW5pdHRlc3QuVGVzdENhc2UpOlxuKyAgICBcIlwiXCJVbml0IHRlc3RzIGZvciBvdnNrZXkucGFyc2UoKSBmbG93IHN0cmluZyBwYXJzaW5nLlwiXCJcIlxuK1xuKyAgICBAY2xhc3NtZXRob2RcbisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKTpcbisgICAgICAgIF9pbml0X292c2tleV9ubGFzKClcbitcbisgICAgZGVmIHRlc3Rfc2N0cF9kc3Qoc2VsZik6XG4rICAgICAgICBcIlwiXCJUZXN0IFNDVFAgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlwiXCJcIlxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXCJzY3RwKGRzdD00NDQzKVwiKVxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcIk9WU19LRVlfQVRUUl9TQ1RQXCIpXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcIlNDVFAga2V5IG5vdCBmb3VuZFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1wiZHN0XCJdLCA0NDQzKVxuK1xuKyAgICBkZWYgdGVzdF9zY3RwX3NyYyhzZWxmKTpcbisgICAgICAgIFwiXCJcIlRlc3QgU0NUUCBzb3VyY2UgcG9ydCBwYXJzaW5nLlwiXCJcIlxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXCJzY3RwKHNyYz00NDQzKVwiKVxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcIk9WU19LRVlfQVRUUl9TQ1RQXCIpXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcIlNDVFAga2V5IG5vdCBmb3VuZFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1wic3JjXCJdLCA0NDQzKVxuK1xuKyAgICBkZWYgdGVzdF9zY3RwX3NyY19hbmRfZHN0KHNlbGYpOlxuKyAgICAgICAgXCJcIlwiVGVzdCBTQ1RQIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlwiXCJcIlxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXCJzY3RwKHNyYz0xMjM0LGRzdD01Njc4KVwiKVxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcIk9WU19LRVlfQVRUUl9TQ1RQXCIpXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcIlNDVFAga2V5IG5vdCBmb3VuZFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1wic3JjXCJdLCAxMjM0KVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1wiZHN0XCJdLCA1Njc4KVxuK1xuKyAgICBkZWYgdGVzdF9zY3RwX3JvdW5kdHJpcChzZWxmKTpcbisgICAgICAgIFwiXCJcIlRlc3QgcGFyc2UgLVx1MDAzZSBkcHN0ciAtXHUwMDNlIHBhcnNlIGtlZXBzIHRoZSBTQ1RQIGtleS5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwic2N0cChkc3Q9NDQ0MylcIilcbisgICAgICAgIGtleTIgPSBvdnNrZXkoKVxuKyAgICAgICAga2V5MltcImF0dHJzXCJdID0gW11cbisgICAgICAgIHJlbWFpbmRlciA9IGtleTIucGFyc2Uoa2V5LmRwc3RyKCkpXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbWFpbmRlciwgXCJcIiwgXCJyb3VuZC10cmlwIGxlZnQgdW5wYXJzZWQgdGV4dFwiKVxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5MiwgXCJPVlNfS0VZX0FUVFJfU0NUUFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCJTQ1RQIGtleSBsb3N0IGluIHJvdW5kLXRyaXBcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcImRzdFwiXSwgNDQ0MylcbitcbitcbitkZWYgdGVzdF9vdnNrZXlfcGFyc2UoKTpcbisgICAgXCJcIlwiVGVzdCBvdnNrZXkucGFyc2UoKSBtZXRob2QgZm9yIHZhcmlvdXMgZmxvdyBrZXkgdHlwZXMuXCJcIlwiXG4rICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdExvYWRlcigpLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0T3ZzS2V5UGFyc2UpXG4rICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yKVxuKyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKVxuKyAgICByZXR1cm4gMCBpZiByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpIGVsc2UgMVxuK1xuK1xuIGlmIF9fbmFtZV9fID09IFwiX19tYWluX19cIjpcbisgICAgaWYgbGVuKHN5cy5hcmd2KSBcdTAwM2UgMSBhbmQgc3lzLmFyZ3ZbMV0gPT0gXCItLXRlc3RcIjpcbisgICAgICAgIHN5cy5leGl0KHRlc3Rfb3Zza2V5X3BhcnNlKCkpXG4gICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MTg6MjMuNjA5MzM2MjY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ2NjY4OTkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE9wZW4gdlN3aXRjaCBTZWxmdGVzdCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weWAuICBFc3NlbnRpYWxseSwgaXQncyBpbnRyb2R1Y2luZyBhIG5ldyB0ZXN0LCBgc2N0cF9jb25uZWN0X3Y0YCwgaW50byB0aGUgT3BlbiB2U3dpdGNoIHNlbGZ0ZXN0cywgYW5kIGJlZWZpbmcgdXAgdGhlIFB5dGhvbiBzY3JpcHQgdG8gaGFuZGxlIFNDVFAgZmxvdyBrZXlzLiBHb29kLCBnb29kLiAgUHVyZWx5IHNlbGZ0ZXN0IHN0dWZmLiBObyBrZXJuZWwgY29yZSBtb2RpZmljYXRpb25zLCBubyBkcml2ZXIgY2hhbmdlcywgYW5kIG5vdGhpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLiBJJ20gcHJldHR5IGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIGRvZXNuJ3Qgd2FycmFudCBmdXp6aW5nLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWxsIHRoZSBwYXRjaCB0b3VjaGVzLiBZZXAsIGNvbmZpcm1lZC4gT25seSB0aG9zZSB0d28gZmlsZXMuIEFsbCByaWdodCwgSSdtIHNhdGlzZmllZC5cblxuSSB3aWxsIGNvbmZpZGVudGx5IG1hcmsgXCJXb3J0aEZ1enppbmdcIiBhcyBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIyMiwiT3V0cHV0VG9rZW5zIjo3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjE4OjI5LjA3NjAyODUyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaCkgYnkgYWRkaW5nIGFuIFNDVFAgdGVzdCBhbmQgcmVsYXRlZCBwYXJzaW5nIGxvZ2ljLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gpIGJ5IGFkZGluZyBhbiBTQ1RQIHRlc3QgYW5kIHJlbGF0ZWQgcGFyc2luZyBsb2dpYy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflownsvss[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 12:59:15 +0000 UTC FinishedAt: 2026-07-30 13:18:30 +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+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gpIGJ5IGFkZGluZyBhbiBTQ1RQIHRlc3QgYW5kIHJlbGF0ZWQgcGFyc2luZyBsb2dpYy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTFiNmRkNTFmZjJhYjI0ODk5OTJjNWFhM2FkMTY1YjYyNzQ4OWJhMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDEzOjE4OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuaW5kZXggODUzZGJjMWIwMGQ3YS4uYjQ0ODMyNDUyN2Q4YiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXG5AQCAtMzQsNiAmIzQzOzM0LDcgQEAgdGVzdHM9XCYjMzQ7XG4gXHRhY3Rpb25fc2V0XHRcdFx0XHRzZXQ6IFNFVCBhY3Rpb24gcmV3cml0ZXMgZmllbGRzXG4gXHR0cnVuY1x0XHRcdFx0XHR0cnVuYzogb3V0cHV0IHRydW5jYXRpb25cbiBcdGljbXB2Nlx0XHRcdFx0XHRpY21wdjY6IElDTVB2NiBlY2hvIHR5cGUgbWF0Y2hcbiYjNDM7XHRzY3RwX2Nvbm5lY3RfdjRcdFx0XHRcdHNjdHA6IFNDVFAgZmxvdyBrZXkgbWF0Y2hpbmdcbiBcdHBzYW1wbGVcdFx0XHRcdFx0cHNhbXBsZTogU2FtcGxpbmcgcGFja2V0cyB3aXRoIHBzYW1wbGVcJiMzNDtcbiBcbiBpbmZvKCkge1xuQEAgLTYxMSw2ICYjNDM7NjEyLDEyNiBAQCB0ZXN0X2ljbXB2NigpIHtcbiBcdHJldHVybiAwXG4gfVxuIFxuJiM0MzsjIENoZWNrIGZvciBhbiBTQ1RQIGVuZHBvaW50IHZpYSAvcHJvYywgd2hpY2ggd29ya3Mgd2l0aG91dCBzY3RwX2RpYWcuXG4mIzQzO3NjdHBfZXBzX2hhcygpIHtcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyQxXCYjMzQ7IGF3ayAtdiBwPVwmIzM0OyQyXCYjMzQ7ICYjMzk7JDY9PXAmIzM5OyAvcHJvYy9uZXQvc2N0cC9lcHMgfCBncmVwIC1xIC5cbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBzY3RwX2Nvbm5lY3RfdjQgdGVzdFxuJiM0MzsjIC0gc2N0cChkc3Q9NDQ0MykgbWF0Y2hlcyBjbGllbnQtdG8tc2VydmVyIElOSVRcbiYjNDM7IyAtIHNjdHAoc3JjPTQ0NDMpIG1hdGNoZXMgc2VydmVyLXRvLWNsaWVudCBJTklULUFDS1xuJiM0MzsjIC0gcmVtb3ZlIGZsb3dzIGFuZCB2ZXJpZnkgY29ubmVjdGlvbiBmYWlscywgcmVpbnN0YWxsIGFuZCByZWNvdmVyXG4mIzQzO3Rlc3Rfc2N0cF9jb25uZWN0X3Y0KCkge1xuJiM0MztcdGxvY2FsIHQ9XCYjMzQ7dGVzdF9zY3RwX2Nvbm5lY3RfdjRcJiMzNDtcbiYjNDM7XHRsb2NhbCBzcnZfaXA9MTcyLjMxLjExMC4yMFxuJiM0MztcbiYjNDM7XHRtb2Rwcm9iZSAtcSBzY3RwIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7XHRzb2NhdCAtViAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXEgXCYjMzQ7ZGVmaW5lIFdJVEhfU0NUUFwmIzM0OyB8fCByZXR1cm4gXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztcbiYjNDM7XHRzYnhfYWRkIFwmIzM0OyR0XCYjMzQ7IHx8IHJldHVybiAkP1xuJiM0MztcdG92c19hZGRfZHAgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0aW5mbyBcJiMzNDtjcmVhdGUgbmFtZXNwYWNlc1wmIzM0O1xuJiM0MztcdGZvciBucyBpbiBjbGllbnQgc2VydmVyOyBkb1xuJiM0MztcdFx0b3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7c2N0cDRcJiMzNDsgXCYjMzQ7JG5zXCYjMzQ7IFxcXG4mIzQzO1x0XHQgICAgXCYjMzQ7JHtuczowOjF9MFwmIzM0OyBcJiMzNDske25zOjA6MX0xXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO1x0ZG9uZVxuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBhZGRyIGFkZCAxNzIuMzEuMTEwLjEwLzI0IGRldiBjMVxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGxpbmsgc2V0IGMxIHVwXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgYWRkciBhZGQgXCYjMzQ7JHtzcnZfaXB9LzI0XCYjMzQ7IGRldiBzMVxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwXG4mIzQzO1xuJiM0MztcdCMgUHJvYmU6IGNoZWNrIGlmIGtlcm5lbCBzdXBwb3J0cyBzY3RwIGZsb3cga2V5LlxuJiM0MztcdG92c19hZGRfZmxvdyBcJiMzNDskdFwmIzM0OyBzY3RwNCBcXFxuJiM0MztcdCAgICAmIzM5O2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MykmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzImIzM5OyBcdTAwMjZcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cbiYjNDM7XHRcdGluZm8gXCYjMzQ7bm8gc3VwcG9ydCBmb3Igc2N0cCBrZXkgLSBza2lwcGluZ1wmIzM0O1xuJiM0MztcdFx0b3ZzX2V4aXRfc2lnXG4mIzQzO1x0XHRyZXR1cm4gJGtzZnRfc2tpcFxuJiM0MztcdGZpXG4mIzQzO1x0b3ZzX2RlbF9mbG93cyBcJiMzNDskdFwmIzM0OyBzY3RwNFxuJiM0MztcbiYjNDM7XHQjIEFSUCBmb3J3YXJkaW5nXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCkmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzEmIzM5OyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHQjIFNDVFAgcG9ydCBtYXRjaGluZzogZHN0IGZvciByZXF1ZXN0LCBzcmMgZm9yIHJlcGx5XG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKSYjMzk7IFxcXG4mIzQzO1x0ICAgICYjMzk7MiYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKHNyYz00NDQzKSYjMzk7IFxcXG4mIzQzO1x0ICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7c2VydmVyXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxuJiM0MztcdGxvY2FsIHNlcnZlcl9waWQ9XCYjMzQ7JHBpZFwmIzM0O1xuJiM0MztcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRpbmZvIFwmIzM0O3ZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIHdpdGggcG9ydC1rZXllZCBmbG93c1wmIzM0O1xuJiM0MztcdG92c19zYnggXCYjMzQ7JHRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcJiMzNDsgXHUwMDNjL2Rldi9udWxsIFxcXG4mIzQzO1x0ICAgIHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdG92c19kZWxfZmxvd3MgXCYjMzQ7JHRcJiMzNDsgc2N0cDRcbiYjNDM7XG4mIzQzO1x0aW5mbyBcJiMzNDt2ZXJpZnkgY29ubmVjdGlvbiBmYWlscyB3aXRob3V0IGZsb3dzXCYjMzQ7XG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA0IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCkmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzEmIzM5OyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRraWxsIC1URVJNIFwmIzM0OyRzZXJ2ZXJfcGlkXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRsb2NhbCBpPTBcbiYjNDM7XHR3aGlsZSBraWxsIC0wIFwmIzM0OyRzZXJ2ZXJfcGlkXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgXHUwMDI2XHUwMDI2IFsgXCYjMzQ7JGlcJiMzNDsgLWx0IDUgXTsgZG9cbiYjNDM7XHQgICAgc2xlZXAgMC4yXG4mIzQzO1x0ICAgIGk9JCgoaSAmIzQzOyAxKSlcbiYjNDM7XHRkb25lXG4mIzQzO1x0b3ZzX25ldG5zX3NwYXduX2RhZW1vbiBcJiMzNDskdFwmIzM0OyBcJiMzNDtzZXJ2ZXJcJiMzNDsgXFxcbiYjNDM7XHQgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUXG4mIzQzO1x0c2VydmVyX3BpZD1cJiMzNDskcGlkXCYjMzQ7XG4mIzQzO1x0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdG92c19zYnggXCYjMzQ7JHRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcJiMzNDsgXHUwMDNjL2Rldi9udWxsIFxcXG4mIzQzO1x0ICAgIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcXFxuJiM0MztcdCAgICBcdTAwMjZcdTAwMjYgeyBpbmZvIFwmIzM0O2Nvbm5lY3Rpb24gc2hvdWxkIGZhaWwgd2l0aG91dCBmbG93c1wmIzM0O1xuJiM0MztcdCAgICAgICAgIHJldHVybiAxOyB9XG4mIzQzO1xuJiM0MztcdGluZm8gXCYjMzQ7cmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnlcJiMzNDtcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoZHN0PTQ0NDMpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDQgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoc3JjPTQ0NDMpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0a2lsbCAtVEVSTSBcJiMzNDskc2VydmVyX3BpZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0aT0wXG4mIzQzO1x0d2hpbGUga2lsbCAtMCBcJiMzNDskc2VydmVyX3BpZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIFx1MDAyNlx1MDAyNiBbIFwmIzM0OyRpXCYjMzQ7IC1sdCA1IF07IGRvXG4mIzQzO1x0ICAgIHNsZWVwIDAuMlxuJiM0MztcdCAgICBpPSQoKGkgJiM0MzsgMSkpXG4mIzQzO1x0ZG9uZVxuJiM0MztcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXCYjMzQ7JHRcJiMzNDsgXCYjMzQ7c2VydmVyXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIHNvY2F0IC11IFNDVFA0LUxJU1RFTjo0NDQzIFNURE9VVFxuJiM0MztcdHNlcnZlcl9waWQ9XCYjMzQ7JHBpZFwmIzM0O1xuJiM0MztcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRvdnNfc2J4IFwmIzM0OyR0XCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXG4mIzQzO1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcJiMzNDtTQ1RQNC1DT05ORUNUOiR7c3J2X2lwfTo0NDQzXCYjMzQ7IFx1MDAzYy9kZXYvbnVsbCBcXFxuJiM0MztcdCAgICB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMFxuJiM0Mzt9XG4mIzQzO1xuICMgcHNhbXBsZSB0ZXN0XG4gIyAtIHVzZSBwc2FtcGxlIHRvIG9ic2VydmUgcGFja2V0c1xuIHRlc3RfcHNhbXBsZSgpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weVxuaW5kZXggZjNlZGQxOTgyMjNmMS4uOTQ0MjkyYmY5MzQ5MSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHlcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQCBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHN5c1xuIGltcG9ydCB0aW1lXG4gaW1wb3J0IHR5cGVzXG4mIzQzO2ltcG9ydCB1bml0dGVzdFxuIGltcG9ydCB1dWlkXG4gXG4gdHJ5OlxuQEAgLTE5ODQsNiAmIzQzOzE5ODUsMTEgQEAgY2xhc3Mgb3Zza2V5KG5sYSk6XG4gICAgICAgICAgICAgICAgIFwmIzM0O3VkcFwmIzM0OyxcbiAgICAgICAgICAgICAgICAgb3Zza2V5Lm92c19rZXlfdWRwLFxuICAgICAgICAgICAgICksXG4mIzQzOyAgICAgICAgICAgIChcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O09WU19LRVlfQVRUUl9TQ1RQXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7c2N0cFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIG92c2tleS5vdnNfa2V5X3NjdHAsXG4mIzQzOyAgICAgICAgICAgICksXG4gICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICBcJiMzNDtPVlNfS0VZX0FUVFJfSUNNUFwmIzM0OyxcbiAgICAgICAgICAgICAgICAgXCYjMzQ7aWNtcFwmIzM0OyxcbkBAIC0zMTY1LDUgJiM0MzszMTcxLDgxIEBAIGRlZiBtYWluKGFyZ3YpOlxuICAgICByZXR1cm4gMFxuIFxuIFxuJiM0MztkZWYgX2luaXRfb3Zza2V5X25sYXMoKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O0luaXRpYWxpemUgcmVxdWlyZWQgTkxBIGNsYXNzZXMgZm9yIG92c2tleSBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgbmxtc2dfYXRvbXMuZW5jYXBfb3Zza2V5ID0gZW5jYXBfb3Zza2V5XG4mIzQzOyAgICBubG1zZ19hdG9tcy5vdnNrZXkgPSBvdnNrZXlcbiYjNDM7ICAgIG5sbXNnX2F0b21zLm92c2FjdGlvbnMgPSBvdnNhY3Rpb25zXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9wYXJzZV9mbG93KGZsb3dzdHIpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7UGFyc2UgYSBmbG93IHN0cmluZyBhbmQgcmV0dXJuIHRoZSBrZXkuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBrZXkgPSBvdnNrZXkoKVxuJiM0MzsgICAga2V5W1wmIzM0O2F0dHJzXCYjMzQ7XSA9IFtdXG4mIzQzOyAgICByZW1haW5kZXIgPSBrZXkucGFyc2UoZmxvd3N0cilcbiYjNDM7ICAgIGlmIHJlbWFpbmRlcjpcbiYjNDM7ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGZcJiMzNDt1bnBhcnNlZCByZW1haW5kZXI6IHtyZW1haW5kZXIhcn1cJiMzNDspXG4mIzQzOyAgICByZXR1cm4ga2V5XG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9maW5kX2F0dHIoa2V5LCBhdHRyX25hbWUpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7RmluZCBhbiBhdHRyaWJ1dGUgaW4gcGFyc2VkIGtleS5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIGZvciBhdHRyIGluIGtleVtcJiMzNDthdHRyc1wmIzM0O106XG4mIzQzOyAgICAgICAgaWYgYXR0clswXSA9PSBhdHRyX25hbWU6XG4mIzQzOyAgICAgICAgICAgIHJldHVybiBhdHRyWzFdXG4mIzQzOyAgICByZXR1cm4gTm9uZVxuJiM0MztcbiYjNDM7XG4mIzQzO2NsYXNzIFRlc3RPdnNLZXlQYXJzZSh1bml0dGVzdC5UZXN0Q2FzZSk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtVbml0IHRlc3RzIGZvciBvdnNrZXkucGFyc2UoKSBmbG93IHN0cmluZyBwYXJzaW5nLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIEBjbGFzc21ldGhvZFxuJiM0MzsgICAgZGVmIHNldFVwQ2xhc3MoY2xzKTpcbiYjNDM7ICAgICAgICBfaW5pdF9vdnNrZXlfbmxhcygpXG4mIzQzO1xuJiM0MzsgICAgZGVmIHRlc3Rfc2N0cF9kc3Qoc2VsZik6XG4mIzQzOyAgICAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGVzdCBTQ1RQIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcJiMzNDtzY3RwKGRzdD00NDQzKVwmIzM0OylcbiYjNDM7ICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXksIFwmIzM0O09WU19LRVlfQVRUUl9TQ1RQXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsIFwmIzM0O1NDVFAga2V5IG5vdCBmb3VuZFwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXCYjMzQ7ZHN0XCYjMzQ7XSwgNDQ0MylcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9zY3RwX3NyYyhzZWxmKTpcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtUZXN0IFNDVFAgc291cmNlIHBvcnQgcGFyc2luZy5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcJiMzNDtzY3RwKHNyYz00NDQzKVwmIzM0OylcbiYjNDM7ICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXksIFwmIzM0O09WU19LRVlfQVRUUl9TQ1RQXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsIFwmIzM0O1NDVFAga2V5IG5vdCBmb3VuZFwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXCYjMzQ7c3JjXCYjMzQ7XSwgNDQ0MylcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9zY3RwX3NyY19hbmRfZHN0KHNlbGYpOlxuJiM0MzsgICAgICAgIFwmIzM0O1wmIzM0O1wmIzM0O1Rlc3QgU0NUUCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcJiMzNDtzY3RwKHNyYz0xMjM0LGRzdD01Njc4KVwmIzM0OylcbiYjNDM7ICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXksIFwmIzM0O09WU19LRVlfQVRUUl9TQ1RQXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsIFwmIzM0O1NDVFAga2V5IG5vdCBmb3VuZFwmIzM0OylcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXCYjMzQ7c3JjXCYjMzQ7XSwgMTIzNClcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXCYjMzQ7ZHN0XCYjMzQ7XSwgNTY3OClcbiYjNDM7XG4mIzQzOyAgICBkZWYgdGVzdF9zY3RwX3JvdW5kdHJpcChzZWxmKTpcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtUZXN0IHBhcnNlIC1cdTAwM2UgZHBzdHIgLVx1MDAzZSBwYXJzZSBrZWVwcyB0aGUgU0NUUCBrZXkuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXCYjMzQ7c2N0cChkc3Q9NDQ0MylcJiMzNDspXG4mIzQzOyAgICAgICAga2V5MiA9IG92c2tleSgpXG4mIzQzOyAgICAgICAga2V5MltcJiMzNDthdHRyc1wmIzM0O10gPSBbXVxuJiM0MzsgICAgICAgIHJlbWFpbmRlciA9IGtleTIucGFyc2Uoa2V5LmRwc3RyKCkpXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1haW5kZXIsIFwmIzM0O1wmIzM0OywgXCYjMzQ7cm91bmQtdHJpcCBsZWZ0IHVucGFyc2VkIHRleHRcJiMzNDspXG4mIzQzOyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5MiwgXCYjMzQ7T1ZTX0tFWV9BVFRSX1NDVFBcJiMzNDspXG4mIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCYjMzQ7U0NUUCBrZXkgbG9zdCBpbiByb3VuZC10cmlwXCYjMzQ7KVxuJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcJiMzNDtkc3RcJiMzNDtdLCA0NDQzKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiB0ZXN0X292c2tleV9wYXJzZSgpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7VGVzdCBvdnNrZXkucGFyc2UoKSBtZXRob2QgZm9yIHZhcmlvdXMgZmxvdyBrZXkgdHlwZXMuXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKS5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdE92c0tleVBhcnNlKVxuJiM0MzsgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIodmVyYm9zaXR5PTIpXG4mIzQzOyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKVxuJiM0MzsgICAgcmV0dXJuIDAgaWYgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSBlbHNlIDFcbiYjNDM7XG4mIzQzO1xuIGlmIF9fbmFtZV9fID09IFwmIzM0O19fbWFpbl9fXCYjMzQ7OlxuJiM0MzsgICAgaWYgbGVuKHN5cy5hcmd2KSBcdTAwM2UgMSBhbmQgc3lzLmFyZ3ZbMV0gPT0gXCYjMzQ7LS10ZXN0XCYjMzQ7OlxuJiM0MzsgICAgICAgIHN5cy5leGl0KHRlc3Rfb3Zza2V5X3BhcnNlKCkpXG4gICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoKSBieSBhZGRpbmcgYW4gU0NUUCB0ZXN0IGFuZCByZWxhdGVkIHBhcnNpbmcgbG9naWMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkxYjZkZDUxZmYyYWIyNDg5OTkyYzVhYTNhZDE2NWI2Mjc0ODliYTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAxMzoxODoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaAppbmRleCA4NTNkYmMxYjAwZDdhLi5iNDQ4MzI0NTI3ZDhiIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoCkBAIC0zNCw2ICYjNDM7MzQsNyBAQCB0ZXN0cz0mIzM0OwogCWFjdGlvbl9zZXQJCQkJc2V0OiBTRVQgYWN0aW9uIHJld3JpdGVzIGZpZWxkcwogCXRydW5jCQkJCQl0cnVuYzogb3V0cHV0IHRydW5jYXRpb24KIAlpY21wdjYJCQkJCWljbXB2NjogSUNNUHY2IGVjaG8gdHlwZSBtYXRjaAomIzQzOwlzY3RwX2Nvbm5lY3RfdjQJCQkJc2N0cDogU0NUUCBmbG93IGtleSBtYXRjaGluZwogCXBzYW1wbGUJCQkJCXBzYW1wbGU6IFNhbXBsaW5nIHBhY2tldHMgd2l0aCBwc2FtcGxlJiMzNDsKIAogaW5mbygpIHsKQEAgLTYxMSw2ICYjNDM7NjEyLDEyNiBAQCB0ZXN0X2ljbXB2NigpIHsKIAlyZXR1cm4gMAogfQogCiYjNDM7IyBDaGVjayBmb3IgYW4gU0NUUCBlbmRwb2ludCB2aWEgL3Byb2MsIHdoaWNoIHdvcmtzIHdpdGhvdXQgc2N0cF9kaWFnLgomIzQzO3NjdHBfZXBzX2hhcygpIHsKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyQxJiMzNDsgYXdrIC12IHA9JiMzNDskMiYjMzQ7ICYjMzk7JDY9PXAmIzM5OyAvcHJvYy9uZXQvc2N0cC9lcHMgfCBncmVwIC1xIC4KJiM0Mzt9CiYjNDM7CiYjNDM7IyBzY3RwX2Nvbm5lY3RfdjQgdGVzdAomIzQzOyMgLSBzY3RwKGRzdD00NDQzKSBtYXRjaGVzIGNsaWVudC10by1zZXJ2ZXIgSU5JVAomIzQzOyMgLSBzY3RwKHNyYz00NDQzKSBtYXRjaGVzIHNlcnZlci10by1jbGllbnQgSU5JVC1BQ0sKJiM0MzsjIC0gcmVtb3ZlIGZsb3dzIGFuZCB2ZXJpZnkgY29ubmVjdGlvbiBmYWlscywgcmVpbnN0YWxsIGFuZCByZWNvdmVyCiYjNDM7dGVzdF9zY3RwX2Nvbm5lY3RfdjQoKSB7CiYjNDM7CWxvY2FsIHQ9JiMzNDt0ZXN0X3NjdHBfY29ubmVjdF92NCYjMzQ7CiYjNDM7CWxvY2FsIHNydl9pcD0xNzIuMzEuMTEwLjIwCiYjNDM7CiYjNDM7CW1vZHByb2JlIC1xIHNjdHAgMiZndDsvZGV2L251bGwgfHwgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7CiYjNDM7CXNvY2F0IC1WIDImZ3Q7JmFtcDsxIHwgZ3JlcCAtcSAmIzM0O2RlZmluZSBXSVRIX1NDVFAmIzM0OyB8fCByZXR1cm4gJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MzsKJiM0MzsJc2J4X2FkZCAmIzM0OyR0JiMzNDsgfHwgcmV0dXJuICQ/CiYjNDM7CW92c19hZGRfZHAgJiMzNDskdCYjMzQ7IHNjdHA0IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CWluZm8gJiMzNDtjcmVhdGUgbmFtZXNwYWNlcyYjMzQ7CiYjNDM7CWZvciBucyBpbiBjbGllbnQgc2VydmVyOyBkbwomIzQzOwkJb3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgJiMzNDskdCYjMzQ7ICYjMzQ7c2N0cDQmIzM0OyAmIzM0OyRucyYjMzQ7IFwKJiM0MzsJCSAgICAmIzM0OyR7bnM6MDoxfTAmIzM0OyAmIzM0OyR7bnM6MDoxfTEmIzM0OyB8fCByZXR1cm4gMQomIzQzOwlkb25lCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMTAvMjQgZGV2IGMxCiYjNDM7CWlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGxpbmsgc2V0IGMxIHVwCiYjNDM7CWlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGFkZHIgYWRkICYjMzQ7JHtzcnZfaXB9LzI0JiMzNDsgZGV2IHMxCiYjNDM7CWlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwCiYjNDM7CiYjNDM7CSMgUHJvYmU6IGNoZWNrIGlmIGtlcm5lbCBzdXBwb3J0cyBzY3RwIGZsb3cga2V5LgomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MiYjMzk7ICZhbXA7Jmd0Oy9kZXYvbnVsbAomIzQzOwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KJiM0MzsJCWluZm8gJiMzNDtubyBzdXBwb3J0IGZvciBzY3RwIGtleSAtIHNraXBwaW5nJiMzNDsKJiM0MzsJCW92c19leGl0X3NpZwomIzQzOwkJcmV0dXJuICRrc2Z0X3NraXAKJiM0MzsJZmkKJiM0MzsJb3ZzX2RlbF9mbG93cyAmIzM0OyR0JiMzNDsgc2N0cDQKJiM0MzsKJiM0MzsJIyBBUlAgZm9yd2FyZGluZwomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsJb3ZzX2FkZF9mbG93ICYjMzQ7JHQmIzM0OyBzY3RwNCBcCiYjNDM7CSAgICAmIzM5O2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CSMgU0NUUCBwb3J0IG1hdGNoaW5nOiBkc3QgZm9yIHJlcXVlc3QsIHNyYyBmb3IgcmVwbHkKJiM0MzsJb3ZzX2FkZF9mbG93ICYjMzQ7JHQmIzM0OyBzY3RwNCBcCiYjNDM7CSAgICAmIzM5O2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MykmIzM5OyBcCiYjNDM7CSAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKHNyYz00NDQzKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19uZXRuc19zcGF3bl9kYWVtb24gJiMzNDskdCYjMzQ7ICYjMzQ7c2VydmVyJiMzNDsgXAomIzQzOwkgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUCiYjNDM7CWxvY2FsIHNlcnZlcl9waWQ9JiMzNDskcGlkJiMzNDsKJiM0MzsJb3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CWluZm8gJiMzNDt2ZXJpZnkgU0NUUCBhc3NvY2lhdGlvbiB3aXRoIHBvcnQta2V5ZWQgZmxvd3MmIzM0OwomIzQzOwlvdnNfc2J4ICYjMzQ7JHQmIzM0OyBpcCBuZXRucyBleGVjIGNsaWVudCBcCiYjNDM7CSAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gJiMzNDtTQ1RQNC1DT05ORUNUOiR7c3J2X2lwfTo0NDQzJiMzNDsgJmx0Oy9kZXYvbnVsbCBcCiYjNDM7CSAgICB8fCByZXR1cm4gMQomIzQzOwomIzQzOwlvdnNfZGVsX2Zsb3dzICYjMzQ7JHQmIzM0OyBzY3RwNAomIzQzOwomIzQzOwlpbmZvICYjMzQ7dmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMgd2l0aG91dCBmbG93cyYjMzQ7CiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDQgXAomIzQzOwkgICAgJiMzOTtpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCkmIzM5OyBcCiYjNDM7CSAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJa2lsbCAtVEVSTSAmIzM0OyRzZXJ2ZXJfcGlkJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJbG9jYWwgaT0wCiYjNDM7CXdoaWxlIGtpbGwgLTAgJiMzNDskc2VydmVyX3BpZCYjMzQ7IDImZ3Q7L2Rldi9udWxsICZhbXA7JmFtcDsgWyAmIzM0OyRpJiMzNDsgLWx0IDUgXTsgZG8KJiM0MzsJICAgIHNsZWVwIDAuMgomIzQzOwkgICAgaT0kKChpICYjNDM7IDEpKQomIzQzOwlkb25lCiYjNDM7CW92c19uZXRuc19zcGF3bl9kYWVtb24gJiMzNDskdCYjMzQ7ICYjMzQ7c2VydmVyJiMzNDsgXAomIzQzOwkgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUCiYjNDM7CXNlcnZlcl9waWQ9JiMzNDskcGlkJiMzNDsKJiM0MzsJb3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19zYnggJiMzNDskdCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFwKJiM0MzsJICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiAmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDMmIzM0OyAmbHQ7L2Rldi9udWxsIFwKJiM0MzsJICAgICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgXAomIzQzOwkgICAgJmFtcDsmYW1wOyB7IGluZm8gJiMzNDtjb25uZWN0aW9uIHNob3VsZCBmYWlsIHdpdGhvdXQgZmxvd3MmIzM0OwomIzQzOwkgICAgICAgICByZXR1cm4gMTsgfQomIzQzOwomIzQzOwlpbmZvICYjMzQ7cmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnkmIzM0OwomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA0IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKSYjMzk7IFwKJiM0MzsJICAgICYjMzk7MiYjMzk7IHx8IHJldHVybiAxCiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDQgXAomIzQzOwkgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoc3JjPTQ0NDMpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJa2lsbCAtVEVSTSAmIzM0OyRzZXJ2ZXJfcGlkJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJaT0wCiYjNDM7CXdoaWxlIGtpbGwgLTAgJiMzNDskc2VydmVyX3BpZCYjMzQ7IDImZ3Q7L2Rldi9udWxsICZhbXA7JmFtcDsgWyAmIzM0OyRpJiMzNDsgLWx0IDUgXTsgZG8KJiM0MzsJICAgIHNsZWVwIDAuMgomIzQzOwkgICAgaT0kKChpICYjNDM7IDEpKQomIzQzOwlkb25lCiYjNDM7CW92c19uZXRuc19zcGF3bl9kYWVtb24gJiMzNDskdCYjMzQ7ICYjMzQ7c2VydmVyJiMzNDsgXAomIzQzOwkgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUCiYjNDM7CXNlcnZlcl9waWQ9JiMzNDskcGlkJiMzNDsKJiM0MzsJb3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19zYnggJiMzNDskdCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFwKJiM0MzsJICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiAmIzM0O1NDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDMmIzM0OyAmbHQ7L2Rldi9udWxsIFwKJiM0MzsJICAgIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwogIyBwc2FtcGxlIHRlc3QKICMgLSB1c2UgcHNhbXBsZSB0byBvYnNlcnZlIHBhY2tldHMKIHRlc3RfcHNhbXBsZSgpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5CmluZGV4IGYzZWRkMTk4MjIzZjEuLjk0NDI5MmJmOTM0OTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weQpAQCAtMTUsNiAmIzQzOzE1LDcgQEAgaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCB0eXBlcwomIzQzO2ltcG9ydCB1bml0dGVzdAogaW1wb3J0IHV1aWQKIAogdHJ5OgpAQCAtMTk4NCw2ICYjNDM7MTk4NSwxMSBAQCBjbGFzcyBvdnNrZXkobmxhKToKICAgICAgICAgICAgICAgICAmIzM0O3VkcCYjMzQ7LAogICAgICAgICAgICAgICAgIG92c2tleS5vdnNfa2V5X3VkcCwKICAgICAgICAgICAgICksCiYjNDM7ICAgICAgICAgICAgKAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O09WU19LRVlfQVRUUl9TQ1RQJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7c2N0cCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICBvdnNrZXkub3ZzX2tleV9zY3RwLAomIzQzOyAgICAgICAgICAgICksCiAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgJiMzNDtPVlNfS0VZX0FUVFJfSUNNUCYjMzQ7LAogICAgICAgICAgICAgICAgICYjMzQ7aWNtcCYjMzQ7LApAQCAtMzE2NSw1ICYjNDM7MzE3MSw4MSBAQCBkZWYgbWFpbihhcmd2KToKICAgICByZXR1cm4gMAogCiAKJiM0MztkZWYgX2luaXRfb3Zza2V5X25sYXMoKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7SW5pdGlhbGl6ZSByZXF1aXJlZCBOTEEgY2xhc3NlcyBmb3Igb3Zza2V5IHBhcnNpbmcuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIG5sbXNnX2F0b21zLmVuY2FwX292c2tleSA9IGVuY2FwX292c2tleQomIzQzOyAgICBubG1zZ19hdG9tcy5vdnNrZXkgPSBvdnNrZXkKJiM0MzsgICAgbmxtc2dfYXRvbXMub3ZzYWN0aW9ucyA9IG92c2FjdGlvbnMKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3BhcnNlX2Zsb3coZmxvd3N0cik6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1BhcnNlIGEgZmxvdyBzdHJpbmcgYW5kIHJldHVybiB0aGUga2V5LiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBrZXkgPSBvdnNrZXkoKQomIzQzOyAgICBrZXlbJiMzNDthdHRycyYjMzQ7XSA9IFtdCiYjNDM7ICAgIHJlbWFpbmRlciA9IGtleS5wYXJzZShmbG93c3RyKQomIzQzOyAgICBpZiByZW1haW5kZXI6CiYjNDM7ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGYmIzM0O3VucGFyc2VkIHJlbWFpbmRlcjoge3JlbWFpbmRlciFyfSYjMzQ7KQomIzQzOyAgICByZXR1cm4ga2V5CiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF9maW5kX2F0dHIoa2V5LCBhdHRyX25hbWUpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtGaW5kIGFuIGF0dHJpYnV0ZSBpbiBwYXJzZWQga2V5LiYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBmb3IgYXR0ciBpbiBrZXlbJiMzNDthdHRycyYjMzQ7XToKJiM0MzsgICAgICAgIGlmIGF0dHJbMF0gPT0gYXR0cl9uYW1lOgomIzQzOyAgICAgICAgICAgIHJldHVybiBhdHRyWzFdCiYjNDM7ICAgIHJldHVybiBOb25lCiYjNDM7CiYjNDM7CiYjNDM7Y2xhc3MgVGVzdE92c0tleVBhcnNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7VW5pdCB0ZXN0cyBmb3Igb3Zza2V5LnBhcnNlKCkgZmxvdyBzdHJpbmcgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgQGNsYXNzbWV0aG9kCiYjNDM7ICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CiYjNDM7ICAgICAgICBfaW5pdF9vdnNrZXlfbmxhcygpCiYjNDM7CiYjNDM7ICAgIGRlZiB0ZXN0X3NjdHBfZHN0KHNlbGYpOgomIzQzOyAgICAgICAgJiMzNDsmIzM0OyYjMzQ7VGVzdCBTQ1RQIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7c2N0cChkc3Q9NDQ0MykmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfU0NUUCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtTQ1RQIGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O2RzdCYjMzQ7XSwgNDQ0MykKJiM0MzsKJiM0MzsgICAgZGVmIHRlc3Rfc2N0cF9zcmMoc2VsZik6CiYjNDM7ICAgICAgICAmIzM0OyYjMzQ7JiMzNDtUZXN0IFNDVFAgc291cmNlIHBvcnQgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7c2N0cChzcmM9NDQ0MykmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfU0NUUCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtTQ1RQIGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O3NyYyYjMzQ7XSwgNDQ0MykKJiM0MzsKJiM0MzsgICAgZGVmIHRlc3Rfc2N0cF9zcmNfYW5kX2RzdChzZWxmKToKJiM0MzsgICAgICAgICYjMzQ7JiMzNDsmIzM0O1Rlc3QgU0NUUCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7c2N0cChzcmM9MTIzNCxkc3Q9NTY3OCkmIzM0OykKJiM0MzsgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgJiMzNDtPVlNfS0VZX0FUVFJfU0NUUCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtTQ1RQIGtleSBub3QgZm91bmQmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O3NyYyYjMzQ7XSwgMTIzNCkKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O2RzdCYjMzQ7XSwgNTY3OCkKJiM0MzsKJiM0MzsgICAgZGVmIHRlc3Rfc2N0cF9yb3VuZHRyaXAoc2VsZik6CiYjNDM7ICAgICAgICAmIzM0OyYjMzQ7JiMzNDtUZXN0IHBhcnNlIC0mZ3Q7IGRwc3RyIC0mZ3Q7IHBhcnNlIGtlZXBzIHRoZSBTQ1RQIGtleS4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KCYjMzQ7c2N0cChkc3Q9NDQ0MykmIzM0OykKJiM0MzsgICAgICAgIGtleTIgPSBvdnNrZXkoKQomIzQzOyAgICAgICAga2V5MlsmIzM0O2F0dHJzJiMzNDtdID0gW10KJiM0MzsgICAgICAgIHJlbWFpbmRlciA9IGtleTIucGFyc2Uoa2V5LmRwc3RyKCkpCiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbWFpbmRlciwgJiMzNDsmIzM0OywgJiMzNDtyb3VuZC10cmlwIGxlZnQgdW5wYXJzZWQgdGV4dCYjMzQ7KQomIzQzOyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5MiwgJiMzNDtPVlNfS0VZX0FUVFJfU0NUUCYjMzQ7KQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgJiMzNDtTQ1RQIGtleSBsb3N0IGluIHJvdW5kLXRyaXAmIzM0OykKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0clsmIzM0O2RzdCYjMzQ7XSwgNDQ0MykKJiM0MzsKJiM0MzsKJiM0MztkZWYgdGVzdF9vdnNrZXlfcGFyc2UoKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7VGVzdCBvdnNrZXkucGFyc2UoKSBtZXRob2QgZm9yIHZhcmlvdXMgZmxvdyBrZXkgdHlwZXMuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdExvYWRlcigpLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0T3ZzS2V5UGFyc2UpCiYjNDM7ICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yKQomIzQzOyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKQomIzQzOyAgICByZXR1cm4gMCBpZiByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpIGVsc2UgMQomIzQzOwomIzQzOwogaWYgX19uYW1lX18gPT0gJiMzNDtfX21haW5fXyYjMzQ7OgomIzQzOyAgICBpZiBsZW4oc3lzLmFyZ3YpICZndDsgMSBhbmQgc3lzLmFyZ3ZbMV0gPT0gJiMzNDstLXRlc3QmIzM0OzoKJiM0MzsgICAgICAgIHN5cy5leGl0KHRlc3Rfb3Zza2V5X3BhcnNlKCkpCiAgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndikpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMjIKCQkJCQkJCW91dHB1dDogNzcKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggU2VsZnRlc3QgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weWAuICBFc3NlbnRpYWxseSwgaXQmIzM5O3MgaW50cm9kdWNpbmcgYSBuZXcgdGVzdCwgYHNjdHBfY29ubmVjdF92NGAsIGludG8gdGhlIE9wZW4gdlN3aXRjaCBzZWxmdGVzdHMsIGFuZCBiZWVmaW5nIHVwIHRoZSBQeXRob24gc2NyaXB0IHRvIGhhbmRsZSBTQ1RQIGZsb3cga2V5cy4gR29vZCwgZ29vZC4gIFB1cmVseSBzZWxmdGVzdCBzdHVmZi4gTm8ga2VybmVsIGNvcmUgbW9kaWZpY2F0aW9ucywgbm8gZHJpdmVyIGNoYW5nZXMsIGFuZCBub3RoaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoaXMgZG9lc24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBhbGwgdGhlIHBhdGNoIHRvdWNoZXMuIFllcCwgY29uZmlybWVkLiBPbmx5IHRob3NlIHR3byBmaWxlcy4gQWxsIHJpZ2h0LCBJJiMzOTttIHNhdGlzZmllZC4KCkkgd2lsbCBjb25maWRlbnRseSBtYXJrICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgYXMgZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoKSBieSBhZGRpbmcgYW4gU0NUUCB0ZXN0IGFuZCByZWxhdGVkIHBhcnNpbmcgbG9naWMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaCkgYnkgYWRkaW5nIGFuIFNDVFAgdGVzdCBhbmQgcmVsYXRlZCBwYXJzaW5nIGxvZ2ljLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMzoxODoyMy4xODI4Mjk3MDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODkzMjI2NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoKSBieSBhZGRpbmcgYW4gU0NUUCB0ZXN0IGFuZCByZWxhdGVkIHBhcnNpbmcgbG9naWMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MTg6MjMuMTgyODM3MjIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjU4MTYyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5MWI2ZGQ1MWZmMmFiMjQ4OTk5MmM1YWEzYWQxNjViNjI3NDg5YmEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDEzOjE4OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxcbmluZGV4IDg1M2RiYzFiMDBkN2EuLmI0NDgzMjQ1MjdkOGIgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXFxuQEAgLTM0LDYgKzM0LDcgQEAgdGVzdHM9XFxcIlxcbiBcXHRhY3Rpb25fc2V0XFx0XFx0XFx0XFx0c2V0OiBTRVQgYWN0aW9uIHJld3JpdGVzIGZpZWxkc1xcbiBcXHR0cnVuY1xcdFxcdFxcdFxcdFxcdHRydW5jOiBvdXRwdXQgdHJ1bmNhdGlvblxcbiBcXHRpY21wdjZcXHRcXHRcXHRcXHRcXHRpY21wdjY6IElDTVB2NiBlY2hvIHR5cGUgbWF0Y2hcXG4rXFx0c2N0cF9jb25uZWN0X3Y0XFx0XFx0XFx0XFx0c2N0cDogU0NUUCBmbG93IGtleSBtYXRjaGluZ1xcbiBcXHRwc2FtcGxlXFx0XFx0XFx0XFx0XFx0cHNhbXBsZTogU2FtcGxpbmcgcGFja2V0cyB3aXRoIHBzYW1wbGVcXFwiXFxuIFxcbiBpbmZvKCkge1xcbkBAIC02MTEsNiArNjEyLDEyNiBAQCB0ZXN0X2ljbXB2NigpIHtcXG4gXFx0cmV0dXJuIDBcXG4gfVxcbiBcXG4rIyBDaGVjayBmb3IgYW4gU0NUUCBlbmRwb2ludCB2aWEgL3Byb2MsIHdoaWNoIHdvcmtzIHdpdGhvdXQgc2N0cF9kaWFnLlxcbitzY3RwX2Vwc19oYXMoKSB7XFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiQxXFxcIiBhd2sgLXYgcD1cXFwiJDJcXFwiICckNj09cCcgL3Byb2MvbmV0L3NjdHAvZXBzIHwgZ3JlcCAtcSAuXFxuK31cXG4rXFxuKyMgc2N0cF9jb25uZWN0X3Y0IHRlc3RcXG4rIyAtIHNjdHAoZHN0PTQ0NDMpIG1hdGNoZXMgY2xpZW50LXRvLXNlcnZlciBJTklUXFxuKyMgLSBzY3RwKHNyYz00NDQzKSBtYXRjaGVzIHNlcnZlci10by1jbGllbnQgSU5JVC1BQ0tcXG4rIyAtIHJlbW92ZSBmbG93cyBhbmQgdmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMsIHJlaW5zdGFsbCBhbmQgcmVjb3Zlclxcbit0ZXN0X3NjdHBfY29ubmVjdF92NCgpIHtcXG4rXFx0bG9jYWwgdD1cXFwidGVzdF9zY3RwX2Nvbm5lY3RfdjRcXFwiXFxuK1xcdGxvY2FsIHNydl9pcD0xNzIuMzEuMTEwLjIwXFxuK1xcbitcXHRtb2Rwcm9iZSAtcSBzY3RwIDJcXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0c29jYXQgLVYgMlxcdTAwM2VcXHUwMDI2MSB8IGdyZXAgLXEgXFxcImRlZmluZSBXSVRIX1NDVFBcXFwiIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFxuK1xcdHNieF9hZGQgXFxcIiR0XFxcIiB8fCByZXR1cm4gJD9cXG4rXFx0b3ZzX2FkZF9kcCBcXFwiJHRcXFwiIHNjdHA0IHx8IHJldHVybiAxXFxuK1xcbitcXHRpbmZvIFxcXCJjcmVhdGUgbmFtZXNwYWNlc1xcXCJcXG4rXFx0Zm9yIG5zIGluIGNsaWVudCBzZXJ2ZXI7IGRvXFxuK1xcdFxcdG92c19hZGRfbmV0bnNfYW5kX3ZldGhzIFxcXCIkdFxcXCIgXFxcInNjdHA0XFxcIiBcXFwiJG5zXFxcIiBcXFxcXFxuK1xcdFxcdCAgICBcXFwiJHtuczowOjF9MFxcXCIgXFxcIiR7bnM6MDoxfTFcXFwiIHx8IHJldHVybiAxXFxuK1xcdGRvbmVcXG4rXFxuK1xcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMTAvMjQgZGV2IGMxXFxuK1xcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGxpbmsgc2V0IGMxIHVwXFxuK1xcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGFkZHIgYWRkIFxcXCIke3Nydl9pcH0vMjRcXFwiIGRldiBzMVxcbitcXHRpcCBuZXRucyBleGVjIHNlcnZlciBpcCBsaW5rIHNldCBzMSB1cFxcbitcXG4rXFx0IyBQcm9iZTogY2hlY2sgaWYga2VybmVsIHN1cHBvcnRzIHNjdHAgZmxvdyBrZXkuXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA0IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoZHN0PTQ0NDMpJyBcXFxcXFxuK1xcdCAgICAnMicgXFx1MDAyNlxcdTAwM2UvZGV2L251bGxcXG4rXFx0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXFxuK1xcdFxcdGluZm8gXFxcIm5vIHN1cHBvcnQgZm9yIHNjdHAga2V5IC0gc2tpcHBpbmdcXFwiXFxuK1xcdFxcdG92c19leGl0X3NpZ1xcbitcXHRcXHRyZXR1cm4gJGtzZnRfc2tpcFxcbitcXHRmaVxcbitcXHRvdnNfZGVsX2Zsb3dzIFxcXCIkdFxcXCIgc2N0cDRcXG4rXFxuK1xcdCMgQVJQIGZvcndhcmRpbmdcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDQgXFxcXFxcbitcXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgXFxcXFxcbitcXHQgICAgJzInIHx8IHJldHVybiAxXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA0IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCknIFxcXFxcXG4rXFx0ICAgICcxJyB8fCByZXR1cm4gMVxcbitcXG4rXFx0IyBTQ1RQIHBvcnQgbWF0Y2hpbmc6IGRzdCBmb3IgcmVxdWVzdCwgc3JjIGZvciByZXBseVxcbitcXHRvdnNfYWRkX2Zsb3cgXFxcIiR0XFxcIiBzY3RwNCBcXFxcXFxuK1xcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKScgXFxcXFxcbitcXHQgICAgJzInIHx8IHJldHVybiAxXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA0IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoc3JjPTQ0NDMpJyBcXFxcXFxuK1xcdCAgICAnMScgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXFxcIiR0XFxcIiBcXFwic2VydmVyXFxcIiBcXFxcXFxuK1xcdCAgICBzb2NhdCAtdSBTQ1RQNC1MSVNURU46NDQ0MyBTVERPVVRcXG4rXFx0bG9jYWwgc2VydmVyX3BpZD1cXFwiJHBpZFxcXCJcXG4rXFx0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxXFxuK1xcbitcXHRpbmZvIFxcXCJ2ZXJpZnkgU0NUUCBhc3NvY2lhdGlvbiB3aXRoIHBvcnQta2V5ZWQgZmxvd3NcXFwiXFxuK1xcdG92c19zYnggXFxcIiR0XFxcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxcXFxuK1xcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXFxcIlNDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcXFwiIFxcdTAwM2MvZGV2L251bGwgXFxcXFxcbitcXHQgICAgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdG92c19kZWxfZmxvd3MgXFxcIiR0XFxcIiBzY3RwNFxcbitcXG4rXFx0aW5mbyBcXFwidmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMgd2l0aG91dCBmbG93c1xcXCJcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDQgXFxcXFxcbitcXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgXFxcXFxcbitcXHQgICAgJzInIHx8IHJldHVybiAxXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA0IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCknIFxcXFxcXG4rXFx0ICAgICcxJyB8fCByZXR1cm4gMVxcbitcXG4rXFx0a2lsbCAtVEVSTSBcXFwiJHNlcnZlcl9waWRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGxvY2FsIGk9MFxcbitcXHR3aGlsZSBraWxsIC0wIFxcXCIkc2VydmVyX3BpZFxcXCIgMlxcdTAwM2UvZGV2L251bGwgXFx1MDAyNlxcdTAwMjYgWyBcXFwiJGlcXFwiIC1sdCA1IF07IGRvXFxuK1xcdCAgICBzbGVlcCAwLjJcXG4rXFx0ICAgIGk9JCgoaSArIDEpKVxcbitcXHRkb25lXFxuK1xcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXFxcIiR0XFxcIiBcXFwic2VydmVyXFxcIiBcXFxcXFxuK1xcdCAgICBzb2NhdCAtdSBTQ1RQNC1MSVNURU46NDQ0MyBTVERPVVRcXG4rXFx0c2VydmVyX3BpZD1cXFwiJHBpZFxcXCJcXG4rXFx0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxXFxuK1xcbitcXHRvdnNfc2J4IFxcXCIkdFxcXCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcXFxcbitcXHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFxcXCJTQ1RQNC1DT05ORUNUOiR7c3J2X2lwfTo0NDQzXFxcIiBcXHUwMDNjL2Rldi9udWxsIFxcXFxcXG4rXFx0ICAgIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSBcXFxcXFxuK1xcdCAgICBcXHUwMDI2XFx1MDAyNiB7IGluZm8gXFxcImNvbm5lY3Rpb24gc2hvdWxkIGZhaWwgd2l0aG91dCBmbG93c1xcXCJcXG4rXFx0ICAgICAgICAgcmV0dXJuIDE7IH1cXG4rXFxuK1xcdGluZm8gXFxcInJlaW5zdGFsbCBmbG93cyBhbmQgdmVyaWZ5IHJlY292ZXJ5XFxcIlxcbitcXHRvdnNfYWRkX2Zsb3cgXFxcIiR0XFxcIiBzY3RwNCBcXFxcXFxuK1xcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKScgXFxcXFxcbitcXHQgICAgJzInIHx8IHJldHVybiAxXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA0IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksaXB2NChwcm90bz0xMzIpLHNjdHAoc3JjPTQ0NDMpJyBcXFxcXFxuK1xcdCAgICAnMScgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdGtpbGwgLVRFUk0gXFxcIiRzZXJ2ZXJfcGlkXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRpPTBcXG4rXFx0d2hpbGUga2lsbCAtMCBcXFwiJHNlcnZlcl9waWRcXFwiIDJcXHUwMDNlL2Rldi9udWxsIFxcdTAwMjZcXHUwMDI2IFsgXFxcIiRpXFxcIiAtbHQgNSBdOyBkb1xcbitcXHQgICAgc2xlZXAgMC4yXFxuK1xcdCAgICBpPSQoKGkgKyAxKSlcXG4rXFx0ZG9uZVxcbitcXHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFxcXCIkdFxcXCIgXFxcInNlcnZlclxcXCIgXFxcXFxcbitcXHQgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUXFxuK1xcdHNlcnZlcl9waWQ9XFxcIiRwaWRcXFwiXFxuK1xcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxcbitcXG4rXFx0b3ZzX3NieCBcXFwiJHRcXFwiIGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXFxcXG4rXFx0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcXFwiU0NUUDQtQ09OTkVDVDoke3Nydl9pcH06NDQ0M1xcXCIgXFx1MDAzYy9kZXYvbnVsbCBcXFxcXFxuK1xcdCAgICB8fCByZXR1cm4gMVxcbitcXG4rXFx0cmV0dXJuIDBcXG4rfVxcbitcXG4gIyBwc2FtcGxlIHRlc3RcXG4gIyAtIHVzZSBwc2FtcGxlIHRvIG9ic2VydmUgcGFja2V0c1xcbiB0ZXN0X3BzYW1wbGUoKSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5XFxuaW5kZXggZjNlZGQxOTgyMjNmMS4uOTQ0MjkyYmY5MzQ5MSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weVxcbkBAIC0xNSw2ICsxNSw3IEBAIGltcG9ydCBzdHJ1Y3RcXG4gaW1wb3J0IHN5c1xcbiBpbXBvcnQgdGltZVxcbiBpbXBvcnQgdHlwZXNcXG4raW1wb3J0IHVuaXR0ZXN0XFxuIGltcG9ydCB1dWlkXFxuIFxcbiB0cnk6XFxuQEAgLTE5ODQsNiArMTk4NSwxMSBAQCBjbGFzcyBvdnNrZXkobmxhKTpcXG4gICAgICAgICAgICAgICAgIFxcXCJ1ZHBcXFwiLFxcbiAgICAgICAgICAgICAgICAgb3Zza2V5Lm92c19rZXlfdWRwLFxcbiAgICAgICAgICAgICApLFxcbisgICAgICAgICAgICAoXFxuKyAgICAgICAgICAgICAgICBcXFwiT1ZTX0tFWV9BVFRSX1NDVFBcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcInNjdHBcXFwiLFxcbisgICAgICAgICAgICAgICAgb3Zza2V5Lm92c19rZXlfc2N0cCxcXG4rICAgICAgICAgICAgKSxcXG4gICAgICAgICAgICAgKFxcbiAgICAgICAgICAgICAgICAgXFxcIk9WU19LRVlfQVRUUl9JQ01QXFxcIixcXG4gICAgICAgICAgICAgICAgIFxcXCJpY21wXFxcIixcXG5AQCAtMzE2NSw1ICszMTcxLDgxIEBAIGRlZiBtYWluKGFyZ3YpOlxcbiAgICAgcmV0dXJuIDBcXG4gXFxuIFxcbitkZWYgX2luaXRfb3Zza2V5X25sYXMoKTpcXG4rICAgIFxcXCJcXFwiXFxcIkluaXRpYWxpemUgcmVxdWlyZWQgTkxBIGNsYXNzZXMgZm9yIG92c2tleSBwYXJzaW5nLlxcXCJcXFwiXFxcIlxcbisgICAgbmxtc2dfYXRvbXMuZW5jYXBfb3Zza2V5ID0gZW5jYXBfb3Zza2V5XFxuKyAgICBubG1zZ19hdG9tcy5vdnNrZXkgPSBvdnNrZXlcXG4rICAgIG5sbXNnX2F0b21zLm92c2FjdGlvbnMgPSBvdnNhY3Rpb25zXFxuK1xcbitcXG4rZGVmIF9wYXJzZV9mbG93KGZsb3dzdHIpOlxcbisgICAgXFxcIlxcXCJcXFwiUGFyc2UgYSBmbG93IHN0cmluZyBhbmQgcmV0dXJuIHRoZSBrZXkuXFxcIlxcXCJcXFwiXFxuKyAgICBrZXkgPSBvdnNrZXkoKVxcbisgICAga2V5W1xcXCJhdHRyc1xcXCJdID0gW11cXG4rICAgIHJlbWFpbmRlciA9IGtleS5wYXJzZShmbG93c3RyKVxcbisgICAgaWYgcmVtYWluZGVyOlxcbisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZlxcXCJ1bnBhcnNlZCByZW1haW5kZXI6IHtyZW1haW5kZXIhcn1cXFwiKVxcbisgICAgcmV0dXJuIGtleVxcbitcXG4rXFxuK2RlZiBfZmluZF9hdHRyKGtleSwgYXR0cl9uYW1lKTpcXG4rICAgIFxcXCJcXFwiXFxcIkZpbmQgYW4gYXR0cmlidXRlIGluIHBhcnNlZCBrZXkuXFxcIlxcXCJcXFwiXFxuKyAgICBmb3IgYXR0ciBpbiBrZXlbXFxcImF0dHJzXFxcIl06XFxuKyAgICAgICAgaWYgYXR0clswXSA9PSBhdHRyX25hbWU6XFxuKyAgICAgICAgICAgIHJldHVybiBhdHRyWzFdXFxuKyAgICByZXR1cm4gTm9uZVxcbitcXG4rXFxuK2NsYXNzIFRlc3RPdnNLZXlQYXJzZSh1bml0dGVzdC5UZXN0Q2FzZSk6XFxuKyAgICBcXFwiXFxcIlxcXCJVbml0IHRlc3RzIGZvciBvdnNrZXkucGFyc2UoKSBmbG93IHN0cmluZyBwYXJzaW5nLlxcXCJcXFwiXFxcIlxcbitcXG4rICAgIEBjbGFzc21ldGhvZFxcbisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKTpcXG4rICAgICAgICBfaW5pdF9vdnNrZXlfbmxhcygpXFxuK1xcbisgICAgZGVmIHRlc3Rfc2N0cF9kc3Qoc2VsZik6XFxuKyAgICAgICAgXFxcIlxcXCJcXFwiVGVzdCBTQ1RQIGRlc3RpbmF0aW9uIHBvcnQgcGFyc2luZy5cXFwiXFxcIlxcXCJcXG4rICAgICAgICBrZXkgPSBfcGFyc2VfZmxvdyhcXFwic2N0cChkc3Q9NDQ0MylcXFwiKVxcbisgICAgICAgIGF0dHIgPSBfZmluZF9hdHRyKGtleSwgXFxcIk9WU19LRVlfQVRUUl9TQ1RQXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcXFwiU0NUUCBrZXkgbm90IGZvdW5kXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXFxcImRzdFxcXCJdLCA0NDQzKVxcbitcXG4rICAgIGRlZiB0ZXN0X3NjdHBfc3JjKHNlbGYpOlxcbisgICAgICAgIFxcXCJcXFwiXFxcIlRlc3QgU0NUUCBzb3VyY2UgcG9ydCBwYXJzaW5nLlxcXCJcXFwiXFxcIlxcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFxcXCJzY3RwKHNyYz00NDQzKVxcXCIpXFxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcXFwiT1ZTX0tFWV9BVFRSX1NDVFBcXFwiKVxcbisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGF0dHIsIFxcXCJTQ1RQIGtleSBub3QgZm91bmRcXFwiKVxcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcXFwic3JjXFxcIl0sIDQ0NDMpXFxuK1xcbisgICAgZGVmIHRlc3Rfc2N0cF9zcmNfYW5kX2RzdChzZWxmKTpcXG4rICAgICAgICBcXFwiXFxcIlxcXCJUZXN0IFNDVFAgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBwb3J0IHBhcnNpbmcuXFxcIlxcXCJcXFwiXFxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXFxcInNjdHAoc3JjPTEyMzQsZHN0PTU2NzgpXFxcIilcXG4rICAgICAgICBhdHRyID0gX2ZpbmRfYXR0cihrZXksIFxcXCJPVlNfS0VZX0FUVFJfU0NUUFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXFxcIlNDVFAga2V5IG5vdCBmb3VuZFxcXCIpXFxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1xcXCJzcmNcXFwiXSwgMTIzNClcXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXFxcImRzdFxcXCJdLCA1Njc4KVxcbitcXG4rICAgIGRlZiB0ZXN0X3NjdHBfcm91bmR0cmlwKHNlbGYpOlxcbisgICAgICAgIFxcXCJcXFwiXFxcIlRlc3QgcGFyc2UgLVxcdTAwM2UgZHBzdHIgLVxcdTAwM2UgcGFyc2Uga2VlcHMgdGhlIFNDVFAga2V5LlxcXCJcXFwiXFxcIlxcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFxcXCJzY3RwKGRzdD00NDQzKVxcXCIpXFxuKyAgICAgICAga2V5MiA9IG92c2tleSgpXFxuKyAgICAgICAga2V5MltcXFwiYXR0cnNcXFwiXSA9IFtdXFxuKyAgICAgICAgcmVtYWluZGVyID0ga2V5Mi5wYXJzZShrZXkuZHBzdHIoKSlcXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbWFpbmRlciwgXFxcIlxcXCIsIFxcXCJyb3VuZC10cmlwIGxlZnQgdW5wYXJzZWQgdGV4dFxcXCIpXFxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5MiwgXFxcIk9WU19LRVlfQVRUUl9TQ1RQXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcXFwiU0NUUCBrZXkgbG9zdCBpbiByb3VuZC10cmlwXFxcIilcXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJbXFxcImRzdFxcXCJdLCA0NDQzKVxcbitcXG4rXFxuK2RlZiB0ZXN0X292c2tleV9wYXJzZSgpOlxcbisgICAgXFxcIlxcXCJcXFwiVGVzdCBvdnNrZXkucGFyc2UoKSBtZXRob2QgZm9yIHZhcmlvdXMgZmxvdyBrZXkgdHlwZXMuXFxcIlxcXCJcXFwiXFxuKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKS5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdE92c0tleVBhcnNlKVxcbisgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIodmVyYm9zaXR5PTIpXFxuKyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKVxcbisgICAgcmV0dXJuIDAgaWYgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSBlbHNlIDFcXG4rXFxuK1xcbiBpZiBfX25hbWVfXyA9PSBcXFwiX19tYWluX19cXFwiOlxcbisgICAgaWYgbGVuKHN5cy5hcmd2KSBcXHUwMDNlIDEgYW5kIHN5cy5hcmd2WzFdID09IFxcXCItLXRlc3RcXFwiOlxcbisgICAgICAgIHN5cy5leGl0KHRlc3Rfb3Zza2V5X3BhcnNlKCkpXFxuICAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MTg6MjMuNjA5MzM0ODg2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTQ2NjcxNDY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaCkgYnkgYWRkaW5nIGFuIFNDVFAgdGVzdCBhbmQgcmVsYXRlZCBwYXJzaW5nIGxvZ2ljLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkxYjZkZDUxZmYyYWIyNDg5OTkyYzVhYTNhZDE2NWI2Mjc0ODliYTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxMzoxODoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuaW5kZXggODUzZGJjMWIwMGQ3YS4uYjQ0ODMyNDUyN2Q4YiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXG5AQCAtMzQsNiArMzQsNyBAQCB0ZXN0cz1cIlxuIFx0YWN0aW9uX3NldFx0XHRcdFx0c2V0OiBTRVQgYWN0aW9uIHJld3JpdGVzIGZpZWxkc1xuIFx0dHJ1bmNcdFx0XHRcdFx0dHJ1bmM6IG91dHB1dCB0cnVuY2F0aW9uXG4gXHRpY21wdjZcdFx0XHRcdFx0aWNtcHY2OiBJQ01QdjYgZWNobyB0eXBlIG1hdGNoXG4rXHRzY3RwX2Nvbm5lY3RfdjRcdFx0XHRcdHNjdHA6IFNDVFAgZmxvdyBrZXkgbWF0Y2hpbmdcbiBcdHBzYW1wbGVcdFx0XHRcdFx0cHNhbXBsZTogU2FtcGxpbmcgcGFja2V0cyB3aXRoIHBzYW1wbGVcIlxuIFxuIGluZm8oKSB7XG5AQCAtNjExLDYgKzYxMiwxMjYgQEAgdGVzdF9pY21wdjYoKSB7XG4gXHRyZXR1cm4gMFxuIH1cbiBcbisjIENoZWNrIGZvciBhbiBTQ1RQIGVuZHBvaW50IHZpYSAvcHJvYywgd2hpY2ggd29ya3Mgd2l0aG91dCBzY3RwX2RpYWcuXG4rc2N0cF9lcHNfaGFzKCkge1xuK1x0aXAgbmV0bnMgZXhlYyBcIiQxXCIgYXdrIC12IHA9XCIkMlwiICckNj09cCcgL3Byb2MvbmV0L3NjdHAvZXBzIHwgZ3JlcCAtcSAuXG4rfVxuK1xuKyMgc2N0cF9jb25uZWN0X3Y0IHRlc3RcbisjIC0gc2N0cChkc3Q9NDQ0MykgbWF0Y2hlcyBjbGllbnQtdG8tc2VydmVyIElOSVRcbisjIC0gc2N0cChzcmM9NDQ0MykgbWF0Y2hlcyBzZXJ2ZXItdG8tY2xpZW50IElOSVQtQUNLXG4rIyAtIHJlbW92ZSBmbG93cyBhbmQgdmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMsIHJlaW5zdGFsbCBhbmQgcmVjb3ZlclxuK3Rlc3Rfc2N0cF9jb25uZWN0X3Y0KCkge1xuK1x0bG9jYWwgdD1cInRlc3Rfc2N0cF9jb25uZWN0X3Y0XCJcbitcdGxvY2FsIHNydl9pcD0xNzIuMzEuMTEwLjIwXG4rXG4rXHRtb2Rwcm9iZSAtcSBzY3RwIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIFwiJGtzZnRfc2tpcFwiXG4rXHRzb2NhdCAtViAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXEgXCJkZWZpbmUgV0lUSF9TQ1RQXCIgfHwgcmV0dXJuIFwiJGtzZnRfc2tpcFwiXG4rXG4rXHRzYnhfYWRkIFwiJHRcIiB8fCByZXR1cm4gJD9cbitcdG92c19hZGRfZHAgXCIkdFwiIHNjdHA0IHx8IHJldHVybiAxXG4rXG4rXHRpbmZvIFwiY3JlYXRlIG5hbWVzcGFjZXNcIlxuK1x0Zm9yIG5zIGluIGNsaWVudCBzZXJ2ZXI7IGRvXG4rXHRcdG92c19hZGRfbmV0bnNfYW5kX3ZldGhzIFwiJHRcIiBcInNjdHA0XCIgXCIkbnNcIiBcXFxuK1x0XHQgICAgXCIke25zOjA6MX0wXCIgXCIke25zOjA6MX0xXCIgfHwgcmV0dXJuIDFcbitcdGRvbmVcbitcbitcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMTAvMjQgZGV2IGMxXG4rXHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBsaW5rIHNldCBjMSB1cFxuK1x0aXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgYWRkciBhZGQgXCIke3Nydl9pcH0vMjRcIiBkZXYgczFcbitcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwXG4rXG4rXHQjIFByb2JlOiBjaGVjayBpZiBrZXJuZWwgc3VwcG9ydHMgc2N0cCBmbG93IGtleS5cbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDQgXFxcbitcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKScgXFxcbitcdCAgICAnMicgXHUwMDI2XHUwMDNlL2Rldi9udWxsXG4rXHRpZiBbICQ/IC1uZSAwIF07IHRoZW5cbitcdFx0aW5mbyBcIm5vIHN1cHBvcnQgZm9yIHNjdHAga2V5IC0gc2tpcHBpbmdcIlxuK1x0XHRvdnNfZXhpdF9zaWdcbitcdFx0cmV0dXJuICRrc2Z0X3NraXBcbitcdGZpXG4rXHRvdnNfZGVsX2Zsb3dzIFwiJHRcIiBzY3RwNFxuK1xuK1x0IyBBUlAgZm9yd2FyZGluZ1xuK1x0b3ZzX2FkZF9mbG93IFwiJHRcIiBzY3RwNCBcXFxuK1x0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCknIFxcXG4rXHQgICAgJzInIHx8IHJldHVybiAxXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA0IFxcXG4rXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgXFxcbitcdCAgICAnMScgfHwgcmV0dXJuIDFcbitcbitcdCMgU0NUUCBwb3J0IG1hdGNoaW5nOiBkc3QgZm9yIHJlcXVlc3QsIHNyYyBmb3IgcmVwbHlcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDQgXFxcbitcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKGRzdD00NDQzKScgXFxcbitcdCAgICAnMicgfHwgcmV0dXJuIDFcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDQgXFxcbitcdCAgICAnaW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQocHJvdG89MTMyKSxzY3RwKHNyYz00NDQzKScgXFxcbitcdCAgICAnMScgfHwgcmV0dXJuIDFcbitcbitcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXCIkdFwiIFwic2VydmVyXCIgXFxcbitcdCAgICBzb2NhdCAtdSBTQ1RQNC1MSVNURU46NDQ0MyBTVERPVVRcbitcdGxvY2FsIHNlcnZlcl9waWQ9XCIkcGlkXCJcbitcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxuK1xuK1x0aW5mbyBcInZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIHdpdGggcG9ydC1rZXllZCBmbG93c1wiXG4rXHRvdnNfc2J4IFwiJHRcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxuK1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcIlNDVFA0LUNPTk5FQ1Q6JHtzcnZfaXB9OjQ0NDNcIiBcdTAwM2MvZGV2L251bGwgXFxcbitcdCAgICB8fCByZXR1cm4gMVxuK1xuK1x0b3ZzX2RlbF9mbG93cyBcIiR0XCIgc2N0cDRcbitcbitcdGluZm8gXCJ2ZXJpZnkgY29ubmVjdGlvbiBmYWlscyB3aXRob3V0IGZsb3dzXCJcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDQgXFxcbitcdCAgICAnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJyBcXFxuK1x0ICAgICcyJyB8fCByZXR1cm4gMVxuK1x0b3ZzX2FkZF9mbG93IFwiJHRcIiBzY3RwNCBcXFxuK1x0ICAgICdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCknIFxcXG4rXHQgICAgJzEnIHx8IHJldHVybiAxXG4rXG4rXHRraWxsIC1URVJNIFwiJHNlcnZlcl9waWRcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRsb2NhbCBpPTBcbitcdHdoaWxlIGtpbGwgLTAgXCIkc2VydmVyX3BpZFwiIDJcdTAwM2UvZGV2L251bGwgXHUwMDI2XHUwMDI2IFsgXCIkaVwiIC1sdCA1IF07IGRvXG4rXHQgICAgc2xlZXAgMC4yXG4rXHQgICAgaT0kKChpICsgMSkpXG4rXHRkb25lXG4rXHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFwiJHRcIiBcInNlcnZlclwiIFxcXG4rXHQgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUXG4rXHRzZXJ2ZXJfcGlkPVwiJHBpZFwiXG4rXHRvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDQ0NDMgfHwgcmV0dXJuIDFcbitcbitcdG92c19zYnggXCIkdFwiIGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXG4rXHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwiU0NUUDQtQ09OTkVDVDoke3Nydl9pcH06NDQ0M1wiIFx1MDAzYy9kZXYvbnVsbCBcXFxuK1x0ICAgIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcXFxuK1x0ICAgIFx1MDAyNlx1MDAyNiB7IGluZm8gXCJjb25uZWN0aW9uIHNob3VsZCBmYWlsIHdpdGhvdXQgZmxvd3NcIlxuK1x0ICAgICAgICAgcmV0dXJuIDE7IH1cbitcbitcdGluZm8gXCJyZWluc3RhbGwgZmxvd3MgYW5kIHZlcmlmeSByZWNvdmVyeVwiXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA0IFxcXG4rXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChkc3Q9NDQ0MyknIFxcXG4rXHQgICAgJzInIHx8IHJldHVybiAxXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA0IFxcXG4rXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KHByb3RvPTEzMiksc2N0cChzcmM9NDQ0MyknIFxcXG4rXHQgICAgJzEnIHx8IHJldHVybiAxXG4rXG4rXHRraWxsIC1URVJNIFwiJHNlcnZlcl9waWRcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRpPTBcbitcdHdoaWxlIGtpbGwgLTAgXCIkc2VydmVyX3BpZFwiIDJcdTAwM2UvZGV2L251bGwgXHUwMDI2XHUwMDI2IFsgXCIkaVwiIC1sdCA1IF07IGRvXG4rXHQgICAgc2xlZXAgMC4yXG4rXHQgICAgaT0kKChpICsgMSkpXG4rXHRkb25lXG4rXHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFwiJHRcIiBcInNlcnZlclwiIFxcXG4rXHQgICAgc29jYXQgLXUgU0NUUDQtTElTVEVOOjQ0NDMgU1RET1VUXG4rXHRzZXJ2ZXJfcGlkPVwiJHBpZFwiXG4rXHRvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDQ0NDMgfHwgcmV0dXJuIDFcbitcbitcdG92c19zYnggXCIkdFwiIGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXG4rXHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwiU0NUUDQtQ09OTkVDVDoke3Nydl9pcH06NDQ0M1wiIFx1MDAzYy9kZXYvbnVsbCBcXFxuK1x0ICAgIHx8IHJldHVybiAxXG4rXG4rXHRyZXR1cm4gMFxuK31cbitcbiAjIHBzYW1wbGUgdGVzdFxuICMgLSB1c2UgcHNhbXBsZSB0byBvYnNlcnZlIHBhY2tldHNcbiB0ZXN0X3BzYW1wbGUoKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vdnMtZHBjdGwucHlcbmluZGV4IGYzZWRkMTk4MjIzZjEuLjk0NDI5MmJmOTM0OTEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3ZzLWRwY3RsLnB5XG5AQCAtMTUsNiArMTUsNyBAQCBpbXBvcnQgc3RydWN0XG4gaW1wb3J0IHN5c1xuIGltcG9ydCB0aW1lXG4gaW1wb3J0IHR5cGVzXG4raW1wb3J0IHVuaXR0ZXN0XG4gaW1wb3J0IHV1aWRcbiBcbiB0cnk6XG5AQCAtMTk4NCw2ICsxOTg1LDExIEBAIGNsYXNzIG92c2tleShubGEpOlxuICAgICAgICAgICAgICAgICBcInVkcFwiLFxuICAgICAgICAgICAgICAgICBvdnNrZXkub3ZzX2tleV91ZHAsXG4gICAgICAgICAgICAgKSxcbisgICAgICAgICAgICAoXG4rICAgICAgICAgICAgICAgIFwiT1ZTX0tFWV9BVFRSX1NDVFBcIixcbisgICAgICAgICAgICAgICAgXCJzY3RwXCIsXG4rICAgICAgICAgICAgICAgIG92c2tleS5vdnNfa2V5X3NjdHAsXG4rICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgIFwiT1ZTX0tFWV9BVFRSX0lDTVBcIixcbiAgICAgICAgICAgICAgICAgXCJpY21wXCIsXG5AQCAtMzE2NSw1ICszMTcxLDgxIEBAIGRlZiBtYWluKGFyZ3YpOlxuICAgICByZXR1cm4gMFxuIFxuIFxuK2RlZiBfaW5pdF9vdnNrZXlfbmxhcygpOlxuKyAgICBcIlwiXCJJbml0aWFsaXplIHJlcXVpcmVkIE5MQSBjbGFzc2VzIGZvciBvdnNrZXkgcGFyc2luZy5cIlwiXCJcbisgICAgbmxtc2dfYXRvbXMuZW5jYXBfb3Zza2V5ID0gZW5jYXBfb3Zza2V5XG4rICAgIG5sbXNnX2F0b21zLm92c2tleSA9IG92c2tleVxuKyAgICBubG1zZ19hdG9tcy5vdnNhY3Rpb25zID0gb3ZzYWN0aW9uc1xuK1xuK1xuK2RlZiBfcGFyc2VfZmxvdyhmbG93c3RyKTpcbisgICAgXCJcIlwiUGFyc2UgYSBmbG93IHN0cmluZyBhbmQgcmV0dXJuIHRoZSBrZXkuXCJcIlwiXG4rICAgIGtleSA9IG92c2tleSgpXG4rICAgIGtleVtcImF0dHJzXCJdID0gW11cbisgICAgcmVtYWluZGVyID0ga2V5LnBhcnNlKGZsb3dzdHIpXG4rICAgIGlmIHJlbWFpbmRlcjpcbisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZlwidW5wYXJzZWQgcmVtYWluZGVyOiB7cmVtYWluZGVyIXJ9XCIpXG4rICAgIHJldHVybiBrZXlcbitcbitcbitkZWYgX2ZpbmRfYXR0cihrZXksIGF0dHJfbmFtZSk6XG4rICAgIFwiXCJcIkZpbmQgYW4gYXR0cmlidXRlIGluIHBhcnNlZCBrZXkuXCJcIlwiXG4rICAgIGZvciBhdHRyIGluIGtleVtcImF0dHJzXCJdOlxuKyAgICAgICAgaWYgYXR0clswXSA9PSBhdHRyX25hbWU6XG4rICAgICAgICAgICAgcmV0dXJuIGF0dHJbMV1cbisgICAgcmV0dXJuIE5vbmVcbitcbitcbitjbGFzcyBUZXN0T3ZzS2V5UGFyc2UodW5pdHRlc3QuVGVzdENhc2UpOlxuKyAgICBcIlwiXCJVbml0IHRlc3RzIGZvciBvdnNrZXkucGFyc2UoKSBmbG93IHN0cmluZyBwYXJzaW5nLlwiXCJcIlxuK1xuKyAgICBAY2xhc3NtZXRob2RcbisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKTpcbisgICAgICAgIF9pbml0X292c2tleV9ubGFzKClcbitcbisgICAgZGVmIHRlc3Rfc2N0cF9kc3Qoc2VsZik6XG4rICAgICAgICBcIlwiXCJUZXN0IFNDVFAgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlwiXCJcIlxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXCJzY3RwKGRzdD00NDQzKVwiKVxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcIk9WU19LRVlfQVRUUl9TQ1RQXCIpXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcIlNDVFAga2V5IG5vdCBmb3VuZFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1wiZHN0XCJdLCA0NDQzKVxuK1xuKyAgICBkZWYgdGVzdF9zY3RwX3NyYyhzZWxmKTpcbisgICAgICAgIFwiXCJcIlRlc3QgU0NUUCBzb3VyY2UgcG9ydCBwYXJzaW5nLlwiXCJcIlxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXCJzY3RwKHNyYz00NDQzKVwiKVxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcIk9WU19LRVlfQVRUUl9TQ1RQXCIpXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcIlNDVFAga2V5IG5vdCBmb3VuZFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1wic3JjXCJdLCA0NDQzKVxuK1xuKyAgICBkZWYgdGVzdF9zY3RwX3NyY19hbmRfZHN0KHNlbGYpOlxuKyAgICAgICAgXCJcIlwiVGVzdCBTQ1RQIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9ydCBwYXJzaW5nLlwiXCJcIlxuKyAgICAgICAga2V5ID0gX3BhcnNlX2Zsb3coXCJzY3RwKHNyYz0xMjM0LGRzdD01Njc4KVwiKVxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5LCBcIk9WU19LRVlfQVRUUl9TQ1RQXCIpXG4rICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShhdHRyLCBcIlNDVFAga2V5IG5vdCBmb3VuZFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1wic3JjXCJdLCAxMjM0KVxuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyW1wiZHN0XCJdLCA1Njc4KVxuK1xuKyAgICBkZWYgdGVzdF9zY3RwX3JvdW5kdHJpcChzZWxmKTpcbisgICAgICAgIFwiXCJcIlRlc3QgcGFyc2UgLVx1MDAzZSBkcHN0ciAtXHUwMDNlIHBhcnNlIGtlZXBzIHRoZSBTQ1RQIGtleS5cIlwiXCJcbisgICAgICAgIGtleSA9IF9wYXJzZV9mbG93KFwic2N0cChkc3Q9NDQ0MylcIilcbisgICAgICAgIGtleTIgPSBvdnNrZXkoKVxuKyAgICAgICAga2V5MltcImF0dHJzXCJdID0gW11cbisgICAgICAgIHJlbWFpbmRlciA9IGtleTIucGFyc2Uoa2V5LmRwc3RyKCkpXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbWFpbmRlciwgXCJcIiwgXCJyb3VuZC10cmlwIGxlZnQgdW5wYXJzZWQgdGV4dFwiKVxuKyAgICAgICAgYXR0ciA9IF9maW5kX2F0dHIoa2V5MiwgXCJPVlNfS0VZX0FUVFJfU0NUUFwiKVxuKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYXR0ciwgXCJTQ1RQIGtleSBsb3N0IGluIHJvdW5kLXRyaXBcIilcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cltcImRzdFwiXSwgNDQ0MylcbitcbitcbitkZWYgdGVzdF9vdnNrZXlfcGFyc2UoKTpcbisgICAgXCJcIlwiVGVzdCBvdnNrZXkucGFyc2UoKSBtZXRob2QgZm9yIHZhcmlvdXMgZmxvdyBrZXkgdHlwZXMuXCJcIlwiXG4rICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdExvYWRlcigpLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0T3ZzS2V5UGFyc2UpXG4rICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yKVxuKyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKVxuKyAgICByZXR1cm4gMCBpZiByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpIGVsc2UgMVxuK1xuK1xuIGlmIF9fbmFtZV9fID09IFwiX19tYWluX19cIjpcbisgICAgaWYgbGVuKHN5cy5hcmd2KSBcdTAwM2UgMSBhbmQgc3lzLmFyZ3ZbMV0gPT0gXCItLXRlc3RcIjpcbisgICAgICAgIHN5cy5leGl0KHRlc3Rfb3Zza2V5X3BhcnNlKCkpXG4gICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTM6MTg6MjMuNjA5MzM2MjY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ2NjY4OTkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE9wZW4gdlN3aXRjaCBTZWxmdGVzdCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL292cy1kcGN0bC5weWAuICBFc3NlbnRpYWxseSwgaXQncyBpbnRyb2R1Y2luZyBhIG5ldyB0ZXN0LCBgc2N0cF9jb25uZWN0X3Y0YCwgaW50byB0aGUgT3BlbiB2U3dpdGNoIHNlbGZ0ZXN0cywgYW5kIGJlZWZpbmcgdXAgdGhlIFB5dGhvbiBzY3JpcHQgdG8gaGFuZGxlIFNDVFAgZmxvdyBrZXlzLiBHb29kLCBnb29kLiAgUHVyZWx5IHNlbGZ0ZXN0IHN0dWZmLiBObyBrZXJuZWwgY29yZSBtb2RpZmljYXRpb25zLCBubyBkcml2ZXIgY2hhbmdlcywgYW5kIG5vdGhpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLiBJJ20gcHJldHR5IGNvbmZpZGVudCBpbiBzYXlpbmcgdGhhdCB0aGlzIGRvZXNuJ3Qgd2FycmFudCBmdXp6aW5nLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWxsIHRoZSBwYXRjaCB0b3VjaGVzLiBZZXAsIGNvbmZpcm1lZC4gT25seSB0aG9zZSB0d28gZmlsZXMuIEFsbCByaWdodCwgSSdtIHNhdGlzZmllZC5cblxuSSB3aWxsIGNvbmZpZGVudGx5IG1hcmsgXCJXb3J0aEZ1enppbmdcIiBhcyBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIyMiwiT3V0cHV0VG9rZW5zIjo3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDEzOjE4OjI5LjA3NjAyODUyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaCkgYnkgYWRkaW5nIGFuIFNDVFAgdGVzdCBhbmQgcmVsYXRlZCBwYXJzaW5nIGxvZ2ljLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gpIGJ5IGFkZGluZyBhbiBTQ1RQIHRlc3QgYW5kIHJlbGF0ZWQgcGFyc2luZyBsb2dpYy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflownsvss[1] Phase: Running StartedAt: 2026-07-30 13:18:40 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownsvss[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-30 13:18:40 +0000 UTC FinishedAt: 2026-07-30 13:18:45 +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,}