{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"mining","params":"","code":"Y29uc3QgTUFYX0RJR0lUUz0yMCxQUk9QRVJUWV9PUFM9e0FERDp7YWRkOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLnBsdXMoeSkscmVtb3ZlOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLm1pbnVzKHkpLGRlZmF1bHRWYWx1ZTowfSxNVUxUSVBMWTp7YWRkOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLm11bHRpcGxpZWRCeSh5KS5kcCgyMCkscmVtb3ZlOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLmRpdmlkZWRCeSh5KS5kcCgyMCksZGVmYXVsdFZhbHVlOjF9fTthY3Rpb25zLmNyZWF0ZVNTQz1hc3luYygpPT57aWYoITE9PT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoIm1pbmluZ1Bvd2VyIikpe2F3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgibWluaW5nUG93ZXIiLFsiaWQiLCJwb3dlciJdKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBvb2xzIixbImlkIl0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgidG9rZW5Qb29scyIsWyJzeW1ib2wiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJuZnRUb2tlblBvb2xzIixbInN5bWJvbCJdKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBhcmFtcyIpO2NvbnN0IHBhcmFtcz17cG9vbENyZWF0aW9uRmVlOiIxMDAwIixwb29sVXBkYXRlRmVlOiIzMDAiLG1heExvdHRlcmllc1BlckJsb2NrOjIwLG1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2s6MWU0LHByb2Nlc3NRdWVyeUxpbWl0OjFlM307YXdhaXQgYXBpLmRiLmluc2VydCgicGFyYW1zIixwYXJhbXMpfWVsc2V7Y29uc3QgcGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KTtwYXJhbXMudXBkYXRlSW5kZXh8fChhd2FpdCBhcGkuZGIuYWRkSW5kZXhlcygibWluaW5nUG93ZXIiLFt7bmFtZToiYnlQb29sSWRBbmRBY2NvdW50IixpbmRleDp7aWQ6MSxhY2NvdW50OjF9fV0pLHBhcmFtcy51cGRhdGVJbmRleD0xLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIscGFyYW1zKSl9fSxhY3Rpb25zLnVwZGF0ZVBhcmFtcz1hc3luYyBwYXlsb2FkPT57aWYoYXBpLnNlbmRlciE9PWFwaS5vd25lcilyZXR1cm47Y29uc3R7cG9vbENyZWF0aW9uRmVlOnBvb2xDcmVhdGlvbkZlZSxwb29sVXBkYXRlRmVlOnBvb2xVcGRhdGVGZWUsbWF4TG90dGVyaWVzUGVyQmxvY2s6bWF4TG90dGVyaWVzUGVyQmxvY2ssbWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jazptYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrLHByb2Nlc3NRdWVyeUxpbWl0OnByb2Nlc3NRdWVyeUxpbWl0fT1wYXlsb2FkLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7aWYocG9vbENyZWF0aW9uRmVlKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHBvb2xDcmVhdGlvbkZlZSYmIWFwaS5CaWdOdW1iZXIocG9vbENyZWF0aW9uRmVlKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHBvb2xDcmVhdGlvbkZlZSkuZ3RlKDApLCJpbnZhbGlkIHBvb2xDcmVhdGlvbkZlZSIpKXJldHVybjtwYXJhbXMucG9vbENyZWF0aW9uRmVlPXBvb2xDcmVhdGlvbkZlZX1pZihwb29sVXBkYXRlRmVlKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHBvb2xVcGRhdGVGZWUmJiFhcGkuQmlnTnVtYmVyKHBvb2xVcGRhdGVGZWUpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIocG9vbFVwZGF0ZUZlZSkuZ3RlKDApLCJpbnZhbGlkIHBvb2xVcGRhdGVGZWUiKSlyZXR1cm47cGFyYW1zLnBvb2xVcGRhdGVGZWU9cG9vbFVwZGF0ZUZlZX1pZihtYXhMb3R0ZXJpZXNQZXJCbG9jayl7aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihtYXhMb3R0ZXJpZXNQZXJCbG9jaykmJm1heExvdHRlcmllc1BlckJsb2NrPj0xLCJpbnZhbGlkIG1heExvdHRlcmllc1BlckJsb2NrIikpcmV0dXJuO3BhcmFtcy5tYXhMb3R0ZXJpZXNQZXJCbG9jaz1tYXhMb3R0ZXJpZXNQZXJCbG9ja31pZihtYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrKXtpZighYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKG1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2spJiZtYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrPj0xLCJpbnZhbGlkIG1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2siKSlyZXR1cm47cGFyYW1zLm1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2s9bWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9ja31pZihwcm9jZXNzUXVlcnlMaW1pdCl7aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihwcm9jZXNzUXVlcnlMaW1pdCkmJnByb2Nlc3NRdWVyeUxpbWl0Pj0xLCJpbnZhbGlkIHByb2Nlc3NRdWVyeUxpbWl0IikpcmV0dXJuO3BhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdD1wcm9jZXNzUXVlcnlMaW1pdH1hd2FpdCBhcGkuZGIudXBkYXRlKCJwYXJhbXMiLHBhcmFtcyl9O2NvbnN0IGZpbmRBbmRQcm9jZXNzQWxsPWFzeW5jKGNvbnRyYWN0TmFtZSx0YWJsZSxxdWVyeSxjYWxsYmFjayk9PntsZXQgb2Zmc2V0PTAscmVzdWx0cz1bXSxkb25lPSExO2Zvcig7IWRvbmU7KWlmKHJlc3VsdHM9YXdhaXQgYXBpLmRiLmZpbmRJblRhYmxlKGNvbnRyYWN0TmFtZSx0YWJsZSxxdWVyeSwxZTMsb2Zmc2V0KSxyZXN1bHRzKXtmb3IobGV0IGk9MDtpPHJlc3VsdHMubGVuZ3RoO2krPTEpYXdhaXQgY2FsbGJhY2socmVzdWx0c1tpXSk7cmVzdWx0cy5sZW5ndGg8MWUzP2RvbmU9ITA6b2Zmc2V0Kz0xZTN9fTthc3luYyBmdW5jdGlvbiB2YWxpZGF0ZU5mdFByb3BlcnRpZXMocHJvcGVydGllcyl7aWYoIWFwaS5hc3NlcnQocHJvcGVydGllcyYmQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzKSwiaW52YWxpZCBuZnRUb2tlbk1pbmVyIHByb3BlcnRpZXMiKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydChwcm9wZXJ0aWVzLmxlbmd0aD4wJiZwcm9wZXJ0aWVzLmxlbmd0aDw9NCwibmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQiKSlyZXR1cm4hMTtmb3IobGV0IGk9MDtpPHByb3BlcnRpZXMubGVuZ3RoO2krPTEpe2NvbnN0IHByb3A9cHJvcGVydGllc1tpXSxwcm9wS2V5cz1PYmplY3Qua2V5cyhwcm9wKTtmb3IobGV0IGo9MDtqPHByb3BLZXlzLmxlbmd0aDtqKz0xKXtjb25zdCBwcm9wS2V5PXByb3BLZXlzW2pdO2lmKCJvcCI9PT1wcm9wS2V5KXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHByb3Aub3AmJlBST1BFUlRZX09QU1twcm9wLm9wXSwibmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIG9wIHNob3VsZCBiZSBBREQgb3IgTVVMVElQTFkiKSlyZXR1cm4hMX1lbHNlIGlmKCJuYW1lIj09PXByb3BLZXkpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgcHJvcC5uYW1lJiZwcm9wLm5hbWUubGVuZ3RoPD0xNiwibmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIG5hbWUgc2hvdWxkIGJlIGEgc3RyaW5nIG9mIGxlbmd0aCA8PSAxNiIpKXJldHVybiExfWVsc2V7aWYoImJ1cm5DaGFuZ2UiIT09cHJvcEtleSlyZXR1cm4gYXBpLmFzc2VydCghMSwibmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIGZpZWxkIGludmFsaWQiKSwhMTt7aWYoIWFwaS5hc3NlcnQoIm9iamVjdCI9PXR5cGVvZiBwcm9wLmJ1cm5DaGFuZ2UmJiJzdHJpbmciPT10eXBlb2YgcHJvcC5idXJuQ2hhbmdlLnN5bWJvbCYmYXBpLkJpZ051bWJlcihwcm9wLmJ1cm5DaGFuZ2UucXVhbnRpdHkpLmlzRmluaXRlKCkmJmFwaS5CaWdOdW1iZXIocHJvcC5idXJuQ2hhbmdlLnF1YW50aXR5KS5pc1Bvc2l0aXZlKCksIm5mdFRva2VuTWluZXIgcHJvcGVydGllcyBidXJuQ2hhbmdlIGludmFsaWQiKSlyZXR1cm4hMTtjb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpwcm9wLmJ1cm5DaGFuZ2Uuc3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQodG9rZW4sIm5mdFRva2VuTWluZXIgcHJvcGVydGllcyBidXJuQ2hhbmdlIHN5bWJvbCBub3QgZm91bmQiKSlyZXR1cm4hMX19fX1yZXR1cm4hMH1mdW5jdGlvbiB2YWxpZGF0ZU5mdFR5cGVNYXAodHlwZU1hcCxwcm9wZXJ0aWVzKXtpZighYXBpLmFzc2VydCh0eXBlTWFwJiYib2JqZWN0Ij09dHlwZW9mIHR5cGVNYXAsImludmFsaWQgbmZ0VG9rZW5NaW5lciB0eXBlTWFwIikpcmV0dXJuITE7Y29uc3QgdHlwZXM9T2JqZWN0LmtleXModHlwZU1hcCk7Zm9yKGxldCBqPTA7ajx0eXBlcy5sZW5ndGg7ais9MSl7Y29uc3QgdHlwZUNvbmZpZz10eXBlTWFwW3R5cGVzW2pdXTtpZighYXBpLmFzc2VydChBcnJheS5pc0FycmF5KHR5cGVDb25maWcpJiZ0eXBlQ29uZmlnLmxlbmd0aD09PXByb3BlcnRpZXMubGVuZ3RoLCJuZnRUb2tlbk1pbmVyIHR5cGVDb25maWcgbGVuZ3RoIG1pc21hdGNoIikpcmV0dXJuITE7Zm9yKGxldCBrPTA7azx0eXBlQ29uZmlnLmxlbmd0aDtrKz0xKXtjb25zdCB0eXBlUHJvcGVydHk9YXBpLkJpZ051bWJlcih0eXBlQ29uZmlnW2tdKTtpZighYXBpLmFzc2VydCghdHlwZVByb3BlcnR5LmlzTmFOKCkmJnR5cGVQcm9wZXJ0eS5pc0Zpbml0ZSgpLCJuZnRUb2tlbk1pbmVyIHR5cGVDb25maWcgaW52YWxpZCIpKXJldHVybiExO2lmKCJNVUxUSVBMWSI9PT1wcm9wZXJ0aWVzW2tdLm9wJiYhYXBpLmFzc2VydCh0eXBlUHJvcGVydHkuZ3RlKC4wMSkmJnR5cGVQcm9wZXJ0eS5sdGUoMTAwKSwibmZ0VG9rZW5NaW5lciB0eXBlQ29uZmlnIE1VTFRJUExZIHByb3BlcnR5IHNob3VsZCBiZSBiZXR3ZWVuIDAuMDEgYW5kIDEwMCIpKXJldHVybiExfX1yZXR1cm4hMH1hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZVRva2VuTWluZXJzKHRva2VuTWluZXJzLG5mdFRva2VuTWluZXIpe2lmKCFhcGkuYXNzZXJ0KHRva2VuTWluZXJzJiZBcnJheS5pc0FycmF5KHRva2VuTWluZXJzKSwidG9rZW5NaW5lcnMgaW52YWxpZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KHRva2VuTWluZXJzLmxlbmd0aD49MSYmdG9rZW5NaW5lcnMubGVuZ3RoPD0yfHxuZnRUb2tlbk1pbmVyJiYwPT09dG9rZW5NaW5lcnMubGVuZ3RoLCJvbmx5IDEgb3IgMiB0b2tlbk1pbmVycyBhbGxvd2VkIikpcmV0dXJuITE7Y29uc3QgdG9rZW5NaW5lclN5bWJvbHM9bmV3IFNldDtmb3IobGV0IGk9MDtpPHRva2VuTWluZXJzLmxlbmd0aDtpKz0xKXtjb25zdCB0b2tlbk1pbmVyQ29uZmlnPXRva2VuTWluZXJzW2ldO2lmKCFhcGkuYXNzZXJ0KHRva2VuTWluZXJDb25maWcmJnRva2VuTWluZXJDb25maWcuc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHRva2VuTWluZXJDb25maWcuc3ltYm9sLCJ0b2tlbk1pbmVycyBpbnZhbGlkIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQoIXRva2VuTWluZXJTeW1ib2xzLmhhcyh0b2tlbk1pbmVyQ29uZmlnLnN5bWJvbCksInRva2VuTWluZXJzIGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBzeW1ib2xzIikpcmV0dXJuITE7dG9rZW5NaW5lclN5bWJvbHMuYWRkKHRva2VuTWluZXJDb25maWcuc3ltYm9sKTtjb25zdHtzeW1ib2w6c3ltYm9sfT10b2tlbk1pbmVyQ29uZmlnLHRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnN5bWJvbH0pO2lmKCFhcGkuYXNzZXJ0KHRva2VuJiZ0b2tlbi5zdGFraW5nRW5hYmxlZCwidG9rZW5NaW5lcnMgbXVzdCBoYXZlIHN0YWtpbmcgZW5hYmxlZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIodG9rZW5NaW5lckNvbmZpZy5tdWx0aXBsaWVyKSYmdG9rZW5NaW5lckNvbmZpZy5tdWx0aXBsaWVyPj0xJiZ0b2tlbk1pbmVyQ29uZmlnLm11bHRpcGxpZXI8PTEwMCwidG9rZW5NaW5lciBtdWx0aXBsaWVyIG11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDEgdG8gMTAwIikpcmV0dXJuITF9aWYobmZ0VG9rZW5NaW5lcil7aWYoIWFwaS5hc3NlcnQobmZ0VG9rZW5NaW5lci5zeW1ib2wmJiJzdHJpbmciPT10eXBlb2YgbmZ0VG9rZW5NaW5lci5zeW1ib2wsIm5mdFRva2VuTWluZXIgaW52YWxpZCIpKXJldHVybiExO2NvbnN0e3N5bWJvbDpzeW1ib2wsdHlwZU1hcDp0eXBlTWFwLHByb3BlcnRpZXM6cHJvcGVydGllcyx0eXBlRmllbGQ6dHlwZUZpZWxkfT1uZnRUb2tlbk1pbmVyLG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoIm5mdCIsIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQobmZ0JiZuZnQuZGVsZWdhdGlvbkVuYWJsZWQsIm5mdFRva2VuTWluZXIgbXVzdCBoYXZlIGRlbGVnYXRpb24gZW5hYmxlZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KHR5cGVGaWVsZCYmInN0cmluZyI9PXR5cGVvZiB0eXBlRmllbGQsInR5cGVGaWVsZCBtdXN0IGJlIGEgc3RyaW5nIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQobmZ0LnByb3BlcnRpZXNbdHlwZUZpZWxkXSYmInN0cmluZyI9PT1uZnQucHJvcGVydGllc1t0eXBlRmllbGRdLnR5cGUsIm5mdFRva2VuTWluZXIgbXVzdCBoYXZlIHN0cmluZyB0eXBlIHByb3BlcnR5IikpcmV0dXJuITE7aWYoIWF3YWl0IHZhbGlkYXRlTmZ0UHJvcGVydGllcyhwcm9wZXJ0aWVzKSlyZXR1cm4hMTtpZighdmFsaWRhdGVOZnRUeXBlTWFwKHR5cGVNYXAscHJvcGVydGllcykpcmV0dXJuITF9cmV0dXJuITB9YXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVUb2tlbk1pbmVyc0NoYW5nZShvbGRUb2tlbk1pbmVycyx0b2tlbk1pbmVycyxvbGROZnRUb2tlbk1pbmVyLG5mdFRva2VuTWluZXIpe2lmKCFhcGkuYXNzZXJ0KHRva2VuTWluZXJzLmxlbmd0aD09PW9sZFRva2VuTWluZXJzLmxlbmd0aCwiY2Fubm90IGNoYW5nZSB3aGljaCB0b2tlbnMgYXJlIGluIHRva2VuTWluZXJzIikpcmV0dXJuITE7bGV0IGNoYW5nZWQ9ITE7Zm9yKGxldCBpPTA7aTx0b2tlbk1pbmVycy5sZW5ndGg7aSs9MSl7Y29uc3Qgb2xkQ29uZmlnPW9sZFRva2VuTWluZXJzW2ldLG5ld0NvbmZpZz10b2tlbk1pbmVyc1tpXTtpZighYXBpLmFzc2VydChvbGRDb25maWcuc3ltYm9sPT09bmV3Q29uZmlnLnN5bWJvbCwiY2Fubm90IGNoYW5nZSB3aGljaCB0b2tlbnMgYXJlIGluIHRva2VuTWluZXJzIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihuZXdDb25maWcubXVsdGlwbGllcikmJm5ld0NvbmZpZy5tdWx0aXBsaWVyPj0xJiZuZXdDb25maWcubXVsdGlwbGllcjw9MTAwLCJ0b2tlbk1pbmVyIG11bHRpcGxpZXIgbXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMSB0byAxMDAiKSlyZXR1cm4hMTtvbGRDb25maWcubXVsdGlwbGllciE9PW5ld0NvbmZpZy5tdWx0aXBsaWVyJiYoY2hhbmdlZD0hMCl9aWYoIWFwaS5hc3NlcnQoISFvbGROZnRUb2tlbk1pbmVyPT0hIW5mdFRva2VuTWluZXIsImNhbm5vdCBjaGFuZ2UgbmZ0VG9rZW5NaW5lciB0b2tlbiIpKXJldHVybiExO2lmKG5mdFRva2VuTWluZXIpe2lmKCFhcGkuYXNzZXJ0KG9sZE5mdFRva2VuTWluZXIuc3ltYm9sPT09bmZ0VG9rZW5NaW5lci5zeW1ib2wsImNhbm5vdCBjaGFuZ2UgbmZ0VG9rZW5NaW5lciB0b2tlbiIpKXJldHVybiExO2NvbnN0e3R5cGVNYXA6dHlwZU1hcCxwcm9wZXJ0aWVzOnByb3BlcnRpZXMsdHlwZUZpZWxkOnR5cGVGaWVsZH09bmZ0VG9rZW5NaW5lcjtpZighYXBpLmFzc2VydCh0eXBlRmllbGQmJiJzdHJpbmciPT10eXBlb2YgdHlwZUZpZWxkJiZ0eXBlRmllbGQ9PT1vbGROZnRUb2tlbk1pbmVyLnR5cGVGaWVsZCwiY2Fubm90IGNoYW5nZSBuZnRUb2tlbk1pbmVyIHR5cGVGaWVsZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KHR5cGVNYXAmJiJvYmplY3QiPT10eXBlb2YgdHlwZU1hcCwiaW52YWxpZCBuZnRUb2tlbk1pbmVyIHR5cGVNYXAiKSlyZXR1cm4hMTtpZighYXdhaXQgdmFsaWRhdGVOZnRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpKXJldHVybiExO2lmKHByb3BlcnRpZXMubGVuZ3RoIT09b2xkTmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzLmxlbmd0aCljaGFuZ2VkPSEwO2Vsc2UgZm9yKGxldCBpPTA7aTxwcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKXtjb25zdCBwcm9wPXByb3BlcnRpZXNbaV0sb2xkUHJvcD1vbGROZnRUb2tlbk1pbmVyLnByb3BlcnRpZXNbaV07cHJvcC5vcCE9PW9sZFByb3Aub3AmJihjaGFuZ2VkPSEwKX1pZighdmFsaWRhdGVOZnRUeXBlTWFwKHR5cGVNYXAscHJvcGVydGllcykpcmV0dXJuITE7Y29uc3Qgb2xkVHlwZXM9T2JqZWN0LmtleXMob2xkTmZ0VG9rZW5NaW5lci50eXBlTWFwKTtmb3IobGV0IGk9MDtpPG9sZFR5cGVzLmxlbmd0aDtpKz0xKXtjb25zdCBvbGRUeXBlPW9sZFR5cGVzW2ldLG9sZFR5cGVDb25maWc9b2xkTmZ0VG9rZW5NaW5lci50eXBlTWFwW29sZFR5cGVdLHR5cGVDb25maWc9dHlwZU1hcFtvbGRUeXBlXTtpZighYXBpLmFzc2VydCh0eXBlQ29uZmlnLCJ0eXBlQ29uZmlnIHR5cGVzIG11c3QgYmUgYSBzdXBlcnNldCBvZiBvbGQgdHlwZUNvbmZpZyB0eXBlcyIpKXJldHVybiExO2ZvcihsZXQgaj0wO2o8dHlwZUNvbmZpZy5sZW5ndGg7ais9MSlvbGRUeXBlQ29uZmlnW2pdIT09dHlwZUNvbmZpZ1tqXSYmKGNoYW5nZWQ9ITApfX1yZXR1cm57Y2hhbmdlZDpjaGFuZ2VkfX1mdW5jdGlvbiBjb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIsdG9rZW5NaW5lcnMsbmZ0VG9rZW5NaW5lcil7bGV0IHBvd2VyPWFwaS5CaWdOdW1iZXIoMCk7Zm9yKGxldCBpPTA7aTx0b2tlbk1pbmVycy5sZW5ndGg7aSs9MSltaW5pbmdQb3dlci5iYWxhbmNlc1tpXSYmKHBvd2VyPXBvd2VyLnBsdXMoYXBpLkJpZ051bWJlcihtaW5pbmdQb3dlci5iYWxhbmNlc1tpXSkubXVsdGlwbGllZEJ5KHRva2VuTWluZXJzW2ldLm11bHRpcGxpZXIpKSk7aWYobmZ0VG9rZW5NaW5lciYmbWluaW5nUG93ZXIubmZ0QmFsYW5jZXMpe2xldCBuZnRQb3dlcj1hcGkuQmlnTnVtYmVyKDEpO2ZvcihsZXQgaT0wO2k8bmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKW5mdFBvd2VyPW5mdFBvd2VyLm11bHRpcGxpZWRCeShtaW5pbmdQb3dlci5uZnRCYWxhbmNlc1tpXSkuZHAoMjApO3Bvd2VyPXBvd2VyLnBsdXMobmZ0UG93ZXIpfXJldHVybiBwb3dlci5pc1Bvc2l0aXZlKCkmJnBvd2VyLmlzRmluaXRlKCk/cG93ZXI6YXBpLkJpZ051bWJlcigwKX1hc3luYyBmdW5jdGlvbiB1cGRhdGVNaW5pbmdQb3dlcihwb29sLHRva2VuLGFjY291bnQsc3Rha2VkUXVhbnRpdHksZGVsZWdhdGVkUXVhbnRpdHksdXBkYXRlUG9vbFRpbWVzdGFtcCl7bGV0IG1pbmluZ1Bvd2VyPWF3YWl0IGFwaS5kYi5maW5kT25lKCJtaW5pbmdQb3dlciIse2lkOnBvb2wuaWQsYWNjb3VudDphY2NvdW50fSksc3Rha2U9YXBpLkJpZ051bWJlcihzdGFrZWRRdWFudGl0eSksb2xkTWluaW5nUG93ZXI9YXBpLkJpZ051bWJlcigwKTtzdGFrZT1zdGFrZS5wbHVzKGRlbGVnYXRlZFF1YW50aXR5KTtjb25zdCB0b2tlbkluZGV4PXBvb2wudG9rZW5NaW5lcnMuZmluZEluZGV4KHQ9PnQuc3ltYm9sPT09dG9rZW4pO2lmKG1pbmluZ1Bvd2VyKXtpZih1cGRhdGVQb29sVGltZXN0YW1wJiZtaW5pbmdQb3dlci51cGRhdGVQb29sVGltZXN0YW1wIT09dXBkYXRlUG9vbFRpbWVzdGFtcCl7Zm9yKGxldCBpPTA7aTxwb29sLnRva2VuTWluZXJzLmxlbmd0aDtpKz0xKW1pbmluZ1Bvd2VyLmJhbGFuY2VzW2ldPSIwIjtpZihtaW5pbmdQb3dlci5uZnRCYWxhbmNlcyl7bWluaW5nUG93ZXIubmZ0QmFsYW5jZXM9e307Y29uc3R7bmZ0QmFsYW5jZXM6bmZ0QmFsYW5jZXN9PW1pbmluZ1Bvd2VyO2ZvcihsZXQgaj0wO2o8cG9vbC5uZnRUb2tlbk1pbmVyLnByb3BlcnRpZXMubGVuZ3RoO2orPTEpe2NvbnN0IHByb3BlcnR5PXBvb2wubmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzW2pdLG9wSW5mbz1QUk9QRVJUWV9PUFNbcHJvcGVydHkub3BdO25mdEJhbGFuY2VzW2pdPW9wSW5mby5kZWZhdWx0VmFsdWV9fX1lbHNlIG1pbmluZ1Bvd2VyLmJhbGFuY2VzW3Rva2VuSW5kZXhdfHwobWluaW5nUG93ZXIuYmFsYW5jZXNbdG9rZW5JbmRleF09IjAiKTtvbGRNaW5pbmdQb3dlcj1jb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIscG9vbC50b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXIpLG1pbmluZ1Bvd2VyLmJhbGFuY2VzW3Rva2VuSW5kZXhdPXN0YWtlLnBsdXMobWluaW5nUG93ZXIuYmFsYW5jZXNbdG9rZW5JbmRleF0pfWVsc2V7Y29uc3QgYmFsYW5jZXM9e307YmFsYW5jZXNbdG9rZW5JbmRleF09c3Rha2UsbWluaW5nUG93ZXI9e2lkOnBvb2wuaWQsYWNjb3VudDphY2NvdW50LGJhbGFuY2VzOmJhbGFuY2VzLHBvd2VyOnskbnVtYmVyRGVjaW1hbDoiMCJ9fSxtaW5pbmdQb3dlcj1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJtaW5pbmdQb3dlciIsbWluaW5nUG93ZXIpfWNvbnN0IG5ld01pbmluZ1Bvd2VyPWNvbXB1dGVNaW5pbmdQb3dlcihtaW5pbmdQb3dlcixwb29sLnRva2VuTWluZXJzLHBvb2wubmZ0VG9rZW5NaW5lcik7cmV0dXJuIG1pbmluZ1Bvd2VyLnBvd2VyPXskbnVtYmVyRGVjaW1hbDpuZXdNaW5pbmdQb3dlcn0sdXBkYXRlUG9vbFRpbWVzdGFtcCYmKG1pbmluZ1Bvd2VyLnVwZGF0ZVBvb2xUaW1lc3RhbXA9dXBkYXRlUG9vbFRpbWVzdGFtcCksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibWluaW5nUG93ZXIiLG1pbmluZ1Bvd2VyKSxuZXdNaW5pbmdQb3dlci5taW51cyhvbGRNaW5pbmdQb3dlcil9ZnVuY3Rpb24gZ2V0TmZ0QWNjb3VudChuZnQpe3JldHVybiJtaW5pbmciPT09bmZ0LmRlbGVnYXRlZFRvLmFjY291bnQmJiJjIj09PW5mdC5kZWxlZ2F0ZWRUby5vd25lZEJ5P25mdC5hY2NvdW50OiJ1Ij09PW5mdC5kZWxlZ2F0ZWRUby5vd25lZEJ5P25mdC5kZWxlZ2F0ZWRUby5hY2NvdW50Om51bGx9YXN5bmMgZnVuY3Rpb24gdXBkYXRlTmZ0TWluaW5nUG93ZXIocG9vbCxuZnQsdHlwZVByb3BlcnRpZXMsYWRkLHVwZGF0ZVBvb2xUaW1lc3RhbXApe2NvbnN0IGFjY291bnQ9Z2V0TmZ0QWNjb3VudChuZnQpO2lmKCFhY2NvdW50KXJldHVybiAwO2xldCBtaW5pbmdQb3dlcj1hd2FpdCBhcGkuZGIuZmluZE9uZSgibWluaW5nUG93ZXIiLHtpZDpwb29sLmlkLGFjY291bnQ6YWNjb3VudH0pLG9sZE1pbmluZ1Bvd2VyPWFwaS5CaWdOdW1iZXIoMCk7aWYobWluaW5nUG93ZXIpe21pbmluZ1Bvd2VyLm5mdEJhbGFuY2VzfHwobWluaW5nUG93ZXIubmZ0QmFsYW5jZXM9e30pO2NvbnN0e25mdEJhbGFuY2VzOm5mdEJhbGFuY2VzfT1taW5pbmdQb3dlcjtmb3IobGV0IGk9MDtpPHBvb2wubmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKXtjb25zdCBwcm9wZXJ0eT1wb29sLm5mdFRva2VuTWluZXIucHJvcGVydGllc1tpXSxvcEluZm89UFJPUEVSVFlfT1BTW3Byb3BlcnR5Lm9wXTtuZnRCYWxhbmNlc1tpXSYmbWluaW5nUG93ZXIudXBkYXRlUG9vbFRpbWVzdGFtcD09PXVwZGF0ZVBvb2xUaW1lc3RhbXB8fChuZnRCYWxhbmNlc1tpXT1vcEluZm8uZGVmYXVsdFZhbHVlKX1vbGRNaW5pbmdQb3dlcj1jb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIscG9vbC50b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXIpO2ZvcihsZXQgaT0wO2k8cG9vbC5uZnRUb2tlbk1pbmVyLnByb3BlcnRpZXMubGVuZ3RoO2krPTEpe2NvbnN0IHByb3BlcnR5PXBvb2wubmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzW2ldLG9wSW5mbz1QUk9QRVJUWV9PUFNbcHJvcGVydHkub3BdO25mdEJhbGFuY2VzW2ldPWFkZD9vcEluZm8uYWRkKG5mdEJhbGFuY2VzW2ldLHR5cGVQcm9wZXJ0aWVzW2ldKTpvcEluZm8ucmVtb3ZlKG5mdEJhbGFuY2VzW2ldLHR5cGVQcm9wZXJ0aWVzW2ldKX19ZWxzZXtjb25zdCBuZnRCYWxhbmNlcz17fTtmb3IobGV0IGk9MDtpPHBvb2wubmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKXtjb25zdCBwcm9wZXJ0eT1wb29sLm5mdFRva2VuTWluZXIucHJvcGVydGllc1tpXSxvcEluZm89UFJPUEVSVFlfT1BTW3Byb3BlcnR5Lm9wXTthZGQ/bmZ0QmFsYW5jZXNbaV09b3BJbmZvLmFkZChvcEluZm8uZGVmYXVsdFZhbHVlLHR5cGVQcm9wZXJ0aWVzW2ldKTphcGkuYXNzZXJ0KCExLCJ1bmV4cGVjdGVkIGNvbmRpdGlvbjogcmVtb3ZlIHdpdGhvdXQgcHJldmlvdXMgbWluaW5nUG93ZXIiKX1taW5pbmdQb3dlcj17aWQ6cG9vbC5pZCxhY2NvdW50OmFjY291bnQsYmFsYW5jZXM6e30sbmZ0QmFsYW5jZXM6bmZ0QmFsYW5jZXMscG93ZXI6eyRudW1iZXJEZWNpbWFsOiIwIn19LG1pbmluZ1Bvd2VyPWF3YWl0IGFwaS5kYi5pbnNlcnQoIm1pbmluZ1Bvd2VyIixtaW5pbmdQb3dlcil9Y29uc3QgbmV3TWluaW5nUG93ZXI9Y29tcHV0ZU1pbmluZ1Bvd2VyKG1pbmluZ1Bvd2VyLHBvb2wudG9rZW5NaW5lcnMscG9vbC5uZnRUb2tlbk1pbmVyKTtyZXR1cm4gbWluaW5nUG93ZXIucG93ZXI9eyRudW1iZXJEZWNpbWFsOm5ld01pbmluZ1Bvd2VyfSxtaW5pbmdQb3dlci51cGRhdGVQb29sVGltZXN0YW1wPXVwZGF0ZVBvb2xUaW1lc3RhbXAsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibWluaW5nUG93ZXIiLG1pbmluZ1Bvd2VyKSxuZXdNaW5pbmdQb3dlci5taW51cyhvbGRNaW5pbmdQb3dlcil9YXN5bmMgZnVuY3Rpb24gaW5pdE1pbmluZ1Bvd2VyKHBvb2wsdXBkYXRlUG9vbFRpbWVzdGFtcCxwYXJhbXMsdG9rZW4sbGFzdElkKXtsZXQgYmFsYW5jZXMsYWRqdXN0ZWRQb3dlcj1hcGkuQmlnTnVtYmVyKDApLG9mZnNldD0wLGxhc3RJZFByb2Nlc3NlZD1sYXN0SWQsY29tcGxldGU9ITE7Zm9yKDshY29tcGxldGUmJm9mZnNldDxwYXJhbXMubWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jazspe2JhbGFuY2VzPWF3YWl0IGFwaS5kYi5maW5kSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHtzeW1ib2w6dG9rZW4sX2lkOnskZ3Q6bGFzdElkfX0scGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0LG9mZnNldCxbe2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7Zm9yKGxldCBpPTA7aTxiYWxhbmNlcy5sZW5ndGg7aSs9MSl7Y29uc3QgYmFsYW5jZT1iYWxhbmNlc1tpXTtpZihhcGkuQmlnTnVtYmVyKGJhbGFuY2Uuc3Rha2UpLmd0KDApfHxhcGkuQmlnTnVtYmVyKGJhbGFuY2UuZGVsZWdhdGlvbnNJbikuZ3QoMCkpe2NvbnN0IGFkanVzdGVkPWF3YWl0IHVwZGF0ZU1pbmluZ1Bvd2VyKHBvb2wsdG9rZW4sYmFsYW5jZS5hY2NvdW50LGJhbGFuY2Uuc3Rha2UsYmFsYW5jZS5kZWxlZ2F0aW9uc0luLHVwZGF0ZVBvb2xUaW1lc3RhbXApO2FkanVzdGVkUG93ZXI9YWRqdXN0ZWRQb3dlci5wbHVzKGFkanVzdGVkKX1sYXN0SWRQcm9jZXNzZWQ9YmFsYW5jZS5faWR9YmFsYW5jZXMubGVuZ3RoPHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCYmKGNvbXBsZXRlPSEwKSxvZmZzZXQrPXBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdH1yZXR1cm57YWRqdXN0ZWRQb3dlcjphZGp1c3RlZFBvd2VyLG5leHRJZDpsYXN0SWRQcm9jZXNzZWQsY29tcGxldGU6Y29tcGxldGV9fWFzeW5jIGZ1bmN0aW9uIGluaXROZnRNaW5pbmdQb3dlcihwb29sLHVwZGF0ZVBvb2xUaW1lc3RhbXAscGFyYW1zLG5mdFRva2VuTWluZXIsbGFzdElkKXtsZXQgbmZ0cyxhZGp1c3RlZFBvd2VyPWFwaS5CaWdOdW1iZXIoMCksb2Zmc2V0PTAsbGFzdElkUHJvY2Vzc2VkPWxhc3RJZCxjb21wbGV0ZT0hMTtmb3IoOyFjb21wbGV0ZSYmb2Zmc2V0PHBhcmFtcy5tYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrOyl7bmZ0cz1hd2FpdCBhcGkuZGIuZmluZEluVGFibGUoIm5mdCIsbmZ0VG9rZW5NaW5lci5zeW1ib2wrImluc3RhbmNlcyIse19pZDp7JGd0Omxhc3RJZH0sZGVsZWdhdGVkVG86eyRuZTpudWxsfSwiZGVsZWdhdGVkVG8udW5kZWxlZ2F0ZUF0Ijp7JGVxOm51bGx9fSxwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQsb2Zmc2V0LFt7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPG5mdHMubGVuZ3RoO2krPTEpe2NvbnN0IG5mdD1uZnRzW2ldO2lmKG5mdFRva2VuTWluZXIudHlwZU1hcFtuZnQucHJvcGVydGllc1tuZnRUb2tlbk1pbmVyLnR5cGVGaWVsZF1dKXtjb25zdCBhZGp1c3RlZD1hd2FpdCB1cGRhdGVOZnRNaW5pbmdQb3dlcihwb29sLG5mdCxuZnRUb2tlbk1pbmVyLnR5cGVNYXBbbmZ0LnByb3BlcnRpZXNbbmZ0VG9rZW5NaW5lci50eXBlRmllbGRdXSwhMCx1cGRhdGVQb29sVGltZXN0YW1wKTthZGp1c3RlZFBvd2VyPWFkanVzdGVkUG93ZXIucGx1cyhhZGp1c3RlZCl9bGFzdElkUHJvY2Vzc2VkPW5mdC5faWR9bmZ0cy5sZW5ndGg8cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0JiYoY29tcGxldGU9ITApLG9mZnNldCs9cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0fXJldHVybnthZGp1c3RlZFBvd2VyOmFkanVzdGVkUG93ZXIsbmV4dElkOmxhc3RJZFByb2Nlc3NlZCxjb21wbGV0ZTpjb21wbGV0ZX19YXN5bmMgZnVuY3Rpb24gcmVzdW1lUG93ZXJVcGRhdGUocG9vbCxwYXJhbXMpe2xldHtpblByb2dyZXNzOmluUHJvZ3Jlc3MsdG9rZW5JbmRleDp0b2tlbkluZGV4LG5mdFRva2VuSW5kZXg6bmZ0VG9rZW5JbmRleCxsYXN0SWQ6bGFzdElkfT1wb29sLnVwZGF0aW5nO2NvbnN0e3VwZGF0ZVBvb2xUaW1lc3RhbXA6dXBkYXRlUG9vbFRpbWVzdGFtcH09cG9vbC51cGRhdGluZztpZighaW5Qcm9ncmVzcylyZXR1cm47aWYodG9rZW5JbmRleDxwb29sLnRva2VuTWluZXJzLmxlbmd0aCl7Y29uc3QgdG9rZW5Db25maWc9cG9vbC50b2tlbk1pbmVyc1t0b2tlbkluZGV4XSx7YWRqdXN0ZWRQb3dlcjphZGp1c3RlZFBvd2VyLG5leHRJZDpuZXh0SWQsY29tcGxldGU6Y29tcGxldGV9PWF3YWl0IGluaXRNaW5pbmdQb3dlcihwb29sLHVwZGF0ZVBvb2xUaW1lc3RhbXAscGFyYW1zLHRva2VuQ29uZmlnLnN5bWJvbCxsYXN0SWQpO3Bvb2wudG90YWxQb3dlcj1hcGkuQmlnTnVtYmVyKHBvb2wudG90YWxQb3dlcikucGx1cyhhZGp1c3RlZFBvd2VyKSxjb21wbGV0ZT8obGFzdElkPTAsdG9rZW5JbmRleCs9MSk6bGFzdElkPW5leHRJZH1lbHNlIGlmKHBvb2wubmZ0VG9rZW5NaW5lciYmbmZ0VG9rZW5JbmRleDwxKXtjb25zdHtuZnRUb2tlbk1pbmVyOm5mdFRva2VuTWluZXJ9PXBvb2wse2FkanVzdGVkUG93ZXI6YWRqdXN0ZWRQb3dlcixuZXh0SWQ6bmV4dElkLGNvbXBsZXRlOmNvbXBsZXRlfT1hd2FpdCBpbml0TmZ0TWluaW5nUG93ZXIocG9vbCx1cGRhdGVQb29sVGltZXN0YW1wLHBhcmFtcyxuZnRUb2tlbk1pbmVyLGxhc3RJZCk7cG9vbC50b3RhbFBvd2VyPWFwaS5CaWdOdW1iZXIocG9vbC50b3RhbFBvd2VyKS5wbHVzKGFkanVzdGVkUG93ZXIpLGNvbXBsZXRlPyhsYXN0SWQ9MCxuZnRUb2tlbkluZGV4Kz0xKTpsYXN0SWQ9bmV4dElkfXRva2VuSW5kZXghPT1wb29sLnRva2VuTWluZXJzLmxlbmd0aHx8cG9vbC5uZnRUb2tlbk1pbmVyJiYxIT09bmZ0VG9rZW5JbmRleHx8KGluUHJvZ3Jlc3M9ITEsdG9rZW5JbmRleD0wLG5mdFRva2VuSW5kZXg9MCk7Y29uc3R7dXBkYXRpbmc6dXBkYXRpbmd9PXBvb2w7dXBkYXRpbmcuaW5Qcm9ncmVzcz1pblByb2dyZXNzLHVwZGF0aW5nLnRva2VuSW5kZXg9dG9rZW5JbmRleCx1cGRhdGluZy5uZnRUb2tlbkluZGV4PW5mdFRva2VuSW5kZXgsdXBkYXRpbmcubGFzdElkPWxhc3RJZCxhd2FpdCBhcGkuZGIudXBkYXRlKCJwb29scyIscG9vbCl9ZnVuY3Rpb24gZ2VuZXJhdGVQb29sSWQocG9vbCl7Y29uc3QgdG9rZW5NaW5lclN0cmluZz1wb29sLmV4dGVybmFsQ29udHJhY3QmJnBvb2wuZXh0ZXJuYWxNaW5lcnM/IkVYVC0iK3Bvb2wuZXh0ZXJuYWxNaW5lcnMucmVwbGFjZSgiOiIsIiIpOnBvb2wudG9rZW5NaW5lcnMubWFwKHQ9PnQuc3ltYm9sLnJlcGxhY2UoIi4iLCItIikpLnNvcnQoKS5qb2luKCIsIiksbmZ0VG9rZW5NaW5lclN0cmluZz1wb29sLm5mdFRva2VuTWluZXI/IjoiK3Bvb2wubmZ0VG9rZW5NaW5lci5zeW1ib2w6IiI7cmV0dXJuYCR7cG9vbC5taW5lZFRva2VuLnJlcGxhY2UoIi4iLCItIil9OiR7dG9rZW5NaW5lclN0cmluZ30ke25mdFRva2VuTWluZXJTdHJpbmd9YH1hc3luYyBmdW5jdGlvbiBydW5Mb3R0ZXJ5KHBvb2wscGFyYW1zKXtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKSx3aW5uaW5nTnVtYmVycz1bXSxtaW5lZFRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnBvb2wubWluZWRUb2tlbn0pLHdpbm5pbmdBbW91bnQ9YXBpLkJpZ051bWJlcihwb29sLmxvdHRlcnlBbW91bnQpLmRpdmlkZWRCeShwb29sLmxvdHRlcnlXaW5uZXJzKS50b0ZpeGVkKG1pbmVkVG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCk7aWYocG9vbC5leHRlcm5hbENvbnRyYWN0KXtpZigibWFya2V0cG9vbHMiPT09cG9vbC5leHRlcm5hbENvbnRyYWN0KXtjb25zdCBtYXJrZXRwb29sPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgibWFya2V0cG9vbHMiLCJwb29scyIse3Rva2VuUGFpcjpwb29sLmV4dGVybmFsTWluZXJzfSk7Zm9yKGxldCBpPTA7aTxwb29sLmxvdHRlcnlXaW5uZXJzO2krPTEpd2lubmluZ051bWJlcnNbaV09YXBpLkJpZ051bWJlcihtYXJrZXRwb29sLnRvdGFsU2hhcmVzKS5tdWx0aXBsaWVkQnkoYXBpLnJhbmRvbSgpKX19ZWxzZSBmb3IobGV0IGk9MDtpPHBvb2wubG90dGVyeVdpbm5lcnM7aSs9MSl3aW5uaW5nTnVtYmVyc1tpXT1hcGkuQmlnTnVtYmVyKHBvb2wudG90YWxQb3dlcikubXVsdGlwbGllZEJ5KGFwaS5yYW5kb20oKSk7bGV0IG1pbmluZ1Bvd2VycyxvZmZzZXQ9MCxjdW11bGF0aXZlUG93ZXI9YXBpLkJpZ051bWJlcigwKSxuZXh0Q3VtdWxhdGl2ZVBvd2VyPWFwaS5CaWdOdW1iZXIoMCksY29tcHV0ZWRXaW5uZXJzPTA7Y29uc3Qgd2lubmVycz1bXTtmb3IoO2NvbXB1dGVkV2lubmVyczxwb29sLmxvdHRlcnlXaW5uZXJzOyl7aWYocG9vbC5leHRlcm5hbENvbnRyYWN0KXtpZigibWFya2V0cG9vbHMiPT09cG9vbC5leHRlcm5hbENvbnRyYWN0KXttaW5pbmdQb3dlcnM9YXdhaXQgYXBpLmRiLmZpbmRJblRhYmxlKCJtYXJrZXRwb29scyIsImxpcXVpZGl0eVBvc2l0aW9ucyIse3Rva2VuUGFpcjpwb29sLmV4dGVybmFsTWluZXJzfSxwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQsb2Zmc2V0LFt7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPG1pbmluZ1Bvd2Vycy5sZW5ndGg7aSs9MSltaW5pbmdQb3dlcnNbaV0ucG93ZXI9eyRudW1iZXJEZWNpbWFsOmFwaS5CaWdOdW1iZXIobWluaW5nUG93ZXJzW2ldLnNoYXJlcykudG9GaXhlZChtaW5lZFRva2VuLnByZWNpc2lvbixhcGkuQmlnTnVtYmVyLlJPVU5EX0hBTEZfVVApfX19ZWxzZSBtaW5pbmdQb3dlcnM9YXdhaXQgYXBpLmRiLmZpbmQoIm1pbmluZ1Bvd2VyIix7aWQ6cG9vbC5pZCxwb3dlcjp7JGd0OnskbnVtYmVyRGVjaW1hbDoiMCJ9fX0scGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0LG9mZnNldCxbe2luZGV4OiJwb3dlciIsZGVzY2VuZGluZzohMH0se2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7Zm9yKGxldCBpPTA7aTxtaW5pbmdQb3dlcnMubGVuZ3RoO2krPTEpe2NvbnN0IG1pbmluZ1Bvd2VyPW1pbmluZ1Bvd2Vyc1tpXTtuZXh0Q3VtdWxhdGl2ZVBvd2VyPWN1bXVsYXRpdmVQb3dlci5wbHVzKG1pbmluZ1Bvd2VyLnBvd2VyLiRudW1iZXJEZWNpbWFsKTtmb3IobGV0IGo9MDtqPHBvb2wubG90dGVyeVdpbm5lcnM7ais9MSl7Y29uc3QgY3VycmVudFdpbm5pbmdOdW1iZXI9d2lubmluZ051bWJlcnNbal07Y3VtdWxhdGl2ZVBvd2VyLmx0ZShjdXJyZW50V2lubmluZ051bWJlcikmJm5leHRDdW11bGF0aXZlUG93ZXIuZ3QoY3VycmVudFdpbm5pbmdOdW1iZXIpJiYoY29tcHV0ZWRXaW5uZXJzKz0xLHdpbm5lcnMucHVzaCh7d2lubmVyOm1pbmluZ1Bvd2VyLmFjY291bnQsd2lubmluZ051bWJlcjpjdXJyZW50V2lubmluZ051bWJlcix3aW5uaW5nQW1vdW50Ondpbm5pbmdBbW91bnR9KSl9Y3VtdWxhdGl2ZVBvd2VyPW5leHRDdW11bGF0aXZlUG93ZXJ9aWYoY29tcHV0ZWRXaW5uZXJzPT09cG9vbC5sb3R0ZXJ5V2lubmVyc3x8bWluaW5nUG93ZXJzLmxlbmd0aDxwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQpYnJlYWs7b2Zmc2V0Kz1wYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXR9YXBpLmVtaXQoIm1pbmluZ0xvdHRlcnkiLHtwb29sSWQ6cG9vbC5pZCx3aW5uZXJzOndpbm5lcnN9KTtmb3IobGV0IGk9MDtpPHdpbm5lcnMubGVuZ3RoO2krPTEpe2NvbnN0IHdpbm5lcj13aW5uZXJzW2ldO2F3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwiaXNzdWUiLHt0bzp3aW5uZXIud2lubmVyLHN5bWJvbDptaW5lZFRva2VuLnN5bWJvbCxxdWFudGl0eTp3aW5uaW5nQW1vdW50fSl9cG9vbC5uZXh0TG90dGVyeVRpbWVzdGFtcD1hcGkuQmlnTnVtYmVyKGJsb2NrRGF0ZS5nZXRUaW1lKCkpLnBsdXMoMzYwMCpwb29sLmxvdHRlcnlJbnRlcnZhbEhvdXJzKjFlMykudG9OdW1iZXIoKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwb29scyIscG9vbCl9YWN0aW9ucy5zZXRBY3RpdmU9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2lkOmlkLGFjdGl2ZTphY3RpdmUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZighYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikpcmV0dXJuO2NvbnN0IHBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6aWR9KTtpZihhcGkuYXNzZXJ0KHBvb2wsInBvb2wgaWQgbm90IGZvdW5kIikpe3Bvb2wuYWN0aXZlPSEhYWN0aXZlO2NvbnN0IG1pbmVkVG9rZW5PYmplY3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6cG9vbC5taW5lZFRva2VufSk7aWYoYXBpLmFzc2VydChtaW5lZFRva2VuT2JqZWN0JiYobWluZWRUb2tlbk9iamVjdC5pc3N1ZXI9PT1hcGkuc2VuZGVyfHwiQkVFIj09PW1pbmVkVG9rZW5PYmplY3Quc3ltYm9sJiZhcGkuc2VuZGVyPT09YXBpLm93bmVyKSwibXVzdCBiZSBpc3N1ZXIgb2YgbWluZWRUb2tlbiIpKXtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKTtwb29sLm5leHRMb3R0ZXJ5VGltZXN0YW1wPWFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkucGx1cygzNjAwKnBvb2wubG90dGVyeUludGVydmFsSG91cnMqMWUzKS50b051bWJlcigpLGF3YWl0IGFwaS5kYi51cGRhdGUoInBvb2xzIixwb29sKX19fSxhY3Rpb25zLnVwZGF0ZVBvb2w9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2lkOmlkLGxvdHRlcnlXaW5uZXJzOmxvdHRlcnlXaW5uZXJzLGxvdHRlcnlJbnRlcnZhbEhvdXJzOmxvdHRlcnlJbnRlcnZhbEhvdXJzLGxvdHRlcnlBbW91bnQ6bG90dGVyeUFtb3VudCx0b2tlbk1pbmVyczp0b2tlbk1pbmVycyxuZnRUb2tlbk1pbmVyOm5mdFRva2VuTWluZXIsY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7cG9vbFVwZGF0ZUZlZTpwb29sVXBkYXRlRmVlfT1wYXJhbXMsdXRpbGl0eVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDoiQkVFIn0pLGF1dGhvcml6ZWQ9ISghYXBpLkJpZ051bWJlcihwb29sVXBkYXRlRmVlKS5sdGUoMCkmJmFwaS5zZW5kZXIhPT1hcGkub3duZXIpfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKHBvb2xVcGRhdGVGZWUpO2lmKGFwaS5hc3NlcnQoYXV0aG9yaXplZCwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSB1cGRhdGUgZmVlIikmJmFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KGlkJiYic3RyaW5nIj09dHlwZW9mIGlkJiZsb3R0ZXJ5QW1vdW50JiYic3RyaW5nIj09dHlwZW9mIGxvdHRlcnlBbW91bnQmJiFhcGkuQmlnTnVtYmVyKGxvdHRlcnlBbW91bnQpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobG90dGVyeUFtb3VudCkuZ3QoMCksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihsb3R0ZXJ5V2lubmVycykmJmxvdHRlcnlXaW5uZXJzPj0xJiZsb3R0ZXJ5V2lubmVyczw9MjAsImludmFsaWQgbG90dGVyeVdpbm5lcnM6IGludGVnZXIgYmV0d2VlbiAxIGFuZCAyMCBvbmx5IikmJmFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihsb3R0ZXJ5SW50ZXJ2YWxIb3VycykmJmxvdHRlcnlJbnRlcnZhbEhvdXJzPj0xJiZsb3R0ZXJ5SW50ZXJ2YWxIb3Vyczw9NzIwLCJpbnZhbGlkIGxvdHRlcnlJbnRlcnZhbEhvdXJzOiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgNzIwIG9ubHkiKSl7Y29uc3QgcG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicG9vbHMiLHtpZDppZH0pO2lmKGFwaS5hc3NlcnQocG9vbCwicG9vbCBpZCBub3QgZm91bmQiKSl7Y29uc3QgbWluZWRUb2tlbk9iamVjdD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpwb29sLm1pbmVkVG9rZW59KTtpZihhcGkuYXNzZXJ0KG1pbmVkVG9rZW5PYmplY3QmJihtaW5lZFRva2VuT2JqZWN0Lmlzc3Vlcj09PWFwaS5zZW5kZXJ8fCJCRUUiPT09bWluZWRUb2tlbk9iamVjdC5zeW1ib2wmJmFwaS5zZW5kZXI9PT1hcGkub3duZXIpLCJtdXN0IGJlIGlzc3VlciBvZiBtaW5lZFRva2VuIikmJmFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihsb3R0ZXJ5QW1vdW50KS5kcCgpPD1taW5lZFRva2VuT2JqZWN0LnByZWNpc2lvbiwibWluZWRUb2tlbiBwcmVjaXNpb24gbWlzbWF0Y2ggZm9yIGxvdHRlcnlBbW91bnQiKSl7aWYoY2FsbGluZ0NvbnRyYWN0SW5mbylwb29sLmxvdHRlcnlXaW5uZXJzPWxvdHRlcnlXaW5uZXJzLHBvb2wubG90dGVyeUludGVydmFsSG91cnM9bG90dGVyeUludGVydmFsSG91cnMscG9vbC5sb3R0ZXJ5QW1vdW50PWxvdHRlcnlBbW91bnQ7ZWxzZXtjb25zdCB2YWxpZE1pbmVyc0NoYW5nZT1hd2FpdCB2YWxpZGF0ZVRva2VuTWluZXJzQ2hhbmdlKHBvb2wudG9rZW5NaW5lcnMsdG9rZW5NaW5lcnMscG9vbC5uZnRUb2tlbk1pbmVyLG5mdFRva2VuTWluZXIpO2lmKHZhbGlkTWluZXJzQ2hhbmdlKXtwb29sLmxvdHRlcnlXaW5uZXJzPWxvdHRlcnlXaW5uZXJzLHBvb2wubG90dGVyeUludGVydmFsSG91cnM9bG90dGVyeUludGVydmFsSG91cnMscG9vbC5sb3R0ZXJ5QW1vdW50PWxvdHRlcnlBbW91bnQscG9vbC50b2tlbk1pbmVycz10b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXI9bmZ0VG9rZW5NaW5lcjtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKTt2YWxpZE1pbmVyc0NoYW5nZS5jaGFuZ2VkJiYocG9vbC51cGRhdGluZy51cGRhdGVQb29sVGltZXN0YW1wPWFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkudG9OdW1iZXIoKSxwb29sLnVwZGF0aW5nLmluUHJvZ3Jlc3M9ITAscG9vbC51cGRhdGluZy50b2tlbkluZGV4PTAscG9vbC51cGRhdGluZy5uZnRUb2tlbkluZGV4PTAscG9vbC51cGRhdGluZy5sYXN0SWQ9MCxwb29sLnRvdGFsUG93ZXI9IjAiKSxwb29sLm5leHRMb3R0ZXJ5VGltZXN0YW1wPWFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkucGx1cygzNjAwKmxvdHRlcnlJbnRlcnZhbEhvdXJzKjFlMykudG9OdW1iZXIoKX19YXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpLGFwaS5zZW5kZXIhPT1hcGkub3duZXImJmFwaS5CaWdOdW1iZXIocG9vbFVwZGF0ZUZlZSkuZ3QoMCkmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OnBvb2xVcGRhdGVGZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pfX19fSxhY3Rpb25zLmNoYW5nZU5mdFByb3BlcnR5PWFzeW5jIHBheWxvYWQ9Pntjb25zdHtpZDppZCx0eXBlOnR5cGUscHJvcGVydHlOYW1lOnByb3BlcnR5TmFtZSxjaGFuZ2VBbW91bnQ6Y2hhbmdlQW1vdW50LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoIWFwaS5hc3NlcnQoaWQmJiJzdHJpbmciPT10eXBlb2YgaWQmJnR5cGUmJiJzdHJpbmciPT10eXBlb2YgdHlwZSYmcHJvcGVydHlOYW1lJiYic3RyaW5nIj09dHlwZW9mIHByb3BlcnR5TmFtZSYmY2hhbmdlQW1vdW50JiYic3RyaW5nIj09dHlwZW9mIGNoYW5nZUFtb3VudCYmIWFwaS5CaWdOdW1iZXIoY2hhbmdlQW1vdW50KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGNoYW5nZUFtb3VudCkuaXNGaW5pdGUoKSwiaW52YWxpZCBwYXJhbXMiKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpKXJldHVybjtjb25zdCBwb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwb29scyIse2lkOmlkfSk7aWYoIWFwaS5hc3NlcnQocG9vbCwicG9vbCBpZCBub3QgZm91bmQiKSlyZXR1cm47Y29uc3QgcHJvcGVydHlJbmRleD1wb29sLm5mdFRva2VuTWluZXIucHJvcGVydGllcy5maW5kSW5kZXgocD0+cC5uYW1lPT09cHJvcGVydHlOYW1lKSxwcm9wZXJ0eT1wb29sLm5mdFRva2VuTWluZXIucHJvcGVydGllc1twcm9wZXJ0eUluZGV4XTtpZighYXBpLmFzc2VydChwcm9wZXJ0eSYmcHJvcGVydHkuYnVybkNoYW5nZSwicHJvcGVydHkgbm90IGVuYWJsZWQgZm9yIGJ1cm4gY2hhbmdlIikpcmV0dXJuO2NvbnN0IHR5cGVQcm9wZXJ0aWVzPXBvb2wubmZ0VG9rZW5NaW5lci50eXBlTWFwW3R5cGVdO2lmKCFhcGkuYXNzZXJ0KHR5cGVQcm9wZXJ0aWVzLCJ0eXBlIG5vdCBmb3VuZCIpKXJldHVybjtjb25zdCBidXJuU3ltYm9sPXByb3BlcnR5LmJ1cm5DaGFuZ2Uuc3ltYm9sLHRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmJ1cm5TeW1ib2x9KSxmZWU9YXBpLkJpZ051bWJlcihjaGFuZ2VBbW91bnQpLmFicygpLm11bHRpcGxpZWRCeShwcm9wZXJ0eS5idXJuQ2hhbmdlLnF1YW50aXR5KTtpZighYXBpLmFzc2VydChmZWUuZHAoKTw9dG9rZW4ucHJlY2lzaW9uLCJmZWUgcHJlY2lzaW9uIG1pc21hdGNoIGZvciBhbW91bnQgIitmZWUpKXJldHVybjtjb25zdCBiYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOmJ1cm5TeW1ib2x9KSxhdXRob3JpemVkPWFwaS5CaWdOdW1iZXIoZmVlKS5sdGUoMCl8fGJhbGFuY2UmJmFwaS5CaWdOdW1iZXIoYmFsYW5jZS5iYWxhbmNlKS5ndGUoZmVlKTtpZighYXBpLmFzc2VydChhdXRob3JpemVkLGB5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIHVwZGF0ZSBmZWUgb2YgJHtmZWV9ICR7YnVyblN5bWJvbH1gKSlyZXR1cm47aWYodHlwZVByb3BlcnRpZXNbcHJvcGVydHlJbmRleF09YXBpLkJpZ051bWJlcih0eXBlUHJvcGVydGllc1twcm9wZXJ0eUluZGV4XSkucGx1cyhjaGFuZ2VBbW91bnQpLCF2YWxpZGF0ZU5mdFR5cGVNYXAocG9vbC5uZnRUb2tlbk1pbmVyLnR5cGVNYXAscG9vbC5uZnRUb2tlbk1pbmVyLnByb3BlcnRpZXMpKXJldHVybjtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKTtwb29sLnVwZGF0aW5nLnVwZGF0ZVBvb2xUaW1lc3RhbXA9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS50b051bWJlcigpLHBvb2wudXBkYXRpbmcuaW5Qcm9ncmVzcz0hMCxwb29sLnVwZGF0aW5nLnRva2VuSW5kZXg9MCxwb29sLnVwZGF0aW5nLm5mdFRva2VuSW5kZXg9MCxwb29sLnVwZGF0aW5nLmxhc3RJZD0wLHBvb2wudG90YWxQb3dlcj0iMCIsYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpLGFwaS5CaWdOdW1iZXIoZmVlKS5ndCgwKSYmYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6YnVyblN5bWJvbCxxdWFudGl0eTpmZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pfSxhY3Rpb25zLmNyZWF0ZVBvb2w9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2xvdHRlcnlXaW5uZXJzOmxvdHRlcnlXaW5uZXJzLGxvdHRlcnlJbnRlcnZhbEhvdXJzOmxvdHRlcnlJbnRlcnZhbEhvdXJzLGxvdHRlcnlBbW91bnQ6bG90dGVyeUFtb3VudCxtaW5lZFRva2VuOm1pbmVkVG9rZW4sdG9rZW5NaW5lcnM6dG9rZW5NaW5lcnMsbmZ0VG9rZW5NaW5lcjpuZnRUb2tlbk1pbmVyLGV4dGVybmFsTWluZXJzOmV4dGVybmFsTWluZXJzLGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mbyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse3Bvb2xDcmVhdGlvbkZlZTpwb29sQ3JlYXRpb25GZWV9PXBhcmFtcztpZighKHZvaWQgMD09PWV4dGVybmFsTWluZXJzfHxhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgZXh0ZXJuYWxNaW5lcnMsImV4dGVybmFsTWluZXJzIG11c3QgYmUgYSBzdHJpbmciKSYmYXBpLmFzc2VydChjYWxsaW5nQ29udHJhY3RJbmZvLCJtdXN0IGJlIGNhbGxlZCBmcm9tIGEgY29udHJhY3QiKSkpcmV0dXJuO2NvbnN0IHV0aWxpdHlUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6IkJFRSJ9KSxhdXRob3JpemVkQ3JlYXRpb249ISghYXBpLkJpZ051bWJlcihwb29sQ3JlYXRpb25GZWUpLmx0ZSgwKSYmYXBpLnNlbmRlciE9PWFwaS5vd25lcil8fHV0aWxpdHlUb2tlbkJhbGFuY2UmJmFwaS5CaWdOdW1iZXIodXRpbGl0eVRva2VuQmFsYW5jZS5iYWxhbmNlKS5ndGUocG9vbENyZWF0aW9uRmVlKTtpZihhcGkuYXNzZXJ0KGF1dGhvcml6ZWRDcmVhdGlvbiwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWUiKSYmYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQobWluZWRUb2tlbiYmInN0cmluZyI9PXR5cGVvZiBtaW5lZFRva2VuJiZsb3R0ZXJ5QW1vdW50JiYic3RyaW5nIj09dHlwZW9mIGxvdHRlcnlBbW91bnQmJiFhcGkuQmlnTnVtYmVyKGxvdHRlcnlBbW91bnQpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobG90dGVyeUFtb3VudCkuZ3QoMCksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQobWluZWRUb2tlbi5sZW5ndGg+MCYmbWluZWRUb2tlbi5sZW5ndGg8PTEwLCJpbnZhbGlkIHN5bWJvbDogdXBwZXJjYXNlIGxldHRlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAxMCIpJiZhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobG90dGVyeVdpbm5lcnMpJiZsb3R0ZXJ5V2lubmVycz49MSYmbG90dGVyeVdpbm5lcnM8PTIwLCJpbnZhbGlkIGxvdHRlcnlXaW5uZXJzOiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMjAgb25seSIpJiZhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobG90dGVyeUludGVydmFsSG91cnMpJiZsb3R0ZXJ5SW50ZXJ2YWxIb3Vycz49MSYmbG90dGVyeUludGVydmFsSG91cnM8PTcyMCwiaW52YWxpZCBsb3R0ZXJ5SW50ZXJ2YWxIb3VyczogaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDcyMCBvbmx5Iikpe2NvbnN0IG1pbmVkVG9rZW5PYmplY3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6bWluZWRUb2tlbn0pO2lmKGFwaS5hc3NlcnQobWluZWRUb2tlbk9iamVjdCwibWluZWRUb2tlbiBkb2VzIG5vdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG1pbmVkVG9rZW5PYmplY3QuaXNzdWVyPT09YXBpLnNlbmRlcnx8IkJFRSI9PT1taW5lZFRva2VuT2JqZWN0LnN5bWJvbCYmYXBpLnNlbmRlcj09PWFwaS5vd25lciwibXVzdCBiZSBpc3N1ZXIgb2YgbWluZWRUb2tlbiIpJiZhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIobG90dGVyeUFtb3VudCkuZHAoKTw9bWluZWRUb2tlbk9iamVjdC5wcmVjaXNpb24sIm1pbmVkVG9rZW4gcHJlY2lzaW9uIG1pc21hdGNoIGZvciBsb3R0ZXJ5QW1vdW50IikmJihjYWxsaW5nQ29udHJhY3RJbmZvfHxhd2FpdCB2YWxpZGF0ZVRva2VuTWluZXJzKHRva2VuTWluZXJzLG5mdFRva2VuTWluZXIpKSl7Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIiksbmV3UG9vbD17bWluZWRUb2tlbjptaW5lZFRva2VuLGxvdHRlcnlXaW5uZXJzOmxvdHRlcnlXaW5uZXJzLGxvdHRlcnlJbnRlcnZhbEhvdXJzOmxvdHRlcnlJbnRlcnZhbEhvdXJzLGxvdHRlcnlBbW91bnQ6bG90dGVyeUFtb3VudCx0b2tlbk1pbmVyczp0b2tlbk1pbmVyc3x8W10sbmZ0VG9rZW5NaW5lcjpuZnRUb2tlbk1pbmVyLGFjdGl2ZTohMSxuZXh0TG90dGVyeVRpbWVzdGFtcDphcGkuQmlnTnVtYmVyKGJsb2NrRGF0ZS5nZXRUaW1lKCkpLnBsdXMoMzYwMCpsb3R0ZXJ5SW50ZXJ2YWxIb3VycyoxZTMpLnRvTnVtYmVyKCksdG90YWxQb3dlcjoiMCJ9O2lmKGNhbGxpbmdDb250cmFjdEluZm8pe2lmKCFhcGkuYXNzZXJ0KCFuZnRUb2tlbk1pbmVyLCJleHRlcm5hbCBuZnRUb2tlbk1pbmVyIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIikpcmV0dXJuO25ld1Bvb2wuZXh0ZXJuYWxDb250cmFjdD1jYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUsbmV3UG9vbC5leHRlcm5hbE1pbmVycz1leHRlcm5hbE1pbmVyc31uZXdQb29sLmlkPWdlbmVyYXRlUG9vbElkKG5ld1Bvb2wpO2NvbnN0IGV4aXN0aW5nUG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicG9vbHMiLHtpZDpuZXdQb29sLmlkfSk7aWYoYXBpLmFzc2VydCghZXhpc3RpbmdQb29sLCJwb29sIGFscmVhZHkgZXhpc3RzIikpe2lmKHRva2VuTWluZXJzKWZvcihsZXQgaT0wO2k8dG9rZW5NaW5lcnMubGVuZ3RoO2krPTEpe2NvbnN0IHRva2VuQ29uZmlnPXRva2VuTWluZXJzW2ldO2F3YWl0IGFwaS5kYi5pbnNlcnQoInRva2VuUG9vbHMiLHtzeW1ib2w6dG9rZW5Db25maWcuc3ltYm9sLGlkOm5ld1Bvb2wuaWR9KX1uZnRUb2tlbk1pbmVyJiZhd2FpdCBhcGkuZGIuaW5zZXJ0KCJuZnRUb2tlblBvb2xzIix7c3ltYm9sOm5mdFRva2VuTWluZXIuc3ltYm9sLGlkOm5ld1Bvb2wuaWR9KSxuZXdQb29sLnVwZGF0aW5nPXtpblByb2dyZXNzOiEwLHVwZGF0ZVBvb2xUaW1lc3RhbXA6YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS50b051bWJlcigpLHRva2VuSW5kZXg6MCxuZnRUb2tlbkluZGV4OjAsbGFzdElkOjB9O2NvbnN0IGluc2VydGVkUG9vbD1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJwb29scyIsbmV3UG9vbCk7YXBpLnNlbmRlciE9PWFwaS5vd25lciYmYXBpLkJpZ051bWJlcihwb29sQ3JlYXRpb25GZWUpLmd0KDApJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDoiQkVFIixxdWFudGl0eTpwb29sQ3JlYXRpb25GZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pLGFwaS5lbWl0KCJjcmVhdGVQb29sIix7aWQ6aW5zZXJ0ZWRQb29sLmlkfSl9fX19LGFjdGlvbnMuY2hlY2tQZW5kaW5nTG90dGVyaWVzPWFzeW5jKCk9PntpZihhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsIm5vdCBhdXRob3JpemVkIikpe2NvbnN0IHRpbWVzdGFtcD1uZXcgRGF0ZShhcGkuaGl2ZUJsb2NrVGltZXN0YW1wKyIuMDAwWiIpLmdldFRpbWUoKSxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHVwZGF0aW5nTG90dGVyaWVzPWF3YWl0IGFwaS5kYi5maW5kKCJwb29scyIseyJ1cGRhdGluZy5pblByb2dyZXNzIjohMH0scGFyYW1zLm1heExvdHRlcmllc1BlckJsb2NrLDAsW3tpbmRleDoiaWQiLGRlc2NlbmRpbmc6ITF9XSk7Zm9yKGxldCBpPTA7aTx1cGRhdGluZ0xvdHRlcmllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcG9vbD11cGRhdGluZ0xvdHRlcmllc1tpXTthd2FpdCByZXN1bWVQb3dlclVwZGF0ZShwb29sLHBhcmFtcyl9Y29uc3QgcGVuZGluZ0xvdHRlcmllcz1hd2FpdCBhcGkuZGIuZmluZCgicG9vbHMiLHthY3RpdmU6ITAsInVwZGF0aW5nLmluUHJvZ3Jlc3MiOiExLG5leHRMb3R0ZXJ5VGltZXN0YW1wOnskbHRlOnRpbWVzdGFtcH19LHBhcmFtcy5tYXhMb3R0ZXJpZXNQZXJCbG9jaywwLFt7aW5kZXg6ImlkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8cGVuZGluZ0xvdHRlcmllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcG9vbD1wZW5kaW5nTG90dGVyaWVzW2ldO2F3YWl0IHJ1bkxvdHRlcnkocG9vbCxwYXJhbXMpfX19LGFjdGlvbnMuaGFuZGxlU3Rha2VDaGFuZ2U9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2FjY291bnQ6YWNjb3VudCxzeW1ib2w6c3ltYm9sLHF1YW50aXR5OnF1YW50aXR5LGRlbGVnYXRlZDpkZWxlZ2F0ZWQsY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfT1wYXlsb2FkO2FwaS5hc3NlcnQoY2FsbGluZ0NvbnRyYWN0SW5mbyYmInRva2VucyI9PT1jYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUsIm11c3QgYmUgY2FsbGVkIGZyb20gdG9rZW5zIGNvbnRyYWN0IikmJmF3YWl0IGZpbmRBbmRQcm9jZXNzQWxsKCJtaW5pbmciLCJ0b2tlblBvb2xzIix7c3ltYm9sOnN5bWJvbH0sYXN5bmMgdG9rZW5Qb29sPT57Y29uc3QgcG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicG9vbHMiLHtpZDp0b2tlblBvb2wuaWR9KTtsZXQgYWRqdXN0ZWQ7YWRqdXN0ZWQ9ZGVsZWdhdGVkP2F3YWl0IHVwZGF0ZU1pbmluZ1Bvd2VyKHBvb2wsc3ltYm9sLGFjY291bnQsMCxxdWFudGl0eSk6YXdhaXQgdXBkYXRlTWluaW5nUG93ZXIocG9vbCxzeW1ib2wsYWNjb3VudCxxdWFudGl0eSwwKSxwb29sLnRvdGFsUG93ZXI9YWRqdXN0ZWQucGx1cyhwb29sLnRvdGFsUG93ZXIpLGF3YWl0IGFwaS5kYi51cGRhdGUoInBvb2xzIixwb29sKX0pfSxhY3Rpb25zLmhhbmRsZU5mdENoYW5nZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCxuZnQ6bmZ0LGFkZDphZGQsY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfT1wYXlsb2FkO2FwaS5hc3NlcnQoY2FsbGluZ0NvbnRyYWN0SW5mbyYmIm5mdCI9PT1jYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUsIm11c3QgYmUgY2FsbGVkIGZyb20gbmZ0IGNvbnRyYWN0IikmJmF3YWl0IGZpbmRBbmRQcm9jZXNzQWxsKCJtaW5pbmciLCJuZnRUb2tlblBvb2xzIix7c3ltYm9sOnN5bWJvbH0sYXN5bmMgdG9rZW5Qb29sPT57Y29uc3QgcG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicG9vbHMiLHtpZDp0b2tlblBvb2wuaWR9KTtpZihwb29sLnVwZGF0aW5nLmluUHJvZ3Jlc3MmJnBvb2wudXBkYXRpbmcudG9rZW5JbmRleD09PXBvb2wudG9rZW5NaW5lcnMubGVuZ3RoJiZwb29sLnVwZGF0aW5nLmxhc3RJZDxuZnQuX2lkKXJldHVybjtjb25zdCB0eXBlUHJvcGVydGllcz1wb29sLm5mdFRva2VuTWluZXIudHlwZU1hcFtuZnQucHJvcGVydGllc1twb29sLm5mdFRva2VuTWluZXIudHlwZUZpZWxkXV07aWYodHlwZVByb3BlcnRpZXMpe2NvbnN0IGFkanVzdGVkPWF3YWl0IHVwZGF0ZU5mdE1pbmluZ1Bvd2VyKHBvb2wsbmZ0LHR5cGVQcm9wZXJ0aWVzLGFkZCxwb29sLnVwZGF0aW5nLnVwZGF0ZVBvb2xUaW1lc3RhbXApO3Bvb2wudG90YWxQb3dlcj1hZGp1c3RlZC5wbHVzKHBvb2wudG90YWxQb3dlciksYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpfX0pfTs="}}}