Name: series-workflowvssh2 Phase: Failed StartedAt: 2026-09-07 17:04:23 +0000 UTC FinishedAt: 2026-09-07 17:23:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvssh2[0] Phase: Succeeded StartedAt: 2026-09-07 17:04:23 +0000 UTC FinishedAt: 2026-09-07 17:23:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvssh2[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 17:04:23 +0000 UTC FinishedAt: 2026-09-07 17:23:21 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGFuZCBkb2VzIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMwZTQ3ZDExOTQzMjI0YWRlZjlhNjQzYmMxNzAzMGU5NzFhNzllZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE3OjIzOjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5pbmRleCA1Y2MzZWJkY2YwOGRlLi41NjA1YmU0MTFmMWE4IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuQEAgLTMxNCwxMSAmIzQzOzMxNCwxMjQgQEAgZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXHUwMDNlIE5vbmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7dXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uXCYjMzQ7KVxuIFxuIFxuJiM0MztkZWYgX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjQodGVzdF9hZGRyczogbGlzdFtzdHJdLCBzY29wZXM6IGxpc3Rbc3RyXSkgLVx1MDAzZSBsaXN0W3N0cl06XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4mIzQzOyAgICAgICAgZGV2X25hbWUgPSBcJiMzNDtkdW1teV9kZXZcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICAgICAgaXAoZlwmIzM0O2xpbmsgYWRkIG5hbWUge2Rldl9uYW1lfSB0eXBlIGR1bW15XCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGZvciB0ZXN0X2FkZHIsIHNjb3BlIGluIHppcCh0ZXN0X2FkZHJzLCBzY29wZXMpOlxuJiM0MzsgICAgICAgICAgICBpcChmXCYjMzQ7YWRkcmVzcyBhZGQge3Rlc3RfYWRkcn0vMjQgZGV2IHtkZXZfbmFtZX0gc2NvcGUge3Njb3BlfVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChmXCYjMzQ7bGluayBzZXQgZGV2IHtkZXZfbmFtZX0gdXBcJiMzNDssIG5zPXN0cihucykpXG4mIzQzO1xuJiM0MzsgICAgICAgIHJ0bmwgPSBSdG5sQWRkckZhbWlseSgpXG4mIzQzOyAgICAgICAgYWRkcnMgPSBydG5sLmdldGFkZHIoe1wmIzM0O2lmYS1mYW1pbHlcJiMzNDs6IHNvY2tldC5BRl9JTkVUfSwgZHVtcD1UcnVlKVxuJiM0MzsgICAgICAgIHJldHVybiBbYWRkcltcJiMzNDthZGRyZXNzXCYjMzQ7XSBmb3IgYWRkciBpbiBhZGRyc11cbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2NF92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyKCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBBZnRlciBpbnNlcnRpbmcgbXVsdGlwbGUgc2FtZSBzY29wZSBJUHY0IGFkZHJlc3NlcywgdGhlaXIgb3JkZXJcbiYjNDM7ICAgIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIGluc2VydGlvbiBvcmRlci5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgICMgUHJpbWFyeSBhZGRyZXNzZXMgb2YgdGVzdCBzdWJuZXRzIGFyZSBpbnNlcnRlZCBmaXJzdC5cbiYjNDM7ICAgIHRlc3RfYWRkcmVzc2VzID0gW1xuJiM0MzsgICAgICAgIFwmIzM0OzE5Mi4wLjIuMVwmIzM0OywgXCYjMzQ7MjAzLjAuMTEzLjFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7MTkyLjAuMi4yXCYjMzQ7LCBcJiMzNDsyMDMuMC4xMTMuMlwmIzM0OywgXCYjMzQ7MTkyLjAuMi4zXCYjMzQ7XG4mIzQzOyAgICBdXG4mIzQzOyAgICBzY29wZXMgPSBbXCYjMzQ7Z2xvYmFsXCYjMzQ7XSAqIDVcbiYjNDM7XG4mIzQzOyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2NCh0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxuJiM0MzsgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3NlcywgYWRkcmVzc19saXN0LCBcJiMzNDtVbmV4cGVjdGVkIElQdjQgYWRkcmVzcyBvcmRlclwmIzM0OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2NF92ZXJpZnlfaW50ZXJfc2NvcGVfYWRkcl9vcmRlcigpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgQ2hlY2tzIHRoZSBvcmRlcmluZyBvZiBpbnRlci1zY29wZSBhZGRyZXNzZXMuIFRoaXMgaGFzIGFsc29cbiYjNDM7ICAgIGJlZW4gYXR0ZW1wdGVkIHRvIGJlIHBhdGNoZWQsIGJyaW5naW5nIGluIGEgbmV3IHJpc2sgb2YgYSB1c2VyLXNwYWNlXG4mIzQzOyAgICByZWdyZXNzaW9uLCBzaW1pbGFyIHRvIHRoZSBzYW1lIHNjb3BlIGVxdWl2YWxlbnQuIFRoaXMgd2lsbCBmdXJ0aGVyXG4mIzQzOyAgICBjb25zb2xpZGF0ZSB0aGUgaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgb2YgYm90aCBwcm90b2NvbHMuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICB0ZXN0X2FkZHJlc3NlcyA9IFtcbiYjNDM7ICAgICAgICBcJiMzNDsxOTIuMC4yLjFcJiMzNDssIFwmIzM0OzIwMy4wLjExMy4xXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0OzE5Mi4wLjIuMlwmIzM0OywgXCYjMzQ7MjAzLjAuMTEzLjJcJiMzNDssIFwmIzM0OzE5Mi4wLjIuM1wmIzM0O1xuJiM0MzsgICAgXVxuJiM0MzsgICAgIyBJUHY0IHB1dHMgbGluayBsb2NhbCBhZGRyZXNzZXMgYmVmb3JlIGdsb2JhbCBvbmVzLlxuJiM0MzsgICAgc2NvcGVzID0gW1xuJiM0MzsgICAgICAgIFwmIzM0O2xpbmtcJiMzNDssIFwmIzM0O2dsb2JhbFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtsaW5rXCYjMzQ7LCBcJiMzNDtnbG9iYWxcJiMzNDssIFwmIzM0O2xpbmtcJiMzNDtcbiYjNDM7ICAgIF1cbiYjNDM7XG4mIzQzOyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2NCh0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxuJiM0MzsgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3NlcywgYWRkcmVzc19saXN0LCBcJiMzNDtVbmV4cGVjdGVkIElQdjQgYWRkcmVzcyBvcmRlciBhY3Jvc3Mgc2NvcGVzXCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2Nih0ZXN0X2FkZHJzOiBsaXN0W3N0cl0sIHNjb3BlczogbGlzdFtzdHJdKSAtXHUwMDNlIGxpc3Rbc3RyXTpcbiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcbiYjNDM7ICAgICAgICBkZXZfbmFtZSA9IFwmIzM0O2R1bW15X2RldlwmIzM0O1xuJiM0MztcbiYjNDM7ICAgICAgICBpcChmXCYjMzQ7bGluayBhZGQgbmFtZSB7ZGV2X25hbWV9IHR5cGUgZHVtbXlcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgZm9yIHRlc3RfYWRkciwgc2NvcGUgaW4gemlwKHRlc3RfYWRkcnMsIHNjb3Blcyk6XG4mIzQzOyAgICAgICAgICAgIGlwKGZcJiMzNDthZGRyZXNzIGFkZCB7dGVzdF9hZGRyfS82NCBkZXYge2Rldl9uYW1lfSBzY29wZSB7c2NvcGV9XCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKGZcJiMzNDtsaW5rIHNldCBkZXYge2Rldl9uYW1lfSB1cFwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7XG4mIzQzOyAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcbiYjNDM7ICAgICAgICBhZGRycyA9IHJ0bmwuZ2V0YWRkcih7XCYjMzQ7aWZhLWZhbWlseVwmIzM0Ozogc29ja2V0LkFGX0lORVQ2fSwgZHVtcD1UcnVlKVxuJiM0MzsgICAgICAgIHJldHVybiBbYWRkcltcJiMzNDthZGRyZXNzXCYjMzQ7XSBmb3IgYWRkciBpbiBhZGRyc11cbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2Nl92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyKCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBBZnRlciBpbnNlcnRpbmcgbXVsdGlwbGUgc2FtZSBzY29wZSBJUHY2IGFkZHJlc3NlcywgdGhlaXIgb3JkZXJcbiYjNDM7ICAgIG11c3QgYmUgdGhlIF9yZXZlcnNlXyBvZiB0aGUgaW5zZXJ0aW9uIG9yZGVyLlxuJiM0MztcbiYjNDM7ICAgIFdoaWxlIHRoaXMgYmVoYXZpb3VyIGlzIGRpZmZlcmVudCBmcm9tIGhvdyBJUHY0IGFjdHMsXG4mIzQzOyAgICB1cGRhdGluZyB0aGUgSVB2NiBpbXBsZW1lbnRhdGlvbiB0byBhY3QgdGhlIHNhbWUgd2F5XG4mIzQzOyAgICBoYXMgcHJvdmVkIHRvIGNhdXNlIHVzZXItc3BhY2UgYXBwbGljYXRpb24gcmVncmVzc2lvbnNcbiYjNDM7ICAgIChwYXJ0aWN1bGFybHkgaW4gTmV0d29ya01hbmFnZXIpLiBUaGlzIGJlaGF2aW91ciBpcyBiZWluZ1xuJiM0MzsgICAgdGVzdGVkIGZvciB0byBjb25zb2xpZGF0ZSBpdCBhcyBiZWluZyBleHBlY3RlZCBhbmQgY29ycmVjdC5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIHRlc3RfYWRkcmVzc2VzID0gW1xuJiM0MzsgICAgICAgIFwmIzM0OzIwMDE6ZGI4OmE6OjFcJiMzNDssIFwmIzM0OzIwMDE6ZGI4OmI6OjFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7MjAwMTpkYjg6YTo6MlwmIzM0OywgXCYjMzQ7MjAwMTpkYjg6Yjo6MlwmIzM0OywgXCYjMzQ7MjAwMTpkYjg6YTo6M1wmIzM0O1xuJiM0MzsgICAgXVxuJiM0MzsgICAgc2NvcGVzID0gW1wmIzM0O2dsb2JhbFwmIzM0O10gKiA1XG4mIzQzO1xuJiM0MzsgICAgYWRkcmVzc19saXN0ID0gX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjYodGVzdF9hZGRyZXNzZXMsIHNjb3BlcylcbiYjNDM7ICAgICMgV2UgaWdub3JlIHRoZSBsaW5rLWxvY2FsIGFkZHJlc3MgcHJlc2VudCBieSBkZWZhdWx0LlxuJiM0MzsgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3Nlc1s6Oi0xXSwgYWRkcmVzc19saXN0Wzo1XSwgXCYjMzQ7VW5leHBlY3RlZCBJUHY2IGFkZHJlc3Mgb3JkZXJcJiMzNDspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGlwdjZfdmVyaWZ5X2ludGVyX3Njb3BlX2FkZHJfb3JkZXIoKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIFRvIHByZXZlbnQgcG90ZW50aWFsIHVzZXItc3BhY2UgcmVncmVzc2lvbnMgd2l0aCBJUHY2XG4mIzQzOyAgICBhZGRyZXNzZXMsIHRoZSBpbnRlci1zY29wZSBpbnNlcnRpb24gb3JkZXIgaXMgYWxzbyBiZWluZyB0ZXN0ZWQuXG4mIzQzO1xuJiM0MzsgICAgVGhpcyBhZ2FpbiBkaWZmZXJzIGZyb20gSVB2NCwgaGVyZSBnbG9iYWwgc2NvcGUgYWRkcmVzc2VzIGhhdmUgcHJpb3JpdHlcbiYjNDM7ICAgIGFnYWluc3QgbGluayBsb2NhbCBvbmVzIC0gdGhlIGJlaGF2aW91cnMgYXJlIG9wcG9zaXRlLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICB0ZXN0X2FkZHJlc3NlcyA9IFtcbiYjNDM7ICAgICAgICBcJiMzNDsyMDAxOmRiODphOjoxXCYjMzQ7LCBcJiMzNDsyMDAxOmRiODpiOjoxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0OzIwMDE6ZGI4OmE6OjJcJiMzNDssIFwmIzM0OzIwMDE6ZGI4OmI6OjJcJiMzNDssIFwmIzM0OzIwMDE6ZGI4OmE6OjNcJiMzNDtcbiYjNDM7ICAgIF1cbiYjNDM7ICAgIHNjb3BlcyA9IFtcbiYjNDM7ICAgICAgICBcJiMzNDtnbG9iYWxcJiMzNDssIFwmIzM0O2xpbmtcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Z2xvYmFsXCYjMzQ7LCBcJiMzNDtsaW5rXCYjMzQ7LCBcJiMzNDtnbG9iYWxcJiMzNDtcbiYjNDM7ICAgIF1cbiYjNDM7XG4mIzQzOyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2Nih0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxuJiM0MzsgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3Nlc1s6Oi0xXSwgYWRkcmVzc19saXN0Wzo1XSwgXCYjMzQ7VW5leHBlY3RlZCBJUHY2IGFkZHJlc3Mgb3JkZXIgYWNyb3NzIHNjb3Blc1wmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbi0gICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQsXG4mIzQzOyAgICAgICAgICAgICAgaXB2NF92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyLCBpcHY0X3ZlcmlmeV9pbnRlcl9zY29wZV9hZGRyX29yZGVyLFxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfdmVyaWZ5X3NhbWVfc2NvcGVfYWRkcl9vcmRlciwgaXB2Nl92ZXJpZnlfaW50ZXJfc2NvcGVfYWRkcl9vcmRlcl0pXG4gICAgIGtzZnRfZXhpdCgpXG4gXG4gaWYgX19uYW1lX18gPT0gXCYjMzQ7X19tYWluX19cJiMzNDs6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTc6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGFuZCBkb2VzIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMwZTQ3ZDExOTQzMjI0YWRlZjlhNjQzYmMxNzAzMGU5NzFhNzllZjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE3OjIzOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggNWNjM2ViZGNmMDhkZS4uNTYwNWJlNDExZjFhOCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC0zMTQsMTEgJiM0MzszMTQsMTI0IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLSZndDsgTm9uZToKICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7dXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uJiMzNDspCiAKIAomIzQzO2RlZiBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2NCh0ZXN0X2FkZHJzOiBsaXN0W3N0cl0sIHNjb3BlczogbGlzdFtzdHJdKSAtJmd0OyBsaXN0W3N0cl06CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgIGRldl9uYW1lID0gJiMzNDtkdW1teV9kZXYmIzM0OwomIzQzOwomIzQzOyAgICAgICAgaXAoZiYjMzQ7bGluayBhZGQgbmFtZSB7ZGV2X25hbWV9IHR5cGUgZHVtbXkmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGZvciB0ZXN0X2FkZHIsIHNjb3BlIGluIHppcCh0ZXN0X2FkZHJzLCBzY29wZXMpOgomIzQzOyAgICAgICAgICAgIGlwKGYmIzM0O2FkZHJlc3MgYWRkIHt0ZXN0X2FkZHJ9LzI0IGRldiB7ZGV2X25hbWV9IHNjb3BlIHtzY29wZX0mIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKGYmIzM0O2xpbmsgc2V0IGRldiB7ZGV2X25hbWV9IHVwJiMzNDssIG5zPXN0cihucykpCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgYWRkcnMgPSBydG5sLmdldGFkZHIoeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBzb2NrZXQuQUZfSU5FVH0sIGR1bXA9VHJ1ZSkKJiM0MzsgICAgICAgIHJldHVybiBbYWRkclsmIzM0O2FkZHJlc3MmIzM0O10gZm9yIGFkZHIgaW4gYWRkcnNdCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjRfdmVyaWZ5X3NhbWVfc2NvcGVfYWRkcl9vcmRlcigpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBBZnRlciBpbnNlcnRpbmcgbXVsdGlwbGUgc2FtZSBzY29wZSBJUHY0IGFkZHJlc3NlcywgdGhlaXIgb3JkZXIKJiM0MzsgICAgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgaW5zZXJ0aW9uIG9yZGVyLgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgIyBQcmltYXJ5IGFkZHJlc3NlcyBvZiB0ZXN0IHN1Ym5ldHMgYXJlIGluc2VydGVkIGZpcnN0LgomIzQzOyAgICB0ZXN0X2FkZHJlc3NlcyA9IFsKJiM0MzsgICAgICAgICYjMzQ7MTkyLjAuMi4xJiMzNDssICYjMzQ7MjAzLjAuMTEzLjEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7MTkyLjAuMi4yJiMzNDssICYjMzQ7MjAzLjAuMTEzLjImIzM0OywgJiMzNDsxOTIuMC4yLjMmIzM0OwomIzQzOyAgICBdCiYjNDM7ICAgIHNjb3BlcyA9IFsmIzM0O2dsb2JhbCYjMzQ7XSAqIDUKJiM0MzsKJiM0MzsgICAgYWRkcmVzc19saXN0ID0gX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjQodGVzdF9hZGRyZXNzZXMsIHNjb3BlcykKJiM0MzsgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3NlcywgYWRkcmVzc19saXN0LCAmIzM0O1VuZXhwZWN0ZWQgSVB2NCBhZGRyZXNzIG9yZGVyJiMzNDspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjRfdmVyaWZ5X2ludGVyX3Njb3BlX2FkZHJfb3JkZXIoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgQ2hlY2tzIHRoZSBvcmRlcmluZyBvZiBpbnRlci1zY29wZSBhZGRyZXNzZXMuIFRoaXMgaGFzIGFsc28KJiM0MzsgICAgYmVlbiBhdHRlbXB0ZWQgdG8gYmUgcGF0Y2hlZCwgYnJpbmdpbmcgaW4gYSBuZXcgcmlzayBvZiBhIHVzZXItc3BhY2UKJiM0MzsgICAgcmVncmVzc2lvbiwgc2ltaWxhciB0byB0aGUgc2FtZSBzY29wZSBlcXVpdmFsZW50LiBUaGlzIHdpbGwgZnVydGhlcgomIzQzOyAgICBjb25zb2xpZGF0ZSB0aGUgaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgb2YgYm90aCBwcm90b2NvbHMuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB0ZXN0X2FkZHJlc3NlcyA9IFsKJiM0MzsgICAgICAgICYjMzQ7MTkyLjAuMi4xJiMzNDssICYjMzQ7MjAzLjAuMTEzLjEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7MTkyLjAuMi4yJiMzNDssICYjMzQ7MjAzLjAuMTEzLjImIzM0OywgJiMzNDsxOTIuMC4yLjMmIzM0OwomIzQzOyAgICBdCiYjNDM7ICAgICMgSVB2NCBwdXRzIGxpbmsgbG9jYWwgYWRkcmVzc2VzIGJlZm9yZSBnbG9iYWwgb25lcy4KJiM0MzsgICAgc2NvcGVzID0gWwomIzQzOyAgICAgICAgJiMzNDtsaW5rJiMzNDssICYjMzQ7Z2xvYmFsJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2xpbmsmIzM0OywgJiMzNDtnbG9iYWwmIzM0OywgJiMzNDtsaW5rJiMzNDsKJiM0MzsgICAgXQomIzQzOwomIzQzOyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2NCh0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKQomIzQzOyAgICBrc2Z0X2VxKHRlc3RfYWRkcmVzc2VzLCBhZGRyZXNzX2xpc3QsICYjMzQ7VW5leHBlY3RlZCBJUHY0IGFkZHJlc3Mgb3JkZXIgYWNyb3NzIHNjb3BlcyYjMzQ7KQomIzQzOwomIzQzOwomIzQzO2RlZiBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2Nih0ZXN0X2FkZHJzOiBsaXN0W3N0cl0sIHNjb3BlczogbGlzdFtzdHJdKSAtJmd0OyBsaXN0W3N0cl06CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgIGRldl9uYW1lID0gJiMzNDtkdW1teV9kZXYmIzM0OwomIzQzOwomIzQzOyAgICAgICAgaXAoZiYjMzQ7bGluayBhZGQgbmFtZSB7ZGV2X25hbWV9IHR5cGUgZHVtbXkmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGZvciB0ZXN0X2FkZHIsIHNjb3BlIGluIHppcCh0ZXN0X2FkZHJzLCBzY29wZXMpOgomIzQzOyAgICAgICAgICAgIGlwKGYmIzM0O2FkZHJlc3MgYWRkIHt0ZXN0X2FkZHJ9LzY0IGRldiB7ZGV2X25hbWV9IHNjb3BlIHtzY29wZX0mIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKGYmIzM0O2xpbmsgc2V0IGRldiB7ZGV2X25hbWV9IHVwJiMzNDssIG5zPXN0cihucykpCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgYWRkcnMgPSBydG5sLmdldGFkZHIoeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBzb2NrZXQuQUZfSU5FVDZ9LCBkdW1wPVRydWUpCiYjNDM7ICAgICAgICByZXR1cm4gW2FkZHJbJiMzNDthZGRyZXNzJiMzNDtdIGZvciBhZGRyIGluIGFkZHJzXQomIzQzOwomIzQzOwomIzQzO2RlZiBpcHY2X3ZlcmlmeV9zYW1lX3Njb3BlX2FkZHJfb3JkZXIoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgQWZ0ZXIgaW5zZXJ0aW5nIG11bHRpcGxlIHNhbWUgc2NvcGUgSVB2NiBhZGRyZXNzZXMsIHRoZWlyIG9yZGVyCiYjNDM7ICAgIG11c3QgYmUgdGhlIF9yZXZlcnNlXyBvZiB0aGUgaW5zZXJ0aW9uIG9yZGVyLgomIzQzOwomIzQzOyAgICBXaGlsZSB0aGlzIGJlaGF2aW91ciBpcyBkaWZmZXJlbnQgZnJvbSBob3cgSVB2NCBhY3RzLAomIzQzOyAgICB1cGRhdGluZyB0aGUgSVB2NiBpbXBsZW1lbnRhdGlvbiB0byBhY3QgdGhlIHNhbWUgd2F5CiYjNDM7ICAgIGhhcyBwcm92ZWQgdG8gY2F1c2UgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiByZWdyZXNzaW9ucwomIzQzOyAgICAocGFydGljdWxhcmx5IGluIE5ldHdvcmtNYW5hZ2VyKS4gVGhpcyBiZWhhdmlvdXIgaXMgYmVpbmcKJiM0MzsgICAgdGVzdGVkIGZvciB0byBjb25zb2xpZGF0ZSBpdCBhcyBiZWluZyBleHBlY3RlZCBhbmQgY29ycmVjdC4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIHRlc3RfYWRkcmVzc2VzID0gWwomIzQzOyAgICAgICAgJiMzNDsyMDAxOmRiODphOjoxJiMzNDssICYjMzQ7MjAwMTpkYjg6Yjo6MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDsyMDAxOmRiODphOjoyJiMzNDssICYjMzQ7MjAwMTpkYjg6Yjo6MiYjMzQ7LCAmIzM0OzIwMDE6ZGI4OmE6OjMmIzM0OwomIzQzOyAgICBdCiYjNDM7ICAgIHNjb3BlcyA9IFsmIzM0O2dsb2JhbCYjMzQ7XSAqIDUKJiM0MzsKJiM0MzsgICAgYWRkcmVzc19saXN0ID0gX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjYodGVzdF9hZGRyZXNzZXMsIHNjb3BlcykKJiM0MzsgICAgIyBXZSBpZ25vcmUgdGhlIGxpbmstbG9jYWwgYWRkcmVzcyBwcmVzZW50IGJ5IGRlZmF1bHQuCiYjNDM7ICAgIGtzZnRfZXEodGVzdF9hZGRyZXNzZXNbOjotMV0sIGFkZHJlc3NfbGlzdFs6NV0sICYjMzQ7VW5leHBlY3RlZCBJUHY2IGFkZHJlc3Mgb3JkZXImIzM0OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl92ZXJpZnlfaW50ZXJfc2NvcGVfYWRkcl9vcmRlcigpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBUbyBwcmV2ZW50IHBvdGVudGlhbCB1c2VyLXNwYWNlIHJlZ3Jlc3Npb25zIHdpdGggSVB2NgomIzQzOyAgICBhZGRyZXNzZXMsIHRoZSBpbnRlci1zY29wZSBpbnNlcnRpb24gb3JkZXIgaXMgYWxzbyBiZWluZyB0ZXN0ZWQuCiYjNDM7CiYjNDM7ICAgIFRoaXMgYWdhaW4gZGlmZmVycyBmcm9tIElQdjQsIGhlcmUgZ2xvYmFsIHNjb3BlIGFkZHJlc3NlcyBoYXZlIHByaW9yaXR5CiYjNDM7ICAgIGFnYWluc3QgbGluayBsb2NhbCBvbmVzIC0gdGhlIGJlaGF2aW91cnMgYXJlIG9wcG9zaXRlLgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgdGVzdF9hZGRyZXNzZXMgPSBbCiYjNDM7ICAgICAgICAmIzM0OzIwMDE6ZGI4OmE6OjEmIzM0OywgJiMzNDsyMDAxOmRiODpiOjoxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0OzIwMDE6ZGI4OmE6OjImIzM0OywgJiMzNDsyMDAxOmRiODpiOjoyJiMzNDssICYjMzQ7MjAwMTpkYjg6YTo6MyYjMzQ7CiYjNDM7ICAgIF0KJiM0MzsgICAgc2NvcGVzID0gWwomIzQzOyAgICAgICAgJiMzNDtnbG9iYWwmIzM0OywgJiMzNDtsaW5rJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2dsb2JhbCYjMzQ7LCAmIzM0O2xpbmsmIzM0OywgJiMzNDtnbG9iYWwmIzM0OwomIzQzOyAgICBdCiYjNDM7CiYjNDM7ICAgIGFkZHJlc3NfbGlzdCA9IF9pbnNlcnRfYW5kX2dldF9hZGRyc19pcHY2KHRlc3RfYWRkcmVzc2VzLCBzY29wZXMpCiYjNDM7ICAgIGtzZnRfZXEodGVzdF9hZGRyZXNzZXNbOjotMV0sIGFkZHJlc3NfbGlzdFs6NV0sICYjMzQ7VW5leHBlY3RlZCBJUHY2IGFkZHJlc3Mgb3JkZXIgYWNyb3NzIHNjb3BlcyYjMzQ7KQomIzQzOwomIzQzOwogZGVmIG1haW4oKSAtJmd0OyBOb25lOgogICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3biwKLSAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pCiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50LAomIzQzOyAgICAgICAgICAgICAgaXB2NF92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyLCBpcHY0X3ZlcmlmeV9pbnRlcl9zY29wZV9hZGRyX29yZGVyLAomIzQzOyAgICAgICAgICAgICAgaXB2Nl92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyLCBpcHY2X3ZlcmlmeV9pbnRlcl9zY29wZV9hZGRyX29yZGVyXSkKICAgICBrc2Z0X2V4aXQoKQogCiBpZiBfX25hbWVfXyA9PSAmIzM0O19fbWFpbl9fJiMzNDs6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NzgKCQkJCQkJCW91dHB1dDogNzEKCQkJCQkJCXRob3VnaHRzOiAzNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZyBFdmFsdWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIFRoZSBkaWZmIHNob3dzIHRoYXQgb25seSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weWAgaGFzIGJlZW4gdG91Y2hlZC4gTm93LCBJIG5lZWQgdG8gYXBwbHkgbXkgdHJpYWdlIGNyaXRlcmlhLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy4KCk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgbW9kaWZpY2F0aW9uIGltcGFjdHMgdGhlIGtlcm5lbCBpdHNlbGYuIExvb2tpbmcgYXQgdGhlIHRyaWFnZSBjcml0ZXJpYSwgSSByZW1lbWJlciB0aGF0IGNoYW5nZXMgaW4gdXNlci1zcGFjZSB0ZXN0aW5nIHRvb2xzIGxpa2UgdGhvc2UgZm91bmQgaW4gYHRvb2xzL2AsIGFzIGxvbmcgYXMgdGhleSBkb24mIzM5O3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwsIGFyZW4mIzM5O3Qgd29ydGggZnV6emluZy4gVGhlIGNyaXRlcmlhIHN0YXRlcyBjbGVhcmx5OiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXMuLi4gVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cy4uLiB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDsKClRoaXMgcGF0Y2ggbW9kaWZpZXMgYSBQeXRob24gc2VsZi10ZXN0IHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBJdCYjMzk7cyB1c2VyLXNwYWNlIGNvZGU7IGl0JiMzOTtzIG5vdCBDIGNvZGUsIG5vciBkb2VzIGl0IGFwcGVhciB0byBjaGFuZ2UgYW55IGhlYWRlciBmaWxlcy4gSXQgY2VydGFpbmx5IGRvZXNuJiMzOTt0IGltcGFjdCBgdm1saW51eGAgb3Iga2VybmVsIG1vZHVsZXMuCgpUaGVyZWZvcmUsIGFwcGx5aW5nIHRoZSB0cmlhZ2UgY3JpdGVyaWEsIEkmIzM5O20gY29uZmlkZW50IEkgY2FuIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBpcyBhIHVzZXItc3BhY2Ugc2VsZnRlc3QsIGFuZCBpdCBkb2VzbiYjMzk7dCB0b3VjaCB0aGUga2VybmVsJiMzOTtzIGNvcmUgY29tcG9uZW50cy4gSSYjMzk7bGwgYWxzbyBzZXQgYEZvY3VzU3ltYm9sc2AgdG8gYFtdYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHRvIGBbXWAsIHNpbmNlIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGF0dGFjayBzdXJmYWNlIGluIHRoZSBrZXJuZWwuCgpXaXRoIHRoYXQgZGV0ZXJtaW5lZCwgSSBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgcHJvdmlkZSB0aGVzZSB2YWx1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYW5kIGRvZXMgbm90IGNoYW5nZSBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYW5kIGRvZXMgbm90IGNoYW5nZSBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzoyMzowMy45MzE5OTUzNDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTYyMjk2Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGFuZCBkb2VzIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6MjM6MDMuOTMyMDAzNjE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg2MjMwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMGU0N2QxMTk0MzIyNGFkZWY5YTY0M2JjMTcwMzBlOTcxYTc5ZWY5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTc6MjM6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5pbmRleCA1Y2MzZWJkY2YwOGRlLi41NjA1YmU0MTFmMWE4IDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuQEAgLTMxNCwxMSArMzE0LDEyNCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cXHUwMDNlIE5vbmU6XFxuICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb25cXFwiKVxcbiBcXG4gXFxuK2RlZiBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2NCh0ZXN0X2FkZHJzOiBsaXN0W3N0cl0sIHNjb3BlczogbGlzdFtzdHJdKSAtXFx1MDAzZSBsaXN0W3N0cl06XFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XFxuKyAgICAgICAgZGV2X25hbWUgPSBcXFwiZHVtbXlfZGV2XFxcIlxcbitcXG4rICAgICAgICBpcChmXFxcImxpbmsgYWRkIG5hbWUge2Rldl9uYW1lfSB0eXBlIGR1bW15XFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBmb3IgdGVzdF9hZGRyLCBzY29wZSBpbiB6aXAodGVzdF9hZGRycywgc2NvcGVzKTpcXG4rICAgICAgICAgICAgaXAoZlxcXCJhZGRyZXNzIGFkZCB7dGVzdF9hZGRyfS8yNCBkZXYge2Rldl9uYW1lfSBzY29wZSB7c2NvcGV9XFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChmXFxcImxpbmsgc2V0IGRldiB7ZGV2X25hbWV9IHVwXFxcIiwgbnM9c3RyKG5zKSlcXG4rXFxuKyAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcXG4rICAgICAgICBhZGRycyA9IHJ0bmwuZ2V0YWRkcih7XFxcImlmYS1mYW1pbHlcXFwiOiBzb2NrZXQuQUZfSU5FVH0sIGR1bXA9VHJ1ZSlcXG4rICAgICAgICByZXR1cm4gW2FkZHJbXFxcImFkZHJlc3NcXFwiXSBmb3IgYWRkciBpbiBhZGRyc11cXG4rXFxuK1xcbitkZWYgaXB2NF92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgQWZ0ZXIgaW5zZXJ0aW5nIG11bHRpcGxlIHNhbWUgc2NvcGUgSVB2NCBhZGRyZXNzZXMsIHRoZWlyIG9yZGVyXFxuKyAgICBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBpbnNlcnRpb24gb3JkZXIuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICAjIFByaW1hcnkgYWRkcmVzc2VzIG9mIHRlc3Qgc3VibmV0cyBhcmUgaW5zZXJ0ZWQgZmlyc3QuXFxuKyAgICB0ZXN0X2FkZHJlc3NlcyA9IFtcXG4rICAgICAgICBcXFwiMTkyLjAuMi4xXFxcIiwgXFxcIjIwMy4wLjExMy4xXFxcIixcXG4rICAgICAgICBcXFwiMTkyLjAuMi4yXFxcIiwgXFxcIjIwMy4wLjExMy4yXFxcIiwgXFxcIjE5Mi4wLjIuM1xcXCJcXG4rICAgIF1cXG4rICAgIHNjb3BlcyA9IFtcXFwiZ2xvYmFsXFxcIl0gKiA1XFxuK1xcbisgICAgYWRkcmVzc19saXN0ID0gX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjQodGVzdF9hZGRyZXNzZXMsIHNjb3BlcylcXG4rICAgIGtzZnRfZXEodGVzdF9hZGRyZXNzZXMsIGFkZHJlc3NfbGlzdCwgXFxcIlVuZXhwZWN0ZWQgSVB2NCBhZGRyZXNzIG9yZGVyXFxcIilcXG4rXFxuK1xcbitkZWYgaXB2NF92ZXJpZnlfaW50ZXJfc2NvcGVfYWRkcl9vcmRlcigpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIENoZWNrcyB0aGUgb3JkZXJpbmcgb2YgaW50ZXItc2NvcGUgYWRkcmVzc2VzLiBUaGlzIGhhcyBhbHNvXFxuKyAgICBiZWVuIGF0dGVtcHRlZCB0byBiZSBwYXRjaGVkLCBicmluZ2luZyBpbiBhIG5ldyByaXNrIG9mIGEgdXNlci1zcGFjZVxcbisgICAgcmVncmVzc2lvbiwgc2ltaWxhciB0byB0aGUgc2FtZSBzY29wZSBlcXVpdmFsZW50LiBUaGlzIHdpbGwgZnVydGhlclxcbisgICAgY29uc29saWRhdGUgdGhlIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzIG9mIGJvdGggcHJvdG9jb2xzLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgdGVzdF9hZGRyZXNzZXMgPSBbXFxuKyAgICAgICAgXFxcIjE5Mi4wLjIuMVxcXCIsIFxcXCIyMDMuMC4xMTMuMVxcXCIsXFxuKyAgICAgICAgXFxcIjE5Mi4wLjIuMlxcXCIsIFxcXCIyMDMuMC4xMTMuMlxcXCIsIFxcXCIxOTIuMC4yLjNcXFwiXFxuKyAgICBdXFxuKyAgICAjIElQdjQgcHV0cyBsaW5rIGxvY2FsIGFkZHJlc3NlcyBiZWZvcmUgZ2xvYmFsIG9uZXMuXFxuKyAgICBzY29wZXMgPSBbXFxuKyAgICAgICAgXFxcImxpbmtcXFwiLCBcXFwiZ2xvYmFsXFxcIixcXG4rICAgICAgICBcXFwibGlua1xcXCIsIFxcXCJnbG9iYWxcXFwiLCBcXFwibGlua1xcXCJcXG4rICAgIF1cXG4rXFxuKyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2NCh0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxcbisgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3NlcywgYWRkcmVzc19saXN0LCBcXFwiVW5leHBlY3RlZCBJUHY0IGFkZHJlc3Mgb3JkZXIgYWNyb3NzIHNjb3Blc1xcXCIpXFxuK1xcbitcXG4rZGVmIF9pbnNlcnRfYW5kX2dldF9hZGRyc19pcHY2KHRlc3RfYWRkcnM6IGxpc3Rbc3RyXSwgc2NvcGVzOiBsaXN0W3N0cl0pIC1cXHUwMDNlIGxpc3Rbc3RyXTpcXG4rICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcXG4rICAgICAgICBkZXZfbmFtZSA9IFxcXCJkdW1teV9kZXZcXFwiXFxuK1xcbisgICAgICAgIGlwKGZcXFwibGluayBhZGQgbmFtZSB7ZGV2X25hbWV9IHR5cGUgZHVtbXlcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGZvciB0ZXN0X2FkZHIsIHNjb3BlIGluIHppcCh0ZXN0X2FkZHJzLCBzY29wZXMpOlxcbisgICAgICAgICAgICBpcChmXFxcImFkZHJlc3MgYWRkIHt0ZXN0X2FkZHJ9LzY0IGRldiB7ZGV2X25hbWV9IHNjb3BlIHtzY29wZX1cXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKGZcXFwibGluayBzZXQgZGV2IHtkZXZfbmFtZX0gdXBcXFwiLCBucz1zdHIobnMpKVxcbitcXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxcbisgICAgICAgIGFkZHJzID0gcnRubC5nZXRhZGRyKHtcXFwiaWZhLWZhbWlseVxcXCI6IHNvY2tldC5BRl9JTkVUNn0sIGR1bXA9VHJ1ZSlcXG4rICAgICAgICByZXR1cm4gW2FkZHJbXFxcImFkZHJlc3NcXFwiXSBmb3IgYWRkciBpbiBhZGRyc11cXG4rXFxuK1xcbitkZWYgaXB2Nl92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgQWZ0ZXIgaW5zZXJ0aW5nIG11bHRpcGxlIHNhbWUgc2NvcGUgSVB2NiBhZGRyZXNzZXMsIHRoZWlyIG9yZGVyXFxuKyAgICBtdXN0IGJlIHRoZSBfcmV2ZXJzZV8gb2YgdGhlIGluc2VydGlvbiBvcmRlci5cXG4rXFxuKyAgICBXaGlsZSB0aGlzIGJlaGF2aW91ciBpcyBkaWZmZXJlbnQgZnJvbSBob3cgSVB2NCBhY3RzLFxcbisgICAgdXBkYXRpbmcgdGhlIElQdjYgaW1wbGVtZW50YXRpb24gdG8gYWN0IHRoZSBzYW1lIHdheVxcbisgICAgaGFzIHByb3ZlZCB0byBjYXVzZSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIHJlZ3Jlc3Npb25zXFxuKyAgICAocGFydGljdWxhcmx5IGluIE5ldHdvcmtNYW5hZ2VyKS4gVGhpcyBiZWhhdmlvdXIgaXMgYmVpbmdcXG4rICAgIHRlc3RlZCBmb3IgdG8gY29uc29saWRhdGUgaXQgYXMgYmVpbmcgZXhwZWN0ZWQgYW5kIGNvcnJlY3QuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB0ZXN0X2FkZHJlc3NlcyA9IFtcXG4rICAgICAgICBcXFwiMjAwMTpkYjg6YTo6MVxcXCIsIFxcXCIyMDAxOmRiODpiOjoxXFxcIixcXG4rICAgICAgICBcXFwiMjAwMTpkYjg6YTo6MlxcXCIsIFxcXCIyMDAxOmRiODpiOjoyXFxcIiwgXFxcIjIwMDE6ZGI4OmE6OjNcXFwiXFxuKyAgICBdXFxuKyAgICBzY29wZXMgPSBbXFxcImdsb2JhbFxcXCJdICogNVxcbitcXG4rICAgIGFkZHJlc3NfbGlzdCA9IF9pbnNlcnRfYW5kX2dldF9hZGRyc19pcHY2KHRlc3RfYWRkcmVzc2VzLCBzY29wZXMpXFxuKyAgICAjIFdlIGlnbm9yZSB0aGUgbGluay1sb2NhbCBhZGRyZXNzIHByZXNlbnQgYnkgZGVmYXVsdC5cXG4rICAgIGtzZnRfZXEodGVzdF9hZGRyZXNzZXNbOjotMV0sIGFkZHJlc3NfbGlzdFs6NV0sIFxcXCJVbmV4cGVjdGVkIElQdjYgYWRkcmVzcyBvcmRlclxcXCIpXFxuK1xcbitcXG4rZGVmIGlwdjZfdmVyaWZ5X2ludGVyX3Njb3BlX2FkZHJfb3JkZXIoKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBUbyBwcmV2ZW50IHBvdGVudGlhbCB1c2VyLXNwYWNlIHJlZ3Jlc3Npb25zIHdpdGggSVB2NlxcbisgICAgYWRkcmVzc2VzLCB0aGUgaW50ZXItc2NvcGUgaW5zZXJ0aW9uIG9yZGVyIGlzIGFsc28gYmVpbmcgdGVzdGVkLlxcbitcXG4rICAgIFRoaXMgYWdhaW4gZGlmZmVycyBmcm9tIElQdjQsIGhlcmUgZ2xvYmFsIHNjb3BlIGFkZHJlc3NlcyBoYXZlIHByaW9yaXR5XFxuKyAgICBhZ2FpbnN0IGxpbmsgbG9jYWwgb25lcyAtIHRoZSBiZWhhdmlvdXJzIGFyZSBvcHBvc2l0ZS5cXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgdGVzdF9hZGRyZXNzZXMgPSBbXFxuKyAgICAgICAgXFxcIjIwMDE6ZGI4OmE6OjFcXFwiLCBcXFwiMjAwMTpkYjg6Yjo6MVxcXCIsXFxuKyAgICAgICAgXFxcIjIwMDE6ZGI4OmE6OjJcXFwiLCBcXFwiMjAwMTpkYjg6Yjo6MlxcXCIsIFxcXCIyMDAxOmRiODphOjozXFxcIlxcbisgICAgXVxcbisgICAgc2NvcGVzID0gW1xcbisgICAgICAgIFxcXCJnbG9iYWxcXFwiLCBcXFwibGlua1xcXCIsXFxuKyAgICAgICAgXFxcImdsb2JhbFxcXCIsIFxcXCJsaW5rXFxcIiwgXFxcImdsb2JhbFxcXCJcXG4rICAgIF1cXG4rXFxuKyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2Nih0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxcbisgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3Nlc1s6Oi0xXSwgYWRkcmVzc19saXN0Wzo1XSwgXFxcIlVuZXhwZWN0ZWQgSVB2NiBhZGRyZXNzIG9yZGVyIGFjcm9zcyBzY29wZXNcXFwiKVxcbitcXG4rXFxuIGRlZiBtYWluKCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXFxuLSAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCxcXG4rICAgICAgICAgICAgICBpcHY0X3ZlcmlmeV9zYW1lX3Njb3BlX2FkZHJfb3JkZXIsIGlwdjRfdmVyaWZ5X2ludGVyX3Njb3BlX2FkZHJfb3JkZXIsXFxuKyAgICAgICAgICAgICAgaXB2Nl92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyLCBpcHY2X3ZlcmlmeV9pbnRlcl9zY29wZV9hZGRyX29yZGVyXSlcXG4gICAgIGtzZnRfZXhpdCgpXFxuIFxcbiBpZiBfX25hbWVfXyA9PSBcXFwiX19tYWluX19cXFwiOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzoyMzowNC4zODE4Njg3MTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU1MTI0MTE4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBhbmQgZG9lcyBub3QgY2hhbmdlIGFueSBrZXJuZWwgY29kZSBvciBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzBlNDdkMTE5NDMyMjRhZGVmOWE2NDNiYzE3MDMwZTk3MWE3OWVmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTc6MjM6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggNWNjM2ViZGNmMDhkZS4uNTYwNWJlNDExZjFhOCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC0zMTQsMTEgKzMxNCwxMjQgQEAgZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXHUwMDNlIE5vbmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgXCJ1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb25cIilcbiBcbiBcbitkZWYgX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjQodGVzdF9hZGRyczogbGlzdFtzdHJdLCBzY29wZXM6IGxpc3Rbc3RyXSkgLVx1MDAzZSBsaXN0W3N0cl06XG4rICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgIGRldl9uYW1lID0gXCJkdW1teV9kZXZcIlxuK1xuKyAgICAgICAgaXAoZlwibGluayBhZGQgbmFtZSB7ZGV2X25hbWV9IHR5cGUgZHVtbXlcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGZvciB0ZXN0X2FkZHIsIHNjb3BlIGluIHppcCh0ZXN0X2FkZHJzLCBzY29wZXMpOlxuKyAgICAgICAgICAgIGlwKGZcImFkZHJlc3MgYWRkIHt0ZXN0X2FkZHJ9LzI0IGRldiB7ZGV2X25hbWV9IHNjb3BlIHtzY29wZX1cIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKGZcImxpbmsgc2V0IGRldiB7ZGV2X25hbWV9IHVwXCIsIG5zPXN0cihucykpXG4rXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuKyAgICAgICAgYWRkcnMgPSBydG5sLmdldGFkZHIoe1wiaWZhLWZhbWlseVwiOiBzb2NrZXQuQUZfSU5FVH0sIGR1bXA9VHJ1ZSlcbisgICAgICAgIHJldHVybiBbYWRkcltcImFkZHJlc3NcIl0gZm9yIGFkZHIgaW4gYWRkcnNdXG4rXG4rXG4rZGVmIGlwdjRfdmVyaWZ5X3NhbWVfc2NvcGVfYWRkcl9vcmRlcigpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiXG4rICAgIEFmdGVyIGluc2VydGluZyBtdWx0aXBsZSBzYW1lIHNjb3BlIElQdjQgYWRkcmVzc2VzLCB0aGVpciBvcmRlclxuKyAgICBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBpbnNlcnRpb24gb3JkZXIuXG4rICAgIFwiXCJcIlxuK1xuKyAgICAjIFByaW1hcnkgYWRkcmVzc2VzIG9mIHRlc3Qgc3VibmV0cyBhcmUgaW5zZXJ0ZWQgZmlyc3QuXG4rICAgIHRlc3RfYWRkcmVzc2VzID0gW1xuKyAgICAgICAgXCIxOTIuMC4yLjFcIiwgXCIyMDMuMC4xMTMuMVwiLFxuKyAgICAgICAgXCIxOTIuMC4yLjJcIiwgXCIyMDMuMC4xMTMuMlwiLCBcIjE5Mi4wLjIuM1wiXG4rICAgIF1cbisgICAgc2NvcGVzID0gW1wiZ2xvYmFsXCJdICogNVxuK1xuKyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2NCh0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxuKyAgICBrc2Z0X2VxKHRlc3RfYWRkcmVzc2VzLCBhZGRyZXNzX2xpc3QsIFwiVW5leHBlY3RlZCBJUHY0IGFkZHJlc3Mgb3JkZXJcIilcbitcbitcbitkZWYgaXB2NF92ZXJpZnlfaW50ZXJfc2NvcGVfYWRkcl9vcmRlcigpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiXG4rICAgIENoZWNrcyB0aGUgb3JkZXJpbmcgb2YgaW50ZXItc2NvcGUgYWRkcmVzc2VzLiBUaGlzIGhhcyBhbHNvXG4rICAgIGJlZW4gYXR0ZW1wdGVkIHRvIGJlIHBhdGNoZWQsIGJyaW5naW5nIGluIGEgbmV3IHJpc2sgb2YgYSB1c2VyLXNwYWNlXG4rICAgIHJlZ3Jlc3Npb24sIHNpbWlsYXIgdG8gdGhlIHNhbWUgc2NvcGUgZXF1aXZhbGVudC4gVGhpcyB3aWxsIGZ1cnRoZXJcbisgICAgY29uc29saWRhdGUgdGhlIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzIG9mIGJvdGggcHJvdG9jb2xzLlxuKyAgICBcIlwiXCJcbitcbisgICAgdGVzdF9hZGRyZXNzZXMgPSBbXG4rICAgICAgICBcIjE5Mi4wLjIuMVwiLCBcIjIwMy4wLjExMy4xXCIsXG4rICAgICAgICBcIjE5Mi4wLjIuMlwiLCBcIjIwMy4wLjExMy4yXCIsIFwiMTkyLjAuMi4zXCJcbisgICAgXVxuKyAgICAjIElQdjQgcHV0cyBsaW5rIGxvY2FsIGFkZHJlc3NlcyBiZWZvcmUgZ2xvYmFsIG9uZXMuXG4rICAgIHNjb3BlcyA9IFtcbisgICAgICAgIFwibGlua1wiLCBcImdsb2JhbFwiLFxuKyAgICAgICAgXCJsaW5rXCIsIFwiZ2xvYmFsXCIsIFwibGlua1wiXG4rICAgIF1cbitcbisgICAgYWRkcmVzc19saXN0ID0gX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjQodGVzdF9hZGRyZXNzZXMsIHNjb3BlcylcbisgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3NlcywgYWRkcmVzc19saXN0LCBcIlVuZXhwZWN0ZWQgSVB2NCBhZGRyZXNzIG9yZGVyIGFjcm9zcyBzY29wZXNcIilcbitcbitcbitkZWYgX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjYodGVzdF9hZGRyczogbGlzdFtzdHJdLCBzY29wZXM6IGxpc3Rbc3RyXSkgLVx1MDAzZSBsaXN0W3N0cl06XG4rICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgIGRldl9uYW1lID0gXCJkdW1teV9kZXZcIlxuK1xuKyAgICAgICAgaXAoZlwibGluayBhZGQgbmFtZSB7ZGV2X25hbWV9IHR5cGUgZHVtbXlcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGZvciB0ZXN0X2FkZHIsIHNjb3BlIGluIHppcCh0ZXN0X2FkZHJzLCBzY29wZXMpOlxuKyAgICAgICAgICAgIGlwKGZcImFkZHJlc3MgYWRkIHt0ZXN0X2FkZHJ9LzY0IGRldiB7ZGV2X25hbWV9IHNjb3BlIHtzY29wZX1cIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKGZcImxpbmsgc2V0IGRldiB7ZGV2X25hbWV9IHVwXCIsIG5zPXN0cihucykpXG4rXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuKyAgICAgICAgYWRkcnMgPSBydG5sLmdldGFkZHIoe1wiaWZhLWZhbWlseVwiOiBzb2NrZXQuQUZfSU5FVDZ9LCBkdW1wPVRydWUpXG4rICAgICAgICByZXR1cm4gW2FkZHJbXCJhZGRyZXNzXCJdIGZvciBhZGRyIGluIGFkZHJzXVxuK1xuK1xuK2RlZiBpcHY2X3ZlcmlmeV9zYW1lX3Njb3BlX2FkZHJfb3JkZXIoKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlxuKyAgICBBZnRlciBpbnNlcnRpbmcgbXVsdGlwbGUgc2FtZSBzY29wZSBJUHY2IGFkZHJlc3NlcywgdGhlaXIgb3JkZXJcbisgICAgbXVzdCBiZSB0aGUgX3JldmVyc2VfIG9mIHRoZSBpbnNlcnRpb24gb3JkZXIuXG4rXG4rICAgIFdoaWxlIHRoaXMgYmVoYXZpb3VyIGlzIGRpZmZlcmVudCBmcm9tIGhvdyBJUHY0IGFjdHMsXG4rICAgIHVwZGF0aW5nIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uIHRvIGFjdCB0aGUgc2FtZSB3YXlcbisgICAgaGFzIHByb3ZlZCB0byBjYXVzZSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIHJlZ3Jlc3Npb25zXG4rICAgIChwYXJ0aWN1bGFybHkgaW4gTmV0d29ya01hbmFnZXIpLiBUaGlzIGJlaGF2aW91ciBpcyBiZWluZ1xuKyAgICB0ZXN0ZWQgZm9yIHRvIGNvbnNvbGlkYXRlIGl0IGFzIGJlaW5nIGV4cGVjdGVkIGFuZCBjb3JyZWN0LlxuKyAgICBcIlwiXCJcbitcbisgICAgdGVzdF9hZGRyZXNzZXMgPSBbXG4rICAgICAgICBcIjIwMDE6ZGI4OmE6OjFcIiwgXCIyMDAxOmRiODpiOjoxXCIsXG4rICAgICAgICBcIjIwMDE6ZGI4OmE6OjJcIiwgXCIyMDAxOmRiODpiOjoyXCIsIFwiMjAwMTpkYjg6YTo6M1wiXG4rICAgIF1cbisgICAgc2NvcGVzID0gW1wiZ2xvYmFsXCJdICogNVxuK1xuKyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2Nih0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxuKyAgICAjIFdlIGlnbm9yZSB0aGUgbGluay1sb2NhbCBhZGRyZXNzIHByZXNlbnQgYnkgZGVmYXVsdC5cbisgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3Nlc1s6Oi0xXSwgYWRkcmVzc19saXN0Wzo1XSwgXCJVbmV4cGVjdGVkIElQdjYgYWRkcmVzcyBvcmRlclwiKVxuK1xuK1xuK2RlZiBpcHY2X3ZlcmlmeV9pbnRlcl9zY29wZV9hZGRyX29yZGVyKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgVG8gcHJldmVudCBwb3RlbnRpYWwgdXNlci1zcGFjZSByZWdyZXNzaW9ucyB3aXRoIElQdjZcbisgICAgYWRkcmVzc2VzLCB0aGUgaW50ZXItc2NvcGUgaW5zZXJ0aW9uIG9yZGVyIGlzIGFsc28gYmVpbmcgdGVzdGVkLlxuK1xuKyAgICBUaGlzIGFnYWluIGRpZmZlcnMgZnJvbSBJUHY0LCBoZXJlIGdsb2JhbCBzY29wZSBhZGRyZXNzZXMgaGF2ZSBwcmlvcml0eVxuKyAgICBhZ2FpbnN0IGxpbmsgbG9jYWwgb25lcyAtIHRoZSBiZWhhdmlvdXJzIGFyZSBvcHBvc2l0ZS5cbisgICAgXCJcIlwiXG4rICAgIHRlc3RfYWRkcmVzc2VzID0gW1xuKyAgICAgICAgXCIyMDAxOmRiODphOjoxXCIsIFwiMjAwMTpkYjg6Yjo6MVwiLFxuKyAgICAgICAgXCIyMDAxOmRiODphOjoyXCIsIFwiMjAwMTpkYjg6Yjo6MlwiLCBcIjIwMDE6ZGI4OmE6OjNcIlxuKyAgICBdXG4rICAgIHNjb3BlcyA9IFtcbisgICAgICAgIFwiZ2xvYmFsXCIsIFwibGlua1wiLFxuKyAgICAgICAgXCJnbG9iYWxcIiwgXCJsaW5rXCIsIFwiZ2xvYmFsXCJcbisgICAgXVxuK1xuKyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2Nih0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxuKyAgICBrc2Z0X2VxKHRlc3RfYWRkcmVzc2VzWzo6LTFdLCBhZGRyZXNzX2xpc3RbOjVdLCBcIlVuZXhwZWN0ZWQgSVB2NiBhZGRyZXNzIG9yZGVyIGFjcm9zcyBzY29wZXNcIilcbitcbitcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbiAgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4tICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQsXG4rICAgICAgICAgICAgICBpcHY0X3ZlcmlmeV9zYW1lX3Njb3BlX2FkZHJfb3JkZXIsIGlwdjRfdmVyaWZ5X2ludGVyX3Njb3BlX2FkZHJfb3JkZXIsXG4rICAgICAgICAgICAgICBpcHY2X3ZlcmlmeV9zYW1lX3Njb3BlX2FkZHJfb3JkZXIsIGlwdjZfdmVyaWZ5X2ludGVyX3Njb3BlX2FkZHJfb3JkZXJdKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuIGlmIF9fbmFtZV9fID09IFwiX19tYWluX19cIjpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjIzOjA0LjM4MTg3MDYwM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1MTIzODgzNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZyBFdmFsdWF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBUaGUgZGlmZiBzaG93cyB0aGF0IG9ubHkgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlgIGhhcyBiZWVuIHRvdWNoZWQuIE5vdywgSSBuZWVkIHRvIGFwcGx5IG15IHRyaWFnZSBjcml0ZXJpYS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgbW9kaWZpY2F0aW9uIGltcGFjdHMgdGhlIGtlcm5lbCBpdHNlbGYuIExvb2tpbmcgYXQgdGhlIHRyaWFnZSBjcml0ZXJpYSwgSSByZW1lbWJlciB0aGF0IGNoYW5nZXMgaW4gdXNlci1zcGFjZSB0ZXN0aW5nIHRvb2xzIGxpa2UgdGhvc2UgZm91bmQgaW4gYHRvb2xzL2AsIGFzIGxvbmcgYXMgdGhleSBkb24ndCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCwgYXJlbid0IHdvcnRoIGZ1enppbmcuIFRoZSBjcml0ZXJpYSBzdGF0ZXMgY2xlYXJseTogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzLi4uIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMuLi4gdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiXG5cblRoaXMgcGF0Y2ggbW9kaWZpZXMgYSBQeXRob24gc2VsZi10ZXN0IHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBJdCdzIHVzZXItc3BhY2UgY29kZTsgaXQncyBub3QgQyBjb2RlLCBub3IgZG9lcyBpdCBhcHBlYXIgdG8gY2hhbmdlIGFueSBoZWFkZXIgZmlsZXMuIEl0IGNlcnRhaW5seSBkb2Vzbid0IGltcGFjdCBgdm1saW51eGAgb3Iga2VybmVsIG1vZHVsZXMuXG5cblRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIHRyaWFnZSBjcml0ZXJpYSwgSSdtIGNvbmZpZGVudCBJIGNhbiBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgaXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0LCBhbmQgaXQgZG9lc24ndCB0b3VjaCB0aGUga2VybmVsJ3MgY29yZSBjb21wb25lbnRzLiBJJ2xsIGFsc28gc2V0IGBGb2N1c1N5bWJvbHNgIHRvIGBbXWAgYW5kIGBFbmFibGVDb25maWdzYCB0byBgW11gLCBzaW5jZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGF0dGFjayBzdXJmYWNlIGluIHRoZSBrZXJuZWwuXG5cbldpdGggdGhhdCBkZXRlcm1pbmVkLCBJIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBwcm92aWRlIHRoZXNlIHZhbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3OCwiT3V0cHV0VG9rZW5zIjo3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjIzOjA5Ljg5NDI2MTE4OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGFuZCBkb2VzIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGFuZCBkb2VzIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6MjM6MDkuODk0MjgyNFoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowvssh2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 17:04:23 +0000 UTC FinishedAt: 2026-09-07 17:23:11 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGFuZCBkb2VzIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMwZTQ3ZDExOTQzMjI0YWRlZjlhNjQzYmMxNzAzMGU5NzFhNzllZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE3OjIzOjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5pbmRleCA1Y2MzZWJkY2YwOGRlLi41NjA1YmU0MTFmMWE4IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuQEAgLTMxNCwxMSAmIzQzOzMxNCwxMjQgQEAgZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXHUwMDNlIE5vbmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7dXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uXCYjMzQ7KVxuIFxuIFxuJiM0MztkZWYgX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjQodGVzdF9hZGRyczogbGlzdFtzdHJdLCBzY29wZXM6IGxpc3Rbc3RyXSkgLVx1MDAzZSBsaXN0W3N0cl06XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4mIzQzOyAgICAgICAgZGV2X25hbWUgPSBcJiMzNDtkdW1teV9kZXZcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICAgICAgaXAoZlwmIzM0O2xpbmsgYWRkIG5hbWUge2Rldl9uYW1lfSB0eXBlIGR1bW15XCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGZvciB0ZXN0X2FkZHIsIHNjb3BlIGluIHppcCh0ZXN0X2FkZHJzLCBzY29wZXMpOlxuJiM0MzsgICAgICAgICAgICBpcChmXCYjMzQ7YWRkcmVzcyBhZGQge3Rlc3RfYWRkcn0vMjQgZGV2IHtkZXZfbmFtZX0gc2NvcGUge3Njb3BlfVwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChmXCYjMzQ7bGluayBzZXQgZGV2IHtkZXZfbmFtZX0gdXBcJiMzNDssIG5zPXN0cihucykpXG4mIzQzO1xuJiM0MzsgICAgICAgIHJ0bmwgPSBSdG5sQWRkckZhbWlseSgpXG4mIzQzOyAgICAgICAgYWRkcnMgPSBydG5sLmdldGFkZHIoe1wmIzM0O2lmYS1mYW1pbHlcJiMzNDs6IHNvY2tldC5BRl9JTkVUfSwgZHVtcD1UcnVlKVxuJiM0MzsgICAgICAgIHJldHVybiBbYWRkcltcJiMzNDthZGRyZXNzXCYjMzQ7XSBmb3IgYWRkciBpbiBhZGRyc11cbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2NF92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyKCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBBZnRlciBpbnNlcnRpbmcgbXVsdGlwbGUgc2FtZSBzY29wZSBJUHY0IGFkZHJlc3NlcywgdGhlaXIgb3JkZXJcbiYjNDM7ICAgIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIGluc2VydGlvbiBvcmRlci5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgICMgUHJpbWFyeSBhZGRyZXNzZXMgb2YgdGVzdCBzdWJuZXRzIGFyZSBpbnNlcnRlZCBmaXJzdC5cbiYjNDM7ICAgIHRlc3RfYWRkcmVzc2VzID0gW1xuJiM0MzsgICAgICAgIFwmIzM0OzE5Mi4wLjIuMVwmIzM0OywgXCYjMzQ7MjAzLjAuMTEzLjFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7MTkyLjAuMi4yXCYjMzQ7LCBcJiMzNDsyMDMuMC4xMTMuMlwmIzM0OywgXCYjMzQ7MTkyLjAuMi4zXCYjMzQ7XG4mIzQzOyAgICBdXG4mIzQzOyAgICBzY29wZXMgPSBbXCYjMzQ7Z2xvYmFsXCYjMzQ7XSAqIDVcbiYjNDM7XG4mIzQzOyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2NCh0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxuJiM0MzsgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3NlcywgYWRkcmVzc19saXN0LCBcJiMzNDtVbmV4cGVjdGVkIElQdjQgYWRkcmVzcyBvcmRlclwmIzM0OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2NF92ZXJpZnlfaW50ZXJfc2NvcGVfYWRkcl9vcmRlcigpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgQ2hlY2tzIHRoZSBvcmRlcmluZyBvZiBpbnRlci1zY29wZSBhZGRyZXNzZXMuIFRoaXMgaGFzIGFsc29cbiYjNDM7ICAgIGJlZW4gYXR0ZW1wdGVkIHRvIGJlIHBhdGNoZWQsIGJyaW5naW5nIGluIGEgbmV3IHJpc2sgb2YgYSB1c2VyLXNwYWNlXG4mIzQzOyAgICByZWdyZXNzaW9uLCBzaW1pbGFyIHRvIHRoZSBzYW1lIHNjb3BlIGVxdWl2YWxlbnQuIFRoaXMgd2lsbCBmdXJ0aGVyXG4mIzQzOyAgICBjb25zb2xpZGF0ZSB0aGUgaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgb2YgYm90aCBwcm90b2NvbHMuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICB0ZXN0X2FkZHJlc3NlcyA9IFtcbiYjNDM7ICAgICAgICBcJiMzNDsxOTIuMC4yLjFcJiMzNDssIFwmIzM0OzIwMy4wLjExMy4xXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0OzE5Mi4wLjIuMlwmIzM0OywgXCYjMzQ7MjAzLjAuMTEzLjJcJiMzNDssIFwmIzM0OzE5Mi4wLjIuM1wmIzM0O1xuJiM0MzsgICAgXVxuJiM0MzsgICAgIyBJUHY0IHB1dHMgbGluayBsb2NhbCBhZGRyZXNzZXMgYmVmb3JlIGdsb2JhbCBvbmVzLlxuJiM0MzsgICAgc2NvcGVzID0gW1xuJiM0MzsgICAgICAgIFwmIzM0O2xpbmtcJiMzNDssIFwmIzM0O2dsb2JhbFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtsaW5rXCYjMzQ7LCBcJiMzNDtnbG9iYWxcJiMzNDssIFwmIzM0O2xpbmtcJiMzNDtcbiYjNDM7ICAgIF1cbiYjNDM7XG4mIzQzOyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2NCh0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxuJiM0MzsgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3NlcywgYWRkcmVzc19saXN0LCBcJiMzNDtVbmV4cGVjdGVkIElQdjQgYWRkcmVzcyBvcmRlciBhY3Jvc3Mgc2NvcGVzXCYjMzQ7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2Nih0ZXN0X2FkZHJzOiBsaXN0W3N0cl0sIHNjb3BlczogbGlzdFtzdHJdKSAtXHUwMDNlIGxpc3Rbc3RyXTpcbiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcbiYjNDM7ICAgICAgICBkZXZfbmFtZSA9IFwmIzM0O2R1bW15X2RldlwmIzM0O1xuJiM0MztcbiYjNDM7ICAgICAgICBpcChmXCYjMzQ7bGluayBhZGQgbmFtZSB7ZGV2X25hbWV9IHR5cGUgZHVtbXlcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgZm9yIHRlc3RfYWRkciwgc2NvcGUgaW4gemlwKHRlc3RfYWRkcnMsIHNjb3Blcyk6XG4mIzQzOyAgICAgICAgICAgIGlwKGZcJiMzNDthZGRyZXNzIGFkZCB7dGVzdF9hZGRyfS82NCBkZXYge2Rldl9uYW1lfSBzY29wZSB7c2NvcGV9XCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKGZcJiMzNDtsaW5rIHNldCBkZXYge2Rldl9uYW1lfSB1cFwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7XG4mIzQzOyAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcbiYjNDM7ICAgICAgICBhZGRycyA9IHJ0bmwuZ2V0YWRkcih7XCYjMzQ7aWZhLWZhbWlseVwmIzM0Ozogc29ja2V0LkFGX0lORVQ2fSwgZHVtcD1UcnVlKVxuJiM0MzsgICAgICAgIHJldHVybiBbYWRkcltcJiMzNDthZGRyZXNzXCYjMzQ7XSBmb3IgYWRkciBpbiBhZGRyc11cbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2Nl92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyKCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBBZnRlciBpbnNlcnRpbmcgbXVsdGlwbGUgc2FtZSBzY29wZSBJUHY2IGFkZHJlc3NlcywgdGhlaXIgb3JkZXJcbiYjNDM7ICAgIG11c3QgYmUgdGhlIF9yZXZlcnNlXyBvZiB0aGUgaW5zZXJ0aW9uIG9yZGVyLlxuJiM0MztcbiYjNDM7ICAgIFdoaWxlIHRoaXMgYmVoYXZpb3VyIGlzIGRpZmZlcmVudCBmcm9tIGhvdyBJUHY0IGFjdHMsXG4mIzQzOyAgICB1cGRhdGluZyB0aGUgSVB2NiBpbXBsZW1lbnRhdGlvbiB0byBhY3QgdGhlIHNhbWUgd2F5XG4mIzQzOyAgICBoYXMgcHJvdmVkIHRvIGNhdXNlIHVzZXItc3BhY2UgYXBwbGljYXRpb24gcmVncmVzc2lvbnNcbiYjNDM7ICAgIChwYXJ0aWN1bGFybHkgaW4gTmV0d29ya01hbmFnZXIpLiBUaGlzIGJlaGF2aW91ciBpcyBiZWluZ1xuJiM0MzsgICAgdGVzdGVkIGZvciB0byBjb25zb2xpZGF0ZSBpdCBhcyBiZWluZyBleHBlY3RlZCBhbmQgY29ycmVjdC5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIHRlc3RfYWRkcmVzc2VzID0gW1xuJiM0MzsgICAgICAgIFwmIzM0OzIwMDE6ZGI4OmE6OjFcJiMzNDssIFwmIzM0OzIwMDE6ZGI4OmI6OjFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7MjAwMTpkYjg6YTo6MlwmIzM0OywgXCYjMzQ7MjAwMTpkYjg6Yjo6MlwmIzM0OywgXCYjMzQ7MjAwMTpkYjg6YTo6M1wmIzM0O1xuJiM0MzsgICAgXVxuJiM0MzsgICAgc2NvcGVzID0gW1wmIzM0O2dsb2JhbFwmIzM0O10gKiA1XG4mIzQzO1xuJiM0MzsgICAgYWRkcmVzc19saXN0ID0gX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjYodGVzdF9hZGRyZXNzZXMsIHNjb3BlcylcbiYjNDM7ICAgICMgV2UgaWdub3JlIHRoZSBsaW5rLWxvY2FsIGFkZHJlc3MgcHJlc2VudCBieSBkZWZhdWx0LlxuJiM0MzsgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3Nlc1s6Oi0xXSwgYWRkcmVzc19saXN0Wzo1XSwgXCYjMzQ7VW5leHBlY3RlZCBJUHY2IGFkZHJlc3Mgb3JkZXJcJiMzNDspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGlwdjZfdmVyaWZ5X2ludGVyX3Njb3BlX2FkZHJfb3JkZXIoKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIFRvIHByZXZlbnQgcG90ZW50aWFsIHVzZXItc3BhY2UgcmVncmVzc2lvbnMgd2l0aCBJUHY2XG4mIzQzOyAgICBhZGRyZXNzZXMsIHRoZSBpbnRlci1zY29wZSBpbnNlcnRpb24gb3JkZXIgaXMgYWxzbyBiZWluZyB0ZXN0ZWQuXG4mIzQzO1xuJiM0MzsgICAgVGhpcyBhZ2FpbiBkaWZmZXJzIGZyb20gSVB2NCwgaGVyZSBnbG9iYWwgc2NvcGUgYWRkcmVzc2VzIGhhdmUgcHJpb3JpdHlcbiYjNDM7ICAgIGFnYWluc3QgbGluayBsb2NhbCBvbmVzIC0gdGhlIGJlaGF2aW91cnMgYXJlIG9wcG9zaXRlLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICB0ZXN0X2FkZHJlc3NlcyA9IFtcbiYjNDM7ICAgICAgICBcJiMzNDsyMDAxOmRiODphOjoxXCYjMzQ7LCBcJiMzNDsyMDAxOmRiODpiOjoxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0OzIwMDE6ZGI4OmE6OjJcJiMzNDssIFwmIzM0OzIwMDE6ZGI4OmI6OjJcJiMzNDssIFwmIzM0OzIwMDE6ZGI4OmE6OjNcJiMzNDtcbiYjNDM7ICAgIF1cbiYjNDM7ICAgIHNjb3BlcyA9IFtcbiYjNDM7ICAgICAgICBcJiMzNDtnbG9iYWxcJiMzNDssIFwmIzM0O2xpbmtcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Z2xvYmFsXCYjMzQ7LCBcJiMzNDtsaW5rXCYjMzQ7LCBcJiMzNDtnbG9iYWxcJiMzNDtcbiYjNDM7ICAgIF1cbiYjNDM7XG4mIzQzOyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2Nih0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxuJiM0MzsgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3Nlc1s6Oi0xXSwgYWRkcmVzc19saXN0Wzo1XSwgXCYjMzQ7VW5leHBlY3RlZCBJUHY2IGFkZHJlc3Mgb3JkZXIgYWNyb3NzIHNjb3Blc1wmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBtYWluKCkgLVx1MDAzZSBOb25lOlxuICAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxuICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbi0gICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKVxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQsXG4mIzQzOyAgICAgICAgICAgICAgaXB2NF92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyLCBpcHY0X3ZlcmlmeV9pbnRlcl9zY29wZV9hZGRyX29yZGVyLFxuJiM0MzsgICAgICAgICAgICAgIGlwdjZfdmVyaWZ5X3NhbWVfc2NvcGVfYWRkcl9vcmRlciwgaXB2Nl92ZXJpZnlfaW50ZXJfc2NvcGVfYWRkcl9vcmRlcl0pXG4gICAgIGtzZnRfZXhpdCgpXG4gXG4gaWYgX19uYW1lX18gPT0gXCYjMzQ7X19tYWluX19cJiMzNDs6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTc6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGFuZCBkb2VzIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMwZTQ3ZDExOTQzMjI0YWRlZjlhNjQzYmMxNzAzMGU5NzFhNzllZjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE3OjIzOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggNWNjM2ViZGNmMDhkZS4uNTYwNWJlNDExZjFhOCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CkBAIC0zMTQsMTEgJiM0MzszMTQsMTI0IEBAIGRlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLSZndDsgTm9uZToKICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7dXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uJiMzNDspCiAKIAomIzQzO2RlZiBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2NCh0ZXN0X2FkZHJzOiBsaXN0W3N0cl0sIHNjb3BlczogbGlzdFtzdHJdKSAtJmd0OyBsaXN0W3N0cl06CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgIGRldl9uYW1lID0gJiMzNDtkdW1teV9kZXYmIzM0OwomIzQzOwomIzQzOyAgICAgICAgaXAoZiYjMzQ7bGluayBhZGQgbmFtZSB7ZGV2X25hbWV9IHR5cGUgZHVtbXkmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGZvciB0ZXN0X2FkZHIsIHNjb3BlIGluIHppcCh0ZXN0X2FkZHJzLCBzY29wZXMpOgomIzQzOyAgICAgICAgICAgIGlwKGYmIzM0O2FkZHJlc3MgYWRkIHt0ZXN0X2FkZHJ9LzI0IGRldiB7ZGV2X25hbWV9IHNjb3BlIHtzY29wZX0mIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKGYmIzM0O2xpbmsgc2V0IGRldiB7ZGV2X25hbWV9IHVwJiMzNDssIG5zPXN0cihucykpCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgYWRkcnMgPSBydG5sLmdldGFkZHIoeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBzb2NrZXQuQUZfSU5FVH0sIGR1bXA9VHJ1ZSkKJiM0MzsgICAgICAgIHJldHVybiBbYWRkclsmIzM0O2FkZHJlc3MmIzM0O10gZm9yIGFkZHIgaW4gYWRkcnNdCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjRfdmVyaWZ5X3NhbWVfc2NvcGVfYWRkcl9vcmRlcigpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBBZnRlciBpbnNlcnRpbmcgbXVsdGlwbGUgc2FtZSBzY29wZSBJUHY0IGFkZHJlc3NlcywgdGhlaXIgb3JkZXIKJiM0MzsgICAgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgaW5zZXJ0aW9uIG9yZGVyLgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgIyBQcmltYXJ5IGFkZHJlc3NlcyBvZiB0ZXN0IHN1Ym5ldHMgYXJlIGluc2VydGVkIGZpcnN0LgomIzQzOyAgICB0ZXN0X2FkZHJlc3NlcyA9IFsKJiM0MzsgICAgICAgICYjMzQ7MTkyLjAuMi4xJiMzNDssICYjMzQ7MjAzLjAuMTEzLjEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7MTkyLjAuMi4yJiMzNDssICYjMzQ7MjAzLjAuMTEzLjImIzM0OywgJiMzNDsxOTIuMC4yLjMmIzM0OwomIzQzOyAgICBdCiYjNDM7ICAgIHNjb3BlcyA9IFsmIzM0O2dsb2JhbCYjMzQ7XSAqIDUKJiM0MzsKJiM0MzsgICAgYWRkcmVzc19saXN0ID0gX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjQodGVzdF9hZGRyZXNzZXMsIHNjb3BlcykKJiM0MzsgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3NlcywgYWRkcmVzc19saXN0LCAmIzM0O1VuZXhwZWN0ZWQgSVB2NCBhZGRyZXNzIG9yZGVyJiMzNDspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwdjRfdmVyaWZ5X2ludGVyX3Njb3BlX2FkZHJfb3JkZXIoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgQ2hlY2tzIHRoZSBvcmRlcmluZyBvZiBpbnRlci1zY29wZSBhZGRyZXNzZXMuIFRoaXMgaGFzIGFsc28KJiM0MzsgICAgYmVlbiBhdHRlbXB0ZWQgdG8gYmUgcGF0Y2hlZCwgYnJpbmdpbmcgaW4gYSBuZXcgcmlzayBvZiBhIHVzZXItc3BhY2UKJiM0MzsgICAgcmVncmVzc2lvbiwgc2ltaWxhciB0byB0aGUgc2FtZSBzY29wZSBlcXVpdmFsZW50LiBUaGlzIHdpbGwgZnVydGhlcgomIzQzOyAgICBjb25zb2xpZGF0ZSB0aGUgaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgb2YgYm90aCBwcm90b2NvbHMuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICB0ZXN0X2FkZHJlc3NlcyA9IFsKJiM0MzsgICAgICAgICYjMzQ7MTkyLjAuMi4xJiMzNDssICYjMzQ7MjAzLjAuMTEzLjEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7MTkyLjAuMi4yJiMzNDssICYjMzQ7MjAzLjAuMTEzLjImIzM0OywgJiMzNDsxOTIuMC4yLjMmIzM0OwomIzQzOyAgICBdCiYjNDM7ICAgICMgSVB2NCBwdXRzIGxpbmsgbG9jYWwgYWRkcmVzc2VzIGJlZm9yZSBnbG9iYWwgb25lcy4KJiM0MzsgICAgc2NvcGVzID0gWwomIzQzOyAgICAgICAgJiMzNDtsaW5rJiMzNDssICYjMzQ7Z2xvYmFsJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2xpbmsmIzM0OywgJiMzNDtnbG9iYWwmIzM0OywgJiMzNDtsaW5rJiMzNDsKJiM0MzsgICAgXQomIzQzOwomIzQzOyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2NCh0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKQomIzQzOyAgICBrc2Z0X2VxKHRlc3RfYWRkcmVzc2VzLCBhZGRyZXNzX2xpc3QsICYjMzQ7VW5leHBlY3RlZCBJUHY0IGFkZHJlc3Mgb3JkZXIgYWNyb3NzIHNjb3BlcyYjMzQ7KQomIzQzOwomIzQzOwomIzQzO2RlZiBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2Nih0ZXN0X2FkZHJzOiBsaXN0W3N0cl0sIHNjb3BlczogbGlzdFtzdHJdKSAtJmd0OyBsaXN0W3N0cl06CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgIGRldl9uYW1lID0gJiMzNDtkdW1teV9kZXYmIzM0OwomIzQzOwomIzQzOyAgICAgICAgaXAoZiYjMzQ7bGluayBhZGQgbmFtZSB7ZGV2X25hbWV9IHR5cGUgZHVtbXkmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGZvciB0ZXN0X2FkZHIsIHNjb3BlIGluIHppcCh0ZXN0X2FkZHJzLCBzY29wZXMpOgomIzQzOyAgICAgICAgICAgIGlwKGYmIzM0O2FkZHJlc3MgYWRkIHt0ZXN0X2FkZHJ9LzY0IGRldiB7ZGV2X25hbWV9IHNjb3BlIHtzY29wZX0mIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKGYmIzM0O2xpbmsgc2V0IGRldiB7ZGV2X25hbWV9IHVwJiMzNDssIG5zPXN0cihucykpCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgYWRkcnMgPSBydG5sLmdldGFkZHIoeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBzb2NrZXQuQUZfSU5FVDZ9LCBkdW1wPVRydWUpCiYjNDM7ICAgICAgICByZXR1cm4gW2FkZHJbJiMzNDthZGRyZXNzJiMzNDtdIGZvciBhZGRyIGluIGFkZHJzXQomIzQzOwomIzQzOwomIzQzO2RlZiBpcHY2X3ZlcmlmeV9zYW1lX3Njb3BlX2FkZHJfb3JkZXIoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgQWZ0ZXIgaW5zZXJ0aW5nIG11bHRpcGxlIHNhbWUgc2NvcGUgSVB2NiBhZGRyZXNzZXMsIHRoZWlyIG9yZGVyCiYjNDM7ICAgIG11c3QgYmUgdGhlIF9yZXZlcnNlXyBvZiB0aGUgaW5zZXJ0aW9uIG9yZGVyLgomIzQzOwomIzQzOyAgICBXaGlsZSB0aGlzIGJlaGF2aW91ciBpcyBkaWZmZXJlbnQgZnJvbSBob3cgSVB2NCBhY3RzLAomIzQzOyAgICB1cGRhdGluZyB0aGUgSVB2NiBpbXBsZW1lbnRhdGlvbiB0byBhY3QgdGhlIHNhbWUgd2F5CiYjNDM7ICAgIGhhcyBwcm92ZWQgdG8gY2F1c2UgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiByZWdyZXNzaW9ucwomIzQzOyAgICAocGFydGljdWxhcmx5IGluIE5ldHdvcmtNYW5hZ2VyKS4gVGhpcyBiZWhhdmlvdXIgaXMgYmVpbmcKJiM0MzsgICAgdGVzdGVkIGZvciB0byBjb25zb2xpZGF0ZSBpdCBhcyBiZWluZyBleHBlY3RlZCBhbmQgY29ycmVjdC4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIHRlc3RfYWRkcmVzc2VzID0gWwomIzQzOyAgICAgICAgJiMzNDsyMDAxOmRiODphOjoxJiMzNDssICYjMzQ7MjAwMTpkYjg6Yjo6MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDsyMDAxOmRiODphOjoyJiMzNDssICYjMzQ7MjAwMTpkYjg6Yjo6MiYjMzQ7LCAmIzM0OzIwMDE6ZGI4OmE6OjMmIzM0OwomIzQzOyAgICBdCiYjNDM7ICAgIHNjb3BlcyA9IFsmIzM0O2dsb2JhbCYjMzQ7XSAqIDUKJiM0MzsKJiM0MzsgICAgYWRkcmVzc19saXN0ID0gX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjYodGVzdF9hZGRyZXNzZXMsIHNjb3BlcykKJiM0MzsgICAgIyBXZSBpZ25vcmUgdGhlIGxpbmstbG9jYWwgYWRkcmVzcyBwcmVzZW50IGJ5IGRlZmF1bHQuCiYjNDM7ICAgIGtzZnRfZXEodGVzdF9hZGRyZXNzZXNbOjotMV0sIGFkZHJlc3NfbGlzdFs6NV0sICYjMzQ7VW5leHBlY3RlZCBJUHY2IGFkZHJlc3Mgb3JkZXImIzM0OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl92ZXJpZnlfaW50ZXJfc2NvcGVfYWRkcl9vcmRlcigpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBUbyBwcmV2ZW50IHBvdGVudGlhbCB1c2VyLXNwYWNlIHJlZ3Jlc3Npb25zIHdpdGggSVB2NgomIzQzOyAgICBhZGRyZXNzZXMsIHRoZSBpbnRlci1zY29wZSBpbnNlcnRpb24gb3JkZXIgaXMgYWxzbyBiZWluZyB0ZXN0ZWQuCiYjNDM7CiYjNDM7ICAgIFRoaXMgYWdhaW4gZGlmZmVycyBmcm9tIElQdjQsIGhlcmUgZ2xvYmFsIHNjb3BlIGFkZHJlc3NlcyBoYXZlIHByaW9yaXR5CiYjNDM7ICAgIGFnYWluc3QgbGluayBsb2NhbCBvbmVzIC0gdGhlIGJlaGF2aW91cnMgYXJlIG9wcG9zaXRlLgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgdGVzdF9hZGRyZXNzZXMgPSBbCiYjNDM7ICAgICAgICAmIzM0OzIwMDE6ZGI4OmE6OjEmIzM0OywgJiMzNDsyMDAxOmRiODpiOjoxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0OzIwMDE6ZGI4OmE6OjImIzM0OywgJiMzNDsyMDAxOmRiODpiOjoyJiMzNDssICYjMzQ7MjAwMTpkYjg6YTo6MyYjMzQ7CiYjNDM7ICAgIF0KJiM0MzsgICAgc2NvcGVzID0gWwomIzQzOyAgICAgICAgJiMzNDtnbG9iYWwmIzM0OywgJiMzNDtsaW5rJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2dsb2JhbCYjMzQ7LCAmIzM0O2xpbmsmIzM0OywgJiMzNDtnbG9iYWwmIzM0OwomIzQzOyAgICBdCiYjNDM7CiYjNDM7ICAgIGFkZHJlc3NfbGlzdCA9IF9pbnNlcnRfYW5kX2dldF9hZGRyc19pcHY2KHRlc3RfYWRkcmVzc2VzLCBzY29wZXMpCiYjNDM7ICAgIGtzZnRfZXEodGVzdF9hZGRyZXNzZXNbOjotMV0sIGFkZHJlc3NfbGlzdFs6NV0sICYjMzQ7VW5leHBlY3RlZCBJUHY2IGFkZHJlc3Mgb3JkZXIgYWNyb3NzIHNjb3BlcyYjMzQ7KQomIzQzOwomIzQzOwogZGVmIG1haW4oKSAtJmd0OyBOb25lOgogICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LAogICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCwKICAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3biwKLSAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pCiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50LAomIzQzOyAgICAgICAgICAgICAgaXB2NF92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyLCBpcHY0X3ZlcmlmeV9pbnRlcl9zY29wZV9hZGRyX29yZGVyLAomIzQzOyAgICAgICAgICAgICAgaXB2Nl92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyLCBpcHY2X3ZlcmlmeV9pbnRlcl9zY29wZV9hZGRyX29yZGVyXSkKICAgICBrc2Z0X2V4aXQoKQogCiBpZiBfX25hbWVfXyA9PSAmIzM0O19fbWFpbl9fJiMzNDs6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NzgKCQkJCQkJCW91dHB1dDogNzEKCQkJCQkJCXRob3VnaHRzOiAzNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZyBFdmFsdWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIFRoZSBkaWZmIHNob3dzIHRoYXQgb25seSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weWAgaGFzIGJlZW4gdG91Y2hlZC4gTm93LCBJIG5lZWQgdG8gYXBwbHkgbXkgdHJpYWdlIGNyaXRlcmlhLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy4KCk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgbW9kaWZpY2F0aW9uIGltcGFjdHMgdGhlIGtlcm5lbCBpdHNlbGYuIExvb2tpbmcgYXQgdGhlIHRyaWFnZSBjcml0ZXJpYSwgSSByZW1lbWJlciB0aGF0IGNoYW5nZXMgaW4gdXNlci1zcGFjZSB0ZXN0aW5nIHRvb2xzIGxpa2UgdGhvc2UgZm91bmQgaW4gYHRvb2xzL2AsIGFzIGxvbmcgYXMgdGhleSBkb24mIzM5O3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwsIGFyZW4mIzM5O3Qgd29ydGggZnV6emluZy4gVGhlIGNyaXRlcmlhIHN0YXRlcyBjbGVhcmx5OiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXMuLi4gVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cy4uLiB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDsKClRoaXMgcGF0Y2ggbW9kaWZpZXMgYSBQeXRob24gc2VsZi10ZXN0IHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBJdCYjMzk7cyB1c2VyLXNwYWNlIGNvZGU7IGl0JiMzOTtzIG5vdCBDIGNvZGUsIG5vciBkb2VzIGl0IGFwcGVhciB0byBjaGFuZ2UgYW55IGhlYWRlciBmaWxlcy4gSXQgY2VydGFpbmx5IGRvZXNuJiMzOTt0IGltcGFjdCBgdm1saW51eGAgb3Iga2VybmVsIG1vZHVsZXMuCgpUaGVyZWZvcmUsIGFwcGx5aW5nIHRoZSB0cmlhZ2UgY3JpdGVyaWEsIEkmIzM5O20gY29uZmlkZW50IEkgY2FuIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBpcyBhIHVzZXItc3BhY2Ugc2VsZnRlc3QsIGFuZCBpdCBkb2VzbiYjMzk7dCB0b3VjaCB0aGUga2VybmVsJiMzOTtzIGNvcmUgY29tcG9uZW50cy4gSSYjMzk7bGwgYWxzbyBzZXQgYEZvY3VzU3ltYm9sc2AgdG8gYFtdYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHRvIGBbXWAsIHNpbmNlIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGF0dGFjayBzdXJmYWNlIGluIHRoZSBrZXJuZWwuCgpXaXRoIHRoYXQgZGV0ZXJtaW5lZCwgSSBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgcHJvdmlkZSB0aGVzZSB2YWx1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYW5kIGRvZXMgbm90IGNoYW5nZSBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYW5kIGRvZXMgbm90IGNoYW5nZSBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzoyMzowMy45MzE5OTUzNDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTYyMjk2Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGFuZCBkb2VzIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6MjM6MDMuOTMyMDAzNjE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg2MjMwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMGU0N2QxMTk0MzIyNGFkZWY5YTY0M2JjMTcwMzBlOTcxYTc5ZWY5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTc6MjM6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5pbmRleCA1Y2MzZWJkY2YwOGRlLi41NjA1YmU0MTFmMWE4IDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XFxuQEAgLTMxNCwxMSArMzE0LDEyNCBAQCBkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cXHUwMDNlIE5vbmU6XFxuICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb25cXFwiKVxcbiBcXG4gXFxuK2RlZiBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2NCh0ZXN0X2FkZHJzOiBsaXN0W3N0cl0sIHNjb3BlczogbGlzdFtzdHJdKSAtXFx1MDAzZSBsaXN0W3N0cl06XFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnMsIE5ldE5TRW50ZXIoc3RyKG5zKSk6XFxuKyAgICAgICAgZGV2X25hbWUgPSBcXFwiZHVtbXlfZGV2XFxcIlxcbitcXG4rICAgICAgICBpcChmXFxcImxpbmsgYWRkIG5hbWUge2Rldl9uYW1lfSB0eXBlIGR1bW15XFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBmb3IgdGVzdF9hZGRyLCBzY29wZSBpbiB6aXAodGVzdF9hZGRycywgc2NvcGVzKTpcXG4rICAgICAgICAgICAgaXAoZlxcXCJhZGRyZXNzIGFkZCB7dGVzdF9hZGRyfS8yNCBkZXYge2Rldl9uYW1lfSBzY29wZSB7c2NvcGV9XFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChmXFxcImxpbmsgc2V0IGRldiB7ZGV2X25hbWV9IHVwXFxcIiwgbnM9c3RyKG5zKSlcXG4rXFxuKyAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcXG4rICAgICAgICBhZGRycyA9IHJ0bmwuZ2V0YWRkcih7XFxcImlmYS1mYW1pbHlcXFwiOiBzb2NrZXQuQUZfSU5FVH0sIGR1bXA9VHJ1ZSlcXG4rICAgICAgICByZXR1cm4gW2FkZHJbXFxcImFkZHJlc3NcXFwiXSBmb3IgYWRkciBpbiBhZGRyc11cXG4rXFxuK1xcbitkZWYgaXB2NF92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgQWZ0ZXIgaW5zZXJ0aW5nIG11bHRpcGxlIHNhbWUgc2NvcGUgSVB2NCBhZGRyZXNzZXMsIHRoZWlyIG9yZGVyXFxuKyAgICBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBpbnNlcnRpb24gb3JkZXIuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICAjIFByaW1hcnkgYWRkcmVzc2VzIG9mIHRlc3Qgc3VibmV0cyBhcmUgaW5zZXJ0ZWQgZmlyc3QuXFxuKyAgICB0ZXN0X2FkZHJlc3NlcyA9IFtcXG4rICAgICAgICBcXFwiMTkyLjAuMi4xXFxcIiwgXFxcIjIwMy4wLjExMy4xXFxcIixcXG4rICAgICAgICBcXFwiMTkyLjAuMi4yXFxcIiwgXFxcIjIwMy4wLjExMy4yXFxcIiwgXFxcIjE5Mi4wLjIuM1xcXCJcXG4rICAgIF1cXG4rICAgIHNjb3BlcyA9IFtcXFwiZ2xvYmFsXFxcIl0gKiA1XFxuK1xcbisgICAgYWRkcmVzc19saXN0ID0gX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjQodGVzdF9hZGRyZXNzZXMsIHNjb3BlcylcXG4rICAgIGtzZnRfZXEodGVzdF9hZGRyZXNzZXMsIGFkZHJlc3NfbGlzdCwgXFxcIlVuZXhwZWN0ZWQgSVB2NCBhZGRyZXNzIG9yZGVyXFxcIilcXG4rXFxuK1xcbitkZWYgaXB2NF92ZXJpZnlfaW50ZXJfc2NvcGVfYWRkcl9vcmRlcigpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIENoZWNrcyB0aGUgb3JkZXJpbmcgb2YgaW50ZXItc2NvcGUgYWRkcmVzc2VzLiBUaGlzIGhhcyBhbHNvXFxuKyAgICBiZWVuIGF0dGVtcHRlZCB0byBiZSBwYXRjaGVkLCBicmluZ2luZyBpbiBhIG5ldyByaXNrIG9mIGEgdXNlci1zcGFjZVxcbisgICAgcmVncmVzc2lvbiwgc2ltaWxhciB0byB0aGUgc2FtZSBzY29wZSBlcXVpdmFsZW50LiBUaGlzIHdpbGwgZnVydGhlclxcbisgICAgY29uc29saWRhdGUgdGhlIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzIG9mIGJvdGggcHJvdG9jb2xzLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgdGVzdF9hZGRyZXNzZXMgPSBbXFxuKyAgICAgICAgXFxcIjE5Mi4wLjIuMVxcXCIsIFxcXCIyMDMuMC4xMTMuMVxcXCIsXFxuKyAgICAgICAgXFxcIjE5Mi4wLjIuMlxcXCIsIFxcXCIyMDMuMC4xMTMuMlxcXCIsIFxcXCIxOTIuMC4yLjNcXFwiXFxuKyAgICBdXFxuKyAgICAjIElQdjQgcHV0cyBsaW5rIGxvY2FsIGFkZHJlc3NlcyBiZWZvcmUgZ2xvYmFsIG9uZXMuXFxuKyAgICBzY29wZXMgPSBbXFxuKyAgICAgICAgXFxcImxpbmtcXFwiLCBcXFwiZ2xvYmFsXFxcIixcXG4rICAgICAgICBcXFwibGlua1xcXCIsIFxcXCJnbG9iYWxcXFwiLCBcXFwibGlua1xcXCJcXG4rICAgIF1cXG4rXFxuKyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2NCh0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxcbisgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3NlcywgYWRkcmVzc19saXN0LCBcXFwiVW5leHBlY3RlZCBJUHY0IGFkZHJlc3Mgb3JkZXIgYWNyb3NzIHNjb3Blc1xcXCIpXFxuK1xcbitcXG4rZGVmIF9pbnNlcnRfYW5kX2dldF9hZGRyc19pcHY2KHRlc3RfYWRkcnM6IGxpc3Rbc3RyXSwgc2NvcGVzOiBsaXN0W3N0cl0pIC1cXHUwMDNlIGxpc3Rbc3RyXTpcXG4rICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcXG4rICAgICAgICBkZXZfbmFtZSA9IFxcXCJkdW1teV9kZXZcXFwiXFxuK1xcbisgICAgICAgIGlwKGZcXFwibGluayBhZGQgbmFtZSB7ZGV2X25hbWV9IHR5cGUgZHVtbXlcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGZvciB0ZXN0X2FkZHIsIHNjb3BlIGluIHppcCh0ZXN0X2FkZHJzLCBzY29wZXMpOlxcbisgICAgICAgICAgICBpcChmXFxcImFkZHJlc3MgYWRkIHt0ZXN0X2FkZHJ9LzY0IGRldiB7ZGV2X25hbWV9IHNjb3BlIHtzY29wZX1cXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKGZcXFwibGluayBzZXQgZGV2IHtkZXZfbmFtZX0gdXBcXFwiLCBucz1zdHIobnMpKVxcbitcXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxcbisgICAgICAgIGFkZHJzID0gcnRubC5nZXRhZGRyKHtcXFwiaWZhLWZhbWlseVxcXCI6IHNvY2tldC5BRl9JTkVUNn0sIGR1bXA9VHJ1ZSlcXG4rICAgICAgICByZXR1cm4gW2FkZHJbXFxcImFkZHJlc3NcXFwiXSBmb3IgYWRkciBpbiBhZGRyc11cXG4rXFxuK1xcbitkZWYgaXB2Nl92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgQWZ0ZXIgaW5zZXJ0aW5nIG11bHRpcGxlIHNhbWUgc2NvcGUgSVB2NiBhZGRyZXNzZXMsIHRoZWlyIG9yZGVyXFxuKyAgICBtdXN0IGJlIHRoZSBfcmV2ZXJzZV8gb2YgdGhlIGluc2VydGlvbiBvcmRlci5cXG4rXFxuKyAgICBXaGlsZSB0aGlzIGJlaGF2aW91ciBpcyBkaWZmZXJlbnQgZnJvbSBob3cgSVB2NCBhY3RzLFxcbisgICAgdXBkYXRpbmcgdGhlIElQdjYgaW1wbGVtZW50YXRpb24gdG8gYWN0IHRoZSBzYW1lIHdheVxcbisgICAgaGFzIHByb3ZlZCB0byBjYXVzZSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIHJlZ3Jlc3Npb25zXFxuKyAgICAocGFydGljdWxhcmx5IGluIE5ldHdvcmtNYW5hZ2VyKS4gVGhpcyBiZWhhdmlvdXIgaXMgYmVpbmdcXG4rICAgIHRlc3RlZCBmb3IgdG8gY29uc29saWRhdGUgaXQgYXMgYmVpbmcgZXhwZWN0ZWQgYW5kIGNvcnJlY3QuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB0ZXN0X2FkZHJlc3NlcyA9IFtcXG4rICAgICAgICBcXFwiMjAwMTpkYjg6YTo6MVxcXCIsIFxcXCIyMDAxOmRiODpiOjoxXFxcIixcXG4rICAgICAgICBcXFwiMjAwMTpkYjg6YTo6MlxcXCIsIFxcXCIyMDAxOmRiODpiOjoyXFxcIiwgXFxcIjIwMDE6ZGI4OmE6OjNcXFwiXFxuKyAgICBdXFxuKyAgICBzY29wZXMgPSBbXFxcImdsb2JhbFxcXCJdICogNVxcbitcXG4rICAgIGFkZHJlc3NfbGlzdCA9IF9pbnNlcnRfYW5kX2dldF9hZGRyc19pcHY2KHRlc3RfYWRkcmVzc2VzLCBzY29wZXMpXFxuKyAgICAjIFdlIGlnbm9yZSB0aGUgbGluay1sb2NhbCBhZGRyZXNzIHByZXNlbnQgYnkgZGVmYXVsdC5cXG4rICAgIGtzZnRfZXEodGVzdF9hZGRyZXNzZXNbOjotMV0sIGFkZHJlc3NfbGlzdFs6NV0sIFxcXCJVbmV4cGVjdGVkIElQdjYgYWRkcmVzcyBvcmRlclxcXCIpXFxuK1xcbitcXG4rZGVmIGlwdjZfdmVyaWZ5X2ludGVyX3Njb3BlX2FkZHJfb3JkZXIoKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBUbyBwcmV2ZW50IHBvdGVudGlhbCB1c2VyLXNwYWNlIHJlZ3Jlc3Npb25zIHdpdGggSVB2NlxcbisgICAgYWRkcmVzc2VzLCB0aGUgaW50ZXItc2NvcGUgaW5zZXJ0aW9uIG9yZGVyIGlzIGFsc28gYmVpbmcgdGVzdGVkLlxcbitcXG4rICAgIFRoaXMgYWdhaW4gZGlmZmVycyBmcm9tIElQdjQsIGhlcmUgZ2xvYmFsIHNjb3BlIGFkZHJlc3NlcyBoYXZlIHByaW9yaXR5XFxuKyAgICBhZ2FpbnN0IGxpbmsgbG9jYWwgb25lcyAtIHRoZSBiZWhhdmlvdXJzIGFyZSBvcHBvc2l0ZS5cXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgdGVzdF9hZGRyZXNzZXMgPSBbXFxuKyAgICAgICAgXFxcIjIwMDE6ZGI4OmE6OjFcXFwiLCBcXFwiMjAwMTpkYjg6Yjo6MVxcXCIsXFxuKyAgICAgICAgXFxcIjIwMDE6ZGI4OmE6OjJcXFwiLCBcXFwiMjAwMTpkYjg6Yjo6MlxcXCIsIFxcXCIyMDAxOmRiODphOjozXFxcIlxcbisgICAgXVxcbisgICAgc2NvcGVzID0gW1xcbisgICAgICAgIFxcXCJnbG9iYWxcXFwiLCBcXFwibGlua1xcXCIsXFxuKyAgICAgICAgXFxcImdsb2JhbFxcXCIsIFxcXCJsaW5rXFxcIiwgXFxcImdsb2JhbFxcXCJcXG4rICAgIF1cXG4rXFxuKyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2Nih0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxcbisgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3Nlc1s6Oi0xXSwgYWRkcmVzc19saXN0Wzo1XSwgXFxcIlVuZXhwZWN0ZWQgSVB2NiBhZGRyZXNzIG9yZGVyIGFjcm9zcyBzY29wZXNcXFwiKVxcbitcXG4rXFxuIGRlZiBtYWluKCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5LFxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLFxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXFxuLSAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudF0pXFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCxcXG4rICAgICAgICAgICAgICBpcHY0X3ZlcmlmeV9zYW1lX3Njb3BlX2FkZHJfb3JkZXIsIGlwdjRfdmVyaWZ5X2ludGVyX3Njb3BlX2FkZHJfb3JkZXIsXFxuKyAgICAgICAgICAgICAgaXB2Nl92ZXJpZnlfc2FtZV9zY29wZV9hZGRyX29yZGVyLCBpcHY2X3ZlcmlmeV9pbnRlcl9zY29wZV9hZGRyX29yZGVyXSlcXG4gICAgIGtzZnRfZXhpdCgpXFxuIFxcbiBpZiBfX25hbWVfXyA9PSBcXFwiX19tYWluX19cXFwiOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzoyMzowNC4zODE4Njg3MTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU1MTI0MTE4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBhbmQgZG9lcyBub3QgY2hhbmdlIGFueSBrZXJuZWwgY29kZSBvciBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzBlNDdkMTE5NDMyMjRhZGVmOWE2NDNiYzE3MDMwZTk3MWE3OWVmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTc6MjM6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggNWNjM2ViZGNmMDhkZS4uNTYwNWJlNDExZjFhOCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC0zMTQsMTEgKzMxNCwxMjQgQEAgZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXHUwMDNlIE5vbmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgXCJ1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb25cIilcbiBcbiBcbitkZWYgX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjQodGVzdF9hZGRyczogbGlzdFtzdHJdLCBzY29wZXM6IGxpc3Rbc3RyXSkgLVx1MDAzZSBsaXN0W3N0cl06XG4rICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgIGRldl9uYW1lID0gXCJkdW1teV9kZXZcIlxuK1xuKyAgICAgICAgaXAoZlwibGluayBhZGQgbmFtZSB7ZGV2X25hbWV9IHR5cGUgZHVtbXlcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGZvciB0ZXN0X2FkZHIsIHNjb3BlIGluIHppcCh0ZXN0X2FkZHJzLCBzY29wZXMpOlxuKyAgICAgICAgICAgIGlwKGZcImFkZHJlc3MgYWRkIHt0ZXN0X2FkZHJ9LzI0IGRldiB7ZGV2X25hbWV9IHNjb3BlIHtzY29wZX1cIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKGZcImxpbmsgc2V0IGRldiB7ZGV2X25hbWV9IHVwXCIsIG5zPXN0cihucykpXG4rXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuKyAgICAgICAgYWRkcnMgPSBydG5sLmdldGFkZHIoe1wiaWZhLWZhbWlseVwiOiBzb2NrZXQuQUZfSU5FVH0sIGR1bXA9VHJ1ZSlcbisgICAgICAgIHJldHVybiBbYWRkcltcImFkZHJlc3NcIl0gZm9yIGFkZHIgaW4gYWRkcnNdXG4rXG4rXG4rZGVmIGlwdjRfdmVyaWZ5X3NhbWVfc2NvcGVfYWRkcl9vcmRlcigpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiXG4rICAgIEFmdGVyIGluc2VydGluZyBtdWx0aXBsZSBzYW1lIHNjb3BlIElQdjQgYWRkcmVzc2VzLCB0aGVpciBvcmRlclxuKyAgICBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBpbnNlcnRpb24gb3JkZXIuXG4rICAgIFwiXCJcIlxuK1xuKyAgICAjIFByaW1hcnkgYWRkcmVzc2VzIG9mIHRlc3Qgc3VibmV0cyBhcmUgaW5zZXJ0ZWQgZmlyc3QuXG4rICAgIHRlc3RfYWRkcmVzc2VzID0gW1xuKyAgICAgICAgXCIxOTIuMC4yLjFcIiwgXCIyMDMuMC4xMTMuMVwiLFxuKyAgICAgICAgXCIxOTIuMC4yLjJcIiwgXCIyMDMuMC4xMTMuMlwiLCBcIjE5Mi4wLjIuM1wiXG4rICAgIF1cbisgICAgc2NvcGVzID0gW1wiZ2xvYmFsXCJdICogNVxuK1xuKyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2NCh0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxuKyAgICBrc2Z0X2VxKHRlc3RfYWRkcmVzc2VzLCBhZGRyZXNzX2xpc3QsIFwiVW5leHBlY3RlZCBJUHY0IGFkZHJlc3Mgb3JkZXJcIilcbitcbitcbitkZWYgaXB2NF92ZXJpZnlfaW50ZXJfc2NvcGVfYWRkcl9vcmRlcigpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiXG4rICAgIENoZWNrcyB0aGUgb3JkZXJpbmcgb2YgaW50ZXItc2NvcGUgYWRkcmVzc2VzLiBUaGlzIGhhcyBhbHNvXG4rICAgIGJlZW4gYXR0ZW1wdGVkIHRvIGJlIHBhdGNoZWQsIGJyaW5naW5nIGluIGEgbmV3IHJpc2sgb2YgYSB1c2VyLXNwYWNlXG4rICAgIHJlZ3Jlc3Npb24sIHNpbWlsYXIgdG8gdGhlIHNhbWUgc2NvcGUgZXF1aXZhbGVudC4gVGhpcyB3aWxsIGZ1cnRoZXJcbisgICAgY29uc29saWRhdGUgdGhlIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzIG9mIGJvdGggcHJvdG9jb2xzLlxuKyAgICBcIlwiXCJcbitcbisgICAgdGVzdF9hZGRyZXNzZXMgPSBbXG4rICAgICAgICBcIjE5Mi4wLjIuMVwiLCBcIjIwMy4wLjExMy4xXCIsXG4rICAgICAgICBcIjE5Mi4wLjIuMlwiLCBcIjIwMy4wLjExMy4yXCIsIFwiMTkyLjAuMi4zXCJcbisgICAgXVxuKyAgICAjIElQdjQgcHV0cyBsaW5rIGxvY2FsIGFkZHJlc3NlcyBiZWZvcmUgZ2xvYmFsIG9uZXMuXG4rICAgIHNjb3BlcyA9IFtcbisgICAgICAgIFwibGlua1wiLCBcImdsb2JhbFwiLFxuKyAgICAgICAgXCJsaW5rXCIsIFwiZ2xvYmFsXCIsIFwibGlua1wiXG4rICAgIF1cbitcbisgICAgYWRkcmVzc19saXN0ID0gX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjQodGVzdF9hZGRyZXNzZXMsIHNjb3BlcylcbisgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3NlcywgYWRkcmVzc19saXN0LCBcIlVuZXhwZWN0ZWQgSVB2NCBhZGRyZXNzIG9yZGVyIGFjcm9zcyBzY29wZXNcIilcbitcbitcbitkZWYgX2luc2VydF9hbmRfZ2V0X2FkZHJzX2lwdjYodGVzdF9hZGRyczogbGlzdFtzdHJdLCBzY29wZXM6IGxpc3Rbc3RyXSkgLVx1MDAzZSBsaXN0W3N0cl06XG4rICAgIHdpdGggTmV0TlMoKSBhcyBucywgTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgIGRldl9uYW1lID0gXCJkdW1teV9kZXZcIlxuK1xuKyAgICAgICAgaXAoZlwibGluayBhZGQgbmFtZSB7ZGV2X25hbWV9IHR5cGUgZHVtbXlcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGZvciB0ZXN0X2FkZHIsIHNjb3BlIGluIHppcCh0ZXN0X2FkZHJzLCBzY29wZXMpOlxuKyAgICAgICAgICAgIGlwKGZcImFkZHJlc3MgYWRkIHt0ZXN0X2FkZHJ9LzY0IGRldiB7ZGV2X25hbWV9IHNjb3BlIHtzY29wZX1cIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKGZcImxpbmsgc2V0IGRldiB7ZGV2X25hbWV9IHVwXCIsIG5zPXN0cihucykpXG4rXG4rICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuKyAgICAgICAgYWRkcnMgPSBydG5sLmdldGFkZHIoe1wiaWZhLWZhbWlseVwiOiBzb2NrZXQuQUZfSU5FVDZ9LCBkdW1wPVRydWUpXG4rICAgICAgICByZXR1cm4gW2FkZHJbXCJhZGRyZXNzXCJdIGZvciBhZGRyIGluIGFkZHJzXVxuK1xuK1xuK2RlZiBpcHY2X3ZlcmlmeV9zYW1lX3Njb3BlX2FkZHJfb3JkZXIoKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIlxuKyAgICBBZnRlciBpbnNlcnRpbmcgbXVsdGlwbGUgc2FtZSBzY29wZSBJUHY2IGFkZHJlc3NlcywgdGhlaXIgb3JkZXJcbisgICAgbXVzdCBiZSB0aGUgX3JldmVyc2VfIG9mIHRoZSBpbnNlcnRpb24gb3JkZXIuXG4rXG4rICAgIFdoaWxlIHRoaXMgYmVoYXZpb3VyIGlzIGRpZmZlcmVudCBmcm9tIGhvdyBJUHY0IGFjdHMsXG4rICAgIHVwZGF0aW5nIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uIHRvIGFjdCB0aGUgc2FtZSB3YXlcbisgICAgaGFzIHByb3ZlZCB0byBjYXVzZSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIHJlZ3Jlc3Npb25zXG4rICAgIChwYXJ0aWN1bGFybHkgaW4gTmV0d29ya01hbmFnZXIpLiBUaGlzIGJlaGF2aW91ciBpcyBiZWluZ1xuKyAgICB0ZXN0ZWQgZm9yIHRvIGNvbnNvbGlkYXRlIGl0IGFzIGJlaW5nIGV4cGVjdGVkIGFuZCBjb3JyZWN0LlxuKyAgICBcIlwiXCJcbitcbisgICAgdGVzdF9hZGRyZXNzZXMgPSBbXG4rICAgICAgICBcIjIwMDE6ZGI4OmE6OjFcIiwgXCIyMDAxOmRiODpiOjoxXCIsXG4rICAgICAgICBcIjIwMDE6ZGI4OmE6OjJcIiwgXCIyMDAxOmRiODpiOjoyXCIsIFwiMjAwMTpkYjg6YTo6M1wiXG4rICAgIF1cbisgICAgc2NvcGVzID0gW1wiZ2xvYmFsXCJdICogNVxuK1xuKyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2Nih0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxuKyAgICAjIFdlIGlnbm9yZSB0aGUgbGluay1sb2NhbCBhZGRyZXNzIHByZXNlbnQgYnkgZGVmYXVsdC5cbisgICAga3NmdF9lcSh0ZXN0X2FkZHJlc3Nlc1s6Oi0xXSwgYWRkcmVzc19saXN0Wzo1XSwgXCJVbmV4cGVjdGVkIElQdjYgYWRkcmVzcyBvcmRlclwiKVxuK1xuK1xuK2RlZiBpcHY2X3ZlcmlmeV9pbnRlcl9zY29wZV9hZGRyX29yZGVyKCkgLVx1MDAzZSBOb25lOlxuKyAgICBcIlwiXCJcbisgICAgVG8gcHJldmVudCBwb3RlbnRpYWwgdXNlci1zcGFjZSByZWdyZXNzaW9ucyB3aXRoIElQdjZcbisgICAgYWRkcmVzc2VzLCB0aGUgaW50ZXItc2NvcGUgaW5zZXJ0aW9uIG9yZGVyIGlzIGFsc28gYmVpbmcgdGVzdGVkLlxuK1xuKyAgICBUaGlzIGFnYWluIGRpZmZlcnMgZnJvbSBJUHY0LCBoZXJlIGdsb2JhbCBzY29wZSBhZGRyZXNzZXMgaGF2ZSBwcmlvcml0eVxuKyAgICBhZ2FpbnN0IGxpbmsgbG9jYWwgb25lcyAtIHRoZSBiZWhhdmlvdXJzIGFyZSBvcHBvc2l0ZS5cbisgICAgXCJcIlwiXG4rICAgIHRlc3RfYWRkcmVzc2VzID0gW1xuKyAgICAgICAgXCIyMDAxOmRiODphOjoxXCIsIFwiMjAwMTpkYjg6Yjo6MVwiLFxuKyAgICAgICAgXCIyMDAxOmRiODphOjoyXCIsIFwiMjAwMTpkYjg6Yjo6MlwiLCBcIjIwMDE6ZGI4OmE6OjNcIlxuKyAgICBdXG4rICAgIHNjb3BlcyA9IFtcbisgICAgICAgIFwiZ2xvYmFsXCIsIFwibGlua1wiLFxuKyAgICAgICAgXCJnbG9iYWxcIiwgXCJsaW5rXCIsIFwiZ2xvYmFsXCJcbisgICAgXVxuK1xuKyAgICBhZGRyZXNzX2xpc3QgPSBfaW5zZXJ0X2FuZF9nZXRfYWRkcnNfaXB2Nih0ZXN0X2FkZHJlc3Nlcywgc2NvcGVzKVxuKyAgICBrc2Z0X2VxKHRlc3RfYWRkcmVzc2VzWzo6LTFdLCBhZGRyZXNzX2xpc3RbOjVdLCBcIlVuZXhwZWN0ZWQgSVB2NiBhZGRyZXNzIG9yZGVyIGFjcm9zcyBzY29wZXNcIilcbitcbitcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbiAgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4gICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbiAgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4tICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQsXG4rICAgICAgICAgICAgICBpcHY0X3ZlcmlmeV9zYW1lX3Njb3BlX2FkZHJfb3JkZXIsIGlwdjRfdmVyaWZ5X2ludGVyX3Njb3BlX2FkZHJfb3JkZXIsXG4rICAgICAgICAgICAgICBpcHY2X3ZlcmlmeV9zYW1lX3Njb3BlX2FkZHJfb3JkZXIsIGlwdjZfdmVyaWZ5X2ludGVyX3Njb3BlX2FkZHJfb3JkZXJdKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuIGlmIF9fbmFtZV9fID09IFwiX19tYWluX19cIjpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjIzOjA0LjM4MTg3MDYwM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1MTIzODgzNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZyBFdmFsdWF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBUaGUgZGlmZiBzaG93cyB0aGF0IG9ubHkgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlgIGhhcyBiZWVuIHRvdWNoZWQuIE5vdywgSSBuZWVkIHRvIGFwcGx5IG15IHRyaWFnZSBjcml0ZXJpYS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuXG5cbk15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgbW9kaWZpY2F0aW9uIGltcGFjdHMgdGhlIGtlcm5lbCBpdHNlbGYuIExvb2tpbmcgYXQgdGhlIHRyaWFnZSBjcml0ZXJpYSwgSSByZW1lbWJlciB0aGF0IGNoYW5nZXMgaW4gdXNlci1zcGFjZSB0ZXN0aW5nIHRvb2xzIGxpa2UgdGhvc2UgZm91bmQgaW4gYHRvb2xzL2AsIGFzIGxvbmcgYXMgdGhleSBkb24ndCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCwgYXJlbid0IHdvcnRoIGZ1enppbmcuIFRoZSBjcml0ZXJpYSBzdGF0ZXMgY2xlYXJseTogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzLi4uIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMuLi4gdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiXG5cblRoaXMgcGF0Y2ggbW9kaWZpZXMgYSBQeXRob24gc2VsZi10ZXN0IHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBJdCdzIHVzZXItc3BhY2UgY29kZTsgaXQncyBub3QgQyBjb2RlLCBub3IgZG9lcyBpdCBhcHBlYXIgdG8gY2hhbmdlIGFueSBoZWFkZXIgZmlsZXMuIEl0IGNlcnRhaW5seSBkb2Vzbid0IGltcGFjdCBgdm1saW51eGAgb3Iga2VybmVsIG1vZHVsZXMuXG5cblRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIHRyaWFnZSBjcml0ZXJpYSwgSSdtIGNvbmZpZGVudCBJIGNhbiBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgaXMgYSB1c2VyLXNwYWNlIHNlbGZ0ZXN0LCBhbmQgaXQgZG9lc24ndCB0b3VjaCB0aGUga2VybmVsJ3MgY29yZSBjb21wb25lbnRzLiBJJ2xsIGFsc28gc2V0IGBGb2N1c1N5bWJvbHNgIHRvIGBbXWAgYW5kIGBFbmFibGVDb25maWdzYCB0byBgW11gLCBzaW5jZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGF0dGFjayBzdXJmYWNlIGluIHRoZSBrZXJuZWwuXG5cbldpdGggdGhhdCBkZXRlcm1pbmVkLCBJIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBwcm92aWRlIHRoZXNlIHZhbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3OCwiT3V0cHV0VG9rZW5zIjo3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjIzOjA5Ljg5NDI2MTE4OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGFuZCBkb2VzIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGFuZCBkb2VzIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBjb2RlIG9yIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6MjM6MDkuODk0MjgyNFoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowvssh2[1] Phase: Running StartedAt: 2026-09-07 17:23:21 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvssh2[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-07 17:23:21 +0000 UTC FinishedAt: 2026-09-07 17:23:25 +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,}