Name: series-workflow8j9gx Phase: Failed StartedAt: 2026-09-09 13:02:51 +0000 UTC FinishedAt: 2026-09-09 13:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8j9gx[0] Phase: Succeeded StartedAt: 2026-09-09 13:02:51 +0000 UTC FinishedAt: 2026-09-09 13:05:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8j9gx[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 13:02:51 +0000 UTC FinishedAt: 2026-09-09 13:05:05 +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+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoLyksIHdoaWNoIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NzllMTU3OGE5NDlkYTU4ZjYyYjU0Zjc2MDE1MTQ1NjMwZTM1ZThiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMzowNDo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL2NvbmZpZ1xuaW5kZXggYTgyNWUwYjVjODhlNS4uZmE5MDQ3NWRjMzg4ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9jb25maWdcbkBAIC03LDYgJiM0Mzs3LDcgQEAgQ09ORklHX05FVF9JUEdSRT1tXG4gQ09ORklHX05FVF9JUEdSRV9ERU1VWD1tXG4gQ09ORklHX05GX0NPTk5UUkFDSz1tXG4gQ09ORklHX05GX0NPTk5UUkFDS19PVlM9eVxuJiM0MztDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD15XG4gQ09ORklHX09QRU5WU1dJVENIPW1cbiBDT05GSUdfUFNBTVBMRT1tXG4gQ09ORklHX1ZFVEg9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuaW5kZXggYTMxZjdmYjY4ODJkYy4uMTM4YTcwNWZjMzU5ZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXG5AQCAtMzQsNiAmIzQzOzM0LDggQEAgdGVzdHM9XCYjMzQ7XG4gXHR0cnVuY1x0XHRcdFx0XHR0cnVuYzogb3V0cHV0IHRydW5jYXRpb25cbiBcdGljbXB2Nlx0XHRcdFx0XHRpY21wdjY6IElDTVB2NiBlY2hvIHR5cGUgbWF0Y2hcbiBcdHNjdHBfY29ubmVjdF92NFx0XHRcdFx0c2N0cDogU0NUUCBmbG93IGtleSBtYXRjaGluZ1xuJiM0MztcdHNjdHBfY29ubmVjdF92Nlx0XHRcdHNjdHA2OiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nIG92ZXIgSVB2NlxuJiM0MztcdHNjdHBfbmF0X2Nvbm5lY3RfdjRcdFx0c2N0cG5hdDQ6IFNDVFAgTkFUIHdpdGggcG9ydCB0cmFuc2xhdGlvblxuIFx0cHNhbXBsZVx0XHRcdFx0XHRwc2FtcGxlOiBTYW1wbGluZyBwYWNrZXRzIHdpdGggcHNhbXBsZVwmIzM0O1xuIFxuIGluZm8oKSB7XG5AQCAtNzAwLDYgJiM0Mzs3MDIsMTEzIEBAIHRlc3Rfc2N0cF9jb25uZWN0X3Y0KCkge1xuIFx0cmV0dXJuIDBcbiB9XG4gXG4mIzQzOyMgc2N0cF9jb25uZWN0X3Y2IHRlc3RcbiYjNDM7IyAtIHNjdHAoZHN0PTQ0NDMpIG1hdGNoZXMgY2xpZW50LXRvLXNlcnZlciBJTklUXG4mIzQzOyMgLSBzY3RwKHNyYz00NDQzKSBtYXRjaGVzIHNlcnZlci10by1jbGllbnQgSU5JVC1BQ0tcbiYjNDM7IyAtIGljbXB2NiBOUy9OQSBmbG93cyBmb3J3YXJkIG5laWdoYm91ciBkaXNjb3ZlcnlcbiYjNDM7IyAtIHJlbW92ZSBmbG93cyBhbmQgdmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMsIHJlaW5zdGFsbCBhbmQgcmVjb3ZlclxuJiM0Mzt0ZXN0X3NjdHBfY29ubmVjdF92NigpIHtcbiYjNDM7XHRsb2NhbCB0PVwmIzM0O3Rlc3Rfc2N0cF9jb25uZWN0X3Y2XCYjMzQ7XG4mIzQzO1x0bG9jYWwgdjY9XCYjMzQ7ZXRoX3R5cGUoMHg4NmRkKSxpcHY2KHByb3RvPTEzMilcJiMzNDtcbiYjNDM7XHRsb2NhbCBwYXlsb2FkPVwmIzM0O1NDVFA2X0RBVEFfT0tcJiMzNDtcbiYjNDM7XHRsb2NhbCByeGZpbGU9XCYjMzQ7JHtvdnNfYmFzZX0vJHt0fS9zY3RwLXJ4LnR4dFwmIzM0O1xuJiM0MztcbiYjNDM7XHRtb2Rwcm9iZSAtcSBzY3RwIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7XHRzb2NhdCAtViAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXEgXCYjMzQ7ZGVmaW5lIFdJVEhfU0NUUFwmIzM0OyB8fCByZXR1cm4gXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztcdFsgLWUgL3Byb2Mvc3lzL25ldC9pcHY2IF0gfHwgcmV0dXJuIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7XG4mIzQzO1x0c2J4X2FkZCBcJiMzNDskdFwmIzM0OyB8fCByZXR1cm4gJD9cbiYjNDM7XHRvdnNfYWRkX2RwIFwmIzM0OyR0XCYjMzQ7IHNjdHA2IHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdGluZm8gXCYjMzQ7Y3JlYXRlIG5hbWVzcGFjZXNcJiMzNDtcbiYjNDM7XHRmb3IgbnMgaW4gY2xpZW50IHNlcnZlcjsgZG9cbiYjNDM7XHRcdG92c19hZGRfbmV0bnNfYW5kX3ZldGhzIFwmIzM0OyR0XCYjMzQ7IFwmIzM0O3NjdHA2XCYjMzQ7IFwmIzM0OyRuc1wmIzM0OyBcXFxuJiM0MztcdFx0ICAgIFwmIzM0OyR7bnM6MDoxfTBcJiMzNDsgXCYjMzQ7JHtuczowOjF9MVwmIzM0OyB8fCByZXR1cm4gMVxuJiM0MztcdGRvbmVcbiYjNDM7XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgYWRkciBhZGQgZmQwMDo6MS82NCBkZXYgYzEgbm9kYWRcbiYjNDM7XHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBsaW5rIHNldCBjMSB1cFxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGFkZHIgYWRkIGZkMDA6OjIvNjQgZGV2IHMxIG5vZGFkXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgbGluayBzZXQgczEgdXBcbiYjNDM7XG4mIzQzO1x0IyBOUy9OQSBmb3J3YXJkaW5nXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA2IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDg2ZGQpLGlwdjYocHJvdG89NTgpLGljbXB2NigpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDYgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz01OCksaWNtcHY2KCkmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzEmIzM5OyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHQjIFNDVFAgcG9ydCBtYXRjaGluZzogZHN0IGZvciByZXF1ZXN0LCBzcmMgZm9yIHJlcGx5XG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA2IFxcXG4mIzQzO1x0ICAgIFwmIzM0O2luX3BvcnQoMSksZXRoKCksJHY2LHNjdHAoZHN0PTQ0NDMpXCYjMzQ7IFxcXG4mIzQzO1x0ICAgICYjMzk7MiYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA2IFxcXG4mIzQzO1x0ICAgIFwmIzM0O2luX3BvcnQoMiksZXRoKCksJHY2LHNjdHAoc3JjPTQ0NDMpXCYjMzQ7IFxcXG4mIzQzO1x0ICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdCMgQSBrZXlsZXNzIGlwdjYocHJvdG89MTMyKSBpbnN0YWxsIG11c3QgYmUgcmVmdXNlZCAoRUlOVkFMKTpcbiYjNDM7XHQjIG1hdGNoX3ZhbGlkYXRlKCkgcmVxdWlyZXMgdGhlIHNjdHAoKSBrZXkuIFBpbiB0aGUgcmVqZWN0IHNpZGVcbiYjNDM7XHQjIG9mIHRoYXQgcnVsZTsgdGhlIGtleWVkIGluc3RhbGxzIGFib3ZlIGNvdmVyIHRoZSBhY2NlcHQgc2lkZS5cbiYjNDM7XHQjIFZlcmlmeSB0aGUgcmVmdXNhbCBpcyBFSU5WQUwgKG1pc3Npbmcga2V5KSwgbm90IGEgcGFyc2UgZXJyb3IuXG4mIzQzO1x0ZXJyPSQob3ZzX3NieCBcJiMzNDskdFwmIzM0OyBweXRob24zICRvdnNfYmFzZS9vdnMtZHBjdGwucHkgYWRkLWZsb3cgc2N0cDYgXFxcbiYjNDM7XHQgICAgXCYjMzQ7aW5fcG9ydCgxKSxldGgoKSwkdjZcJiMzNDsgJiMzOTsyJiMzOTsgMlx1MDAzZVx1MDAyNjEgXHUwMDNlL2Rldi9udWxsKSBcXFxuJiM0MztcdCAgICBcdTAwMjZcdTAwMjYgeyBpbmZvIFwmIzM0O2tleWxlc3MgU0NUUCBmbG93IHNob3VsZCBiZSByZWZ1c2VkXCYjMzQ7XG4mIzQzO1x0ICAgICAgICAgcmV0dXJuIDE7IH1cbiYjNDM7XHRlY2hvIFwmIzM0OyRlcnJcJiMzNDsgfCBncmVwIC1xIFwmIzM0OygyMixcJiMzNDsgfHwge1xuJiM0MztcdFx0aW5mbyBcJiMzNDtrZXlsZXNzIFNDVFAgZmxvdyByZWZ1c2VkIGZvciB3cm9uZyByZWFzb246ICRlcnJcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFwmIzM0OyR0XCYjMzQ7IFwmIzM0O3NlcnZlclwmIzM0OyBcXFxuJiM0MztcdCAgICBzb2NhdCAtdSAtdCAxIFNDVFA2LUxJU1RFTjo0NDQzLGZvcmsgXFxcbiYjNDM7XHQgICAgT1BFTjpcJiMzNDskcnhmaWxlXCYjMzQ7LGNyZWF0LGFwcGVuZFxuJiM0MztcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRpbmZvIFwmIzM0O3ZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIHdpdGggcG9ydC1rZXllZCBmbG93c1wmIzM0O1xuJiM0MztcdG92c19zYnggXCYjMzQ7JHRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA2LUNPTk5FQ1Q6W2ZkMDA6OjJdOjQ0NDNcJiMzNDsgXHUwMDNjL2Rldi9udWxsIFxcXG4mIzQzO1x0ICAgIHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdGluZm8gXCYjMzQ7dmVyaWZ5IFNDVFAgREFUQSBjaHVuayBjcm9zc2VzIHRoZSBkYXRhcGF0aFwmIzM0O1xuJiM0MztcdG92c19zYnggXCYjMzQ7JHRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA2LUNPTk5FQ1Q6W2ZkMDA6OjJdOjQ0NDNcJiMzNDsgXFxcbiYjNDM7XHQgICAgXHUwMDNjXHUwMDNjXHUwMDNjIFwmIzM0OyRwYXlsb2FkXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO1x0b3ZzX3dhaXQgZ3JlcCAtcSBcJiMzNDskcGF5bG9hZFwmIzM0OyBcJiMzNDskcnhmaWxlXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIHx8IHsgaW5mbyBcJiMzNDtzZXJ2ZXIgZGlkIG5vdCByZWNlaXZlIFNDVFAgREFUQSBwYXlsb2FkXCYjMzQ7XG4mIzQzO1x0ICAgICAgICAgcmV0dXJuIDE7IH1cbiYjNDM7XG4mIzQzO1x0b3ZzX2RlbF9mbG93cyBcJiMzNDskdFwmIzM0OyBzY3RwNlxuJiM0MztcbiYjNDM7XHRpbmZvIFwmIzM0O3ZlcmlmeSBjb25uZWN0aW9uIGZhaWxzIHdpdGhvdXQgZmxvd3NcJiMzNDtcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDYgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz01OCksaWNtcHY2KCkmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMVxuJiM0MztcdG92c19hZGRfZmxvdyBcJiMzNDskdFwmIzM0OyBzY3RwNiBcXFxuJiM0MztcdCAgICAmIzM5O2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHg4NmRkKSxpcHY2KHByb3RvPTU4KSxpY21wdjYoKSYjMzk7IFxcXG4mIzQzO1x0ICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdG92c19zYnggXCYjMzQ7JHRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA2LUNPTk5FQ1Q6W2ZkMDA6OjJdOjQ0NDNcJiMzNDsgXHUwMDNjL2Rldi9udWxsIFxcXG4mIzQzO1x0ICAgIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcXFxuJiM0MztcdCAgICBcdTAwMjZcdTAwMjYgeyBpbmZvIFwmIzM0O2Nvbm5lY3Rpb24gc2hvdWxkIGZhaWwgd2l0aG91dCBmbG93c1wmIzM0O1xuJiM0MztcdCAgICAgICAgIHJldHVybiAxOyB9XG4mIzQzO1xuJiM0MztcdGluZm8gXCYjMzQ7cmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnlcJiMzNDtcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDYgXFxcbiYjNDM7XHQgICAgXCYjMzQ7aW5fcG9ydCgxKSxldGgoKSwkdjYsc2N0cChkc3Q9NDQ0MylcJiMzNDsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDYgXFxcbiYjNDM7XHQgICAgXCYjMzQ7aW5fcG9ydCgyKSxldGgoKSwkdjYsc2N0cChzcmM9NDQ0MylcJiMzNDsgXFxcbiYjNDM7XHQgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0b3ZzX3NieCBcJiMzNDskdFwmIzM0OyBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxuJiM0MztcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXCYjMzQ7U0NUUDYtQ09OTkVDVDpbZmQwMDo6Ml06NDQ0M1wmIzM0OyBcdTAwM2MvZGV2L251bGwgXFxcbiYjNDM7XHQgICAgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiAjIHBzYW1wbGUgdGVzdFxuICMgLSB1c2UgcHNhbXBsZSB0byBvYnNlcnZlIHBhY2tldHNcbiB0ZXN0X3BzYW1wbGUoKSB7XG5AQCAtMTA5MSw2ICYjNDM7MTIwMCw5OCBAQCB0ZXN0X25hdF9jb25uZWN0X3Y0ICgpIHtcbiBcdHJldHVybiAwXG4gfVxuIFxuJiM0MzsjIHNjdHBfbmF0X2Nvbm5lY3RfdjQgdGVzdFxuJiM0MzsjICAtIFNDVFAgYXNzb2NpYXRpb24gY3Jvc3NlcyBhIGN0KGNvbW1pdCxuYXQoZHN0PWlwOnBvcnQpKSBETkFUXG4mIzQzOyMgIC0gcG9zdC1yZWNpcmMgZmxvd3MgbWF0Y2ggdGhlIHRyYW5zbGF0ZWQgYWRkcmVzcyBhbmQgcG9ydCwgc28gdGhlXG4mIzQzOyMgICAgU0NUUCBicmFuY2ggb2YgdGhlIHBvc3QtTkFUIGZsb3cga2V5IHVwZGF0ZSBpcyBsb2FkLWJlYXJpbmdcbiYjNDM7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0ICgpIHtcbiYjNDM7XHRsb2NhbCB0PVwmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwmIzM0O1xuJiM0MztcdGxvY2FsIHBheWxvYWQ9XCYjMzQ7U0NUUF9OQVRfREFUQV9PS1wmIzM0O1xuJiM0MztcdGxvY2FsIHJ4ZmlsZT1cJiMzNDske292c19iYXNlfS8ke3R9L3NjdHAtcngudHh0XCYjMzQ7XG4mIzQzO1xuJiM0MztcdG1vZHByb2JlIC1xIHNjdHAgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztcdHNvY2F0IC1WIDJcdTAwM2VcdTAwMjYxIHwgZ3JlcCAtcSBcJiMzNDtkZWZpbmUgV0lUSF9TQ1RQXCYjMzQ7IHx8IHJldHVybiBcJiMzNDska3NmdF9za2lwXCYjMzQ7XG4mIzQzO1x0IyBTQ1RQIGNvbm50cmFjayBpcyBjb21waWxlZCBpbnRvIG5mX2Nvbm50cmFjay5rbywgc28gY2hlY2sgdGhhdFxuJiM0MztcdCMgbG9hZGluZyBpdCBhY3R1YWxseSBleHBvc2VkIHRoZSBTQ1RQIGNvbm50cmFjayBzeXNjdGxzLlxuJiM0MztcdG1vZHByb2JlIC1xIG5mX2Nvbm50cmFjayAyXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcJiMzNDska3NmdF9za2lwXCYjMzQ7XG4mIzQzO1x0WyAtZSAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X2VzdGFibGlzaGVkIF0gXFxcbiYjNDM7XHQgICAgfHwgeyBpbmZvIFwmIzM0O25vIFNDVFAgY29ubnRyYWNrIHN1cHBvcnQgLSBza2lwcGluZ1wmIzM0O1xuJiM0MztcdCAgICAgICAgIHJldHVybiBcJiMzNDska3NmdF9za2lwXCYjMzQ7OyB9XG4mIzQzO1xuJiM0MztcdHNieF9hZGQgXCYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCYjMzQ7IHx8IHJldHVybiAkP1xuJiM0MztcbiYjNDM7XHRvdnNfYWRkX2RwIFwmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwmIzM0OyBzY3RwbmF0NCB8fCByZXR1cm4gMVxuJiM0MztcdGluZm8gXCYjMzQ7Y3JlYXRlIG5hbWVzcGFjZXNcJiMzNDtcbiYjNDM7XHRmb3IgbnMgaW4gY2xpZW50IHNlcnZlcjsgZG9cbiYjNDM7XHRcdG92c19hZGRfbmV0bnNfYW5kX3ZldGhzIFwmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwmIzM0OyBcJiMzNDtzY3RwbmF0NFwmIzM0OyBcXFxuJiM0MztcdFx0ICAgIFwmIzM0OyRuc1wmIzM0OyBcJiMzNDske25zOjA6MX0wXCYjMzQ7IFwmIzM0OyR7bnM6MDoxfTFcJiMzNDsgfHwgcmV0dXJuIDFcbiYjNDM7XHRkb25lXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMTAvMjQgZGV2IGMxXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgbGluayBzZXQgYzEgdXBcbiYjNDM7XHRpcCBuZXRucyBleGVjIHNlcnZlciBpcCBhZGRyIGFkZCAxNzIuMzEuMTEwLjIwLzI0IGRldiBzMVxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSAxNzIuMzEuMTEwLjIwXG4mIzQzO1xuJiM0MztcdCMgQ2hlY2sgaWYgdGhlIGN0IGFuZCBuYXQgYWN0aW9ucyBjYW4gYmUgY29uZmlndXJlZC5cbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCYjMzQ7IHNjdHBuYXQ0IFxcXG4mIzQzO1x0XHQmIzM5O2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KCkmIzM5OyBcXFxuJiM0MztcdFx0JiMzOTtjdChjb21taXQsbmF0KGRzdD0xNzIuMzEuMTEwLjIwOjU1NTUpKSxyZWNpcmMoMHgxKSYjMzk7IFxcXG4mIzQzO1x0XHRcdTAwMjZcdTAwM2UgL2Rldi9udWxsXG4mIzQzO1x0aWYgWyAkPyA9PSAxIF07IHRoZW5cbiYjNDM7XHRcdGluZm8gXCYjMzQ7bm8gc3VwcG9ydCBmb3IgY3QvbmF0IGFjdGlvbnMgLSBza2lwcGluZ1wmIzM0O1xuJiM0MztcdFx0b3ZzX2V4aXRfc2lnXG4mIzQzO1x0XHRyZXR1cm4gJGtzZnRfc2tpcFxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdG92c19kZWxfZmxvd3MgXCYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCYjMzQ7IHNjdHBuYXQ0XG4mIzQzO1xuJiM0MztcdG92c19hZGRfZmxvdyBcJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcJiMzNDsgc2N0cG5hdDQgXFxcbiYjNDM7XHRcdCYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCYjMzQ7IHNjdHBuYXQ0IFxcXG4mIzQzO1x0XHQmIzM5O2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKSYjMzk7ICYjMzk7MSYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwmIzM0OyBzY3RwbmF0NCBcXFxuJiM0MztcdFx0XCYjMzQ7Y3Rfc3RhdGUoLXRyayksaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLFwmIzM0O1xcXG4mIzQzO1wmIzM0O2lwdjQoZHN0PTE5Mi4xNjguMC4yMClcJiMzNDsgXFxcbiYjNDM7XHRcdFwmIzM0O2N0KGNvbW1pdCxuYXQoZHN0PTE3Mi4zMS4xMTAuMjA6NTU1NSkpLHJlY2lyYygweDEpXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwmIzM0OyBzY3RwbmF0NCBcXFxuJiM0MztcdFx0XCYjMzQ7Y3Rfc3RhdGUoLXRyayksaW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQoKVwmIzM0OyBcXFxuJiM0MztcdFx0XCYjMzQ7Y3QoY29tbWl0LG5hdCkscmVjaXJjKDB4MilcJiMzNDsgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwmIzM0OyBzY3RwbmF0NCBcXFxuJiM0MztcdFx0XCYjMzQ7cmVjaXJjX2lkKDB4MSksY3Rfc3RhdGUoJiM0Mzt0cmstaW52KSxpbl9wb3J0KDEpLGV0aCgpLFwmIzM0O1xcXG4mIzQzO1wmIzM0O2V0aF90eXBlKDB4MDgwMCksaXB2NChkc3Q9MTcyLjMxLjExMC4yMCxwcm90bz0xMzIpLFwmIzM0O1xcXG4mIzQzO1wmIzM0O3NjdHAoZHN0PTU1NTUpXCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDsyXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwmIzM0OyBzY3RwbmF0NCBcXFxuJiM0MztcdFx0XCYjMzQ7cmVjaXJjX2lkKDB4MiksY3Rfc3RhdGUoJiM0Mzt0cmstaW52KSxpbl9wb3J0KDIpLGV0aCgpLFwmIzM0O1xcXG4mIzQzO1wmIzM0O2V0aF90eXBlKDB4MDgwMCksaXB2NChzcmM9MTkyLjE2OC4wLjIwLHByb3RvPTEzMiksXCYjMzQ7XFxcbiYjNDM7XCYjMzQ7c2N0cChzcmM9NDQ0MylcJiMzNDsgXFxcbiYjNDM7XHRcdFwmIzM0OzFcJiMzNDsgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0b3ZzX25ldG5zX3NwYXduX2RhZW1vbiBcJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcJiMzNDsgXCYjMzQ7c2VydmVyXCYjMzQ7IFxcXG4mIzQzO1x0XHRzb2NhdCAtdSAtdCAxIFNDVFA0LUxJU1RFTjo1NTU1LGZvcmsgXFxcbiYjNDM7XHRcdE9QRU46XCYjMzQ7JHJ4ZmlsZVwmIzM0OyxjcmVhdCxhcHBlbmRcbiYjNDM7XHRvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDU1NTUgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0aW5mbyBcJiMzNDt2ZXJpZnkgU0NUUCBhc3NvY2lhdGlvbiBhY3Jvc3MgTkFUXCYjMzQ7XG4mIzQzO1x0b3ZzX3NieCBcJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA0LUNPTk5FQ1Q6MTkyLjE2OC4wLjIwOjQ0NDNcJiMzNDsgXFxcbiYjNDM7XHQgICAgXHUwMDNjL2Rldi9udWxsIHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdGluZm8gXCYjMzQ7dmVyaWZ5IFNDVFAgREFUQSBjaHVuayBjcm9zc2VzIE5BVFwmIzM0O1xuJiM0MztcdG92c19zYnggXCYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXG4mIzQzO1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcJiMzNDtTQ1RQNC1DT05ORUNUOjE5Mi4xNjguMC4yMDo0NDQzXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIFx1MDAzY1x1MDAzY1x1MDAzYyBcJiMzNDskcGF5bG9hZFwmIzM0OyB8fCByZXR1cm4gMVxuJiM0MztcdG92c193YWl0IGdyZXAgLXEgXCYjMzQ7JHBheWxvYWRcJiMzNDsgXCYjMzQ7JHJ4ZmlsZVwmIzM0OyBcXFxuJiM0MztcdCAgICB8fCB7IGluZm8gXCYjMzQ7c2VydmVyIGRpZCBub3QgcmVjZWl2ZSBTQ1RQIERBVEEgcGF5bG9hZFwmIzM0O1xuJiM0MztcdCAgICAgICAgIHJldHVybiAxOyB9XG4mIzQzO1xuJiM0MztcdGluZm8gXCYjMzQ7ZG9uZS4uLlwmIzM0O1xuJiM0MztcdHJldHVybiAwXG4mIzQzO31cbiYjNDM7XG4gIyBuYXRfcmVsYXRlZF92NCB0ZXN0XG4gIyAgLSBjbGllbnQtXHUwMDNlc2VydmVyIGlwIHBhY2tldHMgZ28gdmlhIFNOQVRcbiAjICAtIGNsaWVudCBzb2xpY2l0cyBJQ01QIGRlc3RpbmF0aW9uIHVucmVhY2hhYmxlIHBhY2tldCBmcm9tIHNlcnZlclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC8pLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTc5ZTE1NzhhOTQ5ZGE1OGY2MmI1NGY3NjAxNTE0NTYzMGUzNWU4YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTM6MDQ6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL2NvbmZpZwppbmRleCBhODI1ZTBiNWM4OGU1Li5mYTkwNDc1ZGMzODhkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9jb25maWcKQEAgLTcsNiAmIzQzOzcsNyBAQCBDT05GSUdfTkVUX0lQR1JFPW0KIENPTkZJR19ORVRfSVBHUkVfREVNVVg9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX09WUz15CiYjNDM7Q09ORklHX05GX0NUX1BST1RPX1NDVFA9eQogQ09ORklHX09QRU5WU1dJVENIPW0KIENPTkZJR19QU0FNUExFPW0KIENPTkZJR19WRVRIPXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaAppbmRleCBhMzFmN2ZiNjg4MmRjLi4xMzhhNzA1ZmMzNTllIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoCkBAIC0zNCw2ICYjNDM7MzQsOCBAQCB0ZXN0cz0mIzM0OwogCXRydW5jCQkJCQl0cnVuYzogb3V0cHV0IHRydW5jYXRpb24KIAlpY21wdjYJCQkJCWljbXB2NjogSUNNUHY2IGVjaG8gdHlwZSBtYXRjaAogCXNjdHBfY29ubmVjdF92NAkJCQlzY3RwOiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nCiYjNDM7CXNjdHBfY29ubmVjdF92NgkJCXNjdHA2OiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nIG92ZXIgSVB2NgomIzQzOwlzY3RwX25hdF9jb25uZWN0X3Y0CQlzY3RwbmF0NDogU0NUUCBOQVQgd2l0aCBwb3J0IHRyYW5zbGF0aW9uCiAJcHNhbXBsZQkJCQkJcHNhbXBsZTogU2FtcGxpbmcgcGFja2V0cyB3aXRoIHBzYW1wbGUmIzM0OwogCiBpbmZvKCkgewpAQCAtNzAwLDYgJiM0Mzs3MDIsMTEzIEBAIHRlc3Rfc2N0cF9jb25uZWN0X3Y0KCkgewogCXJldHVybiAwCiB9CiAKJiM0MzsjIHNjdHBfY29ubmVjdF92NiB0ZXN0CiYjNDM7IyAtIHNjdHAoZHN0PTQ0NDMpIG1hdGNoZXMgY2xpZW50LXRvLXNlcnZlciBJTklUCiYjNDM7IyAtIHNjdHAoc3JjPTQ0NDMpIG1hdGNoZXMgc2VydmVyLXRvLWNsaWVudCBJTklULUFDSwomIzQzOyMgLSBpY21wdjYgTlMvTkEgZmxvd3MgZm9yd2FyZCBuZWlnaGJvdXIgZGlzY292ZXJ5CiYjNDM7IyAtIHJlbW92ZSBmbG93cyBhbmQgdmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMsIHJlaW5zdGFsbCBhbmQgcmVjb3ZlcgomIzQzO3Rlc3Rfc2N0cF9jb25uZWN0X3Y2KCkgewomIzQzOwlsb2NhbCB0PSYjMzQ7dGVzdF9zY3RwX2Nvbm5lY3RfdjYmIzM0OwomIzQzOwlsb2NhbCB2Nj0mIzM0O2V0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz0xMzIpJiMzNDsKJiM0MzsJbG9jYWwgcGF5bG9hZD0mIzM0O1NDVFA2X0RBVEFfT0smIzM0OwomIzQzOwlsb2NhbCByeGZpbGU9JiMzNDske292c19iYXNlfS8ke3R9L3NjdHAtcngudHh0JiMzNDsKJiM0MzsKJiM0MzsJbW9kcHJvYmUgLXEgc2N0cCAyJmd0Oy9kZXYvbnVsbCB8fCByZXR1cm4gJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MzsJc29jYXQgLVYgMiZndDsmYW1wOzEgfCBncmVwIC1xICYjMzQ7ZGVmaW5lIFdJVEhfU0NUUCYjMzQ7IHx8IHJldHVybiAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzOwlbIC1lIC9wcm9jL3N5cy9uZXQvaXB2NiBdIHx8IHJldHVybiAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzOwomIzQzOwlzYnhfYWRkICYjMzQ7JHQmIzM0OyB8fCByZXR1cm4gJD8KJiM0MzsJb3ZzX2FkZF9kcCAmIzM0OyR0JiMzNDsgc2N0cDYgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJaW5mbyAmIzM0O2NyZWF0ZSBuYW1lc3BhY2VzJiMzNDsKJiM0MzsJZm9yIG5zIGluIGNsaWVudCBzZXJ2ZXI7IGRvCiYjNDM7CQlvdnNfYWRkX25ldG5zX2FuZF92ZXRocyAmIzM0OyR0JiMzNDsgJiMzNDtzY3RwNiYjMzQ7ICYjMzQ7JG5zJiMzNDsgXAomIzQzOwkJICAgICYjMzQ7JHtuczowOjF9MCYjMzQ7ICYjMzQ7JHtuczowOjF9MSYjMzQ7IHx8IHJldHVybiAxCiYjNDM7CWRvbmUKJiM0MzsKJiM0MzsJaXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgYWRkciBhZGQgZmQwMDo6MS82NCBkZXYgYzEgbm9kYWQKJiM0MzsJaXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgbGluayBzZXQgYzEgdXAKJiM0MzsJaXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgYWRkciBhZGQgZmQwMDo6Mi82NCBkZXYgczEgbm9kYWQKJiM0MzsJaXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgbGluayBzZXQgczEgdXAKJiM0MzsKJiM0MzsJIyBOUy9OQSBmb3J3YXJkaW5nCiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDYgXAomIzQzOwkgICAgJiMzOTtpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz01OCksaWNtcHY2KCkmIzM5OyBcCiYjNDM7CSAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA2IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDg2ZGQpLGlwdjYocHJvdG89NTgpLGljbXB2NigpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJIyBTQ1RQIHBvcnQgbWF0Y2hpbmc6IGRzdCBmb3IgcmVxdWVzdCwgc3JjIGZvciByZXBseQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA2IFwKJiM0MzsJICAgICYjMzQ7aW5fcG9ydCgxKSxldGgoKSwkdjYsc2N0cChkc3Q9NDQ0MykmIzM0OyBcCiYjNDM7CSAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA2IFwKJiM0MzsJICAgICYjMzQ7aW5fcG9ydCgyKSxldGgoKSwkdjYsc2N0cChzcmM9NDQ0MykmIzM0OyBcCiYjNDM7CSAgICAmIzM5OzEmIzM5OyB8fCByZXR1cm4gMQomIzQzOwomIzQzOwkjIEEga2V5bGVzcyBpcHY2KHByb3RvPTEzMikgaW5zdGFsbCBtdXN0IGJlIHJlZnVzZWQgKEVJTlZBTCk6CiYjNDM7CSMgbWF0Y2hfdmFsaWRhdGUoKSByZXF1aXJlcyB0aGUgc2N0cCgpIGtleS4gUGluIHRoZSByZWplY3Qgc2lkZQomIzQzOwkjIG9mIHRoYXQgcnVsZTsgdGhlIGtleWVkIGluc3RhbGxzIGFib3ZlIGNvdmVyIHRoZSBhY2NlcHQgc2lkZS4KJiM0MzsJIyBWZXJpZnkgdGhlIHJlZnVzYWwgaXMgRUlOVkFMIChtaXNzaW5nIGtleSksIG5vdCBhIHBhcnNlIGVycm9yLgomIzQzOwllcnI9JChvdnNfc2J4ICYjMzQ7JHQmIzM0OyBweXRob24zICRvdnNfYmFzZS9vdnMtZHBjdGwucHkgYWRkLWZsb3cgc2N0cDYgXAomIzQzOwkgICAgJiMzNDtpbl9wb3J0KDEpLGV0aCgpLCR2NiYjMzQ7ICYjMzk7MiYjMzk7IDImZ3Q7JmFtcDsxICZndDsvZGV2L251bGwpIFwKJiM0MzsJICAgICZhbXA7JmFtcDsgeyBpbmZvICYjMzQ7a2V5bGVzcyBTQ1RQIGZsb3cgc2hvdWxkIGJlIHJlZnVzZWQmIzM0OwomIzQzOwkgICAgICAgICByZXR1cm4gMTsgfQomIzQzOwllY2hvICYjMzQ7JGVyciYjMzQ7IHwgZ3JlcCAtcSAmIzM0OygyMiwmIzM0OyB8fCB7CiYjNDM7CQlpbmZvICYjMzQ7a2V5bGVzcyBTQ1RQIGZsb3cgcmVmdXNlZCBmb3Igd3JvbmcgcmVhc29uOiAkZXJyJiMzNDsKJiM0MzsJCXJldHVybiAxCiYjNDM7CX0KJiM0MzsKJiM0MzsJb3ZzX25ldG5zX3NwYXduX2RhZW1vbiAmIzM0OyR0JiMzNDsgJiMzNDtzZXJ2ZXImIzM0OyBcCiYjNDM7CSAgICBzb2NhdCAtdSAtdCAxIFNDVFA2LUxJU1RFTjo0NDQzLGZvcmsgXAomIzQzOwkgICAgT1BFTjomIzM0OyRyeGZpbGUmIzM0OyxjcmVhdCxhcHBlbmQKJiM0MzsJb3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CWluZm8gJiMzNDt2ZXJpZnkgU0NUUCBhc3NvY2lhdGlvbiB3aXRoIHBvcnQta2V5ZWQgZmxvd3MmIzM0OwomIzQzOwlvdnNfc2J4ICYjMzQ7JHQmIzM0OyBpcCBuZXRucyBleGVjIGNsaWVudCBcCiYjNDM7CSAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gJiMzNDtTQ1RQNi1DT05ORUNUOltmZDAwOjoyXTo0NDQzJiMzNDsgJmx0Oy9kZXYvbnVsbCBcCiYjNDM7CSAgICB8fCByZXR1cm4gMQomIzQzOwomIzQzOwlpbmZvICYjMzQ7dmVyaWZ5IFNDVFAgREFUQSBjaHVuayBjcm9zc2VzIHRoZSBkYXRhcGF0aCYjMzQ7CiYjNDM7CW92c19zYnggJiMzNDskdCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFwKJiM0MzsJICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiAmIzM0O1NDVFA2LUNPTk5FQ1Q6W2ZkMDA6OjJdOjQ0NDMmIzM0OyBcCiYjNDM7CSAgICAmbHQ7Jmx0OyZsdDsgJiMzNDskcGF5bG9hZCYjMzQ7IHx8IHJldHVybiAxCiYjNDM7CW92c193YWl0IGdyZXAgLXEgJiMzNDskcGF5bG9hZCYjMzQ7ICYjMzQ7JHJ4ZmlsZSYjMzQ7IFwKJiM0MzsJICAgIHx8IHsgaW5mbyAmIzM0O3NlcnZlciBkaWQgbm90IHJlY2VpdmUgU0NUUCBEQVRBIHBheWxvYWQmIzM0OwomIzQzOwkgICAgICAgICByZXR1cm4gMTsgfQomIzQzOwomIzQzOwlvdnNfZGVsX2Zsb3dzICYjMzQ7JHQmIzM0OyBzY3RwNgomIzQzOwomIzQzOwlpbmZvICYjMzQ7dmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMgd2l0aG91dCBmbG93cyYjMzQ7CiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDYgXAomIzQzOwkgICAgJiMzOTtpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz01OCksaWNtcHY2KCkmIzM5OyBcCiYjNDM7CSAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA2IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDg2ZGQpLGlwdjYocHJvdG89NTgpLGljbXB2NigpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJb3ZzX3NieCAmIzM0OyR0JiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXAomIzQzOwkgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOICYjMzQ7U0NUUDYtQ09OTkVDVDpbZmQwMDo6Ml06NDQ0MyYjMzQ7ICZsdDsvZGV2L251bGwgXAomIzQzOwkgICAgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSBcCiYjNDM7CSAgICAmYW1wOyZhbXA7IHsgaW5mbyAmIzM0O2Nvbm5lY3Rpb24gc2hvdWxkIGZhaWwgd2l0aG91dCBmbG93cyYjMzQ7CiYjNDM7CSAgICAgICAgIHJldHVybiAxOyB9CiYjNDM7CiYjNDM7CWluZm8gJiMzNDtyZWluc3RhbGwgZmxvd3MgYW5kIHZlcmlmeSByZWNvdmVyeSYjMzQ7CiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDYgXAomIzQzOwkgICAgJiMzNDtpbl9wb3J0KDEpLGV0aCgpLCR2NixzY3RwKGRzdD00NDQzKSYjMzQ7IFwKJiM0MzsJICAgICYjMzk7MiYjMzk7IHx8IHJldHVybiAxCiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDYgXAomIzQzOwkgICAgJiMzNDtpbl9wb3J0KDIpLGV0aCgpLCR2NixzY3RwKHNyYz00NDQzKSYjMzQ7IFwKJiM0MzsJICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19zYnggJiMzNDskdCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFwKJiM0MzsJICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiAmIzM0O1NDVFA2LUNPTk5FQ1Q6W2ZkMDA6OjJdOjQ0NDMmIzM0OyAmbHQ7L2Rldi9udWxsIFwKJiM0MzsJICAgIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwogIyBwc2FtcGxlIHRlc3QKICMgLSB1c2UgcHNhbXBsZSB0byBvYnNlcnZlIHBhY2tldHMKIHRlc3RfcHNhbXBsZSgpIHsKQEAgLTEwOTEsNiAmIzQzOzEyMDAsOTggQEAgdGVzdF9uYXRfY29ubmVjdF92NCAoKSB7CiAJcmV0dXJuIDAKIH0KIAomIzQzOyMgc2N0cF9uYXRfY29ubmVjdF92NCB0ZXN0CiYjNDM7IyAgLSBTQ1RQIGFzc29jaWF0aW9uIGNyb3NzZXMgYSBjdChjb21taXQsbmF0KGRzdD1pcDpwb3J0KSkgRE5BVAomIzQzOyMgIC0gcG9zdC1yZWNpcmMgZmxvd3MgbWF0Y2ggdGhlIHRyYW5zbGF0ZWQgYWRkcmVzcyBhbmQgcG9ydCwgc28gdGhlCiYjNDM7IyAgICBTQ1RQIGJyYW5jaCBvZiB0aGUgcG9zdC1OQVQgZmxvdyBrZXkgdXBkYXRlIGlzIGxvYWQtYmVhcmluZwomIzQzO3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NCAoKSB7CiYjNDM7CWxvY2FsIHQ9JiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OwomIzQzOwlsb2NhbCBwYXlsb2FkPSYjMzQ7U0NUUF9OQVRfREFUQV9PSyYjMzQ7CiYjNDM7CWxvY2FsIHJ4ZmlsZT0mIzM0OyR7b3ZzX2Jhc2V9LyR7dH0vc2N0cC1yeC50eHQmIzM0OwomIzQzOwomIzQzOwltb2Rwcm9iZSAtcSBzY3RwIDImZ3Q7L2Rldi9udWxsIHx8IHJldHVybiAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzOwlzb2NhdCAtViAyJmd0OyZhbXA7MSB8IGdyZXAgLXEgJiMzNDtkZWZpbmUgV0lUSF9TQ1RQJiMzNDsgfHwgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7CiYjNDM7CSMgU0NUUCBjb25udHJhY2sgaXMgY29tcGlsZWQgaW50byBuZl9jb25udHJhY2sua28sIHNvIGNoZWNrIHRoYXQKJiM0MzsJIyBsb2FkaW5nIGl0IGFjdHVhbGx5IGV4cG9zZWQgdGhlIFNDVFAgY29ubnRyYWNrIHN5c2N0bHMuCiYjNDM7CW1vZHByb2JlIC1xIG5mX2Nvbm50cmFjayAyJmd0Oy9kZXYvbnVsbCB8fCByZXR1cm4gJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MzsJWyAtZSAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X2VzdGFibGlzaGVkIF0gXAomIzQzOwkgICAgfHwgeyBpbmZvICYjMzQ7bm8gU0NUUCBjb25udHJhY2sgc3VwcG9ydCAtIHNraXBwaW5nJiMzNDsKJiM0MzsJICAgICAgICAgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7OyB9CiYjNDM7CiYjNDM7CXNieF9hZGQgJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OyB8fCByZXR1cm4gJD8KJiM0MzsKJiM0MzsJb3ZzX2FkZF9kcCAmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NCYjMzQ7IHNjdHBuYXQ0IHx8IHJldHVybiAxCiYjNDM7CWluZm8gJiMzNDtjcmVhdGUgbmFtZXNwYWNlcyYjMzQ7CiYjNDM7CWZvciBucyBpbiBjbGllbnQgc2VydmVyOyBkbwomIzQzOwkJb3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OyAmIzM0O3NjdHBuYXQ0JiMzNDsgXAomIzQzOwkJICAgICYjMzQ7JG5zJiMzNDsgJiMzNDske25zOjA6MX0wJiMzNDsgJiMzNDske25zOjA6MX0xJiMzNDsgfHwgcmV0dXJuIDEKJiM0MzsJZG9uZQomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjIGNsaWVudCBpcCBhZGRyIGFkZCAxNzIuMzEuMTEwLjEwLzI0IGRldiBjMQomIzQzOwlpcCBuZXRucyBleGVjIGNsaWVudCBpcCBsaW5rIHNldCBjMSB1cAomIzQzOwlpcCBuZXRucyBleGVjIHNlcnZlciBpcCBhZGRyIGFkZCAxNzIuMzEuMTEwLjIwLzI0IGRldiBzMQomIzQzOwlpcCBuZXRucyBleGVjIHNlcnZlciBpcCBsaW5rIHNldCBzMSB1cAomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjIGNsaWVudCBpcCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgMTcyLjMxLjExMC4yMAomIzQzOwomIzQzOwkjIENoZWNrIGlmIHRoZSBjdCBhbmQgbmF0IGFjdGlvbnMgY2FuIGJlIGNvbmZpZ3VyZWQuCiYjNDM7CW92c19hZGRfZmxvdyAmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NCYjMzQ7IHNjdHBuYXQ0IFwKJiM0MzsJCSYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQoKSYjMzk7IFwKJiM0MzsJCSYjMzk7Y3QoY29tbWl0LG5hdChkc3Q9MTcyLjMxLjExMC4yMDo1NTU1KSkscmVjaXJjKDB4MSkmIzM5OyBcCiYjNDM7CQkmYW1wOyZndDsgL2Rldi9udWxsCiYjNDM7CWlmIFsgJD8gPT0gMSBdOyB0aGVuCiYjNDM7CQlpbmZvICYjMzQ7bm8gc3VwcG9ydCBmb3IgY3QvbmF0IGFjdGlvbnMgLSBza2lwcGluZyYjMzQ7CiYjNDM7CQlvdnNfZXhpdF9zaWcKJiM0MzsJCXJldHVybiAka3NmdF9za2lwCiYjNDM7CWZpCiYjNDM7CiYjNDM7CW92c19kZWxfZmxvd3MgJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OyBzY3RwbmF0NAomIzQzOwomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OyBzY3RwbmF0NCBcCiYjNDM7CQkmIzM5O2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKSYjMzk7ICYjMzk7MiYjMzk7IHx8IHJldHVybiAxCiYjNDM7CW92c19hZGRfZmxvdyAmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NCYjMzQ7IHNjdHBuYXQ0IFwKJiM0MzsJCSYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsJb3ZzX2FkZF9mbG93ICYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0JiMzNDsgc2N0cG5hdDQgXAomIzQzOwkJJiMzNDtjdF9zdGF0ZSgtdHJrKSxpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksJiMzNDtcCiYjNDM7JiMzNDtpcHY0KGRzdD0xOTIuMTY4LjAuMjApJiMzNDsgXAomIzQzOwkJJiMzNDtjdChjb21taXQsbmF0KGRzdD0xNzIuMzEuMTEwLjIwOjU1NTUpKSxyZWNpcmMoMHgxKSYjMzQ7IHx8IHJldHVybiAxCiYjNDM7CW92c19hZGRfZmxvdyAmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NCYjMzQ7IHNjdHBuYXQ0IFwKJiM0MzsJCSYjMzQ7Y3Rfc3RhdGUoLXRyayksaW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQoKSYjMzQ7IFwKJiM0MzsJCSYjMzQ7Y3QoY29tbWl0LG5hdCkscmVjaXJjKDB4MikmIzM0OyB8fCByZXR1cm4gMQomIzQzOwomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OyBzY3RwbmF0NCBcCiYjNDM7CQkmIzM0O3JlY2lyY19pZCgweDEpLGN0X3N0YXRlKCYjNDM7dHJrLWludiksaW5fcG9ydCgxKSxldGgoKSwmIzM0O1wKJiM0MzsmIzM0O2V0aF90eXBlKDB4MDgwMCksaXB2NChkc3Q9MTcyLjMxLjExMC4yMCxwcm90bz0xMzIpLCYjMzQ7XAomIzQzOyYjMzQ7c2N0cChkc3Q9NTU1NSkmIzM0OyBcCiYjNDM7CQkmIzM0OzImIzM0OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OyBzY3RwbmF0NCBcCiYjNDM7CQkmIzM0O3JlY2lyY19pZCgweDIpLGN0X3N0YXRlKCYjNDM7dHJrLWludiksaW5fcG9ydCgyKSxldGgoKSwmIzM0O1wKJiM0MzsmIzM0O2V0aF90eXBlKDB4MDgwMCksaXB2NChzcmM9MTkyLjE2OC4wLjIwLHByb3RvPTEzMiksJiMzNDtcCiYjNDM7JiMzNDtzY3RwKHNyYz00NDQzKSYjMzQ7IFwKJiM0MzsJCSYjMzQ7MSYjMzQ7IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19uZXRuc19zcGF3bl9kYWVtb24gJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OyAmIzM0O3NlcnZlciYjMzQ7IFwKJiM0MzsJCXNvY2F0IC11IC10IDEgU0NUUDQtTElTVEVOOjU1NTUsZm9yayBcCiYjNDM7CQlPUEVOOiYjMzQ7JHJ4ZmlsZSYjMzQ7LGNyZWF0LGFwcGVuZAomIzQzOwlvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDU1NTUgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJaW5mbyAmIzM0O3ZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIGFjcm9zcyBOQVQmIzM0OwomIzQzOwlvdnNfc2J4ICYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0JiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXAomIzQzOwkgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOICYjMzQ7U0NUUDQtQ09OTkVDVDoxOTIuMTY4LjAuMjA6NDQ0MyYjMzQ7IFwKJiM0MzsJICAgICZsdDsvZGV2L251bGwgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJaW5mbyAmIzM0O3ZlcmlmeSBTQ1RQIERBVEEgY2h1bmsgY3Jvc3NlcyBOQVQmIzM0OwomIzQzOwlvdnNfc2J4ICYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0JiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXAomIzQzOwkgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOICYjMzQ7U0NUUDQtQ09OTkVDVDoxOTIuMTY4LjAuMjA6NDQ0MyYjMzQ7IFwKJiM0MzsJICAgICZsdDsmbHQ7Jmx0OyAmIzM0OyRwYXlsb2FkJiMzNDsgfHwgcmV0dXJuIDEKJiM0MzsJb3ZzX3dhaXQgZ3JlcCAtcSAmIzM0OyRwYXlsb2FkJiMzNDsgJiMzNDskcnhmaWxlJiMzNDsgXAomIzQzOwkgICAgfHwgeyBpbmZvICYjMzQ7c2VydmVyIGRpZCBub3QgcmVjZWl2ZSBTQ1RQIERBVEEgcGF5bG9hZCYjMzQ7CiYjNDM7CSAgICAgICAgIHJldHVybiAxOyB9CiYjNDM7CiYjNDM7CWluZm8gJiMzNDtkb25lLi4uJiMzNDsKJiM0MzsJcmV0dXJuIDAKJiM0Mzt9CiYjNDM7CiAjIG5hdF9yZWxhdGVkX3Y0IHRlc3QKICMgIC0gY2xpZW50LSZndDtzZXJ2ZXIgaXAgcGFja2V0cyBnbyB2aWEgU05BVAogIyAgLSBjbGllbnQgc29saWNpdHMgSUNNUCBkZXN0aW5hdGlvbiB1bnJlYWNoYWJsZSBwYWNrZXQgZnJvbSBzZXJ2ZXIKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1OAoJCQkJCQkJb3V0cHV0OiA3MwoJCQkJCQkJdGhvdWdodHM6IDYzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgZGlmZiB0b3VjaGluZyB0d28gZmlsZXM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvY29uZmlnYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaGAuIFRoZSBmaWxlIHBhdGhzIGltbWVkaWF0ZWx5IHBvaW50IHRvd2FyZHMgc2VsZi10ZXN0cyB3aXRoaW4gYSB1c2VyLXNwYWNlIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBPcGVuIHZTd2l0Y2guIEkgbmVlZCB0byB0cmlhZ2UgdGhpcyBiYXNlZCBvbiB3aGV0aGVyIGl0IGFmZmVjdHMgdGhlIGtlcm5lbCBpdHNlbGYuCgpJJiMzOTttIGNvbnN1bHRpbmcgdGhlICYjMzQ7V0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY3JpdGVyaWEuIFNwZWNpZmljYWxseSwgdGhlIHJ1bGVzIHN0YXRlIHRoYXQgY2hhbmdlcyB0byB1c2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBsaWtlIGB0b29scy9gLCBgc2FtcGxlcy9gLCBvciBgc2NyaXB0cy9gLCBhcmUgbm90IHdvcnRoIGZ1enppbmcgaWYgdGhleSAqZG9uJiMzOTt0KiBhZmZlY3QgdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCgpJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IHRoZSBkaWZmLCBhcyBwcmVzZW50ZWQsIG9ubHkgaW5jbHVkZXMgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvYCBkaXJlY3RvcnkuIE5vIG90aGVyIGZpbGVzIGFyZSB0b3VjaGVkLCBhbmQgSSBjYW4gY29uZmlybSB0aGlzIGVpdGhlciB0aHJvdWdoIGEgcXVpY2sgYGdpdCBsb2cgLTFgIGNoZWNrLCBvciwgaW4gdGhpcyBjYXNlLCBieSB2aXJ0dWUgb2YgdGhlIHByb3ZpZGVkIHByb21wdC4KCkVzc2VudGlhbGx5LCB0aGlzIG1lYW5zIHRoYXQgdGhpcyBwYXRjaCBpcyBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIHVzZXItc3BhY2UgdGVzdCBjb2RlLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgY29yZSBrZXJuZWwgY29tcG9uZW50cyBvciB0aGVpciBjb21waWxlZCBpbWFnZXMsIGJhc2VkIG9uIHRoZSBkaWZmLiBTbyBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbnMgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGxpc3RzIHdpbGwgYmUgZW1wdHkgKG9yIG51bGwpLCBhcyB0aGlzIGNoYW5nZSBoYXMgbm8gaW1wYWN0IG9uIHJlbGV2YW50IGtlcm5lbCBzeW1ib2xzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHNlbGZ0ZXN0cyBzY3JpcHRzIGFuZCBjb25maWcgZmlsZXMgaW4gYSB1c2VyLXNwYWNlIHRlc3RpbmcgZGlyZWN0b3J5LCB0aGVyZWJ5IG5vdCBhZmZlY3RpbmcgdGhlIGtlcm5lbCYjMzk7cyBjb21waWxhdGlvbiBvciBtb2R1bGVzLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKSwgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoLyksIHdoaWNoIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjQ2LjYyMDU3ODAzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NDU5NzI1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKSwgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6NDYuNjIwNTgzNTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjE2NTUwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NzllMTU3OGE5NDlkYTU4ZjYyYjU0Zjc2MDE1MTQ1NjMwZTM1ZThiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTM6MDQ6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9jb25maWdcXG5pbmRleCBhODI1ZTBiNWM4OGU1Li5mYTkwNDc1ZGMzODhkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9jb25maWdcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvY29uZmlnXFxuQEAgLTcsNiArNyw3IEBAIENPTkZJR19ORVRfSVBHUkU9bVxcbiBDT05GSUdfTkVUX0lQR1JFX0RFTVVYPW1cXG4gQ09ORklHX05GX0NPTk5UUkFDSz1tXFxuIENPTkZJR19ORl9DT05OVFJBQ0tfT1ZTPXlcXG4rQ09ORklHX05GX0NUX1BST1RPX1NDVFA9eVxcbiBDT05GSUdfT1BFTlZTV0lUQ0g9bVxcbiBDT05GSUdfUFNBTVBMRT1tXFxuIENPTkZJR19WRVRIPXlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXFxuaW5kZXggYTMxZjdmYjY4ODJkYy4uMTM4YTcwNWZjMzU5ZSAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hcXG5AQCAtMzQsNiArMzQsOCBAQCB0ZXN0cz1cXFwiXFxuIFxcdHRydW5jXFx0XFx0XFx0XFx0XFx0dHJ1bmM6IG91dHB1dCB0cnVuY2F0aW9uXFxuIFxcdGljbXB2NlxcdFxcdFxcdFxcdFxcdGljbXB2NjogSUNNUHY2IGVjaG8gdHlwZSBtYXRjaFxcbiBcXHRzY3RwX2Nvbm5lY3RfdjRcXHRcXHRcXHRcXHRzY3RwOiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nXFxuK1xcdHNjdHBfY29ubmVjdF92NlxcdFxcdFxcdHNjdHA2OiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nIG92ZXIgSVB2NlxcbitcXHRzY3RwX25hdF9jb25uZWN0X3Y0XFx0XFx0c2N0cG5hdDQ6IFNDVFAgTkFUIHdpdGggcG9ydCB0cmFuc2xhdGlvblxcbiBcXHRwc2FtcGxlXFx0XFx0XFx0XFx0XFx0cHNhbXBsZTogU2FtcGxpbmcgcGFja2V0cyB3aXRoIHBzYW1wbGVcXFwiXFxuIFxcbiBpbmZvKCkge1xcbkBAIC03MDAsNiArNzAyLDExMyBAQCB0ZXN0X3NjdHBfY29ubmVjdF92NCgpIHtcXG4gXFx0cmV0dXJuIDBcXG4gfVxcbiBcXG4rIyBzY3RwX2Nvbm5lY3RfdjYgdGVzdFxcbisjIC0gc2N0cChkc3Q9NDQ0MykgbWF0Y2hlcyBjbGllbnQtdG8tc2VydmVyIElOSVRcXG4rIyAtIHNjdHAoc3JjPTQ0NDMpIG1hdGNoZXMgc2VydmVyLXRvLWNsaWVudCBJTklULUFDS1xcbisjIC0gaWNtcHY2IE5TL05BIGZsb3dzIGZvcndhcmQgbmVpZ2hib3VyIGRpc2NvdmVyeVxcbisjIC0gcmVtb3ZlIGZsb3dzIGFuZCB2ZXJpZnkgY29ubmVjdGlvbiBmYWlscywgcmVpbnN0YWxsIGFuZCByZWNvdmVyXFxuK3Rlc3Rfc2N0cF9jb25uZWN0X3Y2KCkge1xcbitcXHRsb2NhbCB0PVxcXCJ0ZXN0X3NjdHBfY29ubmVjdF92NlxcXCJcXG4rXFx0bG9jYWwgdjY9XFxcImV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz0xMzIpXFxcIlxcbitcXHRsb2NhbCBwYXlsb2FkPVxcXCJTQ1RQNl9EQVRBX09LXFxcIlxcbitcXHRsb2NhbCByeGZpbGU9XFxcIiR7b3ZzX2Jhc2V9LyR7dH0vc2N0cC1yeC50eHRcXFwiXFxuK1xcbitcXHRtb2Rwcm9iZSAtcSBzY3RwIDJcXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0c29jYXQgLVYgMlxcdTAwM2VcXHUwMDI2MSB8IGdyZXAgLXEgXFxcImRlZmluZSBXSVRIX1NDVFBcXFwiIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0WyAtZSAvcHJvYy9zeXMvbmV0L2lwdjYgXSB8fCByZXR1cm4gXFxcIiRrc2Z0X3NraXBcXFwiXFxuK1xcbitcXHRzYnhfYWRkIFxcXCIkdFxcXCIgfHwgcmV0dXJuICQ/XFxuK1xcdG92c19hZGRfZHAgXFxcIiR0XFxcIiBzY3RwNiB8fCByZXR1cm4gMVxcbitcXG4rXFx0aW5mbyBcXFwiY3JlYXRlIG5hbWVzcGFjZXNcXFwiXFxuK1xcdGZvciBucyBpbiBjbGllbnQgc2VydmVyOyBkb1xcbitcXHRcXHRvdnNfYWRkX25ldG5zX2FuZF92ZXRocyBcXFwiJHRcXFwiIFxcXCJzY3RwNlxcXCIgXFxcIiRuc1xcXCIgXFxcXFxcbitcXHRcXHQgICAgXFxcIiR7bnM6MDoxfTBcXFwiIFxcXCIke25zOjA6MX0xXFxcIiB8fCByZXR1cm4gMVxcbitcXHRkb25lXFxuK1xcbitcXHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBhZGRyIGFkZCBmZDAwOjoxLzY0IGRldiBjMSBub2RhZFxcbitcXHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBsaW5rIHNldCBjMSB1cFxcbitcXHRpcCBuZXRucyBleGVjIHNlcnZlciBpcCBhZGRyIGFkZCBmZDAwOjoyLzY0IGRldiBzMSBub2RhZFxcbitcXHRpcCBuZXRucyBleGVjIHNlcnZlciBpcCBsaW5rIHNldCBzMSB1cFxcbitcXG4rXFx0IyBOUy9OQSBmb3J3YXJkaW5nXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA2IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz01OCksaWNtcHY2KCknIFxcXFxcXG4rXFx0ICAgICcyJyB8fCByZXR1cm4gMVxcbitcXHRvdnNfYWRkX2Zsb3cgXFxcIiR0XFxcIiBzY3RwNiBcXFxcXFxuK1xcdCAgICAnaW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDg2ZGQpLGlwdjYocHJvdG89NTgpLGljbXB2NigpJyBcXFxcXFxuK1xcdCAgICAnMScgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdCMgU0NUUCBwb3J0IG1hdGNoaW5nOiBkc3QgZm9yIHJlcXVlc3QsIHNyYyBmb3IgcmVwbHlcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDYgXFxcXFxcbitcXHQgICAgXFxcImluX3BvcnQoMSksZXRoKCksJHY2LHNjdHAoZHN0PTQ0NDMpXFxcIiBcXFxcXFxuK1xcdCAgICAnMicgfHwgcmV0dXJuIDFcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDYgXFxcXFxcbitcXHQgICAgXFxcImluX3BvcnQoMiksZXRoKCksJHY2LHNjdHAoc3JjPTQ0NDMpXFxcIiBcXFxcXFxuK1xcdCAgICAnMScgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdCMgQSBrZXlsZXNzIGlwdjYocHJvdG89MTMyKSBpbnN0YWxsIG11c3QgYmUgcmVmdXNlZCAoRUlOVkFMKTpcXG4rXFx0IyBtYXRjaF92YWxpZGF0ZSgpIHJlcXVpcmVzIHRoZSBzY3RwKCkga2V5LiBQaW4gdGhlIHJlamVjdCBzaWRlXFxuK1xcdCMgb2YgdGhhdCBydWxlOyB0aGUga2V5ZWQgaW5zdGFsbHMgYWJvdmUgY292ZXIgdGhlIGFjY2VwdCBzaWRlLlxcbitcXHQjIFZlcmlmeSB0aGUgcmVmdXNhbCBpcyBFSU5WQUwgKG1pc3Npbmcga2V5KSwgbm90IGEgcGFyc2UgZXJyb3IuXFxuK1xcdGVycj0kKG92c19zYnggXFxcIiR0XFxcIiBweXRob24zICRvdnNfYmFzZS9vdnMtZHBjdGwucHkgYWRkLWZsb3cgc2N0cDYgXFxcXFxcbitcXHQgICAgXFxcImluX3BvcnQoMSksZXRoKCksJHY2XFxcIiAnMicgMlxcdTAwM2VcXHUwMDI2MSBcXHUwMDNlL2Rldi9udWxsKSBcXFxcXFxuK1xcdCAgICBcXHUwMDI2XFx1MDAyNiB7IGluZm8gXFxcImtleWxlc3MgU0NUUCBmbG93IHNob3VsZCBiZSByZWZ1c2VkXFxcIlxcbitcXHQgICAgICAgICByZXR1cm4gMTsgfVxcbitcXHRlY2hvIFxcXCIkZXJyXFxcIiB8IGdyZXAgLXEgXFxcIigyMixcXFwiIHx8IHtcXG4rXFx0XFx0aW5mbyBcXFwia2V5bGVzcyBTQ1RQIGZsb3cgcmVmdXNlZCBmb3Igd3JvbmcgcmVhc29uOiAkZXJyXFxcIlxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHR9XFxuK1xcbitcXHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFxcXCIkdFxcXCIgXFxcInNlcnZlclxcXCIgXFxcXFxcbitcXHQgICAgc29jYXQgLXUgLXQgMSBTQ1RQNi1MSVNURU46NDQ0Myxmb3JrIFxcXFxcXG4rXFx0ICAgIE9QRU46XFxcIiRyeGZpbGVcXFwiLGNyZWF0LGFwcGVuZFxcbitcXHRvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDQ0NDMgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdGluZm8gXFxcInZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIHdpdGggcG9ydC1rZXllZCBmbG93c1xcXCJcXG4rXFx0b3ZzX3NieCBcXFwiJHRcXFwiIGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXFxcXG4rXFx0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcXFwiU0NUUDYtQ09OTkVDVDpbZmQwMDo6Ml06NDQ0M1xcXCIgXFx1MDAzYy9kZXYvbnVsbCBcXFxcXFxuK1xcdCAgICB8fCByZXR1cm4gMVxcbitcXG4rXFx0aW5mbyBcXFwidmVyaWZ5IFNDVFAgREFUQSBjaHVuayBjcm9zc2VzIHRoZSBkYXRhcGF0aFxcXCJcXG4rXFx0b3ZzX3NieCBcXFwiJHRcXFwiIGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXFxcXG4rXFx0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcXFwiU0NUUDYtQ09OTkVDVDpbZmQwMDo6Ml06NDQ0M1xcXCIgXFxcXFxcbitcXHQgICAgXFx1MDAzY1xcdTAwM2NcXHUwMDNjIFxcXCIkcGF5bG9hZFxcXCIgfHwgcmV0dXJuIDFcXG4rXFx0b3ZzX3dhaXQgZ3JlcCAtcSBcXFwiJHBheWxvYWRcXFwiIFxcXCIkcnhmaWxlXFxcIiBcXFxcXFxuK1xcdCAgICB8fCB7IGluZm8gXFxcInNlcnZlciBkaWQgbm90IHJlY2VpdmUgU0NUUCBEQVRBIHBheWxvYWRcXFwiXFxuK1xcdCAgICAgICAgIHJldHVybiAxOyB9XFxuK1xcbitcXHRvdnNfZGVsX2Zsb3dzIFxcXCIkdFxcXCIgc2N0cDZcXG4rXFxuK1xcdGluZm8gXFxcInZlcmlmeSBjb25uZWN0aW9uIGZhaWxzIHdpdGhvdXQgZmxvd3NcXFwiXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA2IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz01OCksaWNtcHY2KCknIFxcXFxcXG4rXFx0ICAgICcyJyB8fCByZXR1cm4gMVxcbitcXHRvdnNfYWRkX2Zsb3cgXFxcIiR0XFxcIiBzY3RwNiBcXFxcXFxuK1xcdCAgICAnaW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDg2ZGQpLGlwdjYocHJvdG89NTgpLGljbXB2NigpJyBcXFxcXFxuK1xcdCAgICAnMScgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdG92c19zYnggXFxcIiR0XFxcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxcXFxuK1xcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXFxcIlNDVFA2LUNPTk5FQ1Q6W2ZkMDA6OjJdOjQ0NDNcXFwiIFxcdTAwM2MvZGV2L251bGwgXFxcXFxcbitcXHQgICAgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIFxcXFxcXG4rXFx0ICAgIFxcdTAwMjZcXHUwMDI2IHsgaW5mbyBcXFwiY29ubmVjdGlvbiBzaG91bGQgZmFpbCB3aXRob3V0IGZsb3dzXFxcIlxcbitcXHQgICAgICAgICByZXR1cm4gMTsgfVxcbitcXG4rXFx0aW5mbyBcXFwicmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnlcXFwiXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA2IFxcXFxcXG4rXFx0ICAgIFxcXCJpbl9wb3J0KDEpLGV0aCgpLCR2NixzY3RwKGRzdD00NDQzKVxcXCIgXFxcXFxcbitcXHQgICAgJzInIHx8IHJldHVybiAxXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA2IFxcXFxcXG4rXFx0ICAgIFxcXCJpbl9wb3J0KDIpLGV0aCgpLCR2NixzY3RwKHNyYz00NDQzKVxcXCIgXFxcXFxcbitcXHQgICAgJzEnIHx8IHJldHVybiAxXFxuK1xcbitcXHRvdnNfc2J4IFxcXCIkdFxcXCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcXFxcbitcXHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFxcXCJTQ1RQNi1DT05ORUNUOltmZDAwOjoyXTo0NDQzXFxcIiBcXHUwMDNjL2Rldi9udWxsIFxcXFxcXG4rXFx0ICAgIHx8IHJldHVybiAxXFxuK1xcbitcXHRyZXR1cm4gMFxcbit9XFxuK1xcbiAjIHBzYW1wbGUgdGVzdFxcbiAjIC0gdXNlIHBzYW1wbGUgdG8gb2JzZXJ2ZSBwYWNrZXRzXFxuIHRlc3RfcHNhbXBsZSgpIHtcXG5AQCAtMTA5MSw2ICsxMjAwLDk4IEBAIHRlc3RfbmF0X2Nvbm5lY3RfdjQgKCkge1xcbiBcXHRyZXR1cm4gMFxcbiB9XFxuIFxcbisjIHNjdHBfbmF0X2Nvbm5lY3RfdjQgdGVzdFxcbisjICAtIFNDVFAgYXNzb2NpYXRpb24gY3Jvc3NlcyBhIGN0KGNvbW1pdCxuYXQoZHN0PWlwOnBvcnQpKSBETkFUXFxuKyMgIC0gcG9zdC1yZWNpcmMgZmxvd3MgbWF0Y2ggdGhlIHRyYW5zbGF0ZWQgYWRkcmVzcyBhbmQgcG9ydCwgc28gdGhlXFxuKyMgICAgU0NUUCBicmFuY2ggb2YgdGhlIHBvc3QtTkFUIGZsb3cga2V5IHVwZGF0ZSBpcyBsb2FkLWJlYXJpbmdcXG4rdGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0ICgpIHtcXG4rXFx0bG9jYWwgdD1cXFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XFxcIlxcbitcXHRsb2NhbCBwYXlsb2FkPVxcXCJTQ1RQX05BVF9EQVRBX09LXFxcIlxcbitcXHRsb2NhbCByeGZpbGU9XFxcIiR7b3ZzX2Jhc2V9LyR7dH0vc2N0cC1yeC50eHRcXFwiXFxuK1xcbitcXHRtb2Rwcm9iZSAtcSBzY3RwIDJcXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0c29jYXQgLVYgMlxcdTAwM2VcXHUwMDI2MSB8IGdyZXAgLXEgXFxcImRlZmluZSBXSVRIX1NDVFBcXFwiIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0IyBTQ1RQIGNvbm50cmFjayBpcyBjb21waWxlZCBpbnRvIG5mX2Nvbm50cmFjay5rbywgc28gY2hlY2sgdGhhdFxcbitcXHQjIGxvYWRpbmcgaXQgYWN0dWFsbHkgZXhwb3NlZCB0aGUgU0NUUCBjb25udHJhY2sgc3lzY3Rscy5cXG4rXFx0bW9kcHJvYmUgLXEgbmZfY29ubnRyYWNrIDJcXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0WyAtZSAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X2VzdGFibGlzaGVkIF0gXFxcXFxcbitcXHQgICAgfHwgeyBpbmZvIFxcXCJubyBTQ1RQIGNvbm50cmFjayBzdXBwb3J0IC0gc2tpcHBpbmdcXFwiXFxuK1xcdCAgICAgICAgIHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCI7IH1cXG4rXFxuK1xcdHNieF9hZGQgXFxcInRlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFxcXCIgfHwgcmV0dXJuICQ/XFxuK1xcbitcXHRvdnNfYWRkX2RwIFxcXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcXFwiIHNjdHBuYXQ0IHx8IHJldHVybiAxXFxuK1xcdGluZm8gXFxcImNyZWF0ZSBuYW1lc3BhY2VzXFxcIlxcbitcXHRmb3IgbnMgaW4gY2xpZW50IHNlcnZlcjsgZG9cXG4rXFx0XFx0b3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgXFxcInRlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFxcXCIgXFxcInNjdHBuYXQ0XFxcIiBcXFxcXFxuK1xcdFxcdCAgICBcXFwiJG5zXFxcIiBcXFwiJHtuczowOjF9MFxcXCIgXFxcIiR7bnM6MDoxfTFcXFwiIHx8IHJldHVybiAxXFxuK1xcdGRvbmVcXG4rXFxuK1xcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMTAvMjQgZGV2IGMxXFxuK1xcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGxpbmsgc2V0IGMxIHVwXFxuK1xcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMjAvMjQgZGV2IHMxXFxuK1xcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwXFxuK1xcbitcXHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgMTcyLjMxLjExMC4yMFxcbitcXG4rXFx0IyBDaGVjayBpZiB0aGUgY3QgYW5kIG5hdCBhY3Rpb25zIGNhbiBiZSBjb25maWd1cmVkLlxcbitcXHRvdnNfYWRkX2Zsb3cgXFxcInRlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFxcXCIgc2N0cG5hdDQgXFxcXFxcbitcXHRcXHQnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQoKScgXFxcXFxcbitcXHRcXHQnY3QoY29tbWl0LG5hdChkc3Q9MTcyLjMxLjExMC4yMDo1NTU1KSkscmVjaXJjKDB4MSknIFxcXFxcXG4rXFx0XFx0XFx1MDAyNlxcdTAwM2UgL2Rldi9udWxsXFxuK1xcdGlmIFsgJD8gPT0gMSBdOyB0aGVuXFxuK1xcdFxcdGluZm8gXFxcIm5vIHN1cHBvcnQgZm9yIGN0L25hdCBhY3Rpb25zIC0gc2tpcHBpbmdcXFwiXFxuK1xcdFxcdG92c19leGl0X3NpZ1xcbitcXHRcXHRyZXR1cm4gJGtzZnRfc2tpcFxcbitcXHRmaVxcbitcXG4rXFx0b3ZzX2RlbF9mbG93cyBcXFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XFxcIiBzY3RwbmF0NFxcbitcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcXFwiIHNjdHBuYXQ0IFxcXFxcXG4rXFx0XFx0J2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgJzInIHx8IHJldHVybiAxXFxuK1xcdG92c19hZGRfZmxvdyBcXFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XFxcIiBzY3RwbmF0NCBcXFxcXFxuK1xcdFxcdCdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCknICcxJyB8fCByZXR1cm4gMVxcbitcXHRvdnNfYWRkX2Zsb3cgXFxcInRlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFxcXCIgc2N0cG5hdDQgXFxcXFxcbitcXHRcXHRcXFwiY3Rfc3RhdGUoLXRyayksaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLFxcXCJcXFxcXFxuK1xcXCJpcHY0KGRzdD0xOTIuMTY4LjAuMjApXFxcIiBcXFxcXFxuK1xcdFxcdFxcXCJjdChjb21taXQsbmF0KGRzdD0xNzIuMzEuMTEwLjIwOjU1NTUpKSxyZWNpcmMoMHgxKVxcXCIgfHwgcmV0dXJuIDFcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcXFwiIHNjdHBuYXQ0IFxcXFxcXG4rXFx0XFx0XFxcImN0X3N0YXRlKC10cmspLGluX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KClcXFwiIFxcXFxcXG4rXFx0XFx0XFxcImN0KGNvbW1pdCxuYXQpLHJlY2lyYygweDIpXFxcIiB8fCByZXR1cm4gMVxcbitcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcXFwiIHNjdHBuYXQ0IFxcXFxcXG4rXFx0XFx0XFxcInJlY2lyY19pZCgweDEpLGN0X3N0YXRlKCt0cmstaW52KSxpbl9wb3J0KDEpLGV0aCgpLFxcXCJcXFxcXFxuK1xcXCJldGhfdHlwZSgweDA4MDApLGlwdjQoZHN0PTE3Mi4zMS4xMTAuMjAscHJvdG89MTMyKSxcXFwiXFxcXFxcbitcXFwic2N0cChkc3Q9NTU1NSlcXFwiIFxcXFxcXG4rXFx0XFx0XFxcIjJcXFwiIHx8IHJldHVybiAxXFxuK1xcdG92c19hZGRfZmxvdyBcXFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XFxcIiBzY3RwbmF0NCBcXFxcXFxuK1xcdFxcdFxcXCJyZWNpcmNfaWQoMHgyKSxjdF9zdGF0ZSgrdHJrLWludiksaW5fcG9ydCgyKSxldGgoKSxcXFwiXFxcXFxcbitcXFwiZXRoX3R5cGUoMHgwODAwKSxpcHY0KHNyYz0xOTIuMTY4LjAuMjAscHJvdG89MTMyKSxcXFwiXFxcXFxcbitcXFwic2N0cChzcmM9NDQ0MylcXFwiIFxcXFxcXG4rXFx0XFx0XFxcIjFcXFwiIHx8IHJldHVybiAxXFxuK1xcbitcXHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFxcXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcXFwiIFxcXCJzZXJ2ZXJcXFwiIFxcXFxcXG4rXFx0XFx0c29jYXQgLXUgLXQgMSBTQ1RQNC1MSVNURU46NTU1NSxmb3JrIFxcXFxcXG4rXFx0XFx0T1BFTjpcXFwiJHJ4ZmlsZVxcXCIsY3JlYXQsYXBwZW5kXFxuK1xcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNTU1NSB8fCByZXR1cm4gMVxcbitcXG4rXFx0aW5mbyBcXFwidmVyaWZ5IFNDVFAgYXNzb2NpYXRpb24gYWNyb3NzIE5BVFxcXCJcXG4rXFx0b3ZzX3NieCBcXFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XFxcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxcXFxuK1xcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXFxcIlNDVFA0LUNPTk5FQ1Q6MTkyLjE2OC4wLjIwOjQ0NDNcXFwiIFxcXFxcXG4rXFx0ICAgIFxcdTAwM2MvZGV2L251bGwgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdGluZm8gXFxcInZlcmlmeSBTQ1RQIERBVEEgY2h1bmsgY3Jvc3NlcyBOQVRcXFwiXFxuK1xcdG92c19zYnggXFxcInRlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFxcXCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcXFxcbitcXHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFxcXCJTQ1RQNC1DT05ORUNUOjE5Mi4xNjguMC4yMDo0NDQzXFxcIiBcXFxcXFxuK1xcdCAgICBcXHUwMDNjXFx1MDAzY1xcdTAwM2MgXFxcIiRwYXlsb2FkXFxcIiB8fCByZXR1cm4gMVxcbitcXHRvdnNfd2FpdCBncmVwIC1xIFxcXCIkcGF5bG9hZFxcXCIgXFxcIiRyeGZpbGVcXFwiIFxcXFxcXG4rXFx0ICAgIHx8IHsgaW5mbyBcXFwic2VydmVyIGRpZCBub3QgcmVjZWl2ZSBTQ1RQIERBVEEgcGF5bG9hZFxcXCJcXG4rXFx0ICAgICAgICAgcmV0dXJuIDE7IH1cXG4rXFxuK1xcdGluZm8gXFxcImRvbmUuLi5cXFwiXFxuK1xcdHJldHVybiAwXFxuK31cXG4rXFxuICMgbmF0X3JlbGF0ZWRfdjQgdGVzdFxcbiAjICAtIGNsaWVudC1cXHUwMDNlc2VydmVyIGlwIHBhY2tldHMgZ28gdmlhIFNOQVRcXG4gIyAgLSBjbGllbnQgc29saWNpdHMgSUNNUCBkZXN0aW5hdGlvbiB1bnJlYWNoYWJsZSBwYWNrZXQgZnJvbSBzZXJ2ZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6NDguMzQzMjg2OTQxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MjIzMjQ3OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKSwgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NzllMTU3OGE5NDlkYTU4ZjYyYjU0Zjc2MDE1MTQ1NjMwZTM1ZThiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMzowNDo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvY29uZmlnXG5pbmRleCBhODI1ZTBiNWM4OGU1Li5mYTkwNDc1ZGMzODhkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL2NvbmZpZ1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL2NvbmZpZ1xuQEAgLTcsNiArNyw3IEBAIENPTkZJR19ORVRfSVBHUkU9bVxuIENPTkZJR19ORVRfSVBHUkVfREVNVVg9bVxuIENPTkZJR19ORl9DT05OVFJBQ0s9bVxuIENPTkZJR19ORl9DT05OVFJBQ0tfT1ZTPXlcbitDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD15XG4gQ09ORklHX09QRU5WU1dJVENIPW1cbiBDT05GSUdfUFNBTVBMRT1tXG4gQ09ORklHX1ZFVEg9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuaW5kZXggYTMxZjdmYjY4ODJkYy4uMTM4YTcwNWZjMzU5ZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXG5AQCAtMzQsNiArMzQsOCBAQCB0ZXN0cz1cIlxuIFx0dHJ1bmNcdFx0XHRcdFx0dHJ1bmM6IG91dHB1dCB0cnVuY2F0aW9uXG4gXHRpY21wdjZcdFx0XHRcdFx0aWNtcHY2OiBJQ01QdjYgZWNobyB0eXBlIG1hdGNoXG4gXHRzY3RwX2Nvbm5lY3RfdjRcdFx0XHRcdHNjdHA6IFNDVFAgZmxvdyBrZXkgbWF0Y2hpbmdcbitcdHNjdHBfY29ubmVjdF92Nlx0XHRcdHNjdHA2OiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nIG92ZXIgSVB2NlxuK1x0c2N0cF9uYXRfY29ubmVjdF92NFx0XHRzY3RwbmF0NDogU0NUUCBOQVQgd2l0aCBwb3J0IHRyYW5zbGF0aW9uXG4gXHRwc2FtcGxlXHRcdFx0XHRcdHBzYW1wbGU6IFNhbXBsaW5nIHBhY2tldHMgd2l0aCBwc2FtcGxlXCJcbiBcbiBpbmZvKCkge1xuQEAgLTcwMCw2ICs3MDIsMTEzIEBAIHRlc3Rfc2N0cF9jb25uZWN0X3Y0KCkge1xuIFx0cmV0dXJuIDBcbiB9XG4gXG4rIyBzY3RwX2Nvbm5lY3RfdjYgdGVzdFxuKyMgLSBzY3RwKGRzdD00NDQzKSBtYXRjaGVzIGNsaWVudC10by1zZXJ2ZXIgSU5JVFxuKyMgLSBzY3RwKHNyYz00NDQzKSBtYXRjaGVzIHNlcnZlci10by1jbGllbnQgSU5JVC1BQ0tcbisjIC0gaWNtcHY2IE5TL05BIGZsb3dzIGZvcndhcmQgbmVpZ2hib3VyIGRpc2NvdmVyeVxuKyMgLSByZW1vdmUgZmxvd3MgYW5kIHZlcmlmeSBjb25uZWN0aW9uIGZhaWxzLCByZWluc3RhbGwgYW5kIHJlY292ZXJcbit0ZXN0X3NjdHBfY29ubmVjdF92NigpIHtcbitcdGxvY2FsIHQ9XCJ0ZXN0X3NjdHBfY29ubmVjdF92NlwiXG4rXHRsb2NhbCB2Nj1cImV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz0xMzIpXCJcbitcdGxvY2FsIHBheWxvYWQ9XCJTQ1RQNl9EQVRBX09LXCJcbitcdGxvY2FsIHJ4ZmlsZT1cIiR7b3ZzX2Jhc2V9LyR7dH0vc2N0cC1yeC50eHRcIlxuK1xuK1x0bW9kcHJvYmUgLXEgc2N0cCAyXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcIiRrc2Z0X3NraXBcIlxuK1x0c29jYXQgLVYgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xIFwiZGVmaW5lIFdJVEhfU0NUUFwiIHx8IHJldHVybiBcIiRrc2Z0X3NraXBcIlxuK1x0WyAtZSAvcHJvYy9zeXMvbmV0L2lwdjYgXSB8fCByZXR1cm4gXCIka3NmdF9za2lwXCJcbitcbitcdHNieF9hZGQgXCIkdFwiIHx8IHJldHVybiAkP1xuK1x0b3ZzX2FkZF9kcCBcIiR0XCIgc2N0cDYgfHwgcmV0dXJuIDFcbitcbitcdGluZm8gXCJjcmVhdGUgbmFtZXNwYWNlc1wiXG4rXHRmb3IgbnMgaW4gY2xpZW50IHNlcnZlcjsgZG9cbitcdFx0b3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgXCIkdFwiIFwic2N0cDZcIiBcIiRuc1wiIFxcXG4rXHRcdCAgICBcIiR7bnM6MDoxfTBcIiBcIiR7bnM6MDoxfTFcIiB8fCByZXR1cm4gMVxuK1x0ZG9uZVxuK1xuK1x0aXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgYWRkciBhZGQgZmQwMDo6MS82NCBkZXYgYzEgbm9kYWRcbitcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGxpbmsgc2V0IGMxIHVwXG4rXHRpcCBuZXRucyBleGVjIHNlcnZlciBpcCBhZGRyIGFkZCBmZDAwOjoyLzY0IGRldiBzMSBub2RhZFxuK1x0aXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgbGluayBzZXQgczEgdXBcbitcbitcdCMgTlMvTkEgZm9yd2FyZGluZ1xuK1x0b3ZzX2FkZF9mbG93IFwiJHRcIiBzY3RwNiBcXFxuK1x0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz01OCksaWNtcHY2KCknIFxcXG4rXHQgICAgJzInIHx8IHJldHVybiAxXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA2IFxcXG4rXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHg4NmRkKSxpcHY2KHByb3RvPTU4KSxpY21wdjYoKScgXFxcbitcdCAgICAnMScgfHwgcmV0dXJuIDFcbitcbitcdCMgU0NUUCBwb3J0IG1hdGNoaW5nOiBkc3QgZm9yIHJlcXVlc3QsIHNyYyBmb3IgcmVwbHlcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDYgXFxcbitcdCAgICBcImluX3BvcnQoMSksZXRoKCksJHY2LHNjdHAoZHN0PTQ0NDMpXCIgXFxcbitcdCAgICAnMicgfHwgcmV0dXJuIDFcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDYgXFxcbitcdCAgICBcImluX3BvcnQoMiksZXRoKCksJHY2LHNjdHAoc3JjPTQ0NDMpXCIgXFxcbitcdCAgICAnMScgfHwgcmV0dXJuIDFcbitcbitcdCMgQSBrZXlsZXNzIGlwdjYocHJvdG89MTMyKSBpbnN0YWxsIG11c3QgYmUgcmVmdXNlZCAoRUlOVkFMKTpcbitcdCMgbWF0Y2hfdmFsaWRhdGUoKSByZXF1aXJlcyB0aGUgc2N0cCgpIGtleS4gUGluIHRoZSByZWplY3Qgc2lkZVxuK1x0IyBvZiB0aGF0IHJ1bGU7IHRoZSBrZXllZCBpbnN0YWxscyBhYm92ZSBjb3ZlciB0aGUgYWNjZXB0IHNpZGUuXG4rXHQjIFZlcmlmeSB0aGUgcmVmdXNhbCBpcyBFSU5WQUwgKG1pc3Npbmcga2V5KSwgbm90IGEgcGFyc2UgZXJyb3IuXG4rXHRlcnI9JChvdnNfc2J4IFwiJHRcIiBweXRob24zICRvdnNfYmFzZS9vdnMtZHBjdGwucHkgYWRkLWZsb3cgc2N0cDYgXFxcbitcdCAgICBcImluX3BvcnQoMSksZXRoKCksJHY2XCIgJzInIDJcdTAwM2VcdTAwMjYxIFx1MDAzZS9kZXYvbnVsbCkgXFxcbitcdCAgICBcdTAwMjZcdTAwMjYgeyBpbmZvIFwia2V5bGVzcyBTQ1RQIGZsb3cgc2hvdWxkIGJlIHJlZnVzZWRcIlxuK1x0ICAgICAgICAgcmV0dXJuIDE7IH1cbitcdGVjaG8gXCIkZXJyXCIgfCBncmVwIC1xIFwiKDIyLFwiIHx8IHtcbitcdFx0aW5mbyBcImtleWxlc3MgU0NUUCBmbG93IHJlZnVzZWQgZm9yIHdyb25nIHJlYXNvbjogJGVyclwiXG4rXHRcdHJldHVybiAxXG4rXHR9XG4rXG4rXHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFwiJHRcIiBcInNlcnZlclwiIFxcXG4rXHQgICAgc29jYXQgLXUgLXQgMSBTQ1RQNi1MSVNURU46NDQ0Myxmb3JrIFxcXG4rXHQgICAgT1BFTjpcIiRyeGZpbGVcIixjcmVhdCxhcHBlbmRcbitcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxuK1xuK1x0aW5mbyBcInZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIHdpdGggcG9ydC1rZXllZCBmbG93c1wiXG4rXHRvdnNfc2J4IFwiJHRcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxuK1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcIlNDVFA2LUNPTk5FQ1Q6W2ZkMDA6OjJdOjQ0NDNcIiBcdTAwM2MvZGV2L251bGwgXFxcbitcdCAgICB8fCByZXR1cm4gMVxuK1xuK1x0aW5mbyBcInZlcmlmeSBTQ1RQIERBVEEgY2h1bmsgY3Jvc3NlcyB0aGUgZGF0YXBhdGhcIlxuK1x0b3ZzX3NieCBcIiR0XCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbitcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXCJTQ1RQNi1DT05ORUNUOltmZDAwOjoyXTo0NDQzXCIgXFxcbitcdCAgICBcdTAwM2NcdTAwM2NcdTAwM2MgXCIkcGF5bG9hZFwiIHx8IHJldHVybiAxXG4rXHRvdnNfd2FpdCBncmVwIC1xIFwiJHBheWxvYWRcIiBcIiRyeGZpbGVcIiBcXFxuK1x0ICAgIHx8IHsgaW5mbyBcInNlcnZlciBkaWQgbm90IHJlY2VpdmUgU0NUUCBEQVRBIHBheWxvYWRcIlxuK1x0ICAgICAgICAgcmV0dXJuIDE7IH1cbitcbitcdG92c19kZWxfZmxvd3MgXCIkdFwiIHNjdHA2XG4rXG4rXHRpbmZvIFwidmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMgd2l0aG91dCBmbG93c1wiXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA2IFxcXG4rXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHg4NmRkKSxpcHY2KHByb3RvPTU4KSxpY21wdjYoKScgXFxcbitcdCAgICAnMicgfHwgcmV0dXJuIDFcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDYgXFxcbitcdCAgICAnaW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDg2ZGQpLGlwdjYocHJvdG89NTgpLGljbXB2NigpJyBcXFxuK1x0ICAgICcxJyB8fCByZXR1cm4gMVxuK1xuK1x0b3ZzX3NieCBcIiR0XCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbitcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXCJTQ1RQNi1DT05ORUNUOltmZDAwOjoyXTo0NDQzXCIgXHUwMDNjL2Rldi9udWxsIFxcXG4rXHQgICAgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFxcXG4rXHQgICAgXHUwMDI2XHUwMDI2IHsgaW5mbyBcImNvbm5lY3Rpb24gc2hvdWxkIGZhaWwgd2l0aG91dCBmbG93c1wiXG4rXHQgICAgICAgICByZXR1cm4gMTsgfVxuK1xuK1x0aW5mbyBcInJlaW5zdGFsbCBmbG93cyBhbmQgdmVyaWZ5IHJlY292ZXJ5XCJcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDYgXFxcbitcdCAgICBcImluX3BvcnQoMSksZXRoKCksJHY2LHNjdHAoZHN0PTQ0NDMpXCIgXFxcbitcdCAgICAnMicgfHwgcmV0dXJuIDFcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDYgXFxcbitcdCAgICBcImluX3BvcnQoMiksZXRoKCksJHY2LHNjdHAoc3JjPTQ0NDMpXCIgXFxcbitcdCAgICAnMScgfHwgcmV0dXJuIDFcbitcbitcdG92c19zYnggXCIkdFwiIGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXG4rXHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwiU0NUUDYtQ09OTkVDVDpbZmQwMDo6Ml06NDQ0M1wiIFx1MDAzYy9kZXYvbnVsbCBcXFxuK1x0ICAgIHx8IHJldHVybiAxXG4rXG4rXHRyZXR1cm4gMFxuK31cbitcbiAjIHBzYW1wbGUgdGVzdFxuICMgLSB1c2UgcHNhbXBsZSB0byBvYnNlcnZlIHBhY2tldHNcbiB0ZXN0X3BzYW1wbGUoKSB7XG5AQCAtMTA5MSw2ICsxMjAwLDk4IEBAIHRlc3RfbmF0X2Nvbm5lY3RfdjQgKCkge1xuIFx0cmV0dXJuIDBcbiB9XG4gXG4rIyBzY3RwX25hdF9jb25uZWN0X3Y0IHRlc3RcbisjICAtIFNDVFAgYXNzb2NpYXRpb24gY3Jvc3NlcyBhIGN0KGNvbW1pdCxuYXQoZHN0PWlwOnBvcnQpKSBETkFUXG4rIyAgLSBwb3N0LXJlY2lyYyBmbG93cyBtYXRjaCB0aGUgdHJhbnNsYXRlZCBhZGRyZXNzIGFuZCBwb3J0LCBzbyB0aGVcbisjICAgIFNDVFAgYnJhbmNoIG9mIHRoZSBwb3N0LU5BVCBmbG93IGtleSB1cGRhdGUgaXMgbG9hZC1iZWFyaW5nXG4rdGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0ICgpIHtcbitcdGxvY2FsIHQ9XCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcIlxuK1x0bG9jYWwgcGF5bG9hZD1cIlNDVFBfTkFUX0RBVEFfT0tcIlxuK1x0bG9jYWwgcnhmaWxlPVwiJHtvdnNfYmFzZX0vJHt0fS9zY3RwLXJ4LnR4dFwiXG4rXG4rXHRtb2Rwcm9iZSAtcSBzY3RwIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIFwiJGtzZnRfc2tpcFwiXG4rXHRzb2NhdCAtViAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXEgXCJkZWZpbmUgV0lUSF9TQ1RQXCIgfHwgcmV0dXJuIFwiJGtzZnRfc2tpcFwiXG4rXHQjIFNDVFAgY29ubnRyYWNrIGlzIGNvbXBpbGVkIGludG8gbmZfY29ubnRyYWNrLmtvLCBzbyBjaGVjayB0aGF0XG4rXHQjIGxvYWRpbmcgaXQgYWN0dWFsbHkgZXhwb3NlZCB0aGUgU0NUUCBjb25udHJhY2sgc3lzY3Rscy5cbitcdG1vZHByb2JlIC1xIG5mX2Nvbm50cmFjayAyXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcIiRrc2Z0X3NraXBcIlxuK1x0WyAtZSAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X2VzdGFibGlzaGVkIF0gXFxcbitcdCAgICB8fCB7IGluZm8gXCJubyBTQ1RQIGNvbm50cmFjayBzdXBwb3J0IC0gc2tpcHBpbmdcIlxuK1x0ICAgICAgICAgcmV0dXJuIFwiJGtzZnRfc2tpcFwiOyB9XG4rXG4rXHRzYnhfYWRkIFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCIgfHwgcmV0dXJuICQ/XG4rXG4rXHRvdnNfYWRkX2RwIFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCIgc2N0cG5hdDQgfHwgcmV0dXJuIDFcbitcdGluZm8gXCJjcmVhdGUgbmFtZXNwYWNlc1wiXG4rXHRmb3IgbnMgaW4gY2xpZW50IHNlcnZlcjsgZG9cbitcdFx0b3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcIiBcInNjdHBuYXQ0XCIgXFxcbitcdFx0ICAgIFwiJG5zXCIgXCIke25zOjA6MX0wXCIgXCIke25zOjA6MX0xXCIgfHwgcmV0dXJuIDFcbitcdGRvbmVcbitcbitcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMTAvMjQgZGV2IGMxXG4rXHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBsaW5rIHNldCBjMSB1cFxuK1x0aXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgYWRkciBhZGQgMTcyLjMxLjExMC4yMC8yNCBkZXYgczFcbitcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwXG4rXG4rXHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgMTcyLjMxLjExMC4yMFxuK1xuK1x0IyBDaGVjayBpZiB0aGUgY3QgYW5kIG5hdCBhY3Rpb25zIGNhbiBiZSBjb25maWd1cmVkLlxuK1x0b3ZzX2FkZF9mbG93IFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCIgc2N0cG5hdDQgXFxcbitcdFx0J2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KCknIFxcXG4rXHRcdCdjdChjb21taXQsbmF0KGRzdD0xNzIuMzEuMTEwLjIwOjU1NTUpKSxyZWNpcmMoMHgxKScgXFxcbitcdFx0XHUwMDI2XHUwMDNlIC9kZXYvbnVsbFxuK1x0aWYgWyAkPyA9PSAxIF07IHRoZW5cbitcdFx0aW5mbyBcIm5vIHN1cHBvcnQgZm9yIGN0L25hdCBhY3Rpb25zIC0gc2tpcHBpbmdcIlxuK1x0XHRvdnNfZXhpdF9zaWdcbitcdFx0cmV0dXJuICRrc2Z0X3NraXBcbitcdGZpXG4rXG4rXHRvdnNfZGVsX2Zsb3dzIFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCIgc2N0cG5hdDRcbitcbitcdG92c19hZGRfZmxvdyBcInRlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwiIHNjdHBuYXQ0IFxcXG4rXHRcdCdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCknICcyJyB8fCByZXR1cm4gMVxuK1x0b3ZzX2FkZF9mbG93IFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCIgc2N0cG5hdDQgXFxcbitcdFx0J2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgJzEnIHx8IHJldHVybiAxXG4rXHRvdnNfYWRkX2Zsb3cgXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcIiBzY3RwbmF0NCBcXFxuK1x0XHRcImN0X3N0YXRlKC10cmspLGluX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxcIlxcXG4rXCJpcHY0KGRzdD0xOTIuMTY4LjAuMjApXCIgXFxcbitcdFx0XCJjdChjb21taXQsbmF0KGRzdD0xNzIuMzEuMTEwLjIwOjU1NTUpKSxyZWNpcmMoMHgxKVwiIHx8IHJldHVybiAxXG4rXHRvdnNfYWRkX2Zsb3cgXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcIiBzY3RwbmF0NCBcXFxuK1x0XHRcImN0X3N0YXRlKC10cmspLGluX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KClcIiBcXFxuK1x0XHRcImN0KGNvbW1pdCxuYXQpLHJlY2lyYygweDIpXCIgfHwgcmV0dXJuIDFcbitcbitcdG92c19hZGRfZmxvdyBcInRlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwiIHNjdHBuYXQ0IFxcXG4rXHRcdFwicmVjaXJjX2lkKDB4MSksY3Rfc3RhdGUoK3Ryay1pbnYpLGluX3BvcnQoMSksZXRoKCksXCJcXFxuK1wiZXRoX3R5cGUoMHgwODAwKSxpcHY0KGRzdD0xNzIuMzEuMTEwLjIwLHByb3RvPTEzMiksXCJcXFxuK1wic2N0cChkc3Q9NTU1NSlcIiBcXFxuK1x0XHRcIjJcIiB8fCByZXR1cm4gMVxuK1x0b3ZzX2FkZF9mbG93IFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCIgc2N0cG5hdDQgXFxcbitcdFx0XCJyZWNpcmNfaWQoMHgyKSxjdF9zdGF0ZSgrdHJrLWludiksaW5fcG9ydCgyKSxldGgoKSxcIlxcXG4rXCJldGhfdHlwZSgweDA4MDApLGlwdjQoc3JjPTE5Mi4xNjguMC4yMCxwcm90bz0xMzIpLFwiXFxcbitcInNjdHAoc3JjPTQ0NDMpXCIgXFxcbitcdFx0XCIxXCIgfHwgcmV0dXJuIDFcbitcbitcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcIiBcInNlcnZlclwiIFxcXG4rXHRcdHNvY2F0IC11IC10IDEgU0NUUDQtTElTVEVOOjU1NTUsZm9yayBcXFxuK1x0XHRPUEVOOlwiJHJ4ZmlsZVwiLGNyZWF0LGFwcGVuZFxuK1x0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA1NTU1IHx8IHJldHVybiAxXG4rXG4rXHRpbmZvIFwidmVyaWZ5IFNDVFAgYXNzb2NpYXRpb24gYWNyb3NzIE5BVFwiXG4rXHRvdnNfc2J4IFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbitcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXCJTQ1RQNC1DT05ORUNUOjE5Mi4xNjguMC4yMDo0NDQzXCIgXFxcbitcdCAgICBcdTAwM2MvZGV2L251bGwgfHwgcmV0dXJuIDFcbitcbitcdGluZm8gXCJ2ZXJpZnkgU0NUUCBEQVRBIGNodW5rIGNyb3NzZXMgTkFUXCJcbitcdG92c19zYnggXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxuK1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcIlNDVFA0LUNPTk5FQ1Q6MTkyLjE2OC4wLjIwOjQ0NDNcIiBcXFxuK1x0ICAgIFx1MDAzY1x1MDAzY1x1MDAzYyBcIiRwYXlsb2FkXCIgfHwgcmV0dXJuIDFcbitcdG92c193YWl0IGdyZXAgLXEgXCIkcGF5bG9hZFwiIFwiJHJ4ZmlsZVwiIFxcXG4rXHQgICAgfHwgeyBpbmZvIFwic2VydmVyIGRpZCBub3QgcmVjZWl2ZSBTQ1RQIERBVEEgcGF5bG9hZFwiXG4rXHQgICAgICAgICByZXR1cm4gMTsgfVxuK1xuK1x0aW5mbyBcImRvbmUuLi5cIlxuK1x0cmV0dXJuIDBcbit9XG4rXG4gIyBuYXRfcmVsYXRlZF92NCB0ZXN0XG4gIyAgLSBjbGllbnQtXHUwMDNlc2VydmVyIGlwIHBhY2tldHMgZ28gdmlhIFNOQVRcbiAjICAtIGNsaWVudCBzb2xpY2l0cyBJQ01QIGRlc3RpbmF0aW9uIHVucmVhY2hhYmxlIHBhY2tldCBmcm9tIHNlcnZlclxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6NDguMzQzMjg5MTgxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjIyMzIxMzc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIGRpZmYgdG91Y2hpbmcgdHdvIGZpbGVzOiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL2NvbmZpZ2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hgLiBUaGUgZmlsZSBwYXRocyBpbW1lZGlhdGVseSBwb2ludCB0b3dhcmRzIHNlbGYtdGVzdHMgd2l0aGluIGEgdXNlci1zcGFjZSBlbnZpcm9ubWVudCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoLiBJIG5lZWQgdG8gdHJpYWdlIHRoaXMgYmFzZWQgb24gd2hldGhlciBpdCBhZmZlY3RzIHRoZSBrZXJuZWwgaXRzZWxmLlxuXG5JJ20gY29uc3VsdGluZyB0aGUgXCJXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2VcIiBjcml0ZXJpYS4gU3BlY2lmaWNhbGx5LCB0aGUgcnVsZXMgc3RhdGUgdGhhdCBjaGFuZ2VzIHRvIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIGxpa2UgYHRvb2xzL2AsIGBzYW1wbGVzL2AsIG9yIGBzY3JpcHRzL2AsIGFyZSBub3Qgd29ydGggZnV6emluZyBpZiB0aGV5ICpkb24ndCogYWZmZWN0IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuXG5JJ3ZlIHZlcmlmaWVkIHRoYXQgdGhlIGRpZmYsIGFzIHByZXNlbnRlZCwgb25seSBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9gIGRpcmVjdG9yeS4gTm8gb3RoZXIgZmlsZXMgYXJlIHRvdWNoZWQsIGFuZCBJIGNhbiBjb25maXJtIHRoaXMgZWl0aGVyIHRocm91Z2ggYSBxdWljayBgZ2l0IGxvZyAtMWAgY2hlY2ssIG9yLCBpbiB0aGlzIGNhc2UsIGJ5IHZpcnR1ZSBvZiB0aGUgcHJvdmlkZWQgcHJvbXB0LlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBtZWFucyB0aGF0IHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB1c2VyLXNwYWNlIHRlc3QgY29kZS4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IGNvcmUga2VybmVsIGNvbXBvbmVudHMgb3IgdGhlaXIgY29tcGlsZWQgaW1hZ2VzLCBiYXNlZCBvbiB0aGUgZGlmZi4gU28gSSdtIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9ucyBhcmUgc3RyYWlnaHRmb3J3YXJkOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AgbGlzdHMgd2lsbCBiZSBlbXB0eSAob3IgbnVsbCksIGFzIHRoaXMgY2hhbmdlIGhhcyBubyBpbXBhY3Qgb24gcmVsZXZhbnQga2VybmVsIHN5bWJvbHMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gc2VsZnRlc3RzIHNjcmlwdHMgYW5kIGNvbmZpZyBmaWxlcyBpbiBhIHVzZXItc3BhY2UgdGVzdGluZyBkaXJlY3RvcnksIHRoZXJlYnkgbm90IGFmZmVjdGluZyB0aGUga2VybmVsJ3MgY29tcGlsYXRpb24gb3IgbW9kdWxlcy5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NTgsIk91dHB1dFRva2VucyI6NzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzowNDo1NC41NjY1MDUzMjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC8pLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKSwgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6NTQuNTY2NTM3MDc1WiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8j9gx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 13:02:51 +0000 UTC FinishedAt: 2026-09-09 13:04:55 +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+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoLyksIHdoaWNoIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NzllMTU3OGE5NDlkYTU4ZjYyYjU0Zjc2MDE1MTQ1NjMwZTM1ZThiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMzowNDo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL2NvbmZpZ1xuaW5kZXggYTgyNWUwYjVjODhlNS4uZmE5MDQ3NWRjMzg4ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9jb25maWdcbkBAIC03LDYgJiM0Mzs3LDcgQEAgQ09ORklHX05FVF9JUEdSRT1tXG4gQ09ORklHX05FVF9JUEdSRV9ERU1VWD1tXG4gQ09ORklHX05GX0NPTk5UUkFDSz1tXG4gQ09ORklHX05GX0NPTk5UUkFDS19PVlM9eVxuJiM0MztDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD15XG4gQ09ORklHX09QRU5WU1dJVENIPW1cbiBDT05GSUdfUFNBTVBMRT1tXG4gQ09ORklHX1ZFVEg9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuaW5kZXggYTMxZjdmYjY4ODJkYy4uMTM4YTcwNWZjMzU5ZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXG5AQCAtMzQsNiAmIzQzOzM0LDggQEAgdGVzdHM9XCYjMzQ7XG4gXHR0cnVuY1x0XHRcdFx0XHR0cnVuYzogb3V0cHV0IHRydW5jYXRpb25cbiBcdGljbXB2Nlx0XHRcdFx0XHRpY21wdjY6IElDTVB2NiBlY2hvIHR5cGUgbWF0Y2hcbiBcdHNjdHBfY29ubmVjdF92NFx0XHRcdFx0c2N0cDogU0NUUCBmbG93IGtleSBtYXRjaGluZ1xuJiM0MztcdHNjdHBfY29ubmVjdF92Nlx0XHRcdHNjdHA2OiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nIG92ZXIgSVB2NlxuJiM0MztcdHNjdHBfbmF0X2Nvbm5lY3RfdjRcdFx0c2N0cG5hdDQ6IFNDVFAgTkFUIHdpdGggcG9ydCB0cmFuc2xhdGlvblxuIFx0cHNhbXBsZVx0XHRcdFx0XHRwc2FtcGxlOiBTYW1wbGluZyBwYWNrZXRzIHdpdGggcHNhbXBsZVwmIzM0O1xuIFxuIGluZm8oKSB7XG5AQCAtNzAwLDYgJiM0Mzs3MDIsMTEzIEBAIHRlc3Rfc2N0cF9jb25uZWN0X3Y0KCkge1xuIFx0cmV0dXJuIDBcbiB9XG4gXG4mIzQzOyMgc2N0cF9jb25uZWN0X3Y2IHRlc3RcbiYjNDM7IyAtIHNjdHAoZHN0PTQ0NDMpIG1hdGNoZXMgY2xpZW50LXRvLXNlcnZlciBJTklUXG4mIzQzOyMgLSBzY3RwKHNyYz00NDQzKSBtYXRjaGVzIHNlcnZlci10by1jbGllbnQgSU5JVC1BQ0tcbiYjNDM7IyAtIGljbXB2NiBOUy9OQSBmbG93cyBmb3J3YXJkIG5laWdoYm91ciBkaXNjb3ZlcnlcbiYjNDM7IyAtIHJlbW92ZSBmbG93cyBhbmQgdmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMsIHJlaW5zdGFsbCBhbmQgcmVjb3ZlclxuJiM0Mzt0ZXN0X3NjdHBfY29ubmVjdF92NigpIHtcbiYjNDM7XHRsb2NhbCB0PVwmIzM0O3Rlc3Rfc2N0cF9jb25uZWN0X3Y2XCYjMzQ7XG4mIzQzO1x0bG9jYWwgdjY9XCYjMzQ7ZXRoX3R5cGUoMHg4NmRkKSxpcHY2KHByb3RvPTEzMilcJiMzNDtcbiYjNDM7XHRsb2NhbCBwYXlsb2FkPVwmIzM0O1NDVFA2X0RBVEFfT0tcJiMzNDtcbiYjNDM7XHRsb2NhbCByeGZpbGU9XCYjMzQ7JHtvdnNfYmFzZX0vJHt0fS9zY3RwLXJ4LnR4dFwmIzM0O1xuJiM0MztcbiYjNDM7XHRtb2Rwcm9iZSAtcSBzY3RwIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7XHRzb2NhdCAtViAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXEgXCYjMzQ7ZGVmaW5lIFdJVEhfU0NUUFwmIzM0OyB8fCByZXR1cm4gXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztcdFsgLWUgL3Byb2Mvc3lzL25ldC9pcHY2IF0gfHwgcmV0dXJuIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7XG4mIzQzO1x0c2J4X2FkZCBcJiMzNDskdFwmIzM0OyB8fCByZXR1cm4gJD9cbiYjNDM7XHRvdnNfYWRkX2RwIFwmIzM0OyR0XCYjMzQ7IHNjdHA2IHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdGluZm8gXCYjMzQ7Y3JlYXRlIG5hbWVzcGFjZXNcJiMzNDtcbiYjNDM7XHRmb3IgbnMgaW4gY2xpZW50IHNlcnZlcjsgZG9cbiYjNDM7XHRcdG92c19hZGRfbmV0bnNfYW5kX3ZldGhzIFwmIzM0OyR0XCYjMzQ7IFwmIzM0O3NjdHA2XCYjMzQ7IFwmIzM0OyRuc1wmIzM0OyBcXFxuJiM0MztcdFx0ICAgIFwmIzM0OyR7bnM6MDoxfTBcJiMzNDsgXCYjMzQ7JHtuczowOjF9MVwmIzM0OyB8fCByZXR1cm4gMVxuJiM0MztcdGRvbmVcbiYjNDM7XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgYWRkciBhZGQgZmQwMDo6MS82NCBkZXYgYzEgbm9kYWRcbiYjNDM7XHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBsaW5rIHNldCBjMSB1cFxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGFkZHIgYWRkIGZkMDA6OjIvNjQgZGV2IHMxIG5vZGFkXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgbGluayBzZXQgczEgdXBcbiYjNDM7XG4mIzQzO1x0IyBOUy9OQSBmb3J3YXJkaW5nXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA2IFxcXG4mIzQzO1x0ICAgICYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDg2ZGQpLGlwdjYocHJvdG89NTgpLGljbXB2NigpJiMzOTsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDYgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz01OCksaWNtcHY2KCkmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzEmIzM5OyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHQjIFNDVFAgcG9ydCBtYXRjaGluZzogZHN0IGZvciByZXF1ZXN0LCBzcmMgZm9yIHJlcGx5XG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA2IFxcXG4mIzQzO1x0ICAgIFwmIzM0O2luX3BvcnQoMSksZXRoKCksJHY2LHNjdHAoZHN0PTQ0NDMpXCYjMzQ7IFxcXG4mIzQzO1x0ICAgICYjMzk7MiYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0OyR0XCYjMzQ7IHNjdHA2IFxcXG4mIzQzO1x0ICAgIFwmIzM0O2luX3BvcnQoMiksZXRoKCksJHY2LHNjdHAoc3JjPTQ0NDMpXCYjMzQ7IFxcXG4mIzQzO1x0ICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdCMgQSBrZXlsZXNzIGlwdjYocHJvdG89MTMyKSBpbnN0YWxsIG11c3QgYmUgcmVmdXNlZCAoRUlOVkFMKTpcbiYjNDM7XHQjIG1hdGNoX3ZhbGlkYXRlKCkgcmVxdWlyZXMgdGhlIHNjdHAoKSBrZXkuIFBpbiB0aGUgcmVqZWN0IHNpZGVcbiYjNDM7XHQjIG9mIHRoYXQgcnVsZTsgdGhlIGtleWVkIGluc3RhbGxzIGFib3ZlIGNvdmVyIHRoZSBhY2NlcHQgc2lkZS5cbiYjNDM7XHQjIFZlcmlmeSB0aGUgcmVmdXNhbCBpcyBFSU5WQUwgKG1pc3Npbmcga2V5KSwgbm90IGEgcGFyc2UgZXJyb3IuXG4mIzQzO1x0ZXJyPSQob3ZzX3NieCBcJiMzNDskdFwmIzM0OyBweXRob24zICRvdnNfYmFzZS9vdnMtZHBjdGwucHkgYWRkLWZsb3cgc2N0cDYgXFxcbiYjNDM7XHQgICAgXCYjMzQ7aW5fcG9ydCgxKSxldGgoKSwkdjZcJiMzNDsgJiMzOTsyJiMzOTsgMlx1MDAzZVx1MDAyNjEgXHUwMDNlL2Rldi9udWxsKSBcXFxuJiM0MztcdCAgICBcdTAwMjZcdTAwMjYgeyBpbmZvIFwmIzM0O2tleWxlc3MgU0NUUCBmbG93IHNob3VsZCBiZSByZWZ1c2VkXCYjMzQ7XG4mIzQzO1x0ICAgICAgICAgcmV0dXJuIDE7IH1cbiYjNDM7XHRlY2hvIFwmIzM0OyRlcnJcJiMzNDsgfCBncmVwIC1xIFwmIzM0OygyMixcJiMzNDsgfHwge1xuJiM0MztcdFx0aW5mbyBcJiMzNDtrZXlsZXNzIFNDVFAgZmxvdyByZWZ1c2VkIGZvciB3cm9uZyByZWFzb246ICRlcnJcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFwmIzM0OyR0XCYjMzQ7IFwmIzM0O3NlcnZlclwmIzM0OyBcXFxuJiM0MztcdCAgICBzb2NhdCAtdSAtdCAxIFNDVFA2LUxJU1RFTjo0NDQzLGZvcmsgXFxcbiYjNDM7XHQgICAgT1BFTjpcJiMzNDskcnhmaWxlXCYjMzQ7LGNyZWF0LGFwcGVuZFxuJiM0MztcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRpbmZvIFwmIzM0O3ZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIHdpdGggcG9ydC1rZXllZCBmbG93c1wmIzM0O1xuJiM0MztcdG92c19zYnggXCYjMzQ7JHRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA2LUNPTk5FQ1Q6W2ZkMDA6OjJdOjQ0NDNcJiMzNDsgXHUwMDNjL2Rldi9udWxsIFxcXG4mIzQzO1x0ICAgIHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdGluZm8gXCYjMzQ7dmVyaWZ5IFNDVFAgREFUQSBjaHVuayBjcm9zc2VzIHRoZSBkYXRhcGF0aFwmIzM0O1xuJiM0MztcdG92c19zYnggXCYjMzQ7JHRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA2LUNPTk5FQ1Q6W2ZkMDA6OjJdOjQ0NDNcJiMzNDsgXFxcbiYjNDM7XHQgICAgXHUwMDNjXHUwMDNjXHUwMDNjIFwmIzM0OyRwYXlsb2FkXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO1x0b3ZzX3dhaXQgZ3JlcCAtcSBcJiMzNDskcGF5bG9hZFwmIzM0OyBcJiMzNDskcnhmaWxlXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIHx8IHsgaW5mbyBcJiMzNDtzZXJ2ZXIgZGlkIG5vdCByZWNlaXZlIFNDVFAgREFUQSBwYXlsb2FkXCYjMzQ7XG4mIzQzO1x0ICAgICAgICAgcmV0dXJuIDE7IH1cbiYjNDM7XG4mIzQzO1x0b3ZzX2RlbF9mbG93cyBcJiMzNDskdFwmIzM0OyBzY3RwNlxuJiM0MztcbiYjNDM7XHRpbmZvIFwmIzM0O3ZlcmlmeSBjb25uZWN0aW9uIGZhaWxzIHdpdGhvdXQgZmxvd3NcJiMzNDtcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDYgXFxcbiYjNDM7XHQgICAgJiMzOTtpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz01OCksaWNtcHY2KCkmIzM5OyBcXFxuJiM0MztcdCAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMVxuJiM0MztcdG92c19hZGRfZmxvdyBcJiMzNDskdFwmIzM0OyBzY3RwNiBcXFxuJiM0MztcdCAgICAmIzM5O2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHg4NmRkKSxpcHY2KHByb3RvPTU4KSxpY21wdjYoKSYjMzk7IFxcXG4mIzQzO1x0ICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdG92c19zYnggXCYjMzQ7JHRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA2LUNPTk5FQ1Q6W2ZkMDA6OjJdOjQ0NDNcJiMzNDsgXHUwMDNjL2Rldi9udWxsIFxcXG4mIzQzO1x0ICAgIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcXFxuJiM0MztcdCAgICBcdTAwMjZcdTAwMjYgeyBpbmZvIFwmIzM0O2Nvbm5lY3Rpb24gc2hvdWxkIGZhaWwgd2l0aG91dCBmbG93c1wmIzM0O1xuJiM0MztcdCAgICAgICAgIHJldHVybiAxOyB9XG4mIzQzO1xuJiM0MztcdGluZm8gXCYjMzQ7cmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnlcJiMzNDtcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDYgXFxcbiYjNDM7XHQgICAgXCYjMzQ7aW5fcG9ydCgxKSxldGgoKSwkdjYsc2N0cChkc3Q9NDQ0MylcJiMzNDsgXFxcbiYjNDM7XHQgICAgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7JHRcJiMzNDsgc2N0cDYgXFxcbiYjNDM7XHQgICAgXCYjMzQ7aW5fcG9ydCgyKSxldGgoKSwkdjYsc2N0cChzcmM9NDQ0MylcJiMzNDsgXFxcbiYjNDM7XHQgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0b3ZzX3NieCBcJiMzNDskdFwmIzM0OyBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxuJiM0MztcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXCYjMzQ7U0NUUDYtQ09OTkVDVDpbZmQwMDo6Ml06NDQ0M1wmIzM0OyBcdTAwM2MvZGV2L251bGwgXFxcbiYjNDM7XHQgICAgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiAjIHBzYW1wbGUgdGVzdFxuICMgLSB1c2UgcHNhbXBsZSB0byBvYnNlcnZlIHBhY2tldHNcbiB0ZXN0X3BzYW1wbGUoKSB7XG5AQCAtMTA5MSw2ICYjNDM7MTIwMCw5OCBAQCB0ZXN0X25hdF9jb25uZWN0X3Y0ICgpIHtcbiBcdHJldHVybiAwXG4gfVxuIFxuJiM0MzsjIHNjdHBfbmF0X2Nvbm5lY3RfdjQgdGVzdFxuJiM0MzsjICAtIFNDVFAgYXNzb2NpYXRpb24gY3Jvc3NlcyBhIGN0KGNvbW1pdCxuYXQoZHN0PWlwOnBvcnQpKSBETkFUXG4mIzQzOyMgIC0gcG9zdC1yZWNpcmMgZmxvd3MgbWF0Y2ggdGhlIHRyYW5zbGF0ZWQgYWRkcmVzcyBhbmQgcG9ydCwgc28gdGhlXG4mIzQzOyMgICAgU0NUUCBicmFuY2ggb2YgdGhlIHBvc3QtTkFUIGZsb3cga2V5IHVwZGF0ZSBpcyBsb2FkLWJlYXJpbmdcbiYjNDM7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0ICgpIHtcbiYjNDM7XHRsb2NhbCB0PVwmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwmIzM0O1xuJiM0MztcdGxvY2FsIHBheWxvYWQ9XCYjMzQ7U0NUUF9OQVRfREFUQV9PS1wmIzM0O1xuJiM0MztcdGxvY2FsIHJ4ZmlsZT1cJiMzNDske292c19iYXNlfS8ke3R9L3NjdHAtcngudHh0XCYjMzQ7XG4mIzQzO1xuJiM0MztcdG1vZHByb2JlIC1xIHNjdHAgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztcdHNvY2F0IC1WIDJcdTAwM2VcdTAwMjYxIHwgZ3JlcCAtcSBcJiMzNDtkZWZpbmUgV0lUSF9TQ1RQXCYjMzQ7IHx8IHJldHVybiBcJiMzNDska3NmdF9za2lwXCYjMzQ7XG4mIzQzO1x0IyBTQ1RQIGNvbm50cmFjayBpcyBjb21waWxlZCBpbnRvIG5mX2Nvbm50cmFjay5rbywgc28gY2hlY2sgdGhhdFxuJiM0MztcdCMgbG9hZGluZyBpdCBhY3R1YWxseSBleHBvc2VkIHRoZSBTQ1RQIGNvbm50cmFjayBzeXNjdGxzLlxuJiM0MztcdG1vZHByb2JlIC1xIG5mX2Nvbm50cmFjayAyXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcJiMzNDska3NmdF9za2lwXCYjMzQ7XG4mIzQzO1x0WyAtZSAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X2VzdGFibGlzaGVkIF0gXFxcbiYjNDM7XHQgICAgfHwgeyBpbmZvIFwmIzM0O25vIFNDVFAgY29ubnRyYWNrIHN1cHBvcnQgLSBza2lwcGluZ1wmIzM0O1xuJiM0MztcdCAgICAgICAgIHJldHVybiBcJiMzNDska3NmdF9za2lwXCYjMzQ7OyB9XG4mIzQzO1xuJiM0MztcdHNieF9hZGQgXCYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCYjMzQ7IHx8IHJldHVybiAkP1xuJiM0MztcbiYjNDM7XHRvdnNfYWRkX2RwIFwmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwmIzM0OyBzY3RwbmF0NCB8fCByZXR1cm4gMVxuJiM0MztcdGluZm8gXCYjMzQ7Y3JlYXRlIG5hbWVzcGFjZXNcJiMzNDtcbiYjNDM7XHRmb3IgbnMgaW4gY2xpZW50IHNlcnZlcjsgZG9cbiYjNDM7XHRcdG92c19hZGRfbmV0bnNfYW5kX3ZldGhzIFwmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwmIzM0OyBcJiMzNDtzY3RwbmF0NFwmIzM0OyBcXFxuJiM0MztcdFx0ICAgIFwmIzM0OyRuc1wmIzM0OyBcJiMzNDske25zOjA6MX0wXCYjMzQ7IFwmIzM0OyR7bnM6MDoxfTFcJiMzNDsgfHwgcmV0dXJuIDFcbiYjNDM7XHRkb25lXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMTAvMjQgZGV2IGMxXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgbGluayBzZXQgYzEgdXBcbiYjNDM7XHRpcCBuZXRucyBleGVjIHNlcnZlciBpcCBhZGRyIGFkZCAxNzIuMzEuMTEwLjIwLzI0IGRldiBzMVxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIHJvdXRlIGFkZCBkZWZhdWx0IHZpYSAxNzIuMzEuMTEwLjIwXG4mIzQzO1xuJiM0MztcdCMgQ2hlY2sgaWYgdGhlIGN0IGFuZCBuYXQgYWN0aW9ucyBjYW4gYmUgY29uZmlndXJlZC5cbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCYjMzQ7IHNjdHBuYXQ0IFxcXG4mIzQzO1x0XHQmIzM5O2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KCkmIzM5OyBcXFxuJiM0MztcdFx0JiMzOTtjdChjb21taXQsbmF0KGRzdD0xNzIuMzEuMTEwLjIwOjU1NTUpKSxyZWNpcmMoMHgxKSYjMzk7IFxcXG4mIzQzO1x0XHRcdTAwMjZcdTAwM2UgL2Rldi9udWxsXG4mIzQzO1x0aWYgWyAkPyA9PSAxIF07IHRoZW5cbiYjNDM7XHRcdGluZm8gXCYjMzQ7bm8gc3VwcG9ydCBmb3IgY3QvbmF0IGFjdGlvbnMgLSBza2lwcGluZ1wmIzM0O1xuJiM0MztcdFx0b3ZzX2V4aXRfc2lnXG4mIzQzO1x0XHRyZXR1cm4gJGtzZnRfc2tpcFxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdG92c19kZWxfZmxvd3MgXCYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCYjMzQ7IHNjdHBuYXQ0XG4mIzQzO1xuJiM0MztcdG92c19hZGRfZmxvdyBcJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcJiMzNDsgc2N0cG5hdDQgXFxcbiYjNDM7XHRcdCYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgJiMzOTsyJiMzOTsgfHwgcmV0dXJuIDFcbiYjNDM7XHRvdnNfYWRkX2Zsb3cgXCYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCYjMzQ7IHNjdHBuYXQ0IFxcXG4mIzQzO1x0XHQmIzM5O2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKSYjMzk7ICYjMzk7MSYjMzk7IHx8IHJldHVybiAxXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwmIzM0OyBzY3RwbmF0NCBcXFxuJiM0MztcdFx0XCYjMzQ7Y3Rfc3RhdGUoLXRyayksaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLFwmIzM0O1xcXG4mIzQzO1wmIzM0O2lwdjQoZHN0PTE5Mi4xNjguMC4yMClcJiMzNDsgXFxcbiYjNDM7XHRcdFwmIzM0O2N0KGNvbW1pdCxuYXQoZHN0PTE3Mi4zMS4xMTAuMjA6NTU1NSkpLHJlY2lyYygweDEpXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwmIzM0OyBzY3RwbmF0NCBcXFxuJiM0MztcdFx0XCYjMzQ7Y3Rfc3RhdGUoLXRyayksaW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQoKVwmIzM0OyBcXFxuJiM0MztcdFx0XCYjMzQ7Y3QoY29tbWl0LG5hdCkscmVjaXJjKDB4MilcJiMzNDsgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwmIzM0OyBzY3RwbmF0NCBcXFxuJiM0MztcdFx0XCYjMzQ7cmVjaXJjX2lkKDB4MSksY3Rfc3RhdGUoJiM0Mzt0cmstaW52KSxpbl9wb3J0KDEpLGV0aCgpLFwmIzM0O1xcXG4mIzQzO1wmIzM0O2V0aF90eXBlKDB4MDgwMCksaXB2NChkc3Q9MTcyLjMxLjExMC4yMCxwcm90bz0xMzIpLFwmIzM0O1xcXG4mIzQzO1wmIzM0O3NjdHAoZHN0PTU1NTUpXCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDsyXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO1x0b3ZzX2FkZF9mbG93IFwmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwmIzM0OyBzY3RwbmF0NCBcXFxuJiM0MztcdFx0XCYjMzQ7cmVjaXJjX2lkKDB4MiksY3Rfc3RhdGUoJiM0Mzt0cmstaW52KSxpbl9wb3J0KDIpLGV0aCgpLFwmIzM0O1xcXG4mIzQzO1wmIzM0O2V0aF90eXBlKDB4MDgwMCksaXB2NChzcmM9MTkyLjE2OC4wLjIwLHByb3RvPTEzMiksXCYjMzQ7XFxcbiYjNDM7XCYjMzQ7c2N0cChzcmM9NDQ0MylcJiMzNDsgXFxcbiYjNDM7XHRcdFwmIzM0OzFcJiMzNDsgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0b3ZzX25ldG5zX3NwYXduX2RhZW1vbiBcJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcJiMzNDsgXCYjMzQ7c2VydmVyXCYjMzQ7IFxcXG4mIzQzO1x0XHRzb2NhdCAtdSAtdCAxIFNDVFA0LUxJU1RFTjo1NTU1LGZvcmsgXFxcbiYjNDM7XHRcdE9QRU46XCYjMzQ7JHJ4ZmlsZVwmIzM0OyxjcmVhdCxhcHBlbmRcbiYjNDM7XHRvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDU1NTUgfHwgcmV0dXJuIDFcbiYjNDM7XG4mIzQzO1x0aW5mbyBcJiMzNDt2ZXJpZnkgU0NUUCBhc3NvY2lhdGlvbiBhY3Jvc3MgTkFUXCYjMzQ7XG4mIzQzO1x0b3ZzX3NieCBcJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcJiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbiYjNDM7XHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwmIzM0O1NDVFA0LUNPTk5FQ1Q6MTkyLjE2OC4wLjIwOjQ0NDNcJiMzNDsgXFxcbiYjNDM7XHQgICAgXHUwMDNjL2Rldi9udWxsIHx8IHJldHVybiAxXG4mIzQzO1xuJiM0MztcdGluZm8gXCYjMzQ7dmVyaWZ5IFNDVFAgREFUQSBjaHVuayBjcm9zc2VzIE5BVFwmIzM0O1xuJiM0MztcdG92c19zYnggXCYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXG4mIzQzO1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcJiMzNDtTQ1RQNC1DT05ORUNUOjE5Mi4xNjguMC4yMDo0NDQzXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIFx1MDAzY1x1MDAzY1x1MDAzYyBcJiMzNDskcGF5bG9hZFwmIzM0OyB8fCByZXR1cm4gMVxuJiM0MztcdG92c193YWl0IGdyZXAgLXEgXCYjMzQ7JHBheWxvYWRcJiMzNDsgXCYjMzQ7JHJ4ZmlsZVwmIzM0OyBcXFxuJiM0MztcdCAgICB8fCB7IGluZm8gXCYjMzQ7c2VydmVyIGRpZCBub3QgcmVjZWl2ZSBTQ1RQIERBVEEgcGF5bG9hZFwmIzM0O1xuJiM0MztcdCAgICAgICAgIHJldHVybiAxOyB9XG4mIzQzO1xuJiM0MztcdGluZm8gXCYjMzQ7ZG9uZS4uLlwmIzM0O1xuJiM0MztcdHJldHVybiAwXG4mIzQzO31cbiYjNDM7XG4gIyBuYXRfcmVsYXRlZF92NCB0ZXN0XG4gIyAgLSBjbGllbnQtXHUwMDNlc2VydmVyIGlwIHBhY2tldHMgZ28gdmlhIFNOQVRcbiAjICAtIGNsaWVudCBzb2xpY2l0cyBJQ01QIGRlc3RpbmF0aW9uIHVucmVhY2hhYmxlIHBhY2tldCBmcm9tIHNlcnZlclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC8pLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTc5ZTE1NzhhOTQ5ZGE1OGY2MmI1NGY3NjAxNTE0NTYzMGUzNWU4YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTM6MDQ6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL2NvbmZpZwppbmRleCBhODI1ZTBiNWM4OGU1Li5mYTkwNDc1ZGMzODhkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9jb25maWcKQEAgLTcsNiAmIzQzOzcsNyBAQCBDT05GSUdfTkVUX0lQR1JFPW0KIENPTkZJR19ORVRfSVBHUkVfREVNVVg9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX09WUz15CiYjNDM7Q09ORklHX05GX0NUX1BST1RPX1NDVFA9eQogQ09ORklHX09QRU5WU1dJVENIPW0KIENPTkZJR19QU0FNUExFPW0KIENPTkZJR19WRVRIPXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaAppbmRleCBhMzFmN2ZiNjg4MmRjLi4xMzhhNzA1ZmMzNTllIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoCkBAIC0zNCw2ICYjNDM7MzQsOCBAQCB0ZXN0cz0mIzM0OwogCXRydW5jCQkJCQl0cnVuYzogb3V0cHV0IHRydW5jYXRpb24KIAlpY21wdjYJCQkJCWljbXB2NjogSUNNUHY2IGVjaG8gdHlwZSBtYXRjaAogCXNjdHBfY29ubmVjdF92NAkJCQlzY3RwOiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nCiYjNDM7CXNjdHBfY29ubmVjdF92NgkJCXNjdHA2OiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nIG92ZXIgSVB2NgomIzQzOwlzY3RwX25hdF9jb25uZWN0X3Y0CQlzY3RwbmF0NDogU0NUUCBOQVQgd2l0aCBwb3J0IHRyYW5zbGF0aW9uCiAJcHNhbXBsZQkJCQkJcHNhbXBsZTogU2FtcGxpbmcgcGFja2V0cyB3aXRoIHBzYW1wbGUmIzM0OwogCiBpbmZvKCkgewpAQCAtNzAwLDYgJiM0Mzs3MDIsMTEzIEBAIHRlc3Rfc2N0cF9jb25uZWN0X3Y0KCkgewogCXJldHVybiAwCiB9CiAKJiM0MzsjIHNjdHBfY29ubmVjdF92NiB0ZXN0CiYjNDM7IyAtIHNjdHAoZHN0PTQ0NDMpIG1hdGNoZXMgY2xpZW50LXRvLXNlcnZlciBJTklUCiYjNDM7IyAtIHNjdHAoc3JjPTQ0NDMpIG1hdGNoZXMgc2VydmVyLXRvLWNsaWVudCBJTklULUFDSwomIzQzOyMgLSBpY21wdjYgTlMvTkEgZmxvd3MgZm9yd2FyZCBuZWlnaGJvdXIgZGlzY292ZXJ5CiYjNDM7IyAtIHJlbW92ZSBmbG93cyBhbmQgdmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMsIHJlaW5zdGFsbCBhbmQgcmVjb3ZlcgomIzQzO3Rlc3Rfc2N0cF9jb25uZWN0X3Y2KCkgewomIzQzOwlsb2NhbCB0PSYjMzQ7dGVzdF9zY3RwX2Nvbm5lY3RfdjYmIzM0OwomIzQzOwlsb2NhbCB2Nj0mIzM0O2V0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz0xMzIpJiMzNDsKJiM0MzsJbG9jYWwgcGF5bG9hZD0mIzM0O1NDVFA2X0RBVEFfT0smIzM0OwomIzQzOwlsb2NhbCByeGZpbGU9JiMzNDske292c19iYXNlfS8ke3R9L3NjdHAtcngudHh0JiMzNDsKJiM0MzsKJiM0MzsJbW9kcHJvYmUgLXEgc2N0cCAyJmd0Oy9kZXYvbnVsbCB8fCByZXR1cm4gJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MzsJc29jYXQgLVYgMiZndDsmYW1wOzEgfCBncmVwIC1xICYjMzQ7ZGVmaW5lIFdJVEhfU0NUUCYjMzQ7IHx8IHJldHVybiAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzOwlbIC1lIC9wcm9jL3N5cy9uZXQvaXB2NiBdIHx8IHJldHVybiAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzOwomIzQzOwlzYnhfYWRkICYjMzQ7JHQmIzM0OyB8fCByZXR1cm4gJD8KJiM0MzsJb3ZzX2FkZF9kcCAmIzM0OyR0JiMzNDsgc2N0cDYgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJaW5mbyAmIzM0O2NyZWF0ZSBuYW1lc3BhY2VzJiMzNDsKJiM0MzsJZm9yIG5zIGluIGNsaWVudCBzZXJ2ZXI7IGRvCiYjNDM7CQlvdnNfYWRkX25ldG5zX2FuZF92ZXRocyAmIzM0OyR0JiMzNDsgJiMzNDtzY3RwNiYjMzQ7ICYjMzQ7JG5zJiMzNDsgXAomIzQzOwkJICAgICYjMzQ7JHtuczowOjF9MCYjMzQ7ICYjMzQ7JHtuczowOjF9MSYjMzQ7IHx8IHJldHVybiAxCiYjNDM7CWRvbmUKJiM0MzsKJiM0MzsJaXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgYWRkciBhZGQgZmQwMDo6MS82NCBkZXYgYzEgbm9kYWQKJiM0MzsJaXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgbGluayBzZXQgYzEgdXAKJiM0MzsJaXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgYWRkciBhZGQgZmQwMDo6Mi82NCBkZXYgczEgbm9kYWQKJiM0MzsJaXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgbGluayBzZXQgczEgdXAKJiM0MzsKJiM0MzsJIyBOUy9OQSBmb3J3YXJkaW5nCiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDYgXAomIzQzOwkgICAgJiMzOTtpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz01OCksaWNtcHY2KCkmIzM5OyBcCiYjNDM7CSAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA2IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDg2ZGQpLGlwdjYocHJvdG89NTgpLGljbXB2NigpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJIyBTQ1RQIHBvcnQgbWF0Y2hpbmc6IGRzdCBmb3IgcmVxdWVzdCwgc3JjIGZvciByZXBseQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA2IFwKJiM0MzsJICAgICYjMzQ7aW5fcG9ydCgxKSxldGgoKSwkdjYsc2N0cChkc3Q9NDQ0MykmIzM0OyBcCiYjNDM7CSAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA2IFwKJiM0MzsJICAgICYjMzQ7aW5fcG9ydCgyKSxldGgoKSwkdjYsc2N0cChzcmM9NDQ0MykmIzM0OyBcCiYjNDM7CSAgICAmIzM5OzEmIzM5OyB8fCByZXR1cm4gMQomIzQzOwomIzQzOwkjIEEga2V5bGVzcyBpcHY2KHByb3RvPTEzMikgaW5zdGFsbCBtdXN0IGJlIHJlZnVzZWQgKEVJTlZBTCk6CiYjNDM7CSMgbWF0Y2hfdmFsaWRhdGUoKSByZXF1aXJlcyB0aGUgc2N0cCgpIGtleS4gUGluIHRoZSByZWplY3Qgc2lkZQomIzQzOwkjIG9mIHRoYXQgcnVsZTsgdGhlIGtleWVkIGluc3RhbGxzIGFib3ZlIGNvdmVyIHRoZSBhY2NlcHQgc2lkZS4KJiM0MzsJIyBWZXJpZnkgdGhlIHJlZnVzYWwgaXMgRUlOVkFMIChtaXNzaW5nIGtleSksIG5vdCBhIHBhcnNlIGVycm9yLgomIzQzOwllcnI9JChvdnNfc2J4ICYjMzQ7JHQmIzM0OyBweXRob24zICRvdnNfYmFzZS9vdnMtZHBjdGwucHkgYWRkLWZsb3cgc2N0cDYgXAomIzQzOwkgICAgJiMzNDtpbl9wb3J0KDEpLGV0aCgpLCR2NiYjMzQ7ICYjMzk7MiYjMzk7IDImZ3Q7JmFtcDsxICZndDsvZGV2L251bGwpIFwKJiM0MzsJICAgICZhbXA7JmFtcDsgeyBpbmZvICYjMzQ7a2V5bGVzcyBTQ1RQIGZsb3cgc2hvdWxkIGJlIHJlZnVzZWQmIzM0OwomIzQzOwkgICAgICAgICByZXR1cm4gMTsgfQomIzQzOwllY2hvICYjMzQ7JGVyciYjMzQ7IHwgZ3JlcCAtcSAmIzM0OygyMiwmIzM0OyB8fCB7CiYjNDM7CQlpbmZvICYjMzQ7a2V5bGVzcyBTQ1RQIGZsb3cgcmVmdXNlZCBmb3Igd3JvbmcgcmVhc29uOiAkZXJyJiMzNDsKJiM0MzsJCXJldHVybiAxCiYjNDM7CX0KJiM0MzsKJiM0MzsJb3ZzX25ldG5zX3NwYXduX2RhZW1vbiAmIzM0OyR0JiMzNDsgJiMzNDtzZXJ2ZXImIzM0OyBcCiYjNDM7CSAgICBzb2NhdCAtdSAtdCAxIFNDVFA2LUxJU1RFTjo0NDQzLGZvcmsgXAomIzQzOwkgICAgT1BFTjomIzM0OyRyeGZpbGUmIzM0OyxjcmVhdCxhcHBlbmQKJiM0MzsJb3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA0NDQzIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CWluZm8gJiMzNDt2ZXJpZnkgU0NUUCBhc3NvY2lhdGlvbiB3aXRoIHBvcnQta2V5ZWQgZmxvd3MmIzM0OwomIzQzOwlvdnNfc2J4ICYjMzQ7JHQmIzM0OyBpcCBuZXRucyBleGVjIGNsaWVudCBcCiYjNDM7CSAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gJiMzNDtTQ1RQNi1DT05ORUNUOltmZDAwOjoyXTo0NDQzJiMzNDsgJmx0Oy9kZXYvbnVsbCBcCiYjNDM7CSAgICB8fCByZXR1cm4gMQomIzQzOwomIzQzOwlpbmZvICYjMzQ7dmVyaWZ5IFNDVFAgREFUQSBjaHVuayBjcm9zc2VzIHRoZSBkYXRhcGF0aCYjMzQ7CiYjNDM7CW92c19zYnggJiMzNDskdCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFwKJiM0MzsJICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiAmIzM0O1NDVFA2LUNPTk5FQ1Q6W2ZkMDA6OjJdOjQ0NDMmIzM0OyBcCiYjNDM7CSAgICAmbHQ7Jmx0OyZsdDsgJiMzNDskcGF5bG9hZCYjMzQ7IHx8IHJldHVybiAxCiYjNDM7CW92c193YWl0IGdyZXAgLXEgJiMzNDskcGF5bG9hZCYjMzQ7ICYjMzQ7JHJ4ZmlsZSYjMzQ7IFwKJiM0MzsJICAgIHx8IHsgaW5mbyAmIzM0O3NlcnZlciBkaWQgbm90IHJlY2VpdmUgU0NUUCBEQVRBIHBheWxvYWQmIzM0OwomIzQzOwkgICAgICAgICByZXR1cm4gMTsgfQomIzQzOwomIzQzOwlvdnNfZGVsX2Zsb3dzICYjMzQ7JHQmIzM0OyBzY3RwNgomIzQzOwomIzQzOwlpbmZvICYjMzQ7dmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMgd2l0aG91dCBmbG93cyYjMzQ7CiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDYgXAomIzQzOwkgICAgJiMzOTtpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz01OCksaWNtcHY2KCkmIzM5OyBcCiYjNDM7CSAgICAmIzM5OzImIzM5OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDskdCYjMzQ7IHNjdHA2IFwKJiM0MzsJICAgICYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDg2ZGQpLGlwdjYocHJvdG89NTgpLGljbXB2NigpJiMzOTsgXAomIzQzOwkgICAgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJb3ZzX3NieCAmIzM0OyR0JiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXAomIzQzOwkgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOICYjMzQ7U0NUUDYtQ09OTkVDVDpbZmQwMDo6Ml06NDQ0MyYjMzQ7ICZsdDsvZGV2L251bGwgXAomIzQzOwkgICAgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSBcCiYjNDM7CSAgICAmYW1wOyZhbXA7IHsgaW5mbyAmIzM0O2Nvbm5lY3Rpb24gc2hvdWxkIGZhaWwgd2l0aG91dCBmbG93cyYjMzQ7CiYjNDM7CSAgICAgICAgIHJldHVybiAxOyB9CiYjNDM7CiYjNDM7CWluZm8gJiMzNDtyZWluc3RhbGwgZmxvd3MgYW5kIHZlcmlmeSByZWNvdmVyeSYjMzQ7CiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDYgXAomIzQzOwkgICAgJiMzNDtpbl9wb3J0KDEpLGV0aCgpLCR2NixzY3RwKGRzdD00NDQzKSYjMzQ7IFwKJiM0MzsJICAgICYjMzk7MiYjMzk7IHx8IHJldHVybiAxCiYjNDM7CW92c19hZGRfZmxvdyAmIzM0OyR0JiMzNDsgc2N0cDYgXAomIzQzOwkgICAgJiMzNDtpbl9wb3J0KDIpLGV0aCgpLCR2NixzY3RwKHNyYz00NDQzKSYjMzQ7IFwKJiM0MzsJICAgICYjMzk7MSYjMzk7IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19zYnggJiMzNDskdCYjMzQ7IGlwIG5ldG5zIGV4ZWMgY2xpZW50IFwKJiM0MzsJICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiAmIzM0O1NDVFA2LUNPTk5FQ1Q6W2ZkMDA6OjJdOjQ0NDMmIzM0OyAmbHQ7L2Rldi9udWxsIFwKJiM0MzsJICAgIHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwogIyBwc2FtcGxlIHRlc3QKICMgLSB1c2UgcHNhbXBsZSB0byBvYnNlcnZlIHBhY2tldHMKIHRlc3RfcHNhbXBsZSgpIHsKQEAgLTEwOTEsNiAmIzQzOzEyMDAsOTggQEAgdGVzdF9uYXRfY29ubmVjdF92NCAoKSB7CiAJcmV0dXJuIDAKIH0KIAomIzQzOyMgc2N0cF9uYXRfY29ubmVjdF92NCB0ZXN0CiYjNDM7IyAgLSBTQ1RQIGFzc29jaWF0aW9uIGNyb3NzZXMgYSBjdChjb21taXQsbmF0KGRzdD1pcDpwb3J0KSkgRE5BVAomIzQzOyMgIC0gcG9zdC1yZWNpcmMgZmxvd3MgbWF0Y2ggdGhlIHRyYW5zbGF0ZWQgYWRkcmVzcyBhbmQgcG9ydCwgc28gdGhlCiYjNDM7IyAgICBTQ1RQIGJyYW5jaCBvZiB0aGUgcG9zdC1OQVQgZmxvdyBrZXkgdXBkYXRlIGlzIGxvYWQtYmVhcmluZwomIzQzO3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NCAoKSB7CiYjNDM7CWxvY2FsIHQ9JiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OwomIzQzOwlsb2NhbCBwYXlsb2FkPSYjMzQ7U0NUUF9OQVRfREFUQV9PSyYjMzQ7CiYjNDM7CWxvY2FsIHJ4ZmlsZT0mIzM0OyR7b3ZzX2Jhc2V9LyR7dH0vc2N0cC1yeC50eHQmIzM0OwomIzQzOwomIzQzOwltb2Rwcm9iZSAtcSBzY3RwIDImZ3Q7L2Rldi9udWxsIHx8IHJldHVybiAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzOwlzb2NhdCAtViAyJmd0OyZhbXA7MSB8IGdyZXAgLXEgJiMzNDtkZWZpbmUgV0lUSF9TQ1RQJiMzNDsgfHwgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7CiYjNDM7CSMgU0NUUCBjb25udHJhY2sgaXMgY29tcGlsZWQgaW50byBuZl9jb25udHJhY2sua28sIHNvIGNoZWNrIHRoYXQKJiM0MzsJIyBsb2FkaW5nIGl0IGFjdHVhbGx5IGV4cG9zZWQgdGhlIFNDVFAgY29ubnRyYWNrIHN5c2N0bHMuCiYjNDM7CW1vZHByb2JlIC1xIG5mX2Nvbm50cmFjayAyJmd0Oy9kZXYvbnVsbCB8fCByZXR1cm4gJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MzsJWyAtZSAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X2VzdGFibGlzaGVkIF0gXAomIzQzOwkgICAgfHwgeyBpbmZvICYjMzQ7bm8gU0NUUCBjb25udHJhY2sgc3VwcG9ydCAtIHNraXBwaW5nJiMzNDsKJiM0MzsJICAgICAgICAgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7OyB9CiYjNDM7CiYjNDM7CXNieF9hZGQgJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OyB8fCByZXR1cm4gJD8KJiM0MzsKJiM0MzsJb3ZzX2FkZF9kcCAmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NCYjMzQ7IHNjdHBuYXQ0IHx8IHJldHVybiAxCiYjNDM7CWluZm8gJiMzNDtjcmVhdGUgbmFtZXNwYWNlcyYjMzQ7CiYjNDM7CWZvciBucyBpbiBjbGllbnQgc2VydmVyOyBkbwomIzQzOwkJb3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OyAmIzM0O3NjdHBuYXQ0JiMzNDsgXAomIzQzOwkJICAgICYjMzQ7JG5zJiMzNDsgJiMzNDske25zOjA6MX0wJiMzNDsgJiMzNDske25zOjA6MX0xJiMzNDsgfHwgcmV0dXJuIDEKJiM0MzsJZG9uZQomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjIGNsaWVudCBpcCBhZGRyIGFkZCAxNzIuMzEuMTEwLjEwLzI0IGRldiBjMQomIzQzOwlpcCBuZXRucyBleGVjIGNsaWVudCBpcCBsaW5rIHNldCBjMSB1cAomIzQzOwlpcCBuZXRucyBleGVjIHNlcnZlciBpcCBhZGRyIGFkZCAxNzIuMzEuMTEwLjIwLzI0IGRldiBzMQomIzQzOwlpcCBuZXRucyBleGVjIHNlcnZlciBpcCBsaW5rIHNldCBzMSB1cAomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjIGNsaWVudCBpcCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgMTcyLjMxLjExMC4yMAomIzQzOwomIzQzOwkjIENoZWNrIGlmIHRoZSBjdCBhbmQgbmF0IGFjdGlvbnMgY2FuIGJlIGNvbmZpZ3VyZWQuCiYjNDM7CW92c19hZGRfZmxvdyAmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NCYjMzQ7IHNjdHBuYXQ0IFwKJiM0MzsJCSYjMzk7aW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQoKSYjMzk7IFwKJiM0MzsJCSYjMzk7Y3QoY29tbWl0LG5hdChkc3Q9MTcyLjMxLjExMC4yMDo1NTU1KSkscmVjaXJjKDB4MSkmIzM5OyBcCiYjNDM7CQkmYW1wOyZndDsgL2Rldi9udWxsCiYjNDM7CWlmIFsgJD8gPT0gMSBdOyB0aGVuCiYjNDM7CQlpbmZvICYjMzQ7bm8gc3VwcG9ydCBmb3IgY3QvbmF0IGFjdGlvbnMgLSBza2lwcGluZyYjMzQ7CiYjNDM7CQlvdnNfZXhpdF9zaWcKJiM0MzsJCXJldHVybiAka3NmdF9za2lwCiYjNDM7CWZpCiYjNDM7CiYjNDM7CW92c19kZWxfZmxvd3MgJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OyBzY3RwbmF0NAomIzQzOwomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OyBzY3RwbmF0NCBcCiYjNDM7CQkmIzM5O2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKSYjMzk7ICYjMzk7MiYjMzk7IHx8IHJldHVybiAxCiYjNDM7CW92c19hZGRfZmxvdyAmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NCYjMzQ7IHNjdHBuYXQ0IFwKJiM0MzsJCSYjMzk7aW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDYpLGFycCgpJiMzOTsgJiMzOTsxJiMzOTsgfHwgcmV0dXJuIDEKJiM0MzsJb3ZzX2FkZF9mbG93ICYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0JiMzNDsgc2N0cG5hdDQgXAomIzQzOwkJJiMzNDtjdF9zdGF0ZSgtdHJrKSxpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwMCksJiMzNDtcCiYjNDM7JiMzNDtpcHY0KGRzdD0xOTIuMTY4LjAuMjApJiMzNDsgXAomIzQzOwkJJiMzNDtjdChjb21taXQsbmF0KGRzdD0xNzIuMzEuMTEwLjIwOjU1NTUpKSxyZWNpcmMoMHgxKSYjMzQ7IHx8IHJldHVybiAxCiYjNDM7CW92c19hZGRfZmxvdyAmIzM0O3Rlc3Rfc2N0cF9uYXRfY29ubmVjdF92NCYjMzQ7IHNjdHBuYXQ0IFwKJiM0MzsJCSYjMzQ7Y3Rfc3RhdGUoLXRyayksaW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQoKSYjMzQ7IFwKJiM0MzsJCSYjMzQ7Y3QoY29tbWl0LG5hdCkscmVjaXJjKDB4MikmIzM0OyB8fCByZXR1cm4gMQomIzQzOwomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OyBzY3RwbmF0NCBcCiYjNDM7CQkmIzM0O3JlY2lyY19pZCgweDEpLGN0X3N0YXRlKCYjNDM7dHJrLWludiksaW5fcG9ydCgxKSxldGgoKSwmIzM0O1wKJiM0MzsmIzM0O2V0aF90eXBlKDB4MDgwMCksaXB2NChkc3Q9MTcyLjMxLjExMC4yMCxwcm90bz0xMzIpLCYjMzQ7XAomIzQzOyYjMzQ7c2N0cChkc3Q9NTU1NSkmIzM0OyBcCiYjNDM7CQkmIzM0OzImIzM0OyB8fCByZXR1cm4gMQomIzQzOwlvdnNfYWRkX2Zsb3cgJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OyBzY3RwbmF0NCBcCiYjNDM7CQkmIzM0O3JlY2lyY19pZCgweDIpLGN0X3N0YXRlKCYjNDM7dHJrLWludiksaW5fcG9ydCgyKSxldGgoKSwmIzM0O1wKJiM0MzsmIzM0O2V0aF90eXBlKDB4MDgwMCksaXB2NChzcmM9MTkyLjE2OC4wLjIwLHByb3RvPTEzMiksJiMzNDtcCiYjNDM7JiMzNDtzY3RwKHNyYz00NDQzKSYjMzQ7IFwKJiM0MzsJCSYjMzQ7MSYjMzQ7IHx8IHJldHVybiAxCiYjNDM7CiYjNDM7CW92c19uZXRuc19zcGF3bl9kYWVtb24gJiMzNDt0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjQmIzM0OyAmIzM0O3NlcnZlciYjMzQ7IFwKJiM0MzsJCXNvY2F0IC11IC10IDEgU0NUUDQtTElTVEVOOjU1NTUsZm9yayBcCiYjNDM7CQlPUEVOOiYjMzQ7JHJ4ZmlsZSYjMzQ7LGNyZWF0LGFwcGVuZAomIzQzOwlvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDU1NTUgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJaW5mbyAmIzM0O3ZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIGFjcm9zcyBOQVQmIzM0OwomIzQzOwlvdnNfc2J4ICYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0JiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXAomIzQzOwkgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOICYjMzQ7U0NUUDQtQ09OTkVDVDoxOTIuMTY4LjAuMjA6NDQ0MyYjMzQ7IFwKJiM0MzsJICAgICZsdDsvZGV2L251bGwgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJaW5mbyAmIzM0O3ZlcmlmeSBTQ1RQIERBVEEgY2h1bmsgY3Jvc3NlcyBOQVQmIzM0OwomIzQzOwlvdnNfc2J4ICYjMzQ7dGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0JiMzNDsgaXAgbmV0bnMgZXhlYyBjbGllbnQgXAomIzQzOwkgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOICYjMzQ7U0NUUDQtQ09OTkVDVDoxOTIuMTY4LjAuMjA6NDQ0MyYjMzQ7IFwKJiM0MzsJICAgICZsdDsmbHQ7Jmx0OyAmIzM0OyRwYXlsb2FkJiMzNDsgfHwgcmV0dXJuIDEKJiM0MzsJb3ZzX3dhaXQgZ3JlcCAtcSAmIzM0OyRwYXlsb2FkJiMzNDsgJiMzNDskcnhmaWxlJiMzNDsgXAomIzQzOwkgICAgfHwgeyBpbmZvICYjMzQ7c2VydmVyIGRpZCBub3QgcmVjZWl2ZSBTQ1RQIERBVEEgcGF5bG9hZCYjMzQ7CiYjNDM7CSAgICAgICAgIHJldHVybiAxOyB9CiYjNDM7CiYjNDM7CWluZm8gJiMzNDtkb25lLi4uJiMzNDsKJiM0MzsJcmV0dXJuIDAKJiM0Mzt9CiYjNDM7CiAjIG5hdF9yZWxhdGVkX3Y0IHRlc3QKICMgIC0gY2xpZW50LSZndDtzZXJ2ZXIgaXAgcGFja2V0cyBnbyB2aWEgU05BVAogIyAgLSBjbGllbnQgc29saWNpdHMgSUNNUCBkZXN0aW5hdGlvbiB1bnJlYWNoYWJsZSBwYWNrZXQgZnJvbSBzZXJ2ZXIKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1OAoJCQkJCQkJb3V0cHV0OiA3MwoJCQkJCQkJdGhvdWdodHM6IDYzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgZGlmZiB0b3VjaGluZyB0d28gZmlsZXM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvY29uZmlnYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaGAuIFRoZSBmaWxlIHBhdGhzIGltbWVkaWF0ZWx5IHBvaW50IHRvd2FyZHMgc2VsZi10ZXN0cyB3aXRoaW4gYSB1c2VyLXNwYWNlIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBPcGVuIHZTd2l0Y2guIEkgbmVlZCB0byB0cmlhZ2UgdGhpcyBiYXNlZCBvbiB3aGV0aGVyIGl0IGFmZmVjdHMgdGhlIGtlcm5lbCBpdHNlbGYuCgpJJiMzOTttIGNvbnN1bHRpbmcgdGhlICYjMzQ7V0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY3JpdGVyaWEuIFNwZWNpZmljYWxseSwgdGhlIHJ1bGVzIHN0YXRlIHRoYXQgY2hhbmdlcyB0byB1c2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBsaWtlIGB0b29scy9gLCBgc2FtcGxlcy9gLCBvciBgc2NyaXB0cy9gLCBhcmUgbm90IHdvcnRoIGZ1enppbmcgaWYgdGhleSAqZG9uJiMzOTt0KiBhZmZlY3QgdGhlIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCgpJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IHRoZSBkaWZmLCBhcyBwcmVzZW50ZWQsIG9ubHkgaW5jbHVkZXMgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvYCBkaXJlY3RvcnkuIE5vIG90aGVyIGZpbGVzIGFyZSB0b3VjaGVkLCBhbmQgSSBjYW4gY29uZmlybSB0aGlzIGVpdGhlciB0aHJvdWdoIGEgcXVpY2sgYGdpdCBsb2cgLTFgIGNoZWNrLCBvciwgaW4gdGhpcyBjYXNlLCBieSB2aXJ0dWUgb2YgdGhlIHByb3ZpZGVkIHByb21wdC4KCkVzc2VudGlhbGx5LCB0aGlzIG1lYW5zIHRoYXQgdGhpcyBwYXRjaCBpcyBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIHVzZXItc3BhY2UgdGVzdCBjb2RlLiBJdCBkb2VzIG5vdCBhbHRlciBhbnkgY29yZSBrZXJuZWwgY29tcG9uZW50cyBvciB0aGVpciBjb21waWxlZCBpbWFnZXMsIGJhc2VkIG9uIHRoZSBkaWZmLiBTbyBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbnMgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGxpc3RzIHdpbGwgYmUgZW1wdHkgKG9yIG51bGwpLCBhcyB0aGlzIGNoYW5nZSBoYXMgbm8gaW1wYWN0IG9uIHJlbGV2YW50IGtlcm5lbCBzeW1ib2xzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHNlbGZ0ZXN0cyBzY3JpcHRzIGFuZCBjb25maWcgZmlsZXMgaW4gYSB1c2VyLXNwYWNlIHRlc3RpbmcgZGlyZWN0b3J5LCB0aGVyZWJ5IG5vdCBhZmZlY3RpbmcgdGhlIGtlcm5lbCYjMzk7cyBjb21waWxhdGlvbiBvciBtb2R1bGVzLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKSwgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoLyksIHdoaWNoIGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjQ2LjYyMDU3ODAzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NDU5NzI1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKSwgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6NDYuNjIwNTgzNTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjE2NTUwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NzllMTU3OGE5NDlkYTU4ZjYyYjU0Zjc2MDE1MTQ1NjMwZTM1ZThiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTM6MDQ6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9jb25maWdcXG5pbmRleCBhODI1ZTBiNWM4OGU1Li5mYTkwNDc1ZGMzODhkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9jb25maWdcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvY29uZmlnXFxuQEAgLTcsNiArNyw3IEBAIENPTkZJR19ORVRfSVBHUkU9bVxcbiBDT05GSUdfTkVUX0lQR1JFX0RFTVVYPW1cXG4gQ09ORklHX05GX0NPTk5UUkFDSz1tXFxuIENPTkZJR19ORl9DT05OVFJBQ0tfT1ZTPXlcXG4rQ09ORklHX05GX0NUX1BST1RPX1NDVFA9eVxcbiBDT05GSUdfT1BFTlZTV0lUQ0g9bVxcbiBDT05GSUdfUFNBTVBMRT1tXFxuIENPTkZJR19WRVRIPXlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXFxuaW5kZXggYTMxZjdmYjY4ODJkYy4uMTM4YTcwNWZjMzU5ZSAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hcXG5AQCAtMzQsNiArMzQsOCBAQCB0ZXN0cz1cXFwiXFxuIFxcdHRydW5jXFx0XFx0XFx0XFx0XFx0dHJ1bmM6IG91dHB1dCB0cnVuY2F0aW9uXFxuIFxcdGljbXB2NlxcdFxcdFxcdFxcdFxcdGljbXB2NjogSUNNUHY2IGVjaG8gdHlwZSBtYXRjaFxcbiBcXHRzY3RwX2Nvbm5lY3RfdjRcXHRcXHRcXHRcXHRzY3RwOiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nXFxuK1xcdHNjdHBfY29ubmVjdF92NlxcdFxcdFxcdHNjdHA2OiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nIG92ZXIgSVB2NlxcbitcXHRzY3RwX25hdF9jb25uZWN0X3Y0XFx0XFx0c2N0cG5hdDQ6IFNDVFAgTkFUIHdpdGggcG9ydCB0cmFuc2xhdGlvblxcbiBcXHRwc2FtcGxlXFx0XFx0XFx0XFx0XFx0cHNhbXBsZTogU2FtcGxpbmcgcGFja2V0cyB3aXRoIHBzYW1wbGVcXFwiXFxuIFxcbiBpbmZvKCkge1xcbkBAIC03MDAsNiArNzAyLDExMyBAQCB0ZXN0X3NjdHBfY29ubmVjdF92NCgpIHtcXG4gXFx0cmV0dXJuIDBcXG4gfVxcbiBcXG4rIyBzY3RwX2Nvbm5lY3RfdjYgdGVzdFxcbisjIC0gc2N0cChkc3Q9NDQ0MykgbWF0Y2hlcyBjbGllbnQtdG8tc2VydmVyIElOSVRcXG4rIyAtIHNjdHAoc3JjPTQ0NDMpIG1hdGNoZXMgc2VydmVyLXRvLWNsaWVudCBJTklULUFDS1xcbisjIC0gaWNtcHY2IE5TL05BIGZsb3dzIGZvcndhcmQgbmVpZ2hib3VyIGRpc2NvdmVyeVxcbisjIC0gcmVtb3ZlIGZsb3dzIGFuZCB2ZXJpZnkgY29ubmVjdGlvbiBmYWlscywgcmVpbnN0YWxsIGFuZCByZWNvdmVyXFxuK3Rlc3Rfc2N0cF9jb25uZWN0X3Y2KCkge1xcbitcXHRsb2NhbCB0PVxcXCJ0ZXN0X3NjdHBfY29ubmVjdF92NlxcXCJcXG4rXFx0bG9jYWwgdjY9XFxcImV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz0xMzIpXFxcIlxcbitcXHRsb2NhbCBwYXlsb2FkPVxcXCJTQ1RQNl9EQVRBX09LXFxcIlxcbitcXHRsb2NhbCByeGZpbGU9XFxcIiR7b3ZzX2Jhc2V9LyR7dH0vc2N0cC1yeC50eHRcXFwiXFxuK1xcbitcXHRtb2Rwcm9iZSAtcSBzY3RwIDJcXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0c29jYXQgLVYgMlxcdTAwM2VcXHUwMDI2MSB8IGdyZXAgLXEgXFxcImRlZmluZSBXSVRIX1NDVFBcXFwiIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0WyAtZSAvcHJvYy9zeXMvbmV0L2lwdjYgXSB8fCByZXR1cm4gXFxcIiRrc2Z0X3NraXBcXFwiXFxuK1xcbitcXHRzYnhfYWRkIFxcXCIkdFxcXCIgfHwgcmV0dXJuICQ/XFxuK1xcdG92c19hZGRfZHAgXFxcIiR0XFxcIiBzY3RwNiB8fCByZXR1cm4gMVxcbitcXG4rXFx0aW5mbyBcXFwiY3JlYXRlIG5hbWVzcGFjZXNcXFwiXFxuK1xcdGZvciBucyBpbiBjbGllbnQgc2VydmVyOyBkb1xcbitcXHRcXHRvdnNfYWRkX25ldG5zX2FuZF92ZXRocyBcXFwiJHRcXFwiIFxcXCJzY3RwNlxcXCIgXFxcIiRuc1xcXCIgXFxcXFxcbitcXHRcXHQgICAgXFxcIiR7bnM6MDoxfTBcXFwiIFxcXCIke25zOjA6MX0xXFxcIiB8fCByZXR1cm4gMVxcbitcXHRkb25lXFxuK1xcbitcXHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBhZGRyIGFkZCBmZDAwOjoxLzY0IGRldiBjMSBub2RhZFxcbitcXHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBsaW5rIHNldCBjMSB1cFxcbitcXHRpcCBuZXRucyBleGVjIHNlcnZlciBpcCBhZGRyIGFkZCBmZDAwOjoyLzY0IGRldiBzMSBub2RhZFxcbitcXHRpcCBuZXRucyBleGVjIHNlcnZlciBpcCBsaW5rIHNldCBzMSB1cFxcbitcXG4rXFx0IyBOUy9OQSBmb3J3YXJkaW5nXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA2IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz01OCksaWNtcHY2KCknIFxcXFxcXG4rXFx0ICAgICcyJyB8fCByZXR1cm4gMVxcbitcXHRvdnNfYWRkX2Zsb3cgXFxcIiR0XFxcIiBzY3RwNiBcXFxcXFxuK1xcdCAgICAnaW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDg2ZGQpLGlwdjYocHJvdG89NTgpLGljbXB2NigpJyBcXFxcXFxuK1xcdCAgICAnMScgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdCMgU0NUUCBwb3J0IG1hdGNoaW5nOiBkc3QgZm9yIHJlcXVlc3QsIHNyYyBmb3IgcmVwbHlcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDYgXFxcXFxcbitcXHQgICAgXFxcImluX3BvcnQoMSksZXRoKCksJHY2LHNjdHAoZHN0PTQ0NDMpXFxcIiBcXFxcXFxuK1xcdCAgICAnMicgfHwgcmV0dXJuIDFcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCIkdFxcXCIgc2N0cDYgXFxcXFxcbitcXHQgICAgXFxcImluX3BvcnQoMiksZXRoKCksJHY2LHNjdHAoc3JjPTQ0NDMpXFxcIiBcXFxcXFxuK1xcdCAgICAnMScgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdCMgQSBrZXlsZXNzIGlwdjYocHJvdG89MTMyKSBpbnN0YWxsIG11c3QgYmUgcmVmdXNlZCAoRUlOVkFMKTpcXG4rXFx0IyBtYXRjaF92YWxpZGF0ZSgpIHJlcXVpcmVzIHRoZSBzY3RwKCkga2V5LiBQaW4gdGhlIHJlamVjdCBzaWRlXFxuK1xcdCMgb2YgdGhhdCBydWxlOyB0aGUga2V5ZWQgaW5zdGFsbHMgYWJvdmUgY292ZXIgdGhlIGFjY2VwdCBzaWRlLlxcbitcXHQjIFZlcmlmeSB0aGUgcmVmdXNhbCBpcyBFSU5WQUwgKG1pc3Npbmcga2V5KSwgbm90IGEgcGFyc2UgZXJyb3IuXFxuK1xcdGVycj0kKG92c19zYnggXFxcIiR0XFxcIiBweXRob24zICRvdnNfYmFzZS9vdnMtZHBjdGwucHkgYWRkLWZsb3cgc2N0cDYgXFxcXFxcbitcXHQgICAgXFxcImluX3BvcnQoMSksZXRoKCksJHY2XFxcIiAnMicgMlxcdTAwM2VcXHUwMDI2MSBcXHUwMDNlL2Rldi9udWxsKSBcXFxcXFxuK1xcdCAgICBcXHUwMDI2XFx1MDAyNiB7IGluZm8gXFxcImtleWxlc3MgU0NUUCBmbG93IHNob3VsZCBiZSByZWZ1c2VkXFxcIlxcbitcXHQgICAgICAgICByZXR1cm4gMTsgfVxcbitcXHRlY2hvIFxcXCIkZXJyXFxcIiB8IGdyZXAgLXEgXFxcIigyMixcXFwiIHx8IHtcXG4rXFx0XFx0aW5mbyBcXFwia2V5bGVzcyBTQ1RQIGZsb3cgcmVmdXNlZCBmb3Igd3JvbmcgcmVhc29uOiAkZXJyXFxcIlxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHR9XFxuK1xcbitcXHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFxcXCIkdFxcXCIgXFxcInNlcnZlclxcXCIgXFxcXFxcbitcXHQgICAgc29jYXQgLXUgLXQgMSBTQ1RQNi1MSVNURU46NDQ0Myxmb3JrIFxcXFxcXG4rXFx0ICAgIE9QRU46XFxcIiRyeGZpbGVcXFwiLGNyZWF0LGFwcGVuZFxcbitcXHRvdnNfd2FpdCBzY3RwX2Vwc19oYXMgc2VydmVyIDQ0NDMgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdGluZm8gXFxcInZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIHdpdGggcG9ydC1rZXllZCBmbG93c1xcXCJcXG4rXFx0b3ZzX3NieCBcXFwiJHRcXFwiIGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXFxcXG4rXFx0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcXFwiU0NUUDYtQ09OTkVDVDpbZmQwMDo6Ml06NDQ0M1xcXCIgXFx1MDAzYy9kZXYvbnVsbCBcXFxcXFxuK1xcdCAgICB8fCByZXR1cm4gMVxcbitcXG4rXFx0aW5mbyBcXFwidmVyaWZ5IFNDVFAgREFUQSBjaHVuayBjcm9zc2VzIHRoZSBkYXRhcGF0aFxcXCJcXG4rXFx0b3ZzX3NieCBcXFwiJHRcXFwiIGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXFxcXG4rXFx0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcXFwiU0NUUDYtQ09OTkVDVDpbZmQwMDo6Ml06NDQ0M1xcXCIgXFxcXFxcbitcXHQgICAgXFx1MDAzY1xcdTAwM2NcXHUwMDNjIFxcXCIkcGF5bG9hZFxcXCIgfHwgcmV0dXJuIDFcXG4rXFx0b3ZzX3dhaXQgZ3JlcCAtcSBcXFwiJHBheWxvYWRcXFwiIFxcXCIkcnhmaWxlXFxcIiBcXFxcXFxuK1xcdCAgICB8fCB7IGluZm8gXFxcInNlcnZlciBkaWQgbm90IHJlY2VpdmUgU0NUUCBEQVRBIHBheWxvYWRcXFwiXFxuK1xcdCAgICAgICAgIHJldHVybiAxOyB9XFxuK1xcbitcXHRvdnNfZGVsX2Zsb3dzIFxcXCIkdFxcXCIgc2N0cDZcXG4rXFxuK1xcdGluZm8gXFxcInZlcmlmeSBjb25uZWN0aW9uIGZhaWxzIHdpdGhvdXQgZmxvd3NcXFwiXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA2IFxcXFxcXG4rXFx0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz01OCksaWNtcHY2KCknIFxcXFxcXG4rXFx0ICAgICcyJyB8fCByZXR1cm4gMVxcbitcXHRvdnNfYWRkX2Zsb3cgXFxcIiR0XFxcIiBzY3RwNiBcXFxcXFxuK1xcdCAgICAnaW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDg2ZGQpLGlwdjYocHJvdG89NTgpLGljbXB2NigpJyBcXFxcXFxuK1xcdCAgICAnMScgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdG92c19zYnggXFxcIiR0XFxcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxcXFxuK1xcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXFxcIlNDVFA2LUNPTk5FQ1Q6W2ZkMDA6OjJdOjQ0NDNcXFwiIFxcdTAwM2MvZGV2L251bGwgXFxcXFxcbitcXHQgICAgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIFxcXFxcXG4rXFx0ICAgIFxcdTAwMjZcXHUwMDI2IHsgaW5mbyBcXFwiY29ubmVjdGlvbiBzaG91bGQgZmFpbCB3aXRob3V0IGZsb3dzXFxcIlxcbitcXHQgICAgICAgICByZXR1cm4gMTsgfVxcbitcXG4rXFx0aW5mbyBcXFwicmVpbnN0YWxsIGZsb3dzIGFuZCB2ZXJpZnkgcmVjb3ZlcnlcXFwiXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA2IFxcXFxcXG4rXFx0ICAgIFxcXCJpbl9wb3J0KDEpLGV0aCgpLCR2NixzY3RwKGRzdD00NDQzKVxcXCIgXFxcXFxcbitcXHQgICAgJzInIHx8IHJldHVybiAxXFxuK1xcdG92c19hZGRfZmxvdyBcXFwiJHRcXFwiIHNjdHA2IFxcXFxcXG4rXFx0ICAgIFxcXCJpbl9wb3J0KDIpLGV0aCgpLCR2NixzY3RwKHNyYz00NDQzKVxcXCIgXFxcXFxcbitcXHQgICAgJzEnIHx8IHJldHVybiAxXFxuK1xcbitcXHRvdnNfc2J4IFxcXCIkdFxcXCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcXFxcbitcXHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFxcXCJTQ1RQNi1DT05ORUNUOltmZDAwOjoyXTo0NDQzXFxcIiBcXHUwMDNjL2Rldi9udWxsIFxcXFxcXG4rXFx0ICAgIHx8IHJldHVybiAxXFxuK1xcbitcXHRyZXR1cm4gMFxcbit9XFxuK1xcbiAjIHBzYW1wbGUgdGVzdFxcbiAjIC0gdXNlIHBzYW1wbGUgdG8gb2JzZXJ2ZSBwYWNrZXRzXFxuIHRlc3RfcHNhbXBsZSgpIHtcXG5AQCAtMTA5MSw2ICsxMjAwLDk4IEBAIHRlc3RfbmF0X2Nvbm5lY3RfdjQgKCkge1xcbiBcXHRyZXR1cm4gMFxcbiB9XFxuIFxcbisjIHNjdHBfbmF0X2Nvbm5lY3RfdjQgdGVzdFxcbisjICAtIFNDVFAgYXNzb2NpYXRpb24gY3Jvc3NlcyBhIGN0KGNvbW1pdCxuYXQoZHN0PWlwOnBvcnQpKSBETkFUXFxuKyMgIC0gcG9zdC1yZWNpcmMgZmxvd3MgbWF0Y2ggdGhlIHRyYW5zbGF0ZWQgYWRkcmVzcyBhbmQgcG9ydCwgc28gdGhlXFxuKyMgICAgU0NUUCBicmFuY2ggb2YgdGhlIHBvc3QtTkFUIGZsb3cga2V5IHVwZGF0ZSBpcyBsb2FkLWJlYXJpbmdcXG4rdGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0ICgpIHtcXG4rXFx0bG9jYWwgdD1cXFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XFxcIlxcbitcXHRsb2NhbCBwYXlsb2FkPVxcXCJTQ1RQX05BVF9EQVRBX09LXFxcIlxcbitcXHRsb2NhbCByeGZpbGU9XFxcIiR7b3ZzX2Jhc2V9LyR7dH0vc2N0cC1yeC50eHRcXFwiXFxuK1xcbitcXHRtb2Rwcm9iZSAtcSBzY3RwIDJcXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0c29jYXQgLVYgMlxcdTAwM2VcXHUwMDI2MSB8IGdyZXAgLXEgXFxcImRlZmluZSBXSVRIX1NDVFBcXFwiIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0IyBTQ1RQIGNvbm50cmFjayBpcyBjb21waWxlZCBpbnRvIG5mX2Nvbm50cmFjay5rbywgc28gY2hlY2sgdGhhdFxcbitcXHQjIGxvYWRpbmcgaXQgYWN0dWFsbHkgZXhwb3NlZCB0aGUgU0NUUCBjb25udHJhY2sgc3lzY3Rscy5cXG4rXFx0bW9kcHJvYmUgLXEgbmZfY29ubnRyYWNrIDJcXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0WyAtZSAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X2VzdGFibGlzaGVkIF0gXFxcXFxcbitcXHQgICAgfHwgeyBpbmZvIFxcXCJubyBTQ1RQIGNvbm50cmFjayBzdXBwb3J0IC0gc2tpcHBpbmdcXFwiXFxuK1xcdCAgICAgICAgIHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCI7IH1cXG4rXFxuK1xcdHNieF9hZGQgXFxcInRlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFxcXCIgfHwgcmV0dXJuICQ/XFxuK1xcbitcXHRvdnNfYWRkX2RwIFxcXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcXFwiIHNjdHBuYXQ0IHx8IHJldHVybiAxXFxuK1xcdGluZm8gXFxcImNyZWF0ZSBuYW1lc3BhY2VzXFxcIlxcbitcXHRmb3IgbnMgaW4gY2xpZW50IHNlcnZlcjsgZG9cXG4rXFx0XFx0b3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgXFxcInRlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFxcXCIgXFxcInNjdHBuYXQ0XFxcIiBcXFxcXFxuK1xcdFxcdCAgICBcXFwiJG5zXFxcIiBcXFwiJHtuczowOjF9MFxcXCIgXFxcIiR7bnM6MDoxfTFcXFwiIHx8IHJldHVybiAxXFxuK1xcdGRvbmVcXG4rXFxuK1xcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMTAvMjQgZGV2IGMxXFxuK1xcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGxpbmsgc2V0IGMxIHVwXFxuK1xcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMjAvMjQgZGV2IHMxXFxuK1xcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwXFxuK1xcbitcXHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgMTcyLjMxLjExMC4yMFxcbitcXG4rXFx0IyBDaGVjayBpZiB0aGUgY3QgYW5kIG5hdCBhY3Rpb25zIGNhbiBiZSBjb25maWd1cmVkLlxcbitcXHRvdnNfYWRkX2Zsb3cgXFxcInRlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFxcXCIgc2N0cG5hdDQgXFxcXFxcbitcXHRcXHQnaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLGlwdjQoKScgXFxcXFxcbitcXHRcXHQnY3QoY29tbWl0LG5hdChkc3Q9MTcyLjMxLjExMC4yMDo1NTU1KSkscmVjaXJjKDB4MSknIFxcXFxcXG4rXFx0XFx0XFx1MDAyNlxcdTAwM2UgL2Rldi9udWxsXFxuK1xcdGlmIFsgJD8gPT0gMSBdOyB0aGVuXFxuK1xcdFxcdGluZm8gXFxcIm5vIHN1cHBvcnQgZm9yIGN0L25hdCBhY3Rpb25zIC0gc2tpcHBpbmdcXFwiXFxuK1xcdFxcdG92c19leGl0X3NpZ1xcbitcXHRcXHRyZXR1cm4gJGtzZnRfc2tpcFxcbitcXHRmaVxcbitcXG4rXFx0b3ZzX2RlbF9mbG93cyBcXFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XFxcIiBzY3RwbmF0NFxcbitcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcXFwiIHNjdHBuYXQ0IFxcXFxcXG4rXFx0XFx0J2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgJzInIHx8IHJldHVybiAxXFxuK1xcdG92c19hZGRfZmxvdyBcXFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XFxcIiBzY3RwbmF0NCBcXFxcXFxuK1xcdFxcdCdpbl9wb3J0KDIpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCknICcxJyB8fCByZXR1cm4gMVxcbitcXHRvdnNfYWRkX2Zsb3cgXFxcInRlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFxcXCIgc2N0cG5hdDQgXFxcXFxcbitcXHRcXHRcXFwiY3Rfc3RhdGUoLXRyayksaW5fcG9ydCgxKSxldGgoKSxldGhfdHlwZSgweDA4MDApLFxcXCJcXFxcXFxuK1xcXCJpcHY0KGRzdD0xOTIuMTY4LjAuMjApXFxcIiBcXFxcXFxuK1xcdFxcdFxcXCJjdChjb21taXQsbmF0KGRzdD0xNzIuMzEuMTEwLjIwOjU1NTUpKSxyZWNpcmMoMHgxKVxcXCIgfHwgcmV0dXJuIDFcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcXFwiIHNjdHBuYXQ0IFxcXFxcXG4rXFx0XFx0XFxcImN0X3N0YXRlKC10cmspLGluX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KClcXFwiIFxcXFxcXG4rXFx0XFx0XFxcImN0KGNvbW1pdCxuYXQpLHJlY2lyYygweDIpXFxcIiB8fCByZXR1cm4gMVxcbitcXG4rXFx0b3ZzX2FkZF9mbG93IFxcXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcXFwiIHNjdHBuYXQ0IFxcXFxcXG4rXFx0XFx0XFxcInJlY2lyY19pZCgweDEpLGN0X3N0YXRlKCt0cmstaW52KSxpbl9wb3J0KDEpLGV0aCgpLFxcXCJcXFxcXFxuK1xcXCJldGhfdHlwZSgweDA4MDApLGlwdjQoZHN0PTE3Mi4zMS4xMTAuMjAscHJvdG89MTMyKSxcXFwiXFxcXFxcbitcXFwic2N0cChkc3Q9NTU1NSlcXFwiIFxcXFxcXG4rXFx0XFx0XFxcIjJcXFwiIHx8IHJldHVybiAxXFxuK1xcdG92c19hZGRfZmxvdyBcXFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XFxcIiBzY3RwbmF0NCBcXFxcXFxuK1xcdFxcdFxcXCJyZWNpcmNfaWQoMHgyKSxjdF9zdGF0ZSgrdHJrLWludiksaW5fcG9ydCgyKSxldGgoKSxcXFwiXFxcXFxcbitcXFwiZXRoX3R5cGUoMHgwODAwKSxpcHY0KHNyYz0xOTIuMTY4LjAuMjAscHJvdG89MTMyKSxcXFwiXFxcXFxcbitcXFwic2N0cChzcmM9NDQ0MylcXFwiIFxcXFxcXG4rXFx0XFx0XFxcIjFcXFwiIHx8IHJldHVybiAxXFxuK1xcbitcXHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFxcXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcXFwiIFxcXCJzZXJ2ZXJcXFwiIFxcXFxcXG4rXFx0XFx0c29jYXQgLXUgLXQgMSBTQ1RQNC1MSVNURU46NTU1NSxmb3JrIFxcXFxcXG4rXFx0XFx0T1BFTjpcXFwiJHJ4ZmlsZVxcXCIsY3JlYXQsYXBwZW5kXFxuK1xcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNTU1NSB8fCByZXR1cm4gMVxcbitcXG4rXFx0aW5mbyBcXFwidmVyaWZ5IFNDVFAgYXNzb2NpYXRpb24gYWNyb3NzIE5BVFxcXCJcXG4rXFx0b3ZzX3NieCBcXFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XFxcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxcXFxuK1xcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXFxcIlNDVFA0LUNPTk5FQ1Q6MTkyLjE2OC4wLjIwOjQ0NDNcXFwiIFxcXFxcXG4rXFx0ICAgIFxcdTAwM2MvZGV2L251bGwgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdGluZm8gXFxcInZlcmlmeSBTQ1RQIERBVEEgY2h1bmsgY3Jvc3NlcyBOQVRcXFwiXFxuK1xcdG92c19zYnggXFxcInRlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFxcXCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcXFxcbitcXHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFxcXCJTQ1RQNC1DT05ORUNUOjE5Mi4xNjguMC4yMDo0NDQzXFxcIiBcXFxcXFxuK1xcdCAgICBcXHUwMDNjXFx1MDAzY1xcdTAwM2MgXFxcIiRwYXlsb2FkXFxcIiB8fCByZXR1cm4gMVxcbitcXHRvdnNfd2FpdCBncmVwIC1xIFxcXCIkcGF5bG9hZFxcXCIgXFxcIiRyeGZpbGVcXFwiIFxcXFxcXG4rXFx0ICAgIHx8IHsgaW5mbyBcXFwic2VydmVyIGRpZCBub3QgcmVjZWl2ZSBTQ1RQIERBVEEgcGF5bG9hZFxcXCJcXG4rXFx0ICAgICAgICAgcmV0dXJuIDE7IH1cXG4rXFxuK1xcdGluZm8gXFxcImRvbmUuLi5cXFwiXFxuK1xcdHJldHVybiAwXFxuK31cXG4rXFxuICMgbmF0X3JlbGF0ZWRfdjQgdGVzdFxcbiAjICAtIGNsaWVudC1cXHUwMDNlc2VydmVyIGlwIHBhY2tldHMgZ28gdmlhIFNOQVRcXG4gIyAgLSBjbGllbnQgc29saWNpdHMgSUNNUCBkZXN0aW5hdGlvbiB1bnJlYWNoYWJsZSBwYWNrZXQgZnJvbSBzZXJ2ZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6NDguMzQzMjg2OTQxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MjIzMjQ3OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKSwgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NzllMTU3OGE5NDlkYTU4ZjYyYjU0Zjc2MDE1MTQ1NjMwZTM1ZThiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMzowNDo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvY29uZmlnXG5pbmRleCBhODI1ZTBiNWM4OGU1Li5mYTkwNDc1ZGMzODhkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL2NvbmZpZ1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL2NvbmZpZ1xuQEAgLTcsNiArNyw3IEBAIENPTkZJR19ORVRfSVBHUkU9bVxuIENPTkZJR19ORVRfSVBHUkVfREVNVVg9bVxuIENPTkZJR19ORl9DT05OVFJBQ0s9bVxuIENPTkZJR19ORl9DT05OVFJBQ0tfT1ZTPXlcbitDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD15XG4gQ09ORklHX09QRU5WU1dJVENIPW1cbiBDT05GSUdfUFNBTVBMRT1tXG4gQ09ORklHX1ZFVEg9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuaW5kZXggYTMxZjdmYjY4ODJkYy4uMTM4YTcwNWZjMzU5ZSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaC5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoLnNoXG5AQCAtMzQsNiArMzQsOCBAQCB0ZXN0cz1cIlxuIFx0dHJ1bmNcdFx0XHRcdFx0dHJ1bmM6IG91dHB1dCB0cnVuY2F0aW9uXG4gXHRpY21wdjZcdFx0XHRcdFx0aWNtcHY2OiBJQ01QdjYgZWNobyB0eXBlIG1hdGNoXG4gXHRzY3RwX2Nvbm5lY3RfdjRcdFx0XHRcdHNjdHA6IFNDVFAgZmxvdyBrZXkgbWF0Y2hpbmdcbitcdHNjdHBfY29ubmVjdF92Nlx0XHRcdHNjdHA2OiBTQ1RQIGZsb3cga2V5IG1hdGNoaW5nIG92ZXIgSVB2NlxuK1x0c2N0cF9uYXRfY29ubmVjdF92NFx0XHRzY3RwbmF0NDogU0NUUCBOQVQgd2l0aCBwb3J0IHRyYW5zbGF0aW9uXG4gXHRwc2FtcGxlXHRcdFx0XHRcdHBzYW1wbGU6IFNhbXBsaW5nIHBhY2tldHMgd2l0aCBwc2FtcGxlXCJcbiBcbiBpbmZvKCkge1xuQEAgLTcwMCw2ICs3MDIsMTEzIEBAIHRlc3Rfc2N0cF9jb25uZWN0X3Y0KCkge1xuIFx0cmV0dXJuIDBcbiB9XG4gXG4rIyBzY3RwX2Nvbm5lY3RfdjYgdGVzdFxuKyMgLSBzY3RwKGRzdD00NDQzKSBtYXRjaGVzIGNsaWVudC10by1zZXJ2ZXIgSU5JVFxuKyMgLSBzY3RwKHNyYz00NDQzKSBtYXRjaGVzIHNlcnZlci10by1jbGllbnQgSU5JVC1BQ0tcbisjIC0gaWNtcHY2IE5TL05BIGZsb3dzIGZvcndhcmQgbmVpZ2hib3VyIGRpc2NvdmVyeVxuKyMgLSByZW1vdmUgZmxvd3MgYW5kIHZlcmlmeSBjb25uZWN0aW9uIGZhaWxzLCByZWluc3RhbGwgYW5kIHJlY292ZXJcbit0ZXN0X3NjdHBfY29ubmVjdF92NigpIHtcbitcdGxvY2FsIHQ9XCJ0ZXN0X3NjdHBfY29ubmVjdF92NlwiXG4rXHRsb2NhbCB2Nj1cImV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz0xMzIpXCJcbitcdGxvY2FsIHBheWxvYWQ9XCJTQ1RQNl9EQVRBX09LXCJcbitcdGxvY2FsIHJ4ZmlsZT1cIiR7b3ZzX2Jhc2V9LyR7dH0vc2N0cC1yeC50eHRcIlxuK1xuK1x0bW9kcHJvYmUgLXEgc2N0cCAyXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcIiRrc2Z0X3NraXBcIlxuK1x0c29jYXQgLVYgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xIFwiZGVmaW5lIFdJVEhfU0NUUFwiIHx8IHJldHVybiBcIiRrc2Z0X3NraXBcIlxuK1x0WyAtZSAvcHJvYy9zeXMvbmV0L2lwdjYgXSB8fCByZXR1cm4gXCIka3NmdF9za2lwXCJcbitcbitcdHNieF9hZGQgXCIkdFwiIHx8IHJldHVybiAkP1xuK1x0b3ZzX2FkZF9kcCBcIiR0XCIgc2N0cDYgfHwgcmV0dXJuIDFcbitcbitcdGluZm8gXCJjcmVhdGUgbmFtZXNwYWNlc1wiXG4rXHRmb3IgbnMgaW4gY2xpZW50IHNlcnZlcjsgZG9cbitcdFx0b3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgXCIkdFwiIFwic2N0cDZcIiBcIiRuc1wiIFxcXG4rXHRcdCAgICBcIiR7bnM6MDoxfTBcIiBcIiR7bnM6MDoxfTFcIiB8fCByZXR1cm4gMVxuK1x0ZG9uZVxuK1xuK1x0aXAgbmV0bnMgZXhlYyBjbGllbnQgaXAgYWRkciBhZGQgZmQwMDo6MS82NCBkZXYgYzEgbm9kYWRcbitcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGxpbmsgc2V0IGMxIHVwXG4rXHRpcCBuZXRucyBleGVjIHNlcnZlciBpcCBhZGRyIGFkZCBmZDAwOjoyLzY0IGRldiBzMSBub2RhZFxuK1x0aXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgbGluayBzZXQgczEgdXBcbitcbitcdCMgTlMvTkEgZm9yd2FyZGluZ1xuK1x0b3ZzX2FkZF9mbG93IFwiJHRcIiBzY3RwNiBcXFxuK1x0ICAgICdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4ODZkZCksaXB2Nihwcm90bz01OCksaWNtcHY2KCknIFxcXG4rXHQgICAgJzInIHx8IHJldHVybiAxXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA2IFxcXG4rXHQgICAgJ2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHg4NmRkKSxpcHY2KHByb3RvPTU4KSxpY21wdjYoKScgXFxcbitcdCAgICAnMScgfHwgcmV0dXJuIDFcbitcbitcdCMgU0NUUCBwb3J0IG1hdGNoaW5nOiBkc3QgZm9yIHJlcXVlc3QsIHNyYyBmb3IgcmVwbHlcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDYgXFxcbitcdCAgICBcImluX3BvcnQoMSksZXRoKCksJHY2LHNjdHAoZHN0PTQ0NDMpXCIgXFxcbitcdCAgICAnMicgfHwgcmV0dXJuIDFcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDYgXFxcbitcdCAgICBcImluX3BvcnQoMiksZXRoKCksJHY2LHNjdHAoc3JjPTQ0NDMpXCIgXFxcbitcdCAgICAnMScgfHwgcmV0dXJuIDFcbitcbitcdCMgQSBrZXlsZXNzIGlwdjYocHJvdG89MTMyKSBpbnN0YWxsIG11c3QgYmUgcmVmdXNlZCAoRUlOVkFMKTpcbitcdCMgbWF0Y2hfdmFsaWRhdGUoKSByZXF1aXJlcyB0aGUgc2N0cCgpIGtleS4gUGluIHRoZSByZWplY3Qgc2lkZVxuK1x0IyBvZiB0aGF0IHJ1bGU7IHRoZSBrZXllZCBpbnN0YWxscyBhYm92ZSBjb3ZlciB0aGUgYWNjZXB0IHNpZGUuXG4rXHQjIFZlcmlmeSB0aGUgcmVmdXNhbCBpcyBFSU5WQUwgKG1pc3Npbmcga2V5KSwgbm90IGEgcGFyc2UgZXJyb3IuXG4rXHRlcnI9JChvdnNfc2J4IFwiJHRcIiBweXRob24zICRvdnNfYmFzZS9vdnMtZHBjdGwucHkgYWRkLWZsb3cgc2N0cDYgXFxcbitcdCAgICBcImluX3BvcnQoMSksZXRoKCksJHY2XCIgJzInIDJcdTAwM2VcdTAwMjYxIFx1MDAzZS9kZXYvbnVsbCkgXFxcbitcdCAgICBcdTAwMjZcdTAwMjYgeyBpbmZvIFwia2V5bGVzcyBTQ1RQIGZsb3cgc2hvdWxkIGJlIHJlZnVzZWRcIlxuK1x0ICAgICAgICAgcmV0dXJuIDE7IH1cbitcdGVjaG8gXCIkZXJyXCIgfCBncmVwIC1xIFwiKDIyLFwiIHx8IHtcbitcdFx0aW5mbyBcImtleWxlc3MgU0NUUCBmbG93IHJlZnVzZWQgZm9yIHdyb25nIHJlYXNvbjogJGVyclwiXG4rXHRcdHJldHVybiAxXG4rXHR9XG4rXG4rXHRvdnNfbmV0bnNfc3Bhd25fZGFlbW9uIFwiJHRcIiBcInNlcnZlclwiIFxcXG4rXHQgICAgc29jYXQgLXUgLXQgMSBTQ1RQNi1MSVNURU46NDQ0Myxmb3JrIFxcXG4rXHQgICAgT1BFTjpcIiRyeGZpbGVcIixjcmVhdCxhcHBlbmRcbitcdG92c193YWl0IHNjdHBfZXBzX2hhcyBzZXJ2ZXIgNDQ0MyB8fCByZXR1cm4gMVxuK1xuK1x0aW5mbyBcInZlcmlmeSBTQ1RQIGFzc29jaWF0aW9uIHdpdGggcG9ydC1rZXllZCBmbG93c1wiXG4rXHRvdnNfc2J4IFwiJHRcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxuK1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcIlNDVFA2LUNPTk5FQ1Q6W2ZkMDA6OjJdOjQ0NDNcIiBcdTAwM2MvZGV2L251bGwgXFxcbitcdCAgICB8fCByZXR1cm4gMVxuK1xuK1x0aW5mbyBcInZlcmlmeSBTQ1RQIERBVEEgY2h1bmsgY3Jvc3NlcyB0aGUgZGF0YXBhdGhcIlxuK1x0b3ZzX3NieCBcIiR0XCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbitcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXCJTQ1RQNi1DT05ORUNUOltmZDAwOjoyXTo0NDQzXCIgXFxcbitcdCAgICBcdTAwM2NcdTAwM2NcdTAwM2MgXCIkcGF5bG9hZFwiIHx8IHJldHVybiAxXG4rXHRvdnNfd2FpdCBncmVwIC1xIFwiJHBheWxvYWRcIiBcIiRyeGZpbGVcIiBcXFxuK1x0ICAgIHx8IHsgaW5mbyBcInNlcnZlciBkaWQgbm90IHJlY2VpdmUgU0NUUCBEQVRBIHBheWxvYWRcIlxuK1x0ICAgICAgICAgcmV0dXJuIDE7IH1cbitcbitcdG92c19kZWxfZmxvd3MgXCIkdFwiIHNjdHA2XG4rXG4rXHRpbmZvIFwidmVyaWZ5IGNvbm5lY3Rpb24gZmFpbHMgd2l0aG91dCBmbG93c1wiXG4rXHRvdnNfYWRkX2Zsb3cgXCIkdFwiIHNjdHA2IFxcXG4rXHQgICAgJ2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHg4NmRkKSxpcHY2KHByb3RvPTU4KSxpY21wdjYoKScgXFxcbitcdCAgICAnMicgfHwgcmV0dXJuIDFcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDYgXFxcbitcdCAgICAnaW5fcG9ydCgyKSxldGgoKSxldGhfdHlwZSgweDg2ZGQpLGlwdjYocHJvdG89NTgpLGljbXB2NigpJyBcXFxuK1x0ICAgICcxJyB8fCByZXR1cm4gMVxuK1xuK1x0b3ZzX3NieCBcIiR0XCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbitcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXCJTQ1RQNi1DT05ORUNUOltmZDAwOjoyXTo0NDQzXCIgXHUwMDNjL2Rldi9udWxsIFxcXG4rXHQgICAgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFxcXG4rXHQgICAgXHUwMDI2XHUwMDI2IHsgaW5mbyBcImNvbm5lY3Rpb24gc2hvdWxkIGZhaWwgd2l0aG91dCBmbG93c1wiXG4rXHQgICAgICAgICByZXR1cm4gMTsgfVxuK1xuK1x0aW5mbyBcInJlaW5zdGFsbCBmbG93cyBhbmQgdmVyaWZ5IHJlY292ZXJ5XCJcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDYgXFxcbitcdCAgICBcImluX3BvcnQoMSksZXRoKCksJHY2LHNjdHAoZHN0PTQ0NDMpXCIgXFxcbitcdCAgICAnMicgfHwgcmV0dXJuIDFcbitcdG92c19hZGRfZmxvdyBcIiR0XCIgc2N0cDYgXFxcbitcdCAgICBcImluX3BvcnQoMiksZXRoKCksJHY2LHNjdHAoc3JjPTQ0NDMpXCIgXFxcbitcdCAgICAnMScgfHwgcmV0dXJuIDFcbitcbitcdG92c19zYnggXCIkdFwiIGlwIG5ldG5zIGV4ZWMgY2xpZW50IFxcXG4rXHQgICAgdGltZW91dCAzIHNvY2F0IC11IFNURElOIFwiU0NUUDYtQ09OTkVDVDpbZmQwMDo6Ml06NDQ0M1wiIFx1MDAzYy9kZXYvbnVsbCBcXFxuK1x0ICAgIHx8IHJldHVybiAxXG4rXG4rXHRyZXR1cm4gMFxuK31cbitcbiAjIHBzYW1wbGUgdGVzdFxuICMgLSB1c2UgcHNhbXBsZSB0byBvYnNlcnZlIHBhY2tldHNcbiB0ZXN0X3BzYW1wbGUoKSB7XG5AQCAtMTA5MSw2ICsxMjAwLDk4IEBAIHRlc3RfbmF0X2Nvbm5lY3RfdjQgKCkge1xuIFx0cmV0dXJuIDBcbiB9XG4gXG4rIyBzY3RwX25hdF9jb25uZWN0X3Y0IHRlc3RcbisjICAtIFNDVFAgYXNzb2NpYXRpb24gY3Jvc3NlcyBhIGN0KGNvbW1pdCxuYXQoZHN0PWlwOnBvcnQpKSBETkFUXG4rIyAgLSBwb3N0LXJlY2lyYyBmbG93cyBtYXRjaCB0aGUgdHJhbnNsYXRlZCBhZGRyZXNzIGFuZCBwb3J0LCBzbyB0aGVcbisjICAgIFNDVFAgYnJhbmNoIG9mIHRoZSBwb3N0LU5BVCBmbG93IGtleSB1cGRhdGUgaXMgbG9hZC1iZWFyaW5nXG4rdGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0ICgpIHtcbitcdGxvY2FsIHQ9XCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcIlxuK1x0bG9jYWwgcGF5bG9hZD1cIlNDVFBfTkFUX0RBVEFfT0tcIlxuK1x0bG9jYWwgcnhmaWxlPVwiJHtvdnNfYmFzZX0vJHt0fS9zY3RwLXJ4LnR4dFwiXG4rXG4rXHRtb2Rwcm9iZSAtcSBzY3RwIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIFwiJGtzZnRfc2tpcFwiXG4rXHRzb2NhdCAtViAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXEgXCJkZWZpbmUgV0lUSF9TQ1RQXCIgfHwgcmV0dXJuIFwiJGtzZnRfc2tpcFwiXG4rXHQjIFNDVFAgY29ubnRyYWNrIGlzIGNvbXBpbGVkIGludG8gbmZfY29ubnRyYWNrLmtvLCBzbyBjaGVjayB0aGF0XG4rXHQjIGxvYWRpbmcgaXQgYWN0dWFsbHkgZXhwb3NlZCB0aGUgU0NUUCBjb25udHJhY2sgc3lzY3Rscy5cbitcdG1vZHByb2JlIC1xIG5mX2Nvbm50cmFjayAyXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiBcIiRrc2Z0X3NraXBcIlxuK1x0WyAtZSAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X2VzdGFibGlzaGVkIF0gXFxcbitcdCAgICB8fCB7IGluZm8gXCJubyBTQ1RQIGNvbm50cmFjayBzdXBwb3J0IC0gc2tpcHBpbmdcIlxuK1x0ICAgICAgICAgcmV0dXJuIFwiJGtzZnRfc2tpcFwiOyB9XG4rXG4rXHRzYnhfYWRkIFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCIgfHwgcmV0dXJuICQ/XG4rXG4rXHRvdnNfYWRkX2RwIFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCIgc2N0cG5hdDQgfHwgcmV0dXJuIDFcbitcdGluZm8gXCJjcmVhdGUgbmFtZXNwYWNlc1wiXG4rXHRmb3IgbnMgaW4gY2xpZW50IHNlcnZlcjsgZG9cbitcdFx0b3ZzX2FkZF9uZXRuc19hbmRfdmV0aHMgXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcIiBcInNjdHBuYXQ0XCIgXFxcbitcdFx0ICAgIFwiJG5zXCIgXCIke25zOjA6MX0wXCIgXCIke25zOjA6MX0xXCIgfHwgcmV0dXJuIDFcbitcdGRvbmVcbitcbitcdGlwIG5ldG5zIGV4ZWMgY2xpZW50IGlwIGFkZHIgYWRkIDE3Mi4zMS4xMTAuMTAvMjQgZGV2IGMxXG4rXHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCBsaW5rIHNldCBjMSB1cFxuK1x0aXAgbmV0bnMgZXhlYyBzZXJ2ZXIgaXAgYWRkciBhZGQgMTcyLjMxLjExMC4yMC8yNCBkZXYgczFcbitcdGlwIG5ldG5zIGV4ZWMgc2VydmVyIGlwIGxpbmsgc2V0IHMxIHVwXG4rXG4rXHRpcCBuZXRucyBleGVjIGNsaWVudCBpcCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgMTcyLjMxLjExMC4yMFxuK1xuK1x0IyBDaGVjayBpZiB0aGUgY3QgYW5kIG5hdCBhY3Rpb25zIGNhbiBiZSBjb25maWd1cmVkLlxuK1x0b3ZzX2FkZF9mbG93IFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCIgc2N0cG5hdDQgXFxcbitcdFx0J2luX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KCknIFxcXG4rXHRcdCdjdChjb21taXQsbmF0KGRzdD0xNzIuMzEuMTEwLjIwOjU1NTUpKSxyZWNpcmMoMHgxKScgXFxcbitcdFx0XHUwMDI2XHUwMDNlIC9kZXYvbnVsbFxuK1x0aWYgWyAkPyA9PSAxIF07IHRoZW5cbitcdFx0aW5mbyBcIm5vIHN1cHBvcnQgZm9yIGN0L25hdCBhY3Rpb25zIC0gc2tpcHBpbmdcIlxuK1x0XHRvdnNfZXhpdF9zaWdcbitcdFx0cmV0dXJuICRrc2Z0X3NraXBcbitcdGZpXG4rXG4rXHRvdnNfZGVsX2Zsb3dzIFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCIgc2N0cG5hdDRcbitcbitcdG92c19hZGRfZmxvdyBcInRlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwiIHNjdHBuYXQ0IFxcXG4rXHRcdCdpbl9wb3J0KDEpLGV0aCgpLGV0aF90eXBlKDB4MDgwNiksYXJwKCknICcyJyB8fCByZXR1cm4gMVxuK1x0b3ZzX2FkZF9mbG93IFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCIgc2N0cG5hdDQgXFxcbitcdFx0J2luX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODA2KSxhcnAoKScgJzEnIHx8IHJldHVybiAxXG4rXHRvdnNfYWRkX2Zsb3cgXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcIiBzY3RwbmF0NCBcXFxuK1x0XHRcImN0X3N0YXRlKC10cmspLGluX3BvcnQoMSksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxcIlxcXG4rXCJpcHY0KGRzdD0xOTIuMTY4LjAuMjApXCIgXFxcbitcdFx0XCJjdChjb21taXQsbmF0KGRzdD0xNzIuMzEuMTEwLjIwOjU1NTUpKSxyZWNpcmMoMHgxKVwiIHx8IHJldHVybiAxXG4rXHRvdnNfYWRkX2Zsb3cgXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcIiBzY3RwbmF0NCBcXFxuK1x0XHRcImN0X3N0YXRlKC10cmspLGluX3BvcnQoMiksZXRoKCksZXRoX3R5cGUoMHgwODAwKSxpcHY0KClcIiBcXFxuK1x0XHRcImN0KGNvbW1pdCxuYXQpLHJlY2lyYygweDIpXCIgfHwgcmV0dXJuIDFcbitcbitcdG92c19hZGRfZmxvdyBcInRlc3Rfc2N0cF9uYXRfY29ubmVjdF92NFwiIHNjdHBuYXQ0IFxcXG4rXHRcdFwicmVjaXJjX2lkKDB4MSksY3Rfc3RhdGUoK3Ryay1pbnYpLGluX3BvcnQoMSksZXRoKCksXCJcXFxuK1wiZXRoX3R5cGUoMHgwODAwKSxpcHY0KGRzdD0xNzIuMzEuMTEwLjIwLHByb3RvPTEzMiksXCJcXFxuK1wic2N0cChkc3Q9NTU1NSlcIiBcXFxuK1x0XHRcIjJcIiB8fCByZXR1cm4gMVxuK1x0b3ZzX2FkZF9mbG93IFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCIgc2N0cG5hdDQgXFxcbitcdFx0XCJyZWNpcmNfaWQoMHgyKSxjdF9zdGF0ZSgrdHJrLWludiksaW5fcG9ydCgyKSxldGgoKSxcIlxcXG4rXCJldGhfdHlwZSgweDA4MDApLGlwdjQoc3JjPTE5Mi4xNjguMC4yMCxwcm90bz0xMzIpLFwiXFxcbitcInNjdHAoc3JjPTQ0NDMpXCIgXFxcbitcdFx0XCIxXCIgfHwgcmV0dXJuIDFcbitcbitcdG92c19uZXRuc19zcGF3bl9kYWVtb24gXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcIiBcInNlcnZlclwiIFxcXG4rXHRcdHNvY2F0IC11IC10IDEgU0NUUDQtTElTVEVOOjU1NTUsZm9yayBcXFxuK1x0XHRPUEVOOlwiJHJ4ZmlsZVwiLGNyZWF0LGFwcGVuZFxuK1x0b3ZzX3dhaXQgc2N0cF9lcHNfaGFzIHNlcnZlciA1NTU1IHx8IHJldHVybiAxXG4rXG4rXHRpbmZvIFwidmVyaWZ5IFNDVFAgYXNzb2NpYXRpb24gYWNyb3NzIE5BVFwiXG4rXHRvdnNfc2J4IFwidGVzdF9zY3RwX25hdF9jb25uZWN0X3Y0XCIgaXAgbmV0bnMgZXhlYyBjbGllbnQgXFxcbitcdCAgICB0aW1lb3V0IDMgc29jYXQgLXUgU1RESU4gXCJTQ1RQNC1DT05ORUNUOjE5Mi4xNjguMC4yMDo0NDQzXCIgXFxcbitcdCAgICBcdTAwM2MvZGV2L251bGwgfHwgcmV0dXJuIDFcbitcbitcdGluZm8gXCJ2ZXJpZnkgU0NUUCBEQVRBIGNodW5rIGNyb3NzZXMgTkFUXCJcbitcdG92c19zYnggXCJ0ZXN0X3NjdHBfbmF0X2Nvbm5lY3RfdjRcIiBpcCBuZXRucyBleGVjIGNsaWVudCBcXFxuK1x0ICAgIHRpbWVvdXQgMyBzb2NhdCAtdSBTVERJTiBcIlNDVFA0LUNPTk5FQ1Q6MTkyLjE2OC4wLjIwOjQ0NDNcIiBcXFxuK1x0ICAgIFx1MDAzY1x1MDAzY1x1MDAzYyBcIiRwYXlsb2FkXCIgfHwgcmV0dXJuIDFcbitcdG92c193YWl0IGdyZXAgLXEgXCIkcGF5bG9hZFwiIFwiJHJ4ZmlsZVwiIFxcXG4rXHQgICAgfHwgeyBpbmZvIFwic2VydmVyIGRpZCBub3QgcmVjZWl2ZSBTQ1RQIERBVEEgcGF5bG9hZFwiXG4rXHQgICAgICAgICByZXR1cm4gMTsgfVxuK1xuK1x0aW5mbyBcImRvbmUuLi5cIlxuK1x0cmV0dXJuIDBcbit9XG4rXG4gIyBuYXRfcmVsYXRlZF92NCB0ZXN0XG4gIyAgLSBjbGllbnQtXHUwMDNlc2VydmVyIGlwIHBhY2tldHMgZ28gdmlhIFNOQVRcbiAjICAtIGNsaWVudCBzb2xpY2l0cyBJQ01QIGRlc3RpbmF0aW9uIHVucmVhY2hhYmxlIHBhY2tldCBmcm9tIHNlcnZlclxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6NDguMzQzMjg5MTgxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjIyMzIxMzc2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIGRpZmYgdG91Y2hpbmcgdHdvIGZpbGVzOiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L29wZW52c3dpdGNoL2NvbmZpZ2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2guc2hgLiBUaGUgZmlsZSBwYXRocyBpbW1lZGlhdGVseSBwb2ludCB0b3dhcmRzIHNlbGYtdGVzdHMgd2l0aGluIGEgdXNlci1zcGFjZSBlbnZpcm9ubWVudCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoLiBJIG5lZWQgdG8gdHJpYWdlIHRoaXMgYmFzZWQgb24gd2hldGhlciBpdCBhZmZlY3RzIHRoZSBrZXJuZWwgaXRzZWxmLlxuXG5JJ20gY29uc3VsdGluZyB0aGUgXCJXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2VcIiBjcml0ZXJpYS4gU3BlY2lmaWNhbGx5LCB0aGUgcnVsZXMgc3RhdGUgdGhhdCBjaGFuZ2VzIHRvIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIGxpa2UgYHRvb2xzL2AsIGBzYW1wbGVzL2AsIG9yIGBzY3JpcHRzL2AsIGFyZSBub3Qgd29ydGggZnV6emluZyBpZiB0aGV5ICpkb24ndCogYWZmZWN0IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuXG5JJ3ZlIHZlcmlmaWVkIHRoYXQgdGhlIGRpZmYsIGFzIHByZXNlbnRlZCwgb25seSBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC9gIGRpcmVjdG9yeS4gTm8gb3RoZXIgZmlsZXMgYXJlIHRvdWNoZWQsIGFuZCBJIGNhbiBjb25maXJtIHRoaXMgZWl0aGVyIHRocm91Z2ggYSBxdWljayBgZ2l0IGxvZyAtMWAgY2hlY2ssIG9yLCBpbiB0aGlzIGNhc2UsIGJ5IHZpcnR1ZSBvZiB0aGUgcHJvdmlkZWQgcHJvbXB0LlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBtZWFucyB0aGF0IHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB1c2VyLXNwYWNlIHRlc3QgY29kZS4gSXQgZG9lcyBub3QgYWx0ZXIgYW55IGNvcmUga2VybmVsIGNvbXBvbmVudHMgb3IgdGhlaXIgY29tcGlsZWQgaW1hZ2VzLCBiYXNlZCBvbiB0aGUgZGlmZi4gU28gSSdtIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9ucyBhcmUgc3RyYWlnaHRmb3J3YXJkOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AgbGlzdHMgd2lsbCBiZSBlbXB0eSAob3IgbnVsbCksIGFzIHRoaXMgY2hhbmdlIGhhcyBubyBpbXBhY3Qgb24gcmVsZXZhbnQga2VybmVsIHN5bWJvbHMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gc2VsZnRlc3RzIHNjcmlwdHMgYW5kIGNvbmZpZyBmaWxlcyBpbiBhIHVzZXItc3BhY2UgdGVzdGluZyBkaXJlY3RvcnksIHRoZXJlYnkgbm90IGFmZmVjdGluZyB0aGUga2VybmVsJ3MgY29tcGlsYXRpb24gb3IgbW9kdWxlcy5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NTgsIk91dHB1dFRva2VucyI6NzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzowNDo1NC41NjY1MDUzMjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9vcGVudnN3aXRjaC8pLCB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvb3BlbnZzd2l0Y2gvKSwgd2hpY2ggZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6NTQuNTY2NTM3MDc1WiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8j9gx[1] Phase: Running StartedAt: 2026-09-09 13:05:05 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8j9gx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-09 13:05:05 +0000 UTC FinishedAt: 2026-09-09 13:05:11 +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,}