{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"tokenfunds","params":"","code":"Y29uc3QgRmVlTWV0aG9kPVsiYnVybiIsImlzc3VlciJdLFBheW91dFR5cGU9WyJ1c2VyIiwiY29udHJhY3QiXTtmdW5jdGlvbiB2YWxpZGF0ZVRva2VucyhwYXlUb2tlbk9iaix2b3RlVG9rZW5PYmope3JldHVybiEhYXBpLmFzc2VydChwYXlUb2tlbk9iaiYmKHBheVRva2VuT2JqLmlzc3Vlcj09PWFwaS5zZW5kZXJ8fCJCRUUiPT09cGF5VG9rZW5PYmouc3ltYm9sJiZhcGkuc2VuZGVyPT09YXBpLm93bmVyKSwibXVzdCBiZSBpc3N1ZXIgb2YgcGF5VG9rZW4iKSYmISFhcGkuYXNzZXJ0KHZvdGVUb2tlbk9iaiYmdm90ZVRva2VuT2JqLnN0YWtpbmdFbmFibGVkLCJ2b3RlVG9rZW4gbXVzdCBoYXZlIHN0YWtpbmcgZW5hYmxlZCIpfWZ1bmN0aW9uIHZhbGlkYXRlRGF0ZVRpbWUoc3RyKXtpZigyND09PXN0ci5sZW5ndGgpe2ZvcihsZXQgaT0wO2k8c3RyLmxlbmd0aCYmMT09PVs1LDgsMTEsMTQsMTcsMjFdLmluZGV4T2YoaSk7aSs9MSl7Y29uc3QgY29kZT1zdHIuY2hhckNvZGVBdChpKTtpZighKGNvZGU+NDcmJmNvZGU8NTgpKXJldHVybiExfXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHZhbGlkYXRlRGF0ZVJhbmdlKHN0YXJ0RGF0ZSxlbmREYXRlLG1heERheXMpe2lmKCFhcGkuYXNzZXJ0KHZhbGlkYXRlRGF0ZVRpbWUoc3RhcnREYXRlKSYmdmFsaWRhdGVEYXRlVGltZShlbmREYXRlKSwiaW52YWxpZCBkYXRldGltZSBmb3JtYXQ6IFlZWVktTU0tRERUaGg6bW06c3Muc3NzWiIpKXJldHVybiExO2NvbnN0IG5vdz1uZXcgRGF0ZShhcGkuaGl2ZUJsb2NrVGltZXN0YW1wKyIuMDAwWiIpLHN0YXJ0PW5ldyBEYXRlKHN0YXJ0RGF0ZSksZW5kPW5ldyBEYXRlKGVuZERhdGUpO2lmKCFhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIoc3RhcnQuZ2V0VGltZSgpKS5sdChhcGkuQmlnTnVtYmVyKGVuZC5nZXRUaW1lKCkpLm1pbnVzKDg2NGU1KSksImRhdGVzIG11c3QgYmUgYXQgbGVhc3QgMSBkYXkgYXBhcnQiKXx8IWFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihzdGFydC5nZXRUaW1lKCkpLmd0KGFwaS5CaWdOdW1iZXIobm93LmdldFRpbWUoKSkucGx1cyg4NjRlNSkpLCJzdGFydERhdGUgbXVzdCBiZSBhdCBsZWFzdCAxIGRheSBpbiB0aGUgZnV0dXJlIikpcmV0dXJuITE7Y29uc3QgcmFuZ2VEYXlzPWFwaS5CaWdOdW1iZXIoc3RhcnQuZ2V0VGltZSgpKS5taW51cyhlbmQuZ2V0VGltZSgpKS5hYnMoKS5kaXZpZGVkQnkoODY0ZTUpLnRvRml4ZWQoMCxhcGkuQmlnTnVtYmVyLlJPVU5EX0NFSUwpO3JldHVybiEhYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKHJhbmdlRGF5cykubHRlKG1heERheXMpLCJkYXRlIHJhbmdlIGV4Y2VlZHMgRFRGIG1heERheXMiKX1mdW5jdGlvbiB2YWxpZGF0ZURhdGVDaGFuZ2UocHJvcG9zYWwsbmV3RGF0ZSxtYXhEYXlzKXtpZighYXBpLmFzc2VydCh2YWxpZGF0ZURhdGVUaW1lKG5ld0RhdGUpLCJpbnZhbGlkIGRhdGV0aW1lIGZvcm1hdDogWVlZWS1NTS1ERFRoaDptbTpzcy5zc3NaIikpcmV0dXJuITE7Y29uc3Qgc3RhcnQ9bmV3IERhdGUocHJvcG9zYWwuc3RhcnREYXRlKSxjdXI9bmV3IERhdGUocHJvcG9zYWwuZW5kRGF0ZSkscmVwbD1uZXcgRGF0ZShuZXdEYXRlKTtpZighYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKHN0YXJ0LmdldFRpbWUoKSkubHQoYXBpLkJpZ051bWJlcihyZXBsLmdldFRpbWUoKSkubWludXMoODY0ZTUpKSwiZGF0ZXMgbXVzdCBiZSBhdCBsZWFzdCAxIGRheSBhcGFydCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KHJlcGw8PWN1ciwiZGF0ZSBjYW4gb25seSBiZSByZWR1Y2VkIikpcmV0dXJuITE7Y29uc3QgcmFuZ2VEYXlzPWFwaS5CaWdOdW1iZXIoc3RhcnQuZ2V0VGltZSgpKS5taW51cyhyZXBsLmdldFRpbWUoKSkuYWJzKCkuZGl2aWRlZEJ5KDg2NGU1KS50b0ZpeGVkKDAsYXBpLkJpZ051bWJlci5ST1VORF9DRUlMKTtyZXR1cm4hIWFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihyYW5nZURheXMpLmx0ZShtYXhEYXlzKSwiZGF0ZSByYW5nZSBleGNlZWRzIERURiBtYXhEYXlzIil9ZnVuY3Rpb24gdmFsaWRhdGVQZW5kaW5nKHByb3Bvc2FsKXtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKTtyZXR1cm4gbmV3IERhdGUocHJvcG9zYWwuZW5kRGF0ZSk+PWJsb2NrRGF0ZX1hc3luYyBmdW5jdGlvbiB1cGRhdGVQcm9wb3NhbFdlaWdodChpZCxkZWx0YUFwcHJvdmFsV2VpZ2h0KXtjb25zdCBwcm9wb3NhbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicHJvcG9zYWxzIix7X2lkOmlkfSk7cmV0dXJuISghcHJvcG9zYWx8fCF2YWxpZGF0ZVBlbmRpbmcocHJvcG9zYWwpKSYmKHByb3Bvc2FsLmFwcHJvdmFsV2VpZ2h0PXskbnVtYmVyRGVjaW1hbDphcGkuQmlnTnVtYmVyKHByb3Bvc2FsLmFwcHJvdmFsV2VpZ2h0LiRudW1iZXJEZWNpbWFsKS5wbHVzKGRlbHRhQXBwcm92YWxXZWlnaHQpfSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwcm9wb3NhbHMiLHByb3Bvc2FsKSwhMCl9YXN5bmMgZnVuY3Rpb24gY2hlY2tQZW5kaW5nUHJvcG9zYWxzKGR0ZixwYXJhbXMpe2NvbnN0IGJsb2NrRGF0ZT1uZXcgRGF0ZShhcGkuaGl2ZUJsb2NrVGltZXN0YW1wKyIuMDAwWiIpLHBheVRva2VuT2JqPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmR0Zi5wYXlUb2tlbn0pLHRpY2tQYXlSYXRpbz1hcGkuQmlnTnVtYmVyKHBhcmFtcy5kdGZUaWNrSG91cnMpLmRpdmlkZWRCeSgyNCksZnVuZGVkPVtdLGZ1bmRlZExvZz1bXTtsZXQgcHJvcG9zYWxzLG9mZnNldD0wLHJ1bm5pbmdQYXk9YXBpLkJpZ051bWJlcihkdGYubWF4QW1vdW50UGVyRGF5KS50aW1lcyh0aWNrUGF5UmF0aW8pO2Zvcig7cnVubmluZ1BheS5ndCgwKTspe3Byb3Bvc2Fscz1hd2FpdCBhcGkuZGIuZmluZCgicHJvcG9zYWxzIix7ZnVuZElkOmR0Zi5pZCxhY3RpdmU6ITAsYXBwcm92YWxXZWlnaHQ6eyRndDp7JG51bWJlckRlY2ltYWw6YXBpLkJpZ051bWJlcihkdGYudm90ZVRocmVzaG9sZCl9fSxzdGFydERhdGU6eyRsdGU6YmxvY2tEYXRlLnRvSVNPU3RyaW5nKCl9LGVuZERhdGU6eyRndGU6YmxvY2tEYXRlLnRvSVNPU3RyaW5nKCl9fSxwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQsb2Zmc2V0LFt7aW5kZXg6ImJ5QXBwcm92YWxXZWlnaHQiLGRlc2NlbmRpbmc6ITB9LHtpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8cHJvcG9zYWxzLmxlbmd0aDtpKz0xKXtpZihhcGkuQmlnTnVtYmVyKHByb3Bvc2Fsc1tpXS5hbW91bnRQZXJEYXkpLnRpbWVzKHRpY2tQYXlSYXRpbykuZ3RlKHJ1bm5pbmdQYXkpKXtwcm9wb3NhbHNbaV0udGlja1BheT1ydW5uaW5nUGF5LnRvRml4ZWQocGF5VG9rZW5PYmoucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksZnVuZGVkLnB1c2gocHJvcG9zYWxzW2ldKSxydW5uaW5nUGF5PWFwaS5CaWdOdW1iZXIoMCk7YnJlYWt9cHJvcG9zYWxzW2ldLnRpY2tQYXk9YXBpLkJpZ051bWJlcihwcm9wb3NhbHNbaV0uYW1vdW50UGVyRGF5KS50aW1lcyh0aWNrUGF5UmF0aW8pLnRvRml4ZWQocGF5VG9rZW5PYmoucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksZnVuZGVkLnB1c2gocHJvcG9zYWxzW2ldKSxydW5uaW5nUGF5PXJ1bm5pbmdQYXkubWludXMocHJvcG9zYWxzW2ldLnRpY2tQYXkpfWlmKHByb3Bvc2Fscy5sZW5ndGg8cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0KWJyZWFrO29mZnNldCs9cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0fWZvcihsZXQgaT0wO2k8ZnVuZGVkLmxlbmd0aDtpKz0xKXtjb25zdCBmdW5kPWZ1bmRlZFtpXTtmdW5kZWRMb2cucHVzaCh7aWQ6ZnVuZC5faWQsdGlja1BheTpmdW5kLnRpY2tQYXl9KSwidXNlciI9PT1mdW5kLnBheW91dC50eXBlP2F3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwiaXNzdWUiLHt0bzpmdW5kLnBheW91dC5uYW1lLHN5bWJvbDpwYXlUb2tlbk9iai5zeW1ib2wscXVhbnRpdHk6ZnVuZC50aWNrUGF5fSk6ImNvbnRyYWN0Ij09PWZ1bmQucGF5b3V0LnR5cGUmJihhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsImlzc3VlVG9Db250cmFjdCIse3RvOmZ1bmQucGF5b3V0Lm5hbWUsc3ltYm9sOnBheVRva2VuT2JqLnN5bWJvbCxxdWFudGl0eTpmdW5kLnRpY2tQYXl9KSxhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoZnVuZC5wYXlvdXQubmFtZSwicmVjZWl2ZUR0ZlRva2VucyIse2RhdGE6ZnVuZC5wYXlvdXQuY29udHJhY3RQYXlsb2FkLHN5bWJvbDpwYXlUb2tlbk9iai5zeW1ib2wscXVhbnRpdHk6ZnVuZC50aWNrUGF5fSkpfWR0Zi5sYXN0VGlja1RpbWU9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS50b051bWJlcigpLGF3YWl0IGFwaS5kYi51cGRhdGUoImZ1bmRzIixkdGYpLGFwaS5lbWl0KCJmdW5kUHJvcG9zYWxzIix7ZnVuZElkOmR0Zi5pZCxmdW5kZWQ6ZnVuZGVkTG9nfSl9YWN0aW9ucy5jcmVhdGVTU0M9YXN5bmMoKT0+e2lmKCExPT09YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKCJmdW5kcyIpKXthd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoImZ1bmRzIixbImlkIiwibGFzdFRpY2tUaW1lIl0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgicHJvcG9zYWxzIixbImZ1bmRJZCIse25hbWU6ImJ5QXBwcm92YWxXZWlnaHQiLGluZGV4OntmdW5kSWQ6MSxhcHByb3ZhbFdlaWdodDoxfX1dKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoImFwcHJvdmFscyIsWyJmcm9tIiwidG8iXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJhY2NvdW50cyIsW10se3ByaW1hcnlLZXk6WyJhY2NvdW50Il19KSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBhcmFtcyIpO2NvbnN0IHBhcmFtcz17ZHRmQ3JlYXRpb25GZWU6IjEwMDAiLGR0ZlVwZGF0ZUZlZToiMzAwIixkdGZUaWNrSG91cnM6IjI0IixtYXhEdGZzUGVyQmxvY2s6NDAsbWF4QWNjb3VudEFwcHJvdmFsczo1MCxwcm9jZXNzUXVlcnlMaW1pdDoxZTN9O2F3YWl0IGFwaS5kYi5pbnNlcnQoInBhcmFtcyIscGFyYW1zKX19LGFjdGlvbnMudXBkYXRlUGFyYW1zPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtkdGZDcmVhdGlvbkZlZTpkdGZDcmVhdGlvbkZlZSxkdGZVcGRhdGVGZWU6ZHRmVXBkYXRlRmVlLGR0ZlRpY2tIb3VyczpkdGZUaWNrSG91cnMsbWF4RHRmc1BlckJsb2NrOm1heER0ZnNQZXJCbG9jayxtYXhBY2NvdW50QXBwcm92YWxzOm1heEFjY291bnRBcHByb3ZhbHMscHJvY2Vzc1F1ZXJ5TGltaXQ6cHJvY2Vzc1F1ZXJ5TGltaXR9PXBheWxvYWQ7aWYoYXBpLnNlbmRlciE9PWFwaS5vd25lcilyZXR1cm47Y29uc3QgcGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KTtpZihkdGZDcmVhdGlvbkZlZSl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBkdGZDcmVhdGlvbkZlZSYmIWFwaS5CaWdOdW1iZXIoZHRmQ3JlYXRpb25GZWUpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoZHRmQ3JlYXRpb25GZWUpLmd0ZSgwKSwiaW52YWxpZCBkdGZDcmVhdGlvbkZlZSIpKXJldHVybjtwYXJhbXMuZHRmQ3JlYXRpb25GZWU9ZHRmQ3JlYXRpb25GZWV9aWYoZHRmVXBkYXRlRmVlKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIGR0ZlVwZGF0ZUZlZSYmIWFwaS5CaWdOdW1iZXIoZHRmVXBkYXRlRmVlKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGR0ZlVwZGF0ZUZlZSkuZ3RlKDApLCJpbnZhbGlkIGR0ZlVwZGF0ZUZlZSIpKXJldHVybjtwYXJhbXMuZHRmVXBkYXRlRmVlPWR0ZlVwZGF0ZUZlZX1pZihkdGZUaWNrSG91cnMpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgZHRmVGlja0hvdXJzJiZhcGkuQmlnTnVtYmVyKGR0ZlRpY2tIb3VycykuaXNJbnRlZ2VyKCkmJmFwaS5CaWdOdW1iZXIoZHRmVGlja0hvdXJzKS5ndGUoMSksImludmFsaWQgZHRmVGlja0hvdXJzIikpcmV0dXJuO3BhcmFtcy5kdGZUaWNrSG91cnM9ZHRmVGlja0hvdXJzfWlmKG1heER0ZnNQZXJCbG9jayl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBtYXhEdGZzUGVyQmxvY2smJmFwaS5CaWdOdW1iZXIobWF4RHRmc1BlckJsb2NrKS5pc0ludGVnZXIoKSYmYXBpLkJpZ051bWJlcihtYXhEdGZzUGVyQmxvY2spLmd0ZSgxKSwiaW52YWxpZCBtYXhEdGZzUGVyQmxvY2siKSlyZXR1cm47cGFyYW1zLm1heER0ZnNQZXJCbG9jaz1hcGkuQmlnTnVtYmVyKG1heER0ZnNQZXJCbG9jaykudG9OdW1iZXIoKX1pZihtYXhBY2NvdW50QXBwcm92YWxzKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIG1heEFjY291bnRBcHByb3ZhbHMmJmFwaS5CaWdOdW1iZXIobWF4QWNjb3VudEFwcHJvdmFscykuaXNJbnRlZ2VyKCkmJmFwaS5CaWdOdW1iZXIobWF4QWNjb3VudEFwcHJvdmFscykuZ3RlKDEpLCJpbnZhbGlkIG1heER0ZnNQZXJCbG9jayIpKXJldHVybjtwYXJhbXMubWF4QWNjb3VudEFwcHJvdmFscz1hcGkuQmlnTnVtYmVyKG1heEFjY291bnRBcHByb3ZhbHMpLnRvTnVtYmVyKCl9aWYocHJvY2Vzc1F1ZXJ5TGltaXQpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgcHJvY2Vzc1F1ZXJ5TGltaXQmJmFwaS5CaWdOdW1iZXIocHJvY2Vzc1F1ZXJ5TGltaXQpLmlzSW50ZWdlcigpJiZhcGkuQmlnTnVtYmVyKHByb2Nlc3NRdWVyeUxpbWl0KS5ndGUoMSksImludmFsaWQgcHJvY2Vzc1F1ZXJ5TGltaXQiKSlyZXR1cm47cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0PWFwaS5CaWdOdW1iZXIocHJvY2Vzc1F1ZXJ5TGltaXQpLnRvTnVtYmVyKCl9YXdhaXQgYXBpLmRiLnVwZGF0ZSgicGFyYW1zIixwYXJhbXMpfSxhY3Rpb25zLmNyZWF0ZUZ1bmQ9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3BheVRva2VuOnBheVRva2VuLHZvdGVUb2tlbjp2b3RlVG9rZW4sdm90ZVRocmVzaG9sZDp2b3RlVGhyZXNob2xkLG1heERheXM6bWF4RGF5cyxtYXhBbW91bnRQZXJEYXk6bWF4QW1vdW50UGVyRGF5LHByb3Bvc2FsRmVlOnByb3Bvc2FsRmVlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7ZHRmQ3JlYXRpb25GZWU6ZHRmQ3JlYXRpb25GZWV9PXBhcmFtcyx1dGlsaXR5VG9rZW5CYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksYXV0aG9yaXplZENyZWF0aW9uPSEoIWFwaS5CaWdOdW1iZXIoZHRmQ3JlYXRpb25GZWUpLmx0ZSgwKSYmYXBpLnNlbmRlciE9PWFwaS5vd25lcil8fHV0aWxpdHlUb2tlbkJhbGFuY2UmJmFwaS5CaWdOdW1iZXIodXRpbGl0eVRva2VuQmFsYW5jZS5iYWxhbmNlKS5ndGUoZHRmQ3JlYXRpb25GZWUpO2lmKGFwaS5hc3NlcnQoYXV0aG9yaXplZENyZWF0aW9uLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIGNyZWF0aW9uIGZlZSIpJiZhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSB0cmFuc2FjdGlvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHZvdGVUaHJlc2hvbGQmJmFwaS5CaWdOdW1iZXIodm90ZVRocmVzaG9sZCkuZ3QoMCksImludmFsaWQgdm90ZVRocmVzaG9sZDogZ3JlYXRlciB0aGFuIDAiKSYmYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIG1heERheXMmJmFwaS5CaWdOdW1iZXIobWF4RGF5cykuaXNJbnRlZ2VyKCkmJmFwaS5CaWdOdW1iZXIobWF4RGF5cykuZ3QoMCkmJmFwaS5CaWdOdW1iZXIobWF4RGF5cykubHRlKDczMCksImludmFsaWQgbWF4RGF5czogaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDczMCIpJiZhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgbWF4QW1vdW50UGVyRGF5JiZhcGkuQmlnTnVtYmVyKG1heEFtb3VudFBlckRheSkuZ3QoMCksImludmFsaWQgbWF4QW1vdW50UGVyRGF5OiBncmVhdGVyIHRoYW4gMCIpKXtpZihwcm9wb3NhbEZlZSl7aWYoIWFwaS5hc3NlcnQoIm9iamVjdCI9PXR5cGVvZiBwcm9wb3NhbEZlZSYmInN0cmluZyI9PXR5cGVvZiBwcm9wb3NhbEZlZS5tZXRob2QmJi0xIT09RmVlTWV0aG9kLmluZGV4T2YocHJvcG9zYWxGZWUubWV0aG9kKSYmInN0cmluZyI9PXR5cGVvZiBwcm9wb3NhbEZlZS5zeW1ib2wmJiJzdHJpbmciPT10eXBlb2YgcHJvcG9zYWxGZWUuYW1vdW50JiZhcGkuQmlnTnVtYmVyKHByb3Bvc2FsRmVlLmFtb3VudCkuZ3QoMCksImludmFsaWQgcHJvcG9zYWxGZWUiKSlyZXR1cm47Y29uc3QgZmVlVG9rZW5PYmo9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6cHJvcG9zYWxGZWUuc3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQoZmVlVG9rZW5PYmomJmFwaS5CaWdOdW1iZXIocHJvcG9zYWxGZWUuYW1vdW50KS5kcCgpPD1mZWVUb2tlbk9iai5wcmVjaXNpb24sImludmFsaWQgcHJvcG9zYWxGZWUgdG9rZW4gb3IgcHJlY2lzaW9uIikpcmV0dXJufWNvbnN0IHBheVRva2VuT2JqPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnBheVRva2VufSksdm90ZVRva2VuT2JqPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnZvdGVUb2tlbn0pO2lmKCF2YWxpZGF0ZVRva2VucyhwYXlUb2tlbk9iaix2b3RlVG9rZW5PYmopfHwhYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKG1heEFtb3VudFBlckRheSkuZHAoKTw9cGF5VG9rZW5PYmoucHJlY2lzaW9uLCJtYXhBbW91bnRQZXJEYXkgcHJlY2lzaW9uIG1pc21hdGNoIil8fCFhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIodm90ZVRocmVzaG9sZCkuZHAoKTw9dm90ZVRva2VuT2JqLnByZWNpc2lvbiwidm90ZVRocmVzaG9sZCBwcmVjaXNpb24gbWlzbWF0Y2giKSlyZXR1cm47Y29uc3Qgbm93PW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIiksbmV3RHRmPXtwYXlUb2tlbjpwYXlUb2tlbix2b3RlVG9rZW46dm90ZVRva2VuLHZvdGVUaHJlc2hvbGQ6dm90ZVRocmVzaG9sZCxtYXhEYXlzOm1heERheXMsbWF4QW1vdW50UGVyRGF5Om1heEFtb3VudFBlckRheSxwcm9wb3NhbEZlZTpwcm9wb3NhbEZlZSxhY3RpdmU6ITEsY3JlYXRvcjphcGkuc2VuZGVyLGxhc3RUaWNrVGltZTpub3cuZ2V0VGltZSgpfTtuZXdEdGYuaWQ9YCR7cGF5VG9rZW59OiR7dm90ZVRva2VufWA7Y29uc3QgZXhpc3RpbmdEdGY9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImZ1bmRzIix7aWQ6bmV3RHRmLmlkfSk7aWYoIWFwaS5hc3NlcnQoIWV4aXN0aW5nRHRmLCJEVEYgYWxyZWFkeSBleGlzdHMiKSlyZXR1cm47Y29uc3QgaW5zZXJ0ZWREdGY9YXdhaXQgYXBpLmRiLmluc2VydCgiZnVuZHMiLG5ld0R0Zik7YXBpLnNlbmRlciE9PWFwaS5vd25lciYmIm51bGwiIT09YXBpLnNlbmRlciYmYXBpLkJpZ051bWJlcihkdGZDcmVhdGlvbkZlZSkuZ3QoMCkmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmR0ZkNyZWF0aW9uRmVlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KSxhcGkuZW1pdCgiY3JlYXRlRnVuZCIse2lkOmluc2VydGVkRHRmLmlkfSl9fSxhY3Rpb25zLnVwZGF0ZUZ1bmQ9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2Z1bmRJZDpmdW5kSWQsdm90ZVRocmVzaG9sZDp2b3RlVGhyZXNob2xkLG1heERheXM6bWF4RGF5cyxtYXhBbW91bnRQZXJEYXk6bWF4QW1vdW50UGVyRGF5LHByb3Bvc2FsRmVlOnByb3Bvc2FsRmVlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7ZHRmVXBkYXRlRmVlOmR0ZlVwZGF0ZUZlZX09cGFyYW1zLHV0aWxpdHlUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6IkJFRSJ9KSxhdXRob3JpemVkVXBkYXRlPSEoIWFwaS5CaWdOdW1iZXIoZHRmVXBkYXRlRmVlKS5sdGUoMCkmJmFwaS5zZW5kZXIhPT1hcGkub3duZXIpfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKGR0ZlVwZGF0ZUZlZSk7aWYoYXBpLmFzc2VydChhdXRob3JpemVkVXBkYXRlLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIHVwZGF0ZSBmZWUiKSYmYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgdHJhbnNhY3Rpb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiB2b3RlVGhyZXNob2xkJiZhcGkuQmlnTnVtYmVyKHZvdGVUaHJlc2hvbGQpLmd0KDApLCJpbnZhbGlkIHZvdGVUaHJlc2hvbGQ6IGdyZWF0ZXIgdGhhbiAwIikmJmFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBtYXhEYXlzJiZhcGkuQmlnTnVtYmVyKG1heERheXMpLmlzSW50ZWdlcigpJiZhcGkuQmlnTnVtYmVyKG1heERheXMpLmd0KDApJiZhcGkuQmlnTnVtYmVyKG1heERheXMpLmx0ZSg3MzApLCJpbnZhbGlkIG1heERheXM6IGludGVnZXIgYmV0d2VlbiAxIGFuZCA3MzAiKSYmYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIG1heEFtb3VudFBlckRheSYmYXBpLkJpZ051bWJlcihtYXhBbW91bnRQZXJEYXkpLmd0KDApLCJpbnZhbGlkIG1heEFtb3VudFBlckRheTogZ3JlYXRlciB0aGFuIDAiKSl7aWYocHJvcG9zYWxGZWUpe2lmKCFhcGkuYXNzZXJ0KCJvYmplY3QiPT10eXBlb2YgcHJvcG9zYWxGZWUmJiJzdHJpbmciPT10eXBlb2YgcHJvcG9zYWxGZWUubWV0aG9kJiYtMSE9PUZlZU1ldGhvZC5pbmRleE9mKHByb3Bvc2FsRmVlLm1ldGhvZCkmJiJzdHJpbmciPT10eXBlb2YgcHJvcG9zYWxGZWUuc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHByb3Bvc2FsRmVlLmFtb3VudCYmYXBpLkJpZ051bWJlcihwcm9wb3NhbEZlZS5hbW91bnQpLmd0KDApLCJpbnZhbGlkIHByb3Bvc2FsRmVlIikpcmV0dXJuO2NvbnN0IGZlZVRva2VuT2JqPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnByb3Bvc2FsRmVlLnN5bWJvbH0pO2lmKCFhcGkuYXNzZXJ0KGZlZVRva2VuT2JqJiZhcGkuQmlnTnVtYmVyKHByb3Bvc2FsRmVlLmFtb3VudCkuZHAoKTw9ZmVlVG9rZW5PYmoucHJlY2lzaW9uLCJpbnZhbGlkIHByb3Bvc2FsRmVlIHRva2VuIG9yIHByZWNpc2lvbiIpKXJldHVybn1jb25zdCBleGlzdGluZ0R0Zj1hd2FpdCBhcGkuZGIuZmluZE9uZSgiZnVuZHMiLHtpZDpmdW5kSWR9KTtpZighYXBpLmFzc2VydChleGlzdGluZ0R0ZiwiRFRGIG5vdCBmb3VuZCIpfHwhYXBpLmFzc2VydChleGlzdGluZ0R0Zi5jcmVhdG9yPT09YXBpLnNlbmRlcnx8YXBpLm93bmVyPT09YXBpLnNlbmRlciwibXVzdCBiZSBEVEYgY3JlYXRvciIpKXJldHVybjtjb25zdCBwYXlUb2tlbk9iaj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpleGlzdGluZ0R0Zi5wYXlUb2tlbn0pLHZvdGVUb2tlbk9iaj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpleGlzdGluZ0R0Zi52b3RlVG9rZW59KTtpZighYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKG1heEFtb3VudFBlckRheSkuZHAoKTw9cGF5VG9rZW5PYmoucHJlY2lzaW9uLCJtYXhBbW91bnRQZXJEYXkgcHJlY2lzaW9uIG1pc21hdGNoIil8fCFhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIodm90ZVRocmVzaG9sZCkuZHAoKTw9dm90ZVRva2VuT2JqLnByZWNpc2lvbiwidm90ZVRocmVzaG9sZCBwcmVjaXNpb24gbWlzbWF0Y2giKSlyZXR1cm47ZXhpc3RpbmdEdGYudm90ZVRocmVzaG9sZD12b3RlVGhyZXNob2xkLGV4aXN0aW5nRHRmLm1heERheXM9bWF4RGF5cyxleGlzdGluZ0R0Zi5tYXhBbW91bnRQZXJEYXk9bWF4QW1vdW50UGVyRGF5LHByb3Bvc2FsRmVlJiYoZXhpc3RpbmdEdGYucHJvcG9zYWxGZWU9cHJvcG9zYWxGZWUpLGF3YWl0IGFwaS5kYi51cGRhdGUoImZ1bmRzIixleGlzdGluZ0R0ZiksYXBpLnNlbmRlciE9PWFwaS5vd25lciYmIm51bGwiIT09YXBpLnNlbmRlciYmYXBpLkJpZ051bWJlcihkdGZVcGRhdGVGZWUpLmd0KDApJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDoiQkVFIixxdWFudGl0eTpkdGZVcGRhdGVGZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pLGFwaS5lbWl0KCJ1cGRhdGVGdW5kIix7aWQ6ZnVuZElkfSl9fSxhY3Rpb25zLnNldER0ZkFjdGl2ZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7ZnVuZElkOmZ1bmRJZCxhY3RpdmU6YWN0aXZlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoIWFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIHRyYW5zYWN0aW9uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpKXJldHVybjtjb25zdCBkdGY9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImZ1bmRzIix7aWQ6ZnVuZElkfSk7YXBpLmFzc2VydChkdGYsIkRURiBkb2VzIG5vdCBleGlzdCIpJiZhcGkuYXNzZXJ0KGR0Zi5jcmVhdG9yPT09YXBpLnNlbmRlcnx8YXBpLm93bmVyPT09YXBpLnNlbmRlciwibXVzdCBiZSBEVEYgY3JlYXRvciIpJiYoZHRmLmFjdGl2ZT0hIWFjdGl2ZSxhd2FpdCBhcGkuZGIudXBkYXRlKCJmdW5kcyIsZHRmKSxhcGkuZW1pdCgic2V0RHRmQWN0aXZlIix7aWQ6ZHRmLmlkLGFjdGl2ZTpkdGYuYWN0aXZlfSkpfSxhY3Rpb25zLmNyZWF0ZVByb3Bvc2FsPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtmdW5kSWQ6ZnVuZElkLHRpdGxlOnRpdGxlLHN0YXJ0RGF0ZTpzdGFydERhdGUsZW5kRGF0ZTplbmREYXRlLGFtb3VudFBlckRheTphbW91bnRQZXJEYXksYXV0aG9yUGVybWxpbms6YXV0aG9yUGVybWxpbmsscGF5b3V0OnBheW91dCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkLGR0Zj1hd2FpdCBhcGkuZGIuZmluZE9uZSgiZnVuZHMiLHtpZDpmdW5kSWR9KTtpZighYXBpLmFzc2VydChkdGYsIkRURiBkb2VzIG5vdCBleGlzdCIpKXJldHVybjtsZXQgYXV0aG9yaXplZENyZWF0aW9uPSEwO2lmKGR0Zi5wcm9wb3NhbEZlZSl7Y29uc3QgZmVlVG9rZW5CYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOmR0Zi5wcm9wb3NhbEZlZS5zeW1ib2x9KTthdXRob3JpemVkQ3JlYXRpb249ISghYXBpLkJpZ051bWJlcihkdGYucHJvcG9zYWxGZWUuYW1vdW50KS5sdGUoMCkmJmFwaS5zZW5kZXIhPT1hcGkub3duZXIpfHxmZWVUb2tlbkJhbGFuY2UmJmFwaS5CaWdOdW1iZXIoZmVlVG9rZW5CYWxhbmNlLmJhbGFuY2UpLmd0ZShkdGYucHJvcG9zYWxGZWUuYW1vdW50KX1pZihhcGkuYXNzZXJ0KGF1dGhvcml6ZWRDcmVhdGlvbiwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWUiKSYmYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgdHJhbnNhY3Rpb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoITA9PT1kdGYuYWN0aXZlLCJEVEYgaXMgbm90IGFjdGl2ZSIpJiZhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgdGl0bGUmJnRpdGxlLmxlbmd0aD4wJiZ0aXRsZS5sZW5ndGg8PTgwLCJpbnZhbGlkIHRpdGxlOiBiZXR3ZWVuIDEgYW5kIDgwIGNoYXJhY3RlcnMiKSYmYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIGF1dGhvclBlcm1saW5rJiZhdXRob3JQZXJtbGluay5sZW5ndGg+MCYmYXV0aG9yUGVybWxpbmsubGVuZ3RoPD0yNTUsImludmFsaWQgYXV0aG9yUGVybWxpbms6IGJldHdlZW4gMSBhbmQgMjU1IGNoYXJhY3RlcnMiKSYmYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIGFtb3VudFBlckRheSYmYXBpLkJpZ051bWJlcihhbW91bnRQZXJEYXkpLmlzSW50ZWdlcigpJiZhcGkuQmlnTnVtYmVyKGFtb3VudFBlckRheSkuZ3QoMCksImludmFsaWQgYW1vdW50UGVyRGF5OiBncmVhdGVyIHRoYW4gMCIpJiZhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIoYW1vdW50UGVyRGF5KS5sdGUoZHRmLm1heEFtb3VudFBlckRheSksImludmFsaWQgYW1vdW50UGVyRGF5OiBleGNlZWRzIERURiBtYXhBbW91bnRQZXJEYXkiKSYmYXBpLmFzc2VydCgib2JqZWN0Ij09dHlwZW9mIHBheW91dCYmInN0cmluZyI9PXR5cGVvZiBwYXlvdXQudHlwZSYmLTEhPT1QYXlvdXRUeXBlLmluZGV4T2YocGF5b3V0LnR5cGUpJiYoImNvbnRyYWN0IiE9PXBheW91dC50eXBlfHwib2JqZWN0Ij09dHlwZW9mIHBheW91dC5jb250cmFjdFBheWxvYWQpJiYic3RyaW5nIj09dHlwZW9mIHBheW91dC5uYW1lJiZwYXlvdXQubmFtZS5sZW5ndGg+PTMmJnBheW91dC5uYW1lLmxlbmd0aDw9NTAsImludmFsaWQgcGF5b3V0IHNldHRpbmdzIikmJnZhbGlkYXRlRGF0ZVJhbmdlKHN0YXJ0RGF0ZSxlbmREYXRlLGR0Zi5tYXhEYXlzKSl7Y29uc3QgbmV3UHJvcG9zYWw9e2Z1bmRJZDpmdW5kSWQsdGl0bGU6dGl0bGUsc3RhcnREYXRlOnN0YXJ0RGF0ZSxlbmREYXRlOmVuZERhdGUsYW1vdW50UGVyRGF5OmFtb3VudFBlckRheSxhdXRob3JQZXJtbGluazphdXRob3JQZXJtbGluayxwYXlvdXQ6cGF5b3V0LGNyZWF0b3I6YXBpLnNlbmRlcixhcHByb3ZhbFdlaWdodDp7JG51bWJlckRlY2ltYWw6IjAifSxhY3RpdmU6ITB9LGluc2VydGVkUHJvcG9zYWw9YXdhaXQgYXBpLmRiLmluc2VydCgicHJvcG9zYWxzIixuZXdQcm9wb3NhbCk7aWYoYXBpLnNlbmRlciE9PWFwaS5vd25lciYmZHRmLnByb3Bvc2FsRmVlKWlmKCJidXJuIj09PWR0Zi5wcm9wb3NhbEZlZS5tZXRob2QpYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6ZHRmLnByb3Bvc2FsRmVlLnN5bWJvbCxxdWFudGl0eTpkdGYucHJvcG9zYWxGZWUuYW1vdW50fSk7ZWxzZSBpZigiaXNzdWVyIj09PWR0Zi5wcm9wb3NhbEZlZS5tZXRob2Qpe2NvbnN0IGZlZVRva2VuT2JqPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmR0Zi5wcm9wb3NhbEZlZS5zeW1ib2x9KTthd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86ZmVlVG9rZW5PYmouaXNzdWVyLHN5bWJvbDpkdGYucHJvcG9zYWxGZWUuc3ltYm9sLHF1YW50aXR5OmR0Zi5wcm9wb3NhbEZlZS5hbW91bnR9KX1hcGkuZW1pdCgiY3JlYXRlUHJvcG9zYWwiLHtpZDppbnNlcnRlZFByb3Bvc2FsLl9pZH0pfX0sYWN0aW9ucy51cGRhdGVQcm9wb3NhbD1hc3luYyBwYXlsb2FkPT57Y29uc3R7aWQ6aWQsdGl0bGU6dGl0bGUsZW5kRGF0ZTplbmREYXRlLGFtb3VudFBlckRheTphbW91bnRQZXJEYXksYXV0aG9yUGVybWxpbms6YXV0aG9yUGVybWxpbmssaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIGlkJiZhcGkuQmlnTnVtYmVyKGlkKS5pc0ludGVnZXIoKSwiaW52YWxpZCBpZCIpKXJldHVybjtjb25zdCBwcm9wb3NhbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicHJvcG9zYWxzIix7X2lkOmFwaS5CaWdOdW1iZXIoaWQpLnRvTnVtYmVyKCl9KTtpZighYXBpLmFzc2VydChwcm9wb3NhbCwicHJvcG9zYWwgZG9lcyBub3QgZXhpc3QiKXx8IWFwaS5hc3NlcnQocHJvcG9zYWwuY3JlYXRvcj09PWFwaS5zZW5kZXJ8fGFwaS5vd25lcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgcHJvcG9zYWwgY3JlYXRvciIpKXJldHVybjtjb25zdCBkdGY9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImZ1bmRzIix7aWQ6cHJvcG9zYWwuZnVuZElkLGFjdGl2ZTohMH0pO2FwaS5hc3NlcnQoZHRmLCJEVEYgZG9lcyBub3QgZXhpc3Qgb3IgaW5hY3RpdmUiKSYmYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgdHJhbnNhY3Rpb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoITA9PT1kdGYuYWN0aXZlLCJEVEYgaXMgbm90IGFjdGl2ZSIpJiZhcGkuYXNzZXJ0KCEwPT09cHJvcG9zYWwuYWN0aXZlLCJwcm9wb3NhbCBpcyBub3QgYWN0aXZlIikmJmFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiB0aXRsZSYmdGl0bGUubGVuZ3RoPjAmJnRpdGxlLmxlbmd0aDw9ODAsImludmFsaWQgdGl0bGU6IGJldHdlZW4gMSBhbmQgODAgY2hhcmFjdGVycyIpJiZhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgYXV0aG9yUGVybWxpbmsmJmF1dGhvclBlcm1saW5rLmxlbmd0aD4wJiZhdXRob3JQZXJtbGluay5sZW5ndGg8PTI1NSwiaW52YWxpZCBhdXRob3JQZXJtbGluazogYmV0d2VlbiAxIGFuZCAyNTUgY2hhcmFjdGVycyIpJiZhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgYW1vdW50UGVyRGF5JiZhcGkuQmlnTnVtYmVyKGFtb3VudFBlckRheSkuaXNJbnRlZ2VyKCkmJmFwaS5CaWdOdW1iZXIoYW1vdW50UGVyRGF5KS5ndCgwKSYmYXBpLkJpZ051bWJlcihhbW91bnRQZXJEYXkpLmx0ZShwcm9wb3NhbC5hbW91bnRQZXJEYXkpLCJpbnZhbGlkIGFtb3VudFBlckRheTogZ3JlYXRlciB0aGFuIDAgYW5kIGNhbm5vdCBiZSBpbmNyZWFzZWQiKSYmYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKGFtb3VudFBlckRheSkubHRlKGR0Zi5tYXhBbW91bnRQZXJEYXkpLCJpbnZhbGlkIGFtb3VudFBlckRheTogZXhjZWVkcyBEVEYgbWF4QW1vdW50UGVyRGF5IikmJnZhbGlkYXRlRGF0ZUNoYW5nZShwcm9wb3NhbCxlbmREYXRlLGR0Zi5tYXhEYXlzKSYmKHByb3Bvc2FsLnRpdGxlPXRpdGxlLHByb3Bvc2FsLmVuZERhdGU9ZW5kRGF0ZSxwcm9wb3NhbC5hbW91bnRQZXJEYXk9YW1vdW50UGVyRGF5LHByb3Bvc2FsLmF1dGhvclBlcm1saW5rPWF1dGhvclBlcm1saW5rLGF3YWl0IGFwaS5kYi51cGRhdGUoInByb3Bvc2FscyIscHJvcG9zYWwpLGFwaS5lbWl0KCJ1cGRhdGVQcm9wb3NhbCIse2lkOnByb3Bvc2FsLl9pZH0pKX0sYWN0aW9ucy5kaXNhYmxlUHJvcG9zYWw9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2lkOmlkLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBpZCYmYXBpLkJpZ051bWJlcihpZCkuaXNJbnRlZ2VyKCksImludmFsaWQgaWQiKSlyZXR1cm47Y29uc3QgcHJvcG9zYWw9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInByb3Bvc2FscyIse19pZDphcGkuQmlnTnVtYmVyKGlkKS50b051bWJlcigpfSk7YXBpLmFzc2VydChwcm9wb3NhbCwicHJvcG9zYWwgZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydCghMD09PXByb3Bvc2FsLmFjdGl2ZSwicHJvcG9zYWwgYWxyZWFkeSBkaXNhYmxlZCIpJiZhcGkuYXNzZXJ0KHByb3Bvc2FsLmNyZWF0b3I9PT1hcGkuc2VuZGVyfHxhcGkub3duZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHByb3Bvc2FsIGNyZWF0b3IiKSYmKHByb3Bvc2FsLmFjdGl2ZT0hMSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwcm9wb3NhbHMiLHByb3Bvc2FsKSxhcGkuZW1pdCgiZGlzYWJsZVByb3Bvc2FsIix7aWQ6cHJvcG9zYWwuX2lkfSkpfSxhY3Rpb25zLmFwcHJvdmVQcm9wb3NhbD1hc3luYyBwYXlsb2FkPT57Y29uc3R7aWQ6aWR9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KTtpZihhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgaWQmJmFwaS5CaWdOdW1iZXIoaWQpLmlzSW50ZWdlcigpLCJpbnZhbGlkIGlkIikpe2NvbnN0IHByb3Bvc2FsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwcm9wb3NhbHMiLHtfaWQ6YXBpLkJpZ051bWJlcihpZCkudG9OdW1iZXIoKX0pO2lmKGFwaS5hc3NlcnQocHJvcG9zYWwsInByb3Bvc2FsIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQodmFsaWRhdGVQZW5kaW5nKHByb3Bvc2FsKSwicHJvcG9zYWwgaXMgbm90IHBlbmRpbmciKSl7Y29uc3QgZHRmPWF3YWl0IGFwaS5kYi5maW5kT25lKCJmdW5kcyIse2lkOnByb3Bvc2FsLmZ1bmRJZH0pLHZvdGVUb2tlbk9iaj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpkdGYudm90ZVRva2VufSk7bGV0IGFjY3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImFjY291bnRzIix7YWNjb3VudDphcGkuc2VuZGVyfSk7bnVsbD09PWFjY3QmJihhY2N0PXthY2NvdW50OmFwaS5zZW5kZXIsd2VpZ2h0czpbXX0sYWNjdD1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJhY2NvdW50cyIsYWNjdCkpO2xldCBhY3RpdmVBcHByb3ZhbHM9MDtjb25zdCBhcHByb3ZhbHM9YXdhaXQgYXBpLmRiLmZpbmQoImFwcHJvdmFscyIse2Zyb206YXBpLnNlbmRlcixwcm9wb3NhbFBlbmRpbmc6ITB9LHBhcmFtcy5tYXhBY2NvdW50QXBwcm92YWxzLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiEwfV0pO2ZvcihsZXQgaW5kZXg9MDtpbmRleDxhcHByb3ZhbHMubGVuZ3RoO2luZGV4Kz0xKXtjb25zdCBhcHByb3ZhbD1hcHByb3ZhbHNbaW5kZXhdLGFwcHJvdmFsUHJvcG9zYWw9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInByb3Bvc2FscyIse19pZDphcHByb3ZhbC50b30pO2FwcHJvdmFsUHJvcG9zYWwmJnZhbGlkYXRlUGVuZGluZyhhcHByb3ZhbFByb3Bvc2FsKT9hY3RpdmVBcHByb3ZhbHMrPTE6KGFwcHJvdmFsLnByb3Bvc2FsUGVuZGluZz0hMSxhd2FpdCBhcGkuZGIudXBkYXRlKCJhcHByb3ZhbHMiLGFwcHJvdmFsKSl9aWYoIWFwaS5hc3NlcnQoYWN0aXZlQXBwcm92YWxzPHBhcmFtcy5tYXhBY2NvdW50QXBwcm92YWxzLGB5b3UgY2FuIG9ubHkgYXBwcm92ZSAke3BhcmFtcy5tYXhBY2NvdW50QXBwcm92YWxzfSBhY3RpdmUgcHJvcG9zYWxzYCkpcmV0dXJuO2xldCBhcHByb3ZhbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgiYXBwcm92YWxzIix7ZnJvbTphcGkuc2VuZGVyLHRvOnByb3Bvc2FsLl9pZH0pO2lmKGFwaS5hc3NlcnQobnVsbD09PWFwcHJvdmFsLCJ5b3UgYWxyZWFkeSBhcHByb3ZlZCB0aGlzIHByb3Bvc2FsIikpe2FwcHJvdmFsPXtmcm9tOmFwaS5zZW5kZXIsdG86cHJvcG9zYWwuX2lkLHByb3Bvc2FsUGVuZGluZzohMH0sYXdhaXQgYXBpLmRiLmluc2VydCgiYXBwcm92YWxzIixhcHByb3ZhbCk7Y29uc3QgYmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDpkdGYudm90ZVRva2VufSk7bGV0IGFwcHJvdmFsV2VpZ2h0PTA7YmFsYW5jZSYmYmFsYW5jZS5zdGFrZSYmKGFwcHJvdmFsV2VpZ2h0PWJhbGFuY2Uuc3Rha2UpLGJhbGFuY2UmJmJhbGFuY2UuZGVsZWdhdGlvbnNJbiYmKGFwcHJvdmFsV2VpZ2h0PWFwaS5CaWdOdW1iZXIoYXBwcm92YWxXZWlnaHQpLnBsdXMoYmFsYW5jZS5kZWxlZ2F0aW9uc0luKS50b0ZpeGVkKHZvdGVUb2tlbk9iai5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9IQUxGX1VQKSk7Y29uc3Qgd0luZGV4PWFjY3Qud2VpZ2h0cy5maW5kSW5kZXgoeD0+eC5zeW1ib2w9PT1kdGYudm90ZVRva2VuKTstMSE9PXdJbmRleD9hY2N0LndlaWdodHNbd0luZGV4XS53ZWlnaHQ9YXBwcm92YWxXZWlnaHQ6YWNjdC53ZWlnaHRzLnB1c2goe3N5bWJvbDpkdGYudm90ZVRva2VuLHdlaWdodDphcHByb3ZhbFdlaWdodH0pLGF3YWl0IGFwaS5kYi51cGRhdGUoImFjY291bnRzIixhY2N0KSxhd2FpdCB1cGRhdGVQcm9wb3NhbFdlaWdodChwcm9wb3NhbC5faWQsYXBwcm92YWxXZWlnaHQpLGFwaS5lbWl0KCJhcHByb3ZlUHJvcG9zYWwiLHtpZDpwcm9wb3NhbC5faWR9KX19fX0sYWN0aW9ucy5kaXNhcHByb3ZlUHJvcG9zYWw9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2lkOmlkfT1wYXlsb2FkO2lmKGFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBpZCYmYXBpLkJpZ051bWJlcihpZCkuaXNJbnRlZ2VyKCksImludmFsaWQgaWQiKSl7Y29uc3QgcHJvcG9zYWw9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInByb3Bvc2FscyIse19pZDphcGkuQmlnTnVtYmVyKGlkKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChwcm9wb3NhbCwicHJvcG9zYWwgZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydCh2YWxpZGF0ZVBlbmRpbmcocHJvcG9zYWwpLCJwcm9wb3NhbCBpcyBub3QgcGVuZGluZyIpKXtjb25zdCBkdGY9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImZ1bmRzIix7aWQ6cHJvcG9zYWwuZnVuZElkfSksdm90ZVRva2VuT2JqPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmR0Zi52b3RlVG9rZW59KTtsZXQgYWNjdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgiYWNjb3VudHMiLHthY2NvdW50OmFwaS5zZW5kZXJ9KTtudWxsPT09YWNjdCYmKGFjY3Q9e2FjY291bnQ6YXBpLnNlbmRlcix3ZWlnaHRzOltdfSxhY2N0PWF3YWl0IGFwaS5kYi5pbnNlcnQoImFjY291bnRzIixhY2N0KSk7Y29uc3QgYXBwcm92YWw9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImFwcHJvdmFscyIse2Zyb206YXBpLnNlbmRlcix0bzpwcm9wb3NhbC5faWR9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1hcHByb3ZhbCwieW91IGhhdmUgbm90IGFwcHJvdmVkIHRoaXMgcHJvcG9zYWwiKSl7YXdhaXQgYXBpLmRiLnJlbW92ZSgiYXBwcm92YWxzIixhcHByb3ZhbCk7Y29uc3QgYmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDpkdGYudm90ZVRva2VufSk7bGV0IGFwcHJvdmFsV2VpZ2h0PTA7YmFsYW5jZSYmYmFsYW5jZS5zdGFrZSYmKGFwcHJvdmFsV2VpZ2h0PWJhbGFuY2Uuc3Rha2UpLGJhbGFuY2UmJmJhbGFuY2UuZGVsZWdhdGlvbnNJbiYmKGFwcHJvdmFsV2VpZ2h0PWFwaS5CaWdOdW1iZXIoYXBwcm92YWxXZWlnaHQpLnBsdXMoYmFsYW5jZS5kZWxlZ2F0aW9uc0luKS50b0ZpeGVkKHZvdGVUb2tlbk9iai5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9IQUxGX1VQKSk7Y29uc3Qgd0luZGV4PWFjY3Qud2VpZ2h0cy5maW5kSW5kZXgoeD0+eC5zeW1ib2w9PT1kdGYudm90ZVRva2VuKTstMSE9PXdJbmRleD9hY2N0LndlaWdodHNbd0luZGV4XS53ZWlnaHQ9YXBwcm92YWxXZWlnaHQ6YWNjdC53ZWlnaHRzLnB1c2goe3N5bWJvbDpkdGYudm90ZVRva2VuLHdlaWdodDphcHByb3ZhbFdlaWdodH0pLGF3YWl0IGFwaS5kYi51cGRhdGUoImFjY291bnRzIixhY2N0KSxhd2FpdCB1cGRhdGVQcm9wb3NhbFdlaWdodChwcm9wb3NhbC5faWQsYXBpLkJpZ051bWJlcihhcHByb3ZhbFdlaWdodCkubmVnYXRlZCgpKSxhcGkuZW1pdCgiZGlzYXBwcm92ZVByb3Bvc2FsIix7aWQ6cHJvcG9zYWwuX2lkfSl9fX19LGFjdGlvbnMudXBkYXRlUHJvcG9zYWxBcHByb3ZhbHM9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2FjY291bnQ6YWNjb3VudCx0b2tlbjp0b2tlbixjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99PXBheWxvYWQ7aWYodm9pZCAwPT09Y2FsbGluZ0NvbnRyYWN0SW5mbylyZXR1cm47aWYoInRva2VucyIhPT1jYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUpcmV0dXJuO2NvbnN0IGFjY3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImFjY291bnRzIix7YWNjb3VudDphY2NvdW50fSk7aWYobnVsbCE9PWFjY3Qpe2NvbnN0IHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSksYmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphY2NvdW50LHN5bWJvbDp0b2tlbi5zeW1ib2x9KTtsZXQgYXBwcm92YWxXZWlnaHQ9MDtiYWxhbmNlJiZiYWxhbmNlLnN0YWtlJiYoYXBwcm92YWxXZWlnaHQ9YmFsYW5jZS5zdGFrZSksYmFsYW5jZSYmYmFsYW5jZS5kZWxlZ2F0aW9uc0luJiYoYXBwcm92YWxXZWlnaHQ9YXBpLkJpZ051bWJlcihhcHByb3ZhbFdlaWdodCkucGx1cyhiYWxhbmNlLmRlbGVnYXRpb25zSW4pLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCkpO2NvbnN0IHdJbmRleD1hY2N0LndlaWdodHMuZmluZEluZGV4KHg9Pnguc3ltYm9sPT09dG9rZW4uc3ltYm9sKTtsZXQgb2xkQXBwcm92YWxXZWlnaHQ9MDstMSE9PXdJbmRleD8ob2xkQXBwcm92YWxXZWlnaHQ9YWNjdC53ZWlnaHRzW3dJbmRleF0ud2VpZ2h0LGFjY3Qud2VpZ2h0c1t3SW5kZXhdLndlaWdodD1hcHByb3ZhbFdlaWdodCk6YWNjdC53ZWlnaHRzLnB1c2goe3N5bWJvbDp0b2tlbi5zeW1ib2wsd2VpZ2h0OmFwcHJvdmFsV2VpZ2h0fSk7Y29uc3QgZGVsdGFBcHByb3ZhbFdlaWdodD1hcGkuQmlnTnVtYmVyKGFwcHJvdmFsV2VpZ2h0KS5taW51cyhvbGRBcHByb3ZhbFdlaWdodCkuZHAodG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCk7aWYoIWFwaS5CaWdOdW1iZXIoZGVsdGFBcHByb3ZhbFdlaWdodCkuZXEoMCkpe2F3YWl0IGFwaS5kYi51cGRhdGUoImFjY291bnRzIixhY2N0KTtjb25zdCBhcHByb3ZhbHM9YXdhaXQgYXBpLmRiLmZpbmQoImFwcHJvdmFscyIse2Zyb206YWNjb3VudCxwcm9wb3NhbFBlbmRpbmc6ITB9LHBhcmFtcy5tYXhBY2NvdW50QXBwcm92YWxzLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiEwfV0pO2ZvcihsZXQgaW5kZXg9MDtpbmRleDxhcHByb3ZhbHMubGVuZ3RoO2luZGV4Kz0xKXtjb25zdCBhcHByb3ZhbD1hcHByb3ZhbHNbaW5kZXhdO2F3YWl0IHVwZGF0ZVByb3Bvc2FsV2VpZ2h0KGFwcHJvdmFsLnRvLGRlbHRhQXBwcm92YWxXZWlnaHQpfHwoYXBwcm92YWwucHJvcG9zYWxQZW5kaW5nPSExLGF3YWl0IGFwaS5kYi51cGRhdGUoImFwcHJvdmFscyIsYXBwcm92YWwpKX19fX0sYWN0aW9ucy5jaGVja1BlbmRpbmdEdGZzPWFzeW5jKCk9PntpZihhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsIm5vdCBhdXRob3JpemVkIikpe2NvbnN0IHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSksYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIiksdGlja1RpbWU9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS5taW51cygzNjAwKnBhcmFtcy5kdGZUaWNrSG91cnMqMWUzKS50b051bWJlcigpLHBlbmRpbmdEdGZzPWF3YWl0IGFwaS5kYi5maW5kKCJmdW5kcyIse2FjdGl2ZTohMCxsYXN0VGlja1RpbWU6eyRsdGU6dGlja1RpbWV9fSxwYXJhbXMubWF4RHRmc1BlckJsb2NrLDAsW3tpbmRleDoibGFzdFRpY2tUaW1lIixkZXNjZW5kaW5nOiExfSx7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPHBlbmRpbmdEdGZzLmxlbmd0aDtpKz0xKWF3YWl0IGNoZWNrUGVuZGluZ1Byb3Bvc2FscyhwZW5kaW5nRHRmc1tpXSxwYXJhbXMpfX07"}}}