You are viewing a single comment's thread from:

RE: testnet

in #test2 years ago (edited)

{ "id": "ssc-testnet-hive", "json": { "contractName":"contract", "contractAction":"update", "contractPayload":{ "name": "nft", "params": "", "code": "Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0IixVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUz0xMCxNQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUz0xMCxNQVhfU1lNQk9MX0xFTkdUSD0xMCxNQVhfREFUQV9QUk9QRVJUWV9MRU5HVEg9MTAwLE1BWF9OVU1fTkZUU19JU1NVQUJMRT0xMCxNQVhfTlVNX05GVFNfRURJVEFCTEU9NTAsTUFYX05VTV9ORlRTX09QRVJBQkxFPTUwLE1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEU9MSxSRVNFUlZFRF9TWU1CT0xTPXtDRUxMOiJiZWdnYXJzIixRVVNUOiJzaW1wbGVnYW1lIixURVNURVJBOiJhZ2dyb2VkIixTUVJMOiJzdHVmZmJ5c3BlbmNlciIsQ1JBRlQ6ImltbWFudWVsOTQiLE1VU0lDOiJhdG9tY29sbGVjdG9yIixDR1VMTDoiY2d1bGwiLE5GVDoiY2FkYXdnIixSQVJFOiJiZWdnYXJzIixMSUM6ImxpY3Rva2VuIixNRU1CRVI6Im1lbWJlcnRva2VuIixDT0ZGRUU6ImMwZmYzM2EiLEFSVDoiYnlvIixST0NLOiJiZWdnYXJzIixDUklUVEVSOiJjcnlwdG9tYW5jZXIiLENJVFk6ImdlcmJlciIsTU9OU1RFUlM6InNpbXBsZWdhbWUiLFNFVFM6Imxvb3RraXQuZ2FtZXMiLEFOSU1FOiJhbmltZXRva2VuIixQSE9UT0ZUOiJ3d3dpZWJlIixCRUVSOiJkZXRsZXYiLFNQSVI6InNwaW52ZXN0IixJRkc6Imxpb24yMDAiLEdVSUxEUzoic2ltcGxlZ2FtZSIsRkNBUkQ6Imxpb24yMDAiLFBYTDoicGl4ZWxuZnQiLENPVzoic3R1ZmZieXNwZW5jZXIiLExPT09UOiJzdHVmZmJ5c3BlbmNlciIsQVBJOiJzdGVlbWNpdHlhcGkiLFNQT1JUU01PTToic3BvcnRzdGVzdGVyIixTV1Q6InNhdHJlbiIsU1RBUjoiYXRvbWNvbGxlY3RvciJ9O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntpZighMT09PWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cygibmZ0cyIpKXthd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoIm5mdHMiLFsic3ltYm9sIl0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgicGFyYW1zIiksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsWyJzeW1ib2wiLCJjb21wbGV0ZVRpbWVzdGFtcCJdKTtjb25zdCBwYXJhbXM9e25mdENyZWF0aW9uRmVlOiIxMDAiLG5mdElzc3VhbmNlRmVlOnsiQkVFIjoiMC4wMDEiLFBBTDoiMC4wMDEifSxkYXRhUHJvcGVydHlDcmVhdGlvbkZlZToiMTAwIixlbmFibGVEZWxlZ2F0aW9uRmVlOiIxMDAwIn07YXdhaXQgYXBpLmRiLmluc2VydCgicGFyYW1zIixwYXJhbXMpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgZW5hYmxlRGVsZWdhdGlvbkZlZT0+e2lmKGFwaS5zZW5kZXI9PT1hcGkub3duZXIpe3ZhcntuZnRDcmVhdGlvbkZlZSxuZnRJc3N1YW5jZUZlZSxkYXRhUHJvcGVydHlDcmVhdGlvbkZlZSxlbmFibGVEZWxlZ2F0aW9uRmVlfT1lbmFibGVEZWxlZ2F0aW9uRmVlO2NvbnN0IHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7bmZ0Q3JlYXRpb25GZWUmJiJzdHJpbmciPT10eXBlb2YgbmZ0Q3JlYXRpb25GZWUmJiFhcGkuQmlnTnVtYmVyKG5mdENyZWF0aW9uRmVlKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG5mdENyZWF0aW9uRmVlKS5ndGUoMCkmJihwYXJhbXMubmZ0Q3JlYXRpb25GZWU9bmZ0Q3JlYXRpb25GZWUpLG5mdElzc3VhbmNlRmVlJiYib2JqZWN0Ij09dHlwZW9mIG5mdElzc3VhbmNlRmVlJiYocGFyYW1zLm5mdElzc3VhbmNlRmVlPW5mdElzc3VhbmNlRmVlKSxkYXRhUHJvcGVydHlDcmVhdGlvbkZlZSYmInN0cmluZyI9PXR5cGVvZiBkYXRhUHJvcGVydHlDcmVhdGlvbkZlZSYmIWFwaS5CaWdOdW1iZXIoZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUpLmd0ZSgwKSYmKHBhcmFtcy5kYXRhUHJvcGVydHlDcmVhdGlvbkZlZT1kYXRhUHJvcGVydHlDcmVhdGlvbkZlZSksZW5hYmxlRGVsZWdhdGlvbkZlZSYmInN0cmluZyI9PXR5cGVvZiBlbmFibGVEZWxlZ2F0aW9uRmVlJiYhYXBpLkJpZ051bWJlcihlbmFibGVEZWxlZ2F0aW9uRmVlKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGVuYWJsZURlbGVnYXRpb25GZWUpLmd0ZSgwKSYmKHBhcmFtcy5lbmFibGVEZWxlZ2F0aW9uRmVlPWVuYWJsZURlbGVnYXRpb25GZWUpLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIscGFyYW1zKX19O2NvbnN0IGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkPShyZXN1bHQsZnJvbSx0byxzeW1ib2wscXVhbnRpdHksZXZlbnRTdHIpPT4hKHZvaWQgMCE9PXJlc3VsdC5lcnJvcnN8fCFyZXN1bHQuZXZlbnRzfHx2b2lkIDA9PT1yZXN1bHQuZXZlbnRzLmZpbmQoZWw9PiJ0b2tlbnMiPT09ZWwuY29udHJhY3QmJmVsLmV2ZW50PT09ZXZlbnRTdHImJmVsLmRhdGEuZnJvbT09PWZyb20mJmVsLmRhdGEudG89PT10byYmZWwuZGF0YS5xdWFudGl0eT09PXF1YW50aXR5JiZlbC5kYXRhLnN5bWJvbD09PXN5bWJvbCkpLGNhbGN1bGF0ZUJhbGFuY2U9KGJhbGFuY2UscXVhbnRpdHkscHJlY2lzaW9uLGFkZCk9PihhZGQ/YXBpLkJpZ051bWJlcihiYWxhbmNlKS5wbHVzKHF1YW50aXR5KTphcGkuQmlnTnVtYmVyKGJhbGFuY2UpLm1pbnVzKHF1YW50aXR5KSkudG9GaXhlZChwcmVjaXNpb24pLGNvdW50RGVjaW1hbHM9dmFsdWU9PmFwaS5CaWdOdW1iZXIodmFsdWUpLmRwKCksY29udGFpbnNEdXBsaWNhdGVzPWFycj0+bmV3IFNldChhcnIpLnNpemUhPT1hcnIubGVuZ3RoLGlzVmFsaWRIaXZlQWNjb3VudExlbmd0aD1hY2NvdW50PT4zPD1hY2NvdW50Lmxlbmd0aCYmYWNjb3VudC5sZW5ndGg8PTE2LGlzVmFsaWRDb250cmFjdExlbmd0aD1jb250cmFjdD0+Mzw9Y29udHJhY3QubGVuZ3RoJiZjb250cmFjdC5sZW5ndGg8PTUwLGlzVmFsaWRBY2NvdW50c0FycmF5PWFycj0+e2xldCB2YWxpZENvbnRlbnRzPSEwO3JldHVybiBhcnIuZm9yRWFjaChhY2NvdW50PT57InN0cmluZyI9PXR5cGVvZiBhY2NvdW50JiZpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoYWNjb3VudCl8fCh2YWxpZENvbnRlbnRzPSExKX0pLHZhbGlkQ29udGVudHN9LGlzVmFsaWRDb250cmFjdHNBcnJheT1hcnI9PntsZXQgdmFsaWRDb250ZW50cz0hMDtyZXR1cm4gYXJyLmZvckVhY2goY29udHJhY3Q9Pnsic3RyaW5nIj09dHlwZW9mIGNvbnRyYWN0JiZpc1ZhbGlkQ29udHJhY3RMZW5ndGgoY29udHJhY3QpfHwodmFsaWRDb250ZW50cz0hMSl9KSx2YWxpZENvbnRlbnRzfSxpc1ZhbGlkRGF0YVByb3BlcnRpZXM9KGZyb20sZnJvbVR5cGUsbmZ0LHByb3BlcnRpZXMpPT57dmFyIG5hbWUsZGF0YSxwcm9wZXJ0eUNvdW50PU9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmxlbmd0aCxuZnRQcm9wZXJ0eUNvdW50PU9iamVjdC5rZXlzKG5mdC5wcm9wZXJ0aWVzKS5sZW5ndGg7aWYoIWFwaS5hc3NlcnQocHJvcGVydHlDb3VudDw9bmZ0UHJvcGVydHlDb3VudCwiY2Fubm90IHNldCBtb3JlIGRhdGEgcHJvcGVydGllcyB0aGFuIE5GVCBoYXMiKSlyZXR1cm4hMTtmb3IoW25hbWUsZGF0YV1vZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKSl7bGV0IHZhbGlkQ29udGVudHM9ITE7aWYoYXBpLmFzc2VydChuYW1lJiYic3RyaW5nIj09dHlwZW9mIG5hbWUmJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMobmFtZSkmJjA8bmFtZS5sZW5ndGgmJm5hbWUubGVuZ3RoPD0yNSwiaW52YWxpZCBkYXRhIHByb3BlcnR5IG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydChuYW1lIGluIG5mdC5wcm9wZXJ0aWVzLCJkYXRhIHByb3BlcnR5IG11c3QgZXhpc3QiKSl7Y29uc3QgcHJvcGVydHlTY2hlbWE9bmZ0LnByb3BlcnRpZXNbbmFtZV07YXBpLmFzc2VydCh2b2lkIDAhPT1kYXRhJiZudWxsIT09ZGF0YSYmKHR5cGVvZiBkYXRhPT09cHJvcGVydHlTY2hlbWEudHlwZXx8Im51bWJlciI9PT1wcm9wZXJ0eVNjaGVtYS50eXBlJiYic3RyaW5nIj09dHlwZW9mIGRhdGEmJiFhcGkuQmlnTnVtYmVyKGRhdGEpLmlzTmFOKCkpLGBkYXRhIHByb3BlcnR5IHR5cGUgbWlzbWF0Y2g6IGV4cGVjdGVkICR7cHJvcGVydHlTY2hlbWEudHlwZX0gYnV0IGdvdCAke3R5cGVvZiBkYXRhfSBmb3IgcHJvcGVydHkgYCtuYW1lKSYmYXBpLmFzc2VydCgic3RyaW5nIiE9dHlwZW9mIGRhdGF8fGRhdGEubGVuZ3RoPD1NQVhfREFUQV9QUk9QRVJUWV9MRU5HVEgsYHN0cmluZyBwcm9wZXJ0eSBtYXggbGVuZ3RoIGlzICR7TUFYX0RBVEFfUFJPUEVSVFlfTEVOR1RIfSBjaGFyYWN0ZXJzYCkmJmFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PWZyb21UeXBlJiZwcm9wZXJ0eVNjaGVtYS5hdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cy5pbmNsdWRlcyhmcm9tKXx8InVzZXIiPT09ZnJvbVR5cGUmJnByb3BlcnR5U2NoZW1hLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHMuaW5jbHVkZXMoZnJvbSksIm5vdCBhbGxvd2VkIHRvIHNldCBkYXRhIHByb3BlcnRpZXMiKSYmKHZhbGlkQ29udGVudHM9ITAsIm51bWJlciI9PT1wcm9wZXJ0eVNjaGVtYS50eXBlJiYic3RyaW5nIj09dHlwZW9mIGRhdGEmJihwcm9wZXJ0aWVzW25hbWVdPWFwaS5CaWdOdW1iZXIoZGF0YSkudG9OdW1iZXIoKSkpfWlmKCF2YWxpZENvbnRlbnRzKXJldHVybiExfXJldHVybiEwfSxpc1ZhbGlkRGF0YVByb3BlcnRpZXNBcnJheT0oZnJvbSxmcm9tVHlwZSxuZnQsYXJyKT0+e3RyeXtmb3IobGV0IGk9MDtpPGFyci5sZW5ndGg7aSs9MSl7bGV0IHZhbGlkQ29udGVudHM9ITE7dmFye2lkLHByb3BlcnRpZXN9PWFycltpXTtpZihhcGkuYXNzZXJ0KGlkJiYic3RyaW5nIj09dHlwZW9mIGlkJiYhYXBpLkJpZ051bWJlcihpZCkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihpZCkuZ3QoMCkmJnByb3BlcnRpZXMmJiJvYmplY3QiPT10eXBlb2YgcHJvcGVydGllcywiaW52YWxpZCBkYXRhIHByb3BlcnRpZXMiKSYmaXNWYWxpZERhdGFQcm9wZXJ0aWVzKGZyb20sZnJvbVR5cGUsbmZ0LHByb3BlcnRpZXMpJiYodmFsaWRDb250ZW50cz0hMCksIXZhbGlkQ29udGVudHMpcmV0dXJuITF9fWNhdGNoKGUpe3JldHVybiExfXJldHVybiEwfSxpc1ZhbGlkTmZ0SWRBcnJheT1hcnI9Pnt0cnl7bGV0IGluc3RhbmNlQ291bnQ9MDtmb3IobGV0IGk9MDtpPGFyci5sZW5ndGg7aSs9MSl7bGV0IHZhbGlkQ29udGVudHM9ITE7dmFye3N5bWJvbCxpZHN9PWFycltpXTtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJmFwaS52YWxpZGF0b3IuaXNBbHBoYShzeW1ib2wpJiZhcGkudmFsaWRhdG9yLmlzVXBwZXJjYXNlKHN5bWJvbCkmJjA8c3ltYm9sLmxlbmd0aCYmc3ltYm9sLmxlbmd0aDw9TUFYX1NZTUJPTF9MRU5HVEgmJmlkcyYmIm9iamVjdCI9PXR5cGVvZiBpZHMmJkFycmF5LmlzQXJyYXkoaWRzKSwiaW52YWxpZCBuZnQgbGlzdCIpJiYoaW5zdGFuY2VDb3VudCs9aWRzLmxlbmd0aCxhcGkuYXNzZXJ0KGluc3RhbmNlQ291bnQ8PU1BWF9OVU1fTkZUU19PUEVSQUJMRSxgY2Fubm90IG9wZXJhdGUgb24gbW9yZSB0aGFuICR7TUFYX05VTV9ORlRTX09QRVJBQkxFfSBORlQgaW5zdGFuY2VzIGF0IG9uY2VgKSkpe2ZvcihsZXQgaj0wO2o8aWRzLmxlbmd0aDtqKz0xKXt2YXIgaWQ9aWRzW2pdO2lmKCFhcGkuYXNzZXJ0KGlkJiYic3RyaW5nIj09dHlwZW9mIGlkJiYhYXBpLkJpZ051bWJlcihpZCkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihpZCkuZ3QoMCksImludmFsaWQgbmZ0IGxpc3QiKSlyZXR1cm4hMX12YWxpZENvbnRlbnRzPSEwfWlmKCF2YWxpZENvbnRlbnRzKXJldHVybiExfX1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZFRva2VuQmFza2V0PWFzeW5jKGJhc2tldCxiYWxhbmNlVGFibGVOYW1lLGFjY291bnROYW1lLGZlZVN5bWJvbCxmZWVRdWFudGl0eSk9Pnt0cnl7dmFyIHN5bWJvbCxxdWFudGl0eSx0b2tlbixmaW5hbFF1YW50aXR5LGJhc2tldFRva2VuQmFsYW5jZTtpZihPYmplY3Qua2V5cyhiYXNrZXQpLmxlbmd0aD5NQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUylyZXR1cm4hMTtmb3IoW3N5bWJvbCxxdWFudGl0eV1vZiBPYmplY3QuZW50cmllcyhiYXNrZXQpKXtsZXQgdmFsaWRDb250ZW50cz0hMTtpZigic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmYXBpLnZhbGlkYXRvci5pc0FscGhhKHN5bWJvbCkmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2Uoc3ltYm9sKSYmMDxzeW1ib2wubGVuZ3RoJiZzeW1ib2wubGVuZ3RoPD1NQVhfU1lNQk9MX0xFTkdUSCYmKCh0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpzeW1ib2x9KSkmJnF1YW50aXR5JiYic3RyaW5nIj09dHlwZW9mIHF1YW50aXR5JiYhYXBpLkJpZ051bWJlcihxdWFudGl0eSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihxdWFudGl0eSkuZ3QoMCkmJmNvdW50RGVjaW1hbHMocXVhbnRpdHkpPD10b2tlbi5wcmVjaXNpb24mJihmaW5hbFF1YW50aXR5PXN5bWJvbD09PWZlZVN5bWJvbD9jYWxjdWxhdGVCYWxhbmNlKHF1YW50aXR5LGZlZVF1YW50aXR5LHRva2VuLnByZWNpc2lvbiwhMCk6cXVhbnRpdHksKGJhc2tldFRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsYmFsYW5jZVRhYmxlTmFtZSx7YWNjb3VudDphY2NvdW50TmFtZSxzeW1ib2w6c3ltYm9sfSkpJiZhcGkuQmlnTnVtYmVyKGJhc2tldFRva2VuQmFsYW5jZS5iYWxhbmNlKS5ndGUoZmluYWxRdWFudGl0eSkmJih2YWxpZENvbnRlbnRzPSEwKSkpLCF2YWxpZENvbnRlbnRzKXJldHVybiExfX1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4hMH0sdHJhbnNmZXJBbmRWZXJpZnlOZnRzPWFzeW5jKGZyb20sZnJvbVR5cGUsdG8sdG9UeXBlLG5mdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm8pPT57Y29uc3QgcmVzdWx0cz17c3VjY2VzczpbXSxmYWlsOltdfTt2YXIgZmluYWxGcm9tVHlwZT0idXNlciI9PT1mcm9tVHlwZT8idSI6ImMiLGZpbmFsVG9UeXBlPSJ1c2VyIj09PXRvVHlwZT8idSI6ImMiO2F3YWl0IGFjdGlvbnMudHJhbnNmZXIoe2Zyb21UeXBlOmZyb21UeXBlLHRvOnRvLHRvVHlwZTp0b1R5cGUsbmZ0czpuZnRzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfSk7dmFyIGxvZ3M9YXBpLmxvZ3MoKTtjb25zdCB0b2tlbk1hcD17fSxjb3VudGVkTWFwPXt9O2lmKGxvZ3MuZXZlbnRzKWZvcihsZXQgaT0wO2k8bG9ncy5ldmVudHMubGVuZ3RoO2krPTEpe3ZhciBrZXk9bG9ncy5ldmVudHNbaV07a2V5LmNvbnRyYWN0JiZrZXkuZXZlbnQmJmtleS5kYXRhJiYibmZ0Ij09PWtleS5jb250cmFjdCYmInRyYW5zZmVyIj09PWtleS5ldmVudCYma2V5LmRhdGEuZnJvbT09PWZyb20mJmtleS5kYXRhLmZyb21UeXBlPT09ZmluYWxGcm9tVHlwZSYma2V5LmRhdGEudG89PT10byYma2V5LmRhdGEudG9UeXBlPT09ZmluYWxUb1R5cGUmJihrZXk9a2V5LmRhdGEuc3ltYm9sKyItIitrZXkuZGF0YS5pZCx0b2tlbk1hcFtrZXldPTEpfWZvcihsZXQgaW5kZXg9MDtpbmRleDxuZnRzLmxlbmd0aDtpbmRleCs9MSl7Y29uc3R7c3ltYm9sLGlkc309bmZ0c1tpbmRleF0sc3VjY2Vzcz1bXSxmYWlsPVtdO2ZvcihsZXQgaj0wO2o8aWRzLmxlbmd0aDtqKz0xKXt2YXIgaW5wdXRLZXk9c3ltYm9sKyItIitpZHNbal07aW5wdXRLZXkgaW4gY291bnRlZE1hcHx8KChpbnB1dEtleSBpbiB0b2tlbk1hcD9zdWNjZXNzOmZhaWwpLnB1c2goaWRzW2pdLnRvU3RyaW5nKCkpLGNvdW50ZWRNYXBbaW5wdXRLZXldPTEpfTA8c3VjY2Vzcy5sZW5ndGgmJnJlc3VsdHMuc3VjY2Vzcy5wdXNoKHtzeW1ib2w6c3ltYm9sLGlkczpzdWNjZXNzfSksMDxmYWlsLmxlbmd0aCYmcmVzdWx0cy5mYWlsLnB1c2goe3N5bWJvbDpzeW1ib2wsaWRzOmZhaWx9KX1yZXR1cm4gcmVzdWx0c307YWN0aW9ucy51cGRhdGVVcmw9YXN5bmMgc3ltYm9sPT57dmFye3VybCxzeW1ib2x9PXN5bWJvbDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJnVybCYmInN0cmluZyI9PXR5cGVvZiB1cmwsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodXJsLmxlbmd0aDw9MjU1LCJpbnZhbGlkIHVybDogbWF4IGxlbmd0aCBvZiAyNTUiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e2NvbnN0IG1ldGFkYXRhPUpTT04ucGFyc2UobmZ0Lm1ldGFkYXRhKTthcGkuYXNzZXJ0KG1ldGFkYXRhJiZtZXRhZGF0YS51cmwsImFuIGVycm9yIG9jY3VyZWQgd2hlbiB0cnlpbmcgdG8gdXBkYXRlIHRoZSB1cmwiKSYmKG1ldGFkYXRhLnVybD11cmwsbmZ0Lm1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG1ldGFkYXRhKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpKX1jYXRjaChlKXt9fX0sYWN0aW9ucy51cGRhdGVNZXRhZGF0YT1hc3luYyBzeW1ib2w9Pnt2YXJ7bWV0YWRhdGEsc3ltYm9sfT1zeW1ib2w7aWYoYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZtZXRhZGF0YSYmIm9iamVjdCI9PXR5cGVvZiBtZXRhZGF0YSwiaW52YWxpZCBwYXJhbXMiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e3ZhciBmaW5hbE1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG1ldGFkYXRhKTthcGkuYXNzZXJ0KGZpbmFsTWV0YWRhdGEubGVuZ3RoPD0xZTMsImludmFsaWQgbWV0YWRhdGE6IG1heCBsZW5ndGggb2YgMTAwMCIpJiYobmZ0Lm1ldGFkYXRhPWZpbmFsTWV0YWRhdGEsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSl9Y2F0Y2goZSl7fX19LGFjdGlvbnMudXBkYXRlTmFtZT1hc3luYyBzeW1ib2w9Pnt2YXJ7bmFtZSxzeW1ib2x9PXN5bWJvbDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJm5hbWUmJiJzdHJpbmciPT10eXBlb2YgbmFtZSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KG5hbWUsIiAiKSkmJjA8bmFtZS5sZW5ndGgmJm5hbWUubGVuZ3RoPD01MCwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtuZnQmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYobmZ0Lm5hbWU9bmFtZSxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpKX19LGFjdGlvbnMudXBkYXRlT3JnTmFtZT1hc3luYyBzeW1ib2w9Pnt2YXJ7b3JnTmFtZSxzeW1ib2x9PXN5bWJvbDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJm9yZ05hbWUmJiJzdHJpbmciPT10eXBlb2Ygb3JnTmFtZSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KG9yZ05hbWUsIiAiKSkmJjA8b3JnTmFtZS5sZW5ndGgmJm9yZ05hbWUubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7bmZ0JiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKG5mdC5vcmdOYW1lPW9yZ05hbWUsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSl9fSxhY3Rpb25zLnVwZGF0ZVByb2R1Y3ROYW1lPWFzeW5jIHN5bWJvbD0+e3Zhcntwcm9kdWN0TmFtZSxzeW1ib2x9PXN5bWJvbDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJnByb2R1Y3ROYW1lJiYic3RyaW5nIj09dHlwZW9mIHByb2R1Y3ROYW1lLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QocHJvZHVjdE5hbWUsIiAiKSkmJjA8cHJvZHVjdE5hbWUubGVuZ3RoJiZwcm9kdWN0TmFtZS5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7bmZ0JiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKG5mdC5wcm9kdWN0TmFtZT1wcm9kdWN0TmFtZSxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpKX19LGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1hc3luYyBmaW5hbEFjY291bnRMaXN0PT57Y29uc3R7YWNjb3VudHMsc3ltYm9sLGlzU2lnbmVkV2l0aEFjdGl2ZUtleX09ZmluYWxBY2NvdW50TGlzdDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZhY2NvdW50cyYmIm9iamVjdCI9PXR5cGVvZiBhY2NvdW50cyYmQXJyYXkuaXNBcnJheShhY2NvdW50cyksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoYWNjb3VudHMubGVuZ3RoPD1NQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUyxgY2Fubm90IGhhdmUgbW9yZSB0aGFuICR7TUFYX05VTV9BVVRIT1JJWkVEX0lTU1VFUlN9IGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50c2ApKXt2YXIgZmluYWxBY2NvdW50TGlzdD1pc1ZhbGlkQWNjb3VudHNBcnJheShhY2NvdW50cyk7aWYoYXBpLmFzc2VydChmaW5hbEFjY291bnRMaXN0LCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0KXtjb25zdCBzYW5pdGl6ZWRMaXN0PVtdO2FjY291bnRzLmZvckVhY2goYWNjb3VudD0+e3ZhciBmaW5hbEFjY291bnQ9YWNjb3VudC50cmltKCkudG9Mb3dlckNhc2UoKTtsZXQgaXNEdXBsaWNhdGU9ITE7Zm9yKGxldCBpPTA7aTxuZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5sZW5ndGg7aSs9MSlpZihmaW5hbEFjY291bnQ9PT1uZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50c1tpXSl7aXNEdXBsaWNhdGU9ITA7YnJlYWt9aXNEdXBsaWNhdGV8fHNhbml0aXplZExpc3QucHVzaChmaW5hbEFjY291bnQpfSksYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhzYW5pdGl6ZWRMaXN0KSwiY2Fubm90IGFkZCB0aGUgc2FtZSBhY2NvdW50IHR3aWNlIikmJmFwaS5hc3NlcnQobmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMubGVuZ3RoK3Nhbml0aXplZExpc3QubGVuZ3RoPD1NQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUyxgY2Fubm90IGhhdmUgbW9yZSB0aGFuICR7TUFYX05VTV9BVVRIT1JJWkVEX0lTU1VFUlN9IGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50c2ApJiYoZmluYWxBY2NvdW50TGlzdD1uZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5jb25jYXQoc2FuaXRpemVkTGlzdCksbmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9ZmluYWxBY2NvdW50TGlzdCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpKX19fX0sYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBmaW5hbENvbnRyYWN0TGlzdD0+e2NvbnN0e2NvbnRyYWN0cyxzeW1ib2wsaXNTaWduZWRXaXRoQWN0aXZlS2V5fT1maW5hbENvbnRyYWN0TGlzdDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZjb250cmFjdHMmJiJvYmplY3QiPT10eXBlb2YgY29udHJhY3RzJiZBcnJheS5pc0FycmF5KGNvbnRyYWN0cyksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoY29udHJhY3RzLmxlbmd0aDw9TUFYX05VTV9BVVRIT1JJWkVEX0lTU1VFUlMsYGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAke01BWF9OVU1fQVVUSE9SSVpFRF9JU1NVRVJTfSBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzYCkpe3ZhciBmaW5hbENvbnRyYWN0TGlzdD1pc1ZhbGlkQ29udHJhY3RzQXJyYXkoY29udHJhY3RzKTtpZihhcGkuYXNzZXJ0KGZpbmFsQ29udHJhY3RMaXN0LCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCl7Y29uc3Qgc2FuaXRpemVkTGlzdD1bXTtjb250cmFjdHMuZm9yRWFjaChjb250cmFjdD0+e3ZhciBmaW5hbENvbnRyYWN0PWNvbnRyYWN0LnRyaW0oKTtsZXQgaXNEdXBsaWNhdGU9ITE7Zm9yKGxldCBpPTA7aTxuZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMubGVuZ3RoO2krPTEpaWYoZmluYWxDb250cmFjdD09PW5mdC5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c1tpXSl7aXNEdXBsaWNhdGU9ITA7YnJlYWt9aXNEdXBsaWNhdGV8fHNhbml0aXplZExpc3QucHVzaChmaW5hbENvbnRyYWN0KX0pLGFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiZhcGkuYXNzZXJ0KCFjb250YWluc0R1cGxpY2F0ZXMoc2FuaXRpemVkTGlzdCksImNhbm5vdCBhZGQgdGhlIHNhbWUgY29udHJhY3QgdHdpY2UiKSYmYXBpLmFzc2VydChuZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMubGVuZ3RoK3Nhbml0aXplZExpc3QubGVuZ3RoPD1NQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUyxgY2Fubm90IGhhdmUgbW9yZSB0aGFuICR7TUFYX05VTV9BVVRIT1JJWkVEX0lTU1VFUlN9IGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHNgKSYmKGZpbmFsQ29udHJhY3RMaXN0PW5mdC5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5jb25jYXQoc2FuaXRpemVkTGlzdCksbmZ0LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzPWZpbmFsQ29udHJhY3RMaXN0LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCkpfX19fSxhY3Rpb25zLnJlbW92ZUF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9YXN5bmMgZmluYWxBY2NvdW50TGlzdD0+e2NvbnN0e2FjY291bnRzLHN5bWJvbCxpc1NpZ25lZFdpdGhBY3RpdmVLZXl9PWZpbmFsQWNjb3VudExpc3Q7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmYWNjb3VudHMmJiJvYmplY3QiPT10eXBlb2YgYWNjb3VudHMmJkFycmF5LmlzQXJyYXkoYWNjb3VudHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFjY291bnRzLmxlbmd0aDw9TUFYX05VTV9BVVRIT1JJWkVEX0lTU1VFUlMsYGNhbm5vdCByZW1vdmUgbW9yZSB0aGFuICR7TUFYX05VTV9BVVRIT1JJWkVEX0lTU1VFUlN9IGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50c2ApKXt2YXIgZmluYWxBY2NvdW50TGlzdD1pc1ZhbGlkQWNjb3VudHNBcnJheShhY2NvdW50cyk7aWYoYXBpLmFzc2VydChmaW5hbEFjY291bnRMaXN0LCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7bmZ0JiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKGZpbmFsQWNjb3VudExpc3Q9bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuZmlsdGVyKGN1cnJlbnRWYWx1ZT0+e2ZvcihsZXQgaT0wO2k8YWNjb3VudHMubGVuZ3RoO2krPTEpaWYoY3VycmVudFZhbHVlPT09YWNjb3VudHNbaV0udHJpbSgpLnRvTG93ZXJDYXNlKCkpcmV0dXJuITE7cmV0dXJuITB9KSxuZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1maW5hbEFjY291bnRMaXN0LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCkpfX19LGFjdGlvbnMucmVtb3ZlQXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM9YXN5bmMgZmluYWxDb250cmFjdExpc3Q9Pntjb25zdHtjb250cmFjdHMsc3ltYm9sLGlzU2lnbmVkV2l0aEFjdGl2ZUtleX09ZmluYWxDb250cmFjdExpc3Q7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmY29udHJhY3RzJiYib2JqZWN0Ij09dHlwZW9mIGNvbnRyYWN0cyYmQXJyYXkuaXNBcnJheShjb250cmFjdHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGNvbnRyYWN0cy5sZW5ndGg8PU1BWF9OVU1fQVVUSE9SSVpFRF9JU1NVRVJTLGBjYW5ub3QgcmVtb3ZlIG1vcmUgdGhhbiAke01BWF9OVU1fQVVUSE9SSVpFRF9JU1NVRVJTfSBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzYCkpe3ZhciBmaW5hbENvbnRyYWN0TGlzdD1pc1ZhbGlkQ29udHJhY3RzQXJyYXkoY29udHJhY3RzKTtpZihhcGkuYXNzZXJ0KGZpbmFsQ29udHJhY3RMaXN0LCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO25mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihmaW5hbENvbnRyYWN0TGlzdD1uZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuZmlsdGVyKGN1cnJlbnRWYWx1ZT0+e2ZvcihsZXQgaT0wO2k8Y29udHJhY3RzLmxlbmd0aDtpKz0xKWlmKGN1cnJlbnRWYWx1ZT09PWNvbnRyYWN0c1tpXS50cmltKCkpcmV0dXJuITE7cmV0dXJuITB9KSxuZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM9ZmluYWxDb250cmFjdExpc3QsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSl9fX0sYWN0aW9ucy50cmFuc2Zlck93bmVyc2hpcD1hc3luYyBmaW5hbFRvPT57Y29uc3R7c3ltYm9sLHRvLGlzU2lnbmVkV2l0aEFjdGl2ZUtleX09ZmluYWxUbztpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZ0byYmInN0cmluZyI9PXR5cGVvZiB0bywiaW52YWxpZCBwYXJhbXMiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO25mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihmaW5hbFRvPXRvLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGFwaS5hc3NlcnQoaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGZpbmFsVG8pLCJpbnZhbGlkIHRvIikmJihuZnQuaXNzdWVyPWZpbmFsVG8sYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSkpfX0sYWN0aW9ucy5lbmFibGVEZWxlZ2F0aW9uPWFzeW5jIGF1dGhvcml6ZWQ9Pnt2YXJ7c3ltYm9sLHVuZGVsZWdhdGlvbkNvb2xkb3duLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpyZXN9PWF1dGhvcml6ZWQsZW5hYmxlRGVsZWdhdGlvbkZlZT0oYXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pKVsiZW5hYmxlRGVsZWdhdGlvbkZlZSJdLGF1dGhvcml6ZWQ9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0x9KSxhdXRob3JpemVkPSEhYXBpLkJpZ051bWJlcihlbmFibGVEZWxlZ2F0aW9uRmVlKS5sdGUoMCl8fGF1dGhvcml6ZWQmJmFwaS5CaWdOdW1iZXIoYXV0aG9yaXplZC5iYWxhbmNlKS5ndGUoZW5hYmxlRGVsZWdhdGlvbkZlZSk7aWYoYXBpLmFzc2VydChhdXRob3JpemVkLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgZmVlcyIpJiZhcGkuYXNzZXJ0KCEwPT09cmVzLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sLCJpbnZhbGlkIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KHVuZGVsZWdhdGlvbkNvb2xkb3duJiZOdW1iZXIuaXNJbnRlZ2VyKHVuZGVsZWdhdGlvbkNvb2xkb3duKSYmMDx1bmRlbGVnYXRpb25Db29sZG93biYmdW5kZWxlZ2F0aW9uQ29vbGRvd248PTE4MjUwLCJ1bmRlbGVnYXRpb25Db29sZG93biBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxODI1MCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYoYXBpLmFzc2VydChudWxsIT09bmZ0LCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bmZ0LmRlbGVnYXRpb25FbmFibGVkfHwhMT09PW5mdC5kZWxlZ2F0aW9uRW5hYmxlZCwiZGVsZWdhdGlvbiBhbHJlYWR5IGVuYWJsZWQiKSl7aWYoYXBpLkJpZ051bWJlcihlbmFibGVEZWxlZ2F0aW9uRmVlKS5ndCgwKSl7cmVzPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOlVUSUxJVFlfVE9LRU5fU1lNQk9MLHF1YW50aXR5OmVuYWJsZURlbGVnYXRpb25GZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnJlc30pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsYXBpLnNlbmRlciwibnVsbCIsVVRJTElUWV9UT0tFTl9TWU1CT0wsZW5hYmxlRGVsZWdhdGlvbkZlZSwidHJhbnNmZXIiKSlyZXR1cm4hMX1yZXR1cm4gbmZ0LmRlbGVnYXRpb25FbmFibGVkPSEwLG5mdC51bmRlbGVnYXRpb25Db29sZG93bj11bmRlbGVnYXRpb25Db29sZG93bixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy51cGRhdGVQcm9wZXJ0eURlZmluaXRpb249YXN5bmMgb3JpZ2luYWxUeXBlPT57dmFye3N5bWJvbCxuYW1lLG5ld05hbWUsdHlwZSxpc1JlYWRPbmx5LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpvcmlnaW5hbElzUmVhZE9ubHl9PW9yaWdpbmFsVHlwZTtpZihhcGkuYXNzZXJ0KCEwPT09b3JpZ2luYWxJc1JlYWRPbmx5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZuYW1lJiYic3RyaW5nIj09dHlwZW9mIG5hbWUsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhuYW1lKSYmMDxuYW1lLmxlbmd0aCYmbmFtZS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1uZXdOYW1lfHwic3RyaW5nIj09dHlwZW9mIG5ld05hbWUmJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMobmV3TmFtZSkmJjA8bmV3TmFtZS5sZW5ndGgmJm5ld05hbWUubGVuZ3RoPD0yNSwiaW52YWxpZCBuZXcgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXR5cGV8fCJzdHJpbmciPT10eXBlb2YgdHlwZSYmKCJudW1iZXIiPT09dHlwZXx8InN0cmluZyI9PT10eXBlfHwiYm9vbGVhbiI9PT10eXBlKSwiaW52YWxpZCB0eXBlOiBtdXN0IGJlIG51bWJlciwgc3RyaW5nLCBvciBib29sZWFuIikmJmFwaS5hc3NlcnQodm9pZCAwPT09aXNSZWFkT25seXx8ImJvb2xlYW4iPT10eXBlb2YgaXNSZWFkT25seSwiaW52YWxpZCBpc1JlYWRPbmx5OiBtdXN0IGJlIHRydWUgb3IgZmFsc2UiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydCgwPT09bmZ0LnN1cHBseSwiY2Fubm90IGNoYW5nZSBkYXRhIHByb3BlcnR5IGRlZmluaXRpb247IHRva2VucyBhbHJlYWR5IGlzc3VlZCIpJiZhcGkuYXNzZXJ0KG5hbWUgaW4gbmZ0LnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2lmKHZvaWQgMCE9PW5ld05hbWUpe2lmKHZvaWQgMCE9PW5mdC5ncm91cEJ5JiYwPG5mdC5ncm91cEJ5Lmxlbmd0aCYmIWFwaS5hc3NlcnQoIW5mdC5ncm91cEJ5LmluY2x1ZGVzKG5hbWUpLCJjYW5ub3QgY2hhbmdlIGRhdGEgcHJvcGVydHkgbmFtZTsgcHJvcGVydHkgaXMgcGFydCBvZiBncm91cEJ5IikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQobmV3TmFtZSE9PW5hbWUsIm5ldyBuYW1lIG11c3QgYmUgZGlmZmVyZW50IGZyb20gb2xkIG5hbWUiKXx8IWFwaS5hc3NlcnQoIShuZXdOYW1lIGluIG5mdC5wcm9wZXJ0aWVzKSwidGhlcmUgaXMgYWxyZWFkeSBhIGRhdGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmV3IG5hbWUiKSlyZXR1cm4hMX1sZXQgc2hvdWxkVXBkYXRlPSExO29yaWdpbmFsVHlwZT1uZnQucHJvcGVydGllc1tuYW1lXS50eXBlLG9yaWdpbmFsSXNSZWFkT25seT1uZnQucHJvcGVydGllc1tuYW1lXS5pc1JlYWRPbmx5O3JldHVybiB2b2lkIDAhPT10eXBlJiZ0eXBlIT09b3JpZ2luYWxUeXBlJiYobmZ0LnByb3BlcnRpZXNbbmFtZV0udHlwZT10eXBlLHNob3VsZFVwZGF0ZT0hMCksdm9pZCAwIT09aXNSZWFkT25seSYmaXNSZWFkT25seSE9PW9yaWdpbmFsSXNSZWFkT25seSYmKG5mdC5wcm9wZXJ0aWVzW25hbWVdLmlzUmVhZE9ubHk9aXNSZWFkT25seSxzaG91bGRVcGRhdGU9ITApLHZvaWQgMCE9PW5ld05hbWUmJm5ld05hbWUhPT1uYW1lJiYobmZ0LnByb3BlcnRpZXNbbmV3TmFtZV09bmZ0LnByb3BlcnRpZXNbbmFtZV0sZGVsZXRlIG5mdC5wcm9wZXJ0aWVzW25hbWVdLHNob3VsZFVwZGF0ZT0hMCksc2hvdWxkVXBkYXRlJiYoYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSxhcGkuZW1pdCgidXBkYXRlUHJvcGVydHlEZWZpbml0aW9uIix7c3ltYm9sOnN5bWJvbCxvcmlnaW5hbE5hbWU6bmFtZSxvcmlnaW5hbFR5cGU6b3JpZ2luYWxUeXBlLG9yaWdpbmFsSXNSZWFkT25seTpvcmlnaW5hbElzUmVhZE9ubHksbmV3TmFtZTpuZXdOYW1lLG5ld1R5cGU6dHlwZSxuZXdJc1JlYWRPbmx5OmlzUmVhZE9ubHl9KSksITB9fXJldHVybiExfSxhY3Rpb25zLmFkZFByb3BlcnR5PWFzeW5jIHJlcz0+e3ZhcntzeW1ib2wsbmFtZSx0eXBlLGlzUmVhZE9ubHksYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cyxhdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXJlcyxpbml0aWFsQWNjb3VudExpc3Q9KGF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSlbImRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlIl07aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmbmFtZSYmInN0cmluZyI9PXR5cGVvZiBuYW1lJiYodm9pZCAwPT09aXNSZWFkT25seXx8ImJvb2xlYW4iPT10eXBlb2YgaXNSZWFkT25seSkmJih2b2lkIDA9PT1hdXRob3JpemVkRWRpdGluZ0FjY291bnRzfHxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzJiYib2JqZWN0Ij09dHlwZW9mIGF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHMmJkFycmF5LmlzQXJyYXkoYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cykpJiYodm9pZCAwPT09YXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHN8fGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzJiYib2JqZWN0Ij09dHlwZW9mIGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzJiZBcnJheS5pc0FycmF5KGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzKSkmJnR5cGUmJiJzdHJpbmciPT10eXBlb2YgdHlwZSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKG5hbWUpJiYwPG5hbWUubGVuZ3RoJiZuYW1lLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KCJudW1iZXIiPT09dHlwZXx8InN0cmluZyI9PT10eXBlfHwiYm9vbGVhbiI9PT10eXBlLCJpbnZhbGlkIHR5cGU6IG11c3QgYmUgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydCghKG5hbWUgaW4gbmZ0LnByb3BlcnRpZXMpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIHByb3BlcnR5IHR3aWNlIikmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtpZigzPD1PYmplY3Qua2V5cyhuZnQucHJvcGVydGllcykubGVuZ3RoKXtyZXM9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0x9KSxyZXM9ISFhcGkuQmlnTnVtYmVyKGluaXRpYWxBY2NvdW50TGlzdCkubHRlKDApfHxyZXMmJmFwaS5CaWdOdW1iZXIocmVzLmJhbGFuY2UpLmd0ZShpbml0aWFsQWNjb3VudExpc3QpO2lmKCFhcGkuYXNzZXJ0KHJlcywieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikpcmV0dXJuITE7aWYoYXBpLkJpZ051bWJlcihpbml0aWFsQWNjb3VudExpc3QpLmd0KDApKXtyZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0wscXVhbnRpdHk6aW5pdGlhbEFjY291bnRMaXN0LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGFwaS5zZW5kZXIsIm51bGwiLFVUSUxJVFlfVE9LRU5fU1lNQk9MLGluaXRpYWxBY2NvdW50TGlzdCwidHJhbnNmZXIiKSlyZXR1cm4hMX19aW5pdGlhbEFjY291bnRMaXN0PXZvaWQgMD09PWF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM/W2FwaS5zZW5kZXJdOltdO3JldHVybiBuZnQucHJvcGVydGllc1tuYW1lXT17dHlwZTp0eXBlLGlzUmVhZE9ubHk6dm9pZCAwIT09aXNSZWFkT25seSYmaXNSZWFkT25seSxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOmluaXRpYWxBY2NvdW50TGlzdCxhdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0czpbXX0sYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSwoYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50c3x8YXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMpJiZhd2FpdCBhY3Rpb25zLnNldFByb3BlcnR5UGVybWlzc2lvbnMoe3N5bWJvbDpzeW1ib2wsbmFtZTpuYW1lLGFjY291bnRzOmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHMsY29udHJhY3RzOmF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KSwhMH19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucz1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sLG5hbWUsYWNjb3VudHMsY29udHJhY3RzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZuYW1lJiYic3RyaW5nIj09dHlwZW9mIG5hbWUmJih2b2lkIDA9PT1hY2NvdW50c3x8YWNjb3VudHMmJiJvYmplY3QiPT10eXBlb2YgYWNjb3VudHMmJkFycmF5LmlzQXJyYXkoYWNjb3VudHMpKSYmKHZvaWQgMD09PWNvbnRyYWN0c3x8Y29udHJhY3RzJiYib2JqZWN0Ij09dHlwZW9mIGNvbnRyYWN0cyYmQXJyYXkuaXNBcnJheShjb250cmFjdHMpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKG5hbWUpJiYwPG5hbWUubGVuZ3RoJiZuYW1lLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWFjY291bnRzfHxhY2NvdW50cy5sZW5ndGg8PU1BWF9OVU1fQVVUSE9SSVpFRF9JU1NVRVJTLGBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gJHtNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSU30gYXV0aG9yaXplZCBhY2NvdW50c2ApJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWNvbnRyYWN0c3x8Y29udHJhY3RzLmxlbmd0aDw9TUFYX05VTV9BVVRIT1JJWkVEX0lTU1VFUlMsYGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAke01BWF9OVU1fQVVUSE9SSVpFRF9JU1NVRVJTfSBhdXRob3JpemVkIGNvbnRyYWN0c2ApJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWFjY291bnRzfHxpc1ZhbGlkQWNjb3VudHNBcnJheShhY2NvdW50cyksImludmFsaWQgYWNjb3VudCBsaXN0IikmJmFwaS5hc3NlcnQodm9pZCAwPT09Y29udHJhY3RzfHxpc1ZhbGlkQ29udHJhY3RzQXJyYXkoY29udHJhY3RzKSwiaW52YWxpZCBjb250cmFjdCBsaXN0Iikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQmJmFwaS5hc3NlcnQobmFtZSBpbiBuZnQucHJvcGVydGllcywicHJvcGVydHkgbXVzdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl7bGV0IHNhbml0aXplZEFjY291bnRMaXN0PVtdLHNhbml0aXplZENvbnRyYWN0TGlzdD1bXTtpZihhY2NvdW50cyYmKHNhbml0aXplZEFjY291bnRMaXN0PWFjY291bnRzLm1hcChhY2NvdW50PT5hY2NvdW50LnRyaW0oKS50b0xvd2VyQ2FzZSgpKSksY29udHJhY3RzJiYoc2FuaXRpemVkQ29udHJhY3RMaXN0PWNvbnRyYWN0cy5tYXAoY29udHJhY3Q9PmNvbnRyYWN0LnRyaW0oKSkpLGFwaS5hc3NlcnQodm9pZCAwPT09YWNjb3VudHN8fCFjb250YWluc0R1cGxpY2F0ZXMoc2FuaXRpemVkQWNjb3VudExpc3QpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGFjY291bnQgdHdpY2UiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1jb250cmFjdHN8fCFjb250YWluc0R1cGxpY2F0ZXMoc2FuaXRpemVkQ29udHJhY3RMaXN0KSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpKXtsZXQgc2hvdWxkVXBkYXRlPSExO2FjY291bnRzJiYobmZ0LnByb3BlcnRpZXNbbmFtZV0uYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cz1zYW5pdGl6ZWRBY2NvdW50TGlzdCxzaG91bGRVcGRhdGU9ITApLGNvbnRyYWN0cyYmKG5mdC5wcm9wZXJ0aWVzW25hbWVdLmF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzPXNhbml0aXplZENvbnRyYWN0TGlzdCxzaG91bGRVcGRhdGU9ITApLHNob3VsZFVwZGF0ZSYmYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KX19fX0sYWN0aW9ucy5zZXRHcm91cEJ5PWFzeW5jIGlzU2lnbmVkV2l0aEFjdGl2ZUtleT0+e3ZhcntzeW1ib2w6bmZ0UHJvcGVydHlDb3VudCxwcm9wZXJ0aWVzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleX09aXNTaWduZWRXaXRoQWN0aXZlS2V5O2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KG5mdFByb3BlcnR5Q291bnQmJiJzdHJpbmciPT10eXBlb2YgbmZ0UHJvcGVydHlDb3VudCYmcHJvcGVydGllcyYmIm9iamVjdCI9PXR5cGVvZiBwcm9wZXJ0aWVzJiZBcnJheS5pc0FycmF5KHByb3BlcnRpZXMpLCJpbnZhbGlkIHBhcmFtcyIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6bmZ0UHJvcGVydHlDb3VudH0pO2lmKG5mdCl7bmZ0UHJvcGVydHlDb3VudD1PYmplY3Qua2V5cyhuZnQucHJvcGVydGllcykubGVuZ3RoO2lmKGFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PW5mdC5ncm91cEJ5fHwwPT09bmZ0Lmdyb3VwQnkubGVuZ3RoLCJsaXN0IGlzIGFscmVhZHkgc2V0IikmJmFwaS5hc3NlcnQocHJvcGVydGllcy5sZW5ndGg8PW5mdFByb3BlcnR5Q291bnQsImNhbm5vdCBzZXQgbW9yZSBkYXRhIHByb3BlcnRpZXMgdGhhbiBORlQgaGFzIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhwcm9wZXJ0aWVzKSwibGlzdCBjYW5ub3QgY29udGFpbiBkdXBsaWNhdGVzIikpe2ZvcihsZXQgaT0wO2k8cHJvcGVydGllcy5sZW5ndGg7aSs9MSl7dmFyIG5hbWU9cHJvcGVydGllc1tpXTtpZighYXBpLmFzc2VydChuYW1lJiYic3RyaW5nIj09dHlwZW9mIG5hbWUmJm5hbWUgaW4gbmZ0LnByb3BlcnRpZXMsImRhdGEgcHJvcGVydHkgbXVzdCBleGlzdCIpKXJldHVybiExfXJldHVybiBuZnQuZ3JvdXBCeT1wcm9wZXJ0aWVzLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCksITB9fX1yZXR1cm4hMX0sYWN0aW9ucy5zZXRQcm9wZXJ0aWVzPWFzeW5jIGZpbmFsRnJvbT0+e3ZhcntzeW1ib2wsZnJvbVR5cGU6ZmluYWxGcm9tVHlwZSxuZnRzLGNhbGxpbmdDb250cmFjdEluZm86ZmluYWxGcm9tfT1maW5hbEZyb20sZmluYWxGcm9tVHlwZT12b2lkIDA9PT1maW5hbEZyb21UeXBlPyJ1c2VyIjpmaW5hbEZyb21UeXBlO2lmKGFwaS5hc3NlcnQobmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpJiZmaW5hbEZyb21UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsRnJvbVR5cGUmJlsidXNlciIsImNvbnRyYWN0Il0uaW5jbHVkZXMoZmluYWxGcm9tVHlwZSkmJnN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJihmaW5hbEZyb218fHZvaWQgMD09PWZpbmFsRnJvbSYmInVzZXIiPT09ZmluYWxGcm9tVHlwZSksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQobmZ0cy5sZW5ndGg8PU1BWF9OVU1fTkZUU19FRElUQUJMRSxgY2Fubm90IHNldCBwcm9wZXJ0aWVzIG9uIG1vcmUgdGhhbiAke01BWF9OVU1fTkZUU19FRElUQUJMRX0gTkZUIGluc3RhbmNlcyBhdCBvbmNlYCkpe3ZhciBmaW5hbEZyb209InVzZXIiPT09ZmluYWxGcm9tVHlwZT9hcGkuc2VuZGVyOmZpbmFsRnJvbS5uYW1lLG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1uZnQsInN5bWJvbCBkb2VzIG5vdCBleGlzdCIpKXtpZighaXNWYWxpZERhdGFQcm9wZXJ0aWVzQXJyYXkoZmluYWxGcm9tLGZpbmFsRnJvbVR5cGUsbmZ0LG5mdHMpKXJldHVybiExO3ZhciBpbnN0YW5jZVRhYmxlTmFtZT1zeW1ib2wrImluc3RhbmNlcyI7Zm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXt2YXJ7aWQscHJvcGVydGllc309bmZ0c1tpXTtpZigwIT09T2JqZWN0LmtleXMocHJvcGVydGllcykubGVuZ3RoKXtjb25zdCBuZnRJbnN0YW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZShpbnN0YW5jZVRhYmxlTmFtZSx7X2lkOmFwaS5CaWdOdW1iZXIoaWQpLnRvTnVtYmVyKCl9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1uZnRJbnN0YW5jZSwibmZ0IGluc3RhbmNlIGRvZXMgbm90IGV4aXN0Iikpe2xldCBzaG91bGRVcGRhdGU9ITE7Zm9yKHZhcltuYW1lLGRhdGFdb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykpe2xldCBvbGRQcm9wZXJ0eT1udWxsO25mdC5wcm9wZXJ0aWVzW25hbWVdLmlzUmVhZE9ubHk/YXBpLmFzc2VydCghKG5hbWUgaW4gbmZ0SW5zdGFuY2UucHJvcGVydGllcyksImNhbm5vdCBlZGl0IHJlYWQtb25seSBwcm9wZXJ0aWVzIikmJihuZnRJbnN0YW5jZS5wcm9wZXJ0aWVzW25hbWVdPWRhdGEsc2hvdWxkVXBkYXRlPSEwKToob2xkUHJvcGVydHk9bmZ0SW5zdGFuY2UucHJvcGVydGllc1tuYW1lXSxuZnRJbnN0YW5jZS5wcm9wZXJ0aWVzW25hbWVdPWRhdGEsc2hvdWxkVXBkYXRlPSEwKSxzaG91bGRVcGRhdGUmJm9sZFByb3BlcnR5IT09ZGF0YSYmYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnRTZXRQcm9wZXJ0eSIse3N5bWJvbDpzeW1ib2wsbmZ0Om5mdEluc3RhbmNlLHByb3BlcnR5TmFtZTpuYW1lLG9sZFZhbHVlOm9sZFByb3BlcnR5fSl9c2hvdWxkVXBkYXRlJiZhd2FpdCBhcGkuZGIudXBkYXRlKGluc3RhbmNlVGFibGVOYW1lLG5mdEluc3RhbmNlKX19fXJldHVybiEwfX1yZXR1cm4hMX0sYWN0aW9ucy5idXJuPWFzeW5jIGNhbGxpbmdDb250cmFjdEluZm89Pnt2YXJ7ZnJvbVR5cGUsbmZ0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mb309Y2FsbGluZ0NvbnRyYWN0SW5mbyxmaW5hbEZyb21UeXBlPXZvaWQgMD09PWZyb21UeXBlPyJ1c2VyIjpmcm9tVHlwZTtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChmaW5hbEZyb21UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsRnJvbVR5cGUmJlsidXNlciIsImNvbnRyYWN0Il0uaW5jbHVkZXMoZmluYWxGcm9tVHlwZSkmJihjYWxsaW5nQ29udHJhY3RJbmZvfHx2b2lkIDA9PT1jYWxsaW5nQ29udHJhY3RJbmZvJiYidXNlciI9PT1maW5hbEZyb21UeXBlKSYmbmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZpc1ZhbGlkTmZ0SWRBcnJheShuZnRzKSl7dmFyIGZpbmFsRnJvbT0idXNlciI9PT1maW5hbEZyb21UeXBlP2FwaS5zZW5kZXI6Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lO2xldCBjb250YWluZXJDb3VudD0wLHRva2VuQ291bnQ9MCxpc0ZpcnN0SW5zdGFuY2VDb250YWluZXI9ITE7Zm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXt2YXJ7c3ltYm9sLGlkc309bmZ0c1tpXTtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0KXt2YXIgaW5zdGFuY2VUYWJsZU5hbWU9c3ltYm9sKyJpbnN0YW5jZXMiO2ZvcihsZXQgaj0wO2o8aWRzLmxlbmd0aDtqKz0xKXt2YXIgaWQ9aWRzW2pdO2NvbnN0IG5mdEluc3RhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lKGluc3RhbmNlVGFibGVOYW1lLHtfaWQ6YXBpLkJpZ051bWJlcihpZCkudG9OdW1iZXIoKX0pO2lmKG5mdEluc3RhbmNlKXtsZXQgaXNCdXJuQXV0aG9yaXplZD0hMDtpZihuZnRJbnN0YW5jZS5sb2NrZWROZnRzJiYwPG5mdEluc3RhbmNlLmxvY2tlZE5mdHMubGVuZ3RoPygwPT09dG9rZW5Db3VudCYmKGlzRmlyc3RJbnN0YW5jZUNvbnRhaW5lcj0hMCksY29udGFpbmVyQ291bnQrPTEsKGNvbnRhaW5lckNvdW50Pk1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEV8fCFpc0ZpcnN0SW5zdGFuY2VDb250YWluZXIpJiYoaXNCdXJuQXV0aG9yaXplZD0hMSkpOmlzRmlyc3RJbnN0YW5jZUNvbnRhaW5lciYmKGlzQnVybkF1dGhvcml6ZWQ9ITEpLHRva2VuQ291bnQrPTEsbmZ0SW5zdGFuY2UuYWNjb3VudD09PWZpbmFsRnJvbSYmKCJ1Ij09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGV8fCJjIj09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJjb250cmFjdCI9PT1maW5hbEZyb21UeXBlKSYmdm9pZCAwPT09bmZ0SW5zdGFuY2UuZGVsZWdhdGVkVG8mJmlzQnVybkF1dGhvcml6ZWQpe2NvbnN0IGZpbmFsTG9ja1Rva2Vucz17fTtsZXQgaXNUcmFuc2ZlclN1Y2Nlc3M9ITA7Zm9yKHZhcltsb2Nrc3ltYm9sLHF1YW50aXR5XW9mIE9iamVjdC5lbnRyaWVzKG5mdEluc3RhbmNlLmxvY2tlZFRva2Vucykpe3ZhciByZXM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKGZpbmFsRnJvbSxsb2Nrc3ltYm9sLHF1YW50aXR5LGZpbmFsRnJvbVR5cGUpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHJlcywibmZ0IixmaW5hbEZyb20sbG9ja3N5bWJvbCxxdWFudGl0eSwidHJhbnNmZXJGcm9tQ29udHJhY3QiKXx8KGZpbmFsTG9ja1Rva2Vuc1tsb2Nrc3ltYm9sXT1xdWFudGl0eSxpc1RyYW5zZmVyU3VjY2Vzcz0hMSl9YXBpLmFzc2VydChpc1RyYW5zZmVyU3VjY2VzcyxgdW5hYmxlIHRvIHJlbGVhc2UgbG9ja2VkIHRva2VucyBpbjogJHtzeW1ib2x9LCBpZCBgK2lkKTt2YXIgb3JpZ0xvY2tOZnRzPW5mdEluc3RhbmNlLmxvY2tlZE5mdHMmJjA8bmZ0SW5zdGFuY2UubG9ja2VkTmZ0cy5sZW5ndGg/bmZ0SW5zdGFuY2UubG9ja2VkTmZ0czpbXTtpZihpc1RyYW5zZmVyU3VjY2VzcyYmbmZ0SW5zdGFuY2UubG9ja2VkTmZ0cyYmMDxuZnRJbnN0YW5jZS5sb2NrZWROZnRzLmxlbmd0aCl7Y29uc3QgcmVzPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhDT05UUkFDVF9OQU1FLCJjb250cmFjdCIsZmluYWxGcm9tLGZpbmFsRnJvbVR5cGUsbmZ0SW5zdGFuY2UubG9ja2VkTmZ0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXkse25hbWU6Q09OVFJBQ1RfTkFNRX0pO25mdEluc3RhbmNlLmxvY2tlZE5mdHM9cmVzLmZhaWwsMDxuZnRJbnN0YW5jZS5sb2NrZWROZnRzLmxlbmd0aCYmKGlzVHJhbnNmZXJTdWNjZXNzPSExKSxhcGkuYXNzZXJ0KGlzVHJhbnNmZXJTdWNjZXNzLGB1bmFibGUgdG8gcmVsZWFzZSBsb2NrZWQgTkZUIGluc3RhbmNlcyBpbjogJHtzeW1ib2x9LCBpZCBgK2lkKX12YXIgb3JpZ093bmVkQnk9bmZ0SW5zdGFuY2Uub3duZWRCeSxvcmlnTG9ja1Rva2Vucz1uZnRJbnN0YW5jZS5sb2NrZWRUb2tlbnM7bmZ0SW5zdGFuY2UubG9ja2VkVG9rZW5zPWZpbmFsTG9ja1Rva2Vucyxpc1RyYW5zZmVyU3VjY2VzcyYmKG5mdEluc3RhbmNlLnByZXZpb3VzQWNjb3VudD1uZnRJbnN0YW5jZS5hY2NvdW50LG5mdEluc3RhbmNlLnByZXZpb3VzT3duZWRCeT1uZnRJbnN0YW5jZS5vd25lZEJ5LG5mdEluc3RhbmNlLmFjY291bnQ9Im51bGwiLG5mdEluc3RhbmNlLm93bmVkQnk9InUiLC0tbmZ0LmNpcmN1bGF0aW5nU3VwcGx5KSxhd2FpdCBhcGkuZGIudXBkYXRlKGluc3RhbmNlVGFibGVOYW1lLG5mdEluc3RhbmNlKSxpc1RyYW5zZmVyU3VjY2VzcyYmYXBpLmVtaXQoImJ1cm4iLHthY2NvdW50OmZpbmFsRnJvbSxvd25lZEJ5Om9yaWdPd25lZEJ5LHVubG9ja2VkVG9rZW5zOm9yaWdMb2NrVG9rZW5zLHVubG9ja2VkTmZ0czpvcmlnTG9ja05mdHMsc3ltYm9sOnN5bWJvbCxpZDppZH0pfX19YXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KX19fX0sYWN0aW9ucy50cmFuc2Zlcj1hc3luYyB0b1ZhbGlkPT57Y29uc3R7ZnJvbVR5cGUsdG8sdG9UeXBlLG5mdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm99PXRvVmFsaWQsdHlwZXM9WyJ1c2VyIiwiY29udHJhY3QiXTt2YXIgZmluYWxUb1R5cGU9dm9pZCAwPT09dG9UeXBlPyJ1c2VyIjp0b1R5cGUsZmluYWxGcm9tVHlwZT12b2lkIDA9PT1mcm9tVHlwZT8idXNlciI6ZnJvbVR5cGU7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZmluYWxGcm9tVHlwZSYmInN0cmluZyI9PXR5cGVvZiBmaW5hbEZyb21UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbEZyb21UeXBlKSYmdG8mJiJzdHJpbmciPT10eXBlb2YgdG8mJmZpbmFsVG9UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsVG9UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbFRvVHlwZSkmJihjYWxsaW5nQ29udHJhY3RJbmZvfHx2b2lkIDA9PT1jYWxsaW5nQ29udHJhY3RJbmZvJiYidXNlciI9PT1maW5hbEZyb21UeXBlKSYmbmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZpc1ZhbGlkTmZ0SWRBcnJheShuZnRzKSl7dmFyIGZpbmFsVG89InVzZXIiPT09ZmluYWxUb1R5cGU/dG8udHJpbSgpLnRvTG93ZXJDYXNlKCk6dG8udHJpbSgpLHRvVmFsaWQ9KCJ1c2VyIj09PWZpbmFsVG9UeXBlP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aDppc1ZhbGlkQ29udHJhY3RMZW5ndGgpKGZpbmFsVG8pLGZpbmFsRnJvbT0idXNlciI9PT1maW5hbEZyb21UeXBlP2FwaS5zZW5kZXI6Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lO2lmKGFwaS5hc3NlcnQodG9WYWxpZCwiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEoZmluYWxUb1R5cGU9PT1maW5hbEZyb21UeXBlJiZmaW5hbFRvPT09ZmluYWxGcm9tKSwiY2Fubm90IHRyYW5zZmVyIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWZpbmFsVG9UeXBlJiYibnVsbCI9PT1maW5hbFRvKSwiY2Fubm90IHRyYW5zZmVyIHRvIG51bGw7IHVzZSBidXJuIGFjdGlvbiBpbnN0ZWFkIikpZm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXt2YXJ7c3ltYm9sLGlkc309bmZ0c1tpXTtpZihhd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KSl7dmFyIGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtmb3IobGV0IGo9MDtqPGlkcy5sZW5ndGg7ais9MSl7dmFyIG9yaWdPd25lZEJ5LG5ld093bmVkQnksaWQ9aWRzW2pdO2NvbnN0IG5mdEluc3RhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lKGluc3RhbmNlVGFibGVOYW1lLHtfaWQ6YXBpLkJpZ051bWJlcihpZCkudG9OdW1iZXIoKX0pO25mdEluc3RhbmNlJiZuZnRJbnN0YW5jZS5hY2NvdW50PT09ZmluYWxGcm9tJiYoInUiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmInVzZXIiPT09ZmluYWxGcm9tVHlwZXx8ImMiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUpJiZ2b2lkIDA9PT1uZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUbyYmKG9yaWdPd25lZEJ5PW5mdEluc3RhbmNlLm93bmVkQnksbmV3T3duZWRCeT0idXNlciI9PT1maW5hbFRvVHlwZT8idSI6ImMiLG5mdEluc3RhbmNlLnByZXZpb3VzQWNjb3VudD1uZnRJbnN0YW5jZS5hY2NvdW50LG5mdEluc3RhbmNlLnByZXZpb3VzT3duZWRCeT1uZnRJbnN0YW5jZS5vd25lZEJ5LG5mdEluc3RhbmNlLmFjY291bnQ9ZmluYWxUbyxuZnRJbnN0YW5jZS5vd25lZEJ5PW5ld093bmVkQnksYXdhaXQgYXBpLmRiLnVwZGF0ZShpbnN0YW5jZVRhYmxlTmFtZSxuZnRJbnN0YW5jZSksYXBpLmVtaXQoInRyYW5zZmVyIix7ZnJvbTpmaW5hbEZyb20sZnJvbVR5cGU6b3JpZ093bmVkQnksdG86ZmluYWxUbyx0b1R5cGU6bmV3T3duZWRCeSxzeW1ib2w6c3ltYm9sLGlkOmlkfSkpfX19fX0sYWN0aW9ucy5kZWxlZ2F0ZT1hc3luYyB0b1ZhbGlkPT57Y29uc3R7ZnJvbVR5cGUsdG8sdG9UeXBlLG5mdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm99PXRvVmFsaWQsdHlwZXM9WyJ1c2VyIiwiY29udHJhY3QiXTt2YXIgZmluYWxUb1R5cGU9dm9pZCAwPT09dG9UeXBlPyJ1c2VyIjp0b1R5cGUsZmluYWxGcm9tVHlwZT12b2lkIDA9PT1mcm9tVHlwZT8idXNlciI6ZnJvbVR5cGU7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZmluYWxGcm9tVHlwZSYmInN0cmluZyI9PXR5cGVvZiBmaW5hbEZyb21UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbEZyb21UeXBlKSYmdG8mJiJzdHJpbmciPT10eXBlb2YgdG8mJmZpbmFsVG9UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsVG9UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbFRvVHlwZSkmJihjYWxsaW5nQ29udHJhY3RJbmZvfHx2b2lkIDA9PT1jYWxsaW5nQ29udHJhY3RJbmZvJiYidXNlciI9PT1maW5hbEZyb21UeXBlKSYmbmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZpc1ZhbGlkTmZ0SWRBcnJheShuZnRzKSl7dmFyIGZpbmFsVG89InVzZXIiPT09ZmluYWxUb1R5cGU/dG8udHJpbSgpLnRvTG93ZXJDYXNlKCk6dG8udHJpbSgpLHRvVmFsaWQ9KCJ1c2VyIj09PWZpbmFsVG9UeXBlP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aDppc1ZhbGlkQ29udHJhY3RMZW5ndGgpKGZpbmFsVG8pLGZpbmFsRnJvbT0idXNlciI9PT1maW5hbEZyb21UeXBlP2FwaS5zZW5kZXI6Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lO2lmKGFwaS5hc3NlcnQodG9WYWxpZCwiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEoZmluYWxUb1R5cGU9PT1maW5hbEZyb21UeXBlJiZmaW5hbFRvPT09ZmluYWxGcm9tKSwiY2Fubm90IGRlbGVnYXRlIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWZpbmFsVG9UeXBlJiYibnVsbCI9PT1maW5hbFRvKSwiY2Fubm90IGRlbGVnYXRlIHRvIG51bGwiKSlmb3IobGV0IGk9MDtpPG5mdHMubGVuZ3RoO2krPTEpe3ZhcntzeW1ib2wsaWRzfT1uZnRzW2ldLG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQmJmFwaS5hc3NlcnQoITA9PT1uZnQuZGVsZWdhdGlvbkVuYWJsZWQsImRlbGVnYXRpb24gbm90IGVuYWJsZWQgZm9yICIrc3ltYm9sKSl7dmFyIGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtmb3IobGV0IGo9MDtqPGlkcy5sZW5ndGg7ais9MSl7dmFyIG5ld093bmVkQnksaWQ9aWRzW2pdO2NvbnN0IG5mdEluc3RhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lKGluc3RhbmNlVGFibGVOYW1lLHtfaWQ6YXBpLkJpZ051bWJlcihpZCkudG9OdW1iZXIoKX0pO25mdEluc3RhbmNlJiZuZnRJbnN0YW5jZS5hY2NvdW50PT09ZmluYWxGcm9tJiYoInUiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmInVzZXIiPT09ZmluYWxGcm9tVHlwZXx8ImMiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUpJiZ2b2lkIDA9PT1uZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUbyYmKG5ld093bmVkQnk9InVzZXIiPT09ZmluYWxUb1R5cGU/InUiOiJjIixuZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUbz17YWNjb3VudDpmaW5hbFRvLG93bmVkQnk6bmV3T3duZWRCeX0sYXdhaXQgYXBpLmRiLnVwZGF0ZShpbnN0YW5jZVRhYmxlTmFtZSxuZnRJbnN0YW5jZSksYXBpLmVtaXQoImRlbGVnYXRlIix7ZnJvbTpmaW5hbEZyb20sZnJvbVR5cGU6bmZ0SW5zdGFuY2Uub3duZWRCeSx0bzpmaW5hbFRvLHRvVHlwZTpuZXdPd25lZEJ5LHN5bWJvbDpzeW1ib2wsaWQ6aWR9KSxhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm1pbmluZyIsImhhbmRsZU5mdERlbGVnYXRpb25DaGFuZ2UiLHtzeW1ib2w6c3ltYm9sLG5mdDpuZnRJbnN0YW5jZSxhZGQ6ITB9KSl9fX19fSxhY3Rpb25zLnVuZGVsZWdhdGU9YXN5bmMgY2FsbGluZ0NvbnRyYWN0SW5mbz0+e3Zhcntmcm9tVHlwZSxuZnRzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleSxjYWxsaW5nQ29udHJhY3RJbmZvfT1jYWxsaW5nQ29udHJhY3RJbmZvLGZpbmFsRnJvbVR5cGU9dm9pZCAwPT09ZnJvbVR5cGU/InVzZXIiOmZyb21UeXBlO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KGZpbmFsRnJvbVR5cGUmJiJzdHJpbmciPT10eXBlb2YgZmluYWxGcm9tVHlwZSYmWyJ1c2VyIiwiY29udHJhY3QiXS5pbmNsdWRlcyhmaW5hbEZyb21UeXBlKSYmKGNhbGxpbmdDb250cmFjdEluZm98fHZvaWQgMD09PWNhbGxpbmdDb250cmFjdEluZm8mJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGUpJiZuZnRzJiYib2JqZWN0Ij09dHlwZW9mIG5mdHMmJkFycmF5LmlzQXJyYXkobmZ0cyksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KG5mdHMpKXt2YXIgZmluYWxGcm9tPSJ1c2VyIj09PWZpbmFsRnJvbVR5cGU/YXBpLnNlbmRlcjpjYWxsaW5nQ29udHJhY3RJbmZvLm5hbWU7Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIik7Zm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXt2YXJ7c3ltYm9sLGlkc309bmZ0c1tpXSxjb29sZG93blBlcmlvZE1pbGxpc2VjPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKGNvb2xkb3duUGVyaW9kTWlsbGlzZWMmJmFwaS5hc3NlcnQoITA9PT1jb29sZG93blBlcmlvZE1pbGxpc2VjLmRlbGVnYXRpb25FbmFibGVkLCJkZWxlZ2F0aW9uIG5vdCBlbmFibGVkIGZvciAiK3N5bWJvbCkpe3ZhciBjb29sZG93blBlcmlvZE1pbGxpc2VjPTI0KmNvb2xkb3duUGVyaW9kTWlsbGlzZWMudW5kZWxlZ2F0aW9uQ29vbGRvd24qMzYwMCoxZTMsY29tcGxldGVUaW1lc3RhbXA9YmxvY2tEYXRlLmdldFRpbWUoKStjb29sZG93blBlcmlvZE1pbGxpc2VjLGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtjb25zdCB1bmRlbGVnYXRpb249e3N5bWJvbDpzeW1ib2wsaWRzOltdLGNvbXBsZXRlVGltZXN0YW1wOmNvbXBsZXRlVGltZXN0YW1wfTtmb3IobGV0IGo9MDtqPGlkcy5sZW5ndGg7ais9MSl7dmFyIGlkPWlkc1tqXTtjb25zdCBuZnRJbnN0YW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZShpbnN0YW5jZVRhYmxlTmFtZSx7X2lkOmFwaS5CaWdOdW1iZXIoaWQpLnRvTnVtYmVyKCl9KTtuZnRJbnN0YW5jZSYmbmZ0SW5zdGFuY2UuYWNjb3VudD09PWZpbmFsRnJvbSYmKCJ1Ij09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGV8fCJjIj09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJjb250cmFjdCI9PT1maW5hbEZyb21UeXBlKSYmbmZ0SW5zdGFuY2UuZGVsZWdhdGVkVG8mJnZvaWQgMD09PW5mdEluc3RhbmNlLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdCYmKG5mdEluc3RhbmNlLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdD1jb21wbGV0ZVRpbWVzdGFtcCx1bmRlbGVnYXRpb24uaWRzLnB1c2gobmZ0SW5zdGFuY2UuX2lkKSxhd2FpdCBhcGkuZGIudXBkYXRlKGluc3RhbmNlVGFibGVOYW1lLG5mdEluc3RhbmNlKSxhcGkuZW1pdCgidW5kZWxlZ2F0ZVN0YXJ0Iix7ZnJvbTpuZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUby5hY2NvdW50LGZyb21UeXBlOm5mdEluc3RhbmNlLmRlbGVnYXRlZFRvLm93bmVkQnksc3ltYm9sOnN5bWJvbCxpZDppZH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlTmZ0RGVsZWdhdGlvbkNoYW5nZSIse3N5bWJvbDpzeW1ib2wsbmZ0Om5mdEluc3RhbmNlLGFkZDohMX0pKX0wPHVuZGVsZWdhdGlvbi5pZHMubGVuZ3RoJiZhd2FpdCBhcGkuZGIuaW5zZXJ0KCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsdW5kZWxlZ2F0aW9uKX19fX07Y29uc3QgcHJvY2Vzc1VuZGVsZWdhdGlvbj1hc3luYyB1bmRlbGVnYXRpb249Pnt2YXJ7c3ltYm9sLGlkc309dW5kZWxlZ2F0aW9uLGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtjb25zdCBpbnN0YW5jZXM9YXdhaXQgYXBpLmRiLmZpbmQoaW5zdGFuY2VUYWJsZU5hbWUse19pZDp7JGluOmlkc319LE1BWF9OVU1fTkZUU19PUEVSQUJMRSwwLFt7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPGluc3RhbmNlcy5sZW5ndGg7aSs9MSlkZWxldGUgaW5zdGFuY2VzW2ldLmRlbGVnYXRlZFRvLGF3YWl0IGFwaS5kYi51cGRhdGUoaW5zdGFuY2VUYWJsZU5hbWUsaW5zdGFuY2VzW2ldLHtkZWxlZ2F0ZWRUbzoiIn0pO2F3YWl0IGFwaS5kYi5yZW1vdmUoInBlbmRpbmdVbmRlbGVnYXRpb25zIix1bmRlbGVnYXRpb24pLGFwaS5lbWl0KCJ1bmRlbGVnYXRlRG9uZSIse3N5bWJvbDpzeW1ib2wsaWRzOmlkc30pfTthY3Rpb25zLmNoZWNrUGVuZGluZ1VuZGVsZWdhdGlvbnM9YXN5bmMoKT0+e2lmKGFwaS5hc3NlcnQoIm51bGwiPT09YXBpLnNlbmRlciwibm90IGF1dGhvcml6ZWQiKSl7Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIik7dmFyIHRpbWVzdGFtcD1ibG9ja0RhdGUuZ2V0VGltZSgpO2xldCBwZW5kaW5nVW5kZWxlZ2F0aW9ucz1hd2FpdCBhcGkuZGIuZmluZCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLHtjb21wbGV0ZVRpbWVzdGFtcDp7JGx0ZTp0aW1lc3RhbXB9fSksbmJQZW5kaW5nVW5kZWxlZ2F0aW9ucz1wZW5kaW5nVW5kZWxlZ2F0aW9ucy5sZW5ndGg7Zm9yKDswPG5iUGVuZGluZ1VuZGVsZWdhdGlvbnM7KXtmb3IobGV0IGluZGV4PTA7aW5kZXg8bmJQZW5kaW5nVW5kZWxlZ2F0aW9ucztpbmRleCs9MSl7dmFyIHBlbmRpbmdVbmRlbGVnYXRpb249cGVuZGluZ1VuZGVsZWdhdGlvbnNbaW5kZXhdO2F3YWl0IHByb2Nlc3NVbmRlbGVnYXRpb24ocGVuZGluZ1VuZGVsZWdhdGlvbil9cGVuZGluZ1VuZGVsZWdhdGlvbnM9YXdhaXQgYXBpLmRiLmZpbmQoInBlbmRpbmdVbmRlbGVnYXRpb25zIix7Y29tcGxldGVUaW1lc3RhbXA6eyRsdGU6dGltZXN0YW1wfX0pLG5iUGVuZGluZ1VuZGVsZWdhdGlvbnM9cGVuZGluZ1VuZGVsZWdhdGlvbnMubGVuZ3RofX19LGFjdGlvbnMuY3JlYXRlPWFzeW5jIHJlcz0+e3ZhcntuYW1lLG9yZ05hbWU6ZmluYWxQcm9kdWN0TmFtZSxwcm9kdWN0TmFtZTptZXRhZGF0YSxzeW1ib2wsdXJsOmluc3RhbmNlVGFibGVOYW1lLG1heFN1cHBseTpmaW5hbE9yZ05hbWUsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cyxhdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXJlcyxuZXdOZnQ9KGF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSlbIm5mdENyZWF0aW9uRmVlIl0scmVzPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOlVUSUxJVFlfVE9LRU5fU1lNQk9MfSkscmVzPSEhYXBpLkJpZ051bWJlcihuZXdOZnQpLmx0ZSgwKXx8cmVzJiZhcGkuQmlnTnVtYmVyKHJlcy5iYWxhbmNlKS5ndGUobmV3TmZ0KTtpZihhcGkuYXNzZXJ0KHJlcywieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KG5hbWUmJiJzdHJpbmciPT10eXBlb2YgbmFtZSYmc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmKHZvaWQgMD09PWluc3RhbmNlVGFibGVOYW1lfHxpbnN0YW5jZVRhYmxlTmFtZSYmInN0cmluZyI9PXR5cGVvZiBpbnN0YW5jZVRhYmxlTmFtZSkmJih2b2lkIDA9PT1maW5hbFByb2R1Y3ROYW1lfHxmaW5hbFByb2R1Y3ROYW1lJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsUHJvZHVjdE5hbWUpJiYodm9pZCAwPT09bWV0YWRhdGF8fG1ldGFkYXRhJiYic3RyaW5nIj09dHlwZW9mIG1ldGFkYXRhKSYmKHZvaWQgMD09PWF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHN8fGF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMmJiJvYmplY3QiPT10eXBlb2YgYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cyYmQXJyYXkuaXNBcnJheShhdXRob3JpemVkSXNzdWluZ0FjY291bnRzKSkmJih2b2lkIDA9PT1hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c3x8YXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMmJiJvYmplY3QiPT10eXBlb2YgYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMmJkFycmF5LmlzQXJyYXkoYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMpKSYmKHZvaWQgMD09PWZpbmFsT3JnTmFtZXx8ZmluYWxPcmdOYW1lJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsT3JnTmFtZSYmIWFwaS5CaWdOdW1iZXIoZmluYWxPcmdOYW1lKS5pc05hTigpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGEoc3ltYm9sKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShzeW1ib2wpJiYwPHN5bWJvbC5sZW5ndGgmJnN5bWJvbC5sZW5ndGg8PU1BWF9TWU1CT0xfTEVOR1RILCJpbnZhbGlkIHN5bWJvbDogdXBwZXJjYXNlIGxldHRlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAiK01BWF9TWU1CT0xfTEVOR1RIKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1SRVNFUlZFRF9TWU1CT0xTW3N5bWJvbF18fGFwaS5zZW5kZXI9PT1SRVNFUlZFRF9TWU1CT0xTW3N5bWJvbF0sImNhbm5vdCB1c2UgdGhpcyBzeW1ib2wiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KG5hbWUsIiAiKSkmJjA8bmFtZS5sZW5ndGgmJm5hbWUubGVuZ3RoPD01MCwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikmJmFwaS5hc3NlcnQodm9pZCAwPT09ZmluYWxQcm9kdWN0TmFtZXx8YXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhcGkudmFsaWRhdG9yLmJsYWNrbGlzdChmaW5hbFByb2R1Y3ROYW1lLCIgIikpJiYwPGZpbmFsUHJvZHVjdE5hbWUubGVuZ3RoJiZmaW5hbFByb2R1Y3ROYW1lLmxlbmd0aDw9NTAsImludmFsaWQgb3JnIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1tZXRhZGF0YXx8YXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhcGkudmFsaWRhdG9yLmJsYWNrbGlzdChtZXRhZGF0YSwiICIpKSYmMDxtZXRhZGF0YS5sZW5ndGgmJm1ldGFkYXRhLmxlbmd0aDw9NTAsImludmFsaWQgcHJvZHVjdCBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikmJmFwaS5hc3NlcnQodm9pZCAwPT09aW5zdGFuY2VUYWJsZU5hbWV8fGluc3RhbmNlVGFibGVOYW1lLmxlbmd0aDw9MjU1LCJpbnZhbGlkIHVybDogbWF4IGxlbmd0aCBvZiAyNTUiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1maW5hbE9yZ05hbWV8fGFwaS5CaWdOdW1iZXIoZmluYWxPcmdOYW1lKS5ndCgwKSwibWF4U3VwcGx5IG11c3QgYmUgcG9zaXRpdmUiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1maW5hbE9yZ05hbWV8fGFwaS5CaWdOdW1iZXIoZmluYWxPcmdOYW1lKS5sdGUoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLCJtYXhTdXBwbHkgbXVzdCBiZSBsb3dlciB0aGFuICIrTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKXtyZXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYoYXBpLmFzc2VydChudWxsPT09cmVzLCJzeW1ib2wgYWxyZWFkeSBleGlzdHMiKSl7aWYoYXBpLkJpZ051bWJlcihuZXdOZnQpLmd0KDApKXtyZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0wscXVhbnRpdHk6bmV3TmZ0LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGFwaS5zZW5kZXIsIm51bGwiLFVUSUxJVFlfVE9LRU5fU1lNQk9MLG5ld05mdCwidHJhbnNmZXIiKSlyZXR1cm4hMX1uZXdOZnQ9dm9pZCAwPT09ZmluYWxPcmdOYW1lPzA6YXBpLkJpZ051bWJlcihmaW5hbE9yZ05hbWUpLmludGVnZXJWYWx1ZShhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pLnRvTnVtYmVyKCksZmluYWxPcmdOYW1lPXZvaWQgMD09PWZpbmFsUHJvZHVjdE5hbWU/IiI6ZmluYWxQcm9kdWN0TmFtZSxmaW5hbFByb2R1Y3ROYW1lPXZvaWQgMD09PW1ldGFkYXRhPyIiOm1ldGFkYXRhLG1ldGFkYXRhPXt1cmw6dm9pZCAwPT09aW5zdGFuY2VUYWJsZU5hbWU/IiI6aW5zdGFuY2VUYWJsZU5hbWV9LG1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG1ldGFkYXRhKSxpbnN0YW5jZVRhYmxlTmFtZT12b2lkIDA9PT1hdXRob3JpemVkSXNzdWluZ0FjY291bnRzP1thcGkuc2VuZGVyXTpbXSxuZXdOZnQ9e2lzc3VlcjphcGkuc2VuZGVyLHN5bWJvbDpzeW1ib2wsbmFtZTpuYW1lLG9yZ05hbWU6ZmluYWxPcmdOYW1lLHByb2R1Y3ROYW1lOmZpbmFsUHJvZHVjdE5hbWUsbWV0YWRhdGE6bWV0YWRhdGEsbWF4U3VwcGx5Om5ld05mdCxzdXBwbHk6MCxjaXJjdWxhdGluZ1N1cHBseTowLGRlbGVnYXRpb25FbmFibGVkOiExLHVuZGVsZWdhdGlvbkNvb2xkb3duOjAsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czppbnN0YW5jZVRhYmxlTmFtZSxhdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0czpbXSxwcm9wZXJ0aWVzOnt9LGdyb3VwQnk6W119LGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtyZXR1cm4hMT09PWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cyhpbnN0YW5jZVRhYmxlTmFtZSkmJmF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZShpbnN0YW5jZVRhYmxlTmFtZSxbImFjY291bnQiLCJvd25lZEJ5Il0pLGF3YWl0IGFwaS5kYi5pbnNlcnQoIm5mdHMiLG5ld05mdCksdm9pZCAwIT09YXV0aG9yaXplZElzc3VpbmdBY2NvdW50cyYmYXdhaXQgYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0FjY291bnRzKHthY2NvdW50czphdXRob3JpemVkSXNzdWluZ0FjY291bnRzLHN5bWJvbDpzeW1ib2wsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pLHZvaWQgMCE9PWF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzKHtjb250cmFjdHM6YXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMsc3ltYm9sOnN5bWJvbCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSksITB9fXJldHVybiExfSxhY3Rpb25zLmlzc3VlPWFzeW5jIHJlc3VsdD0+e2NvbnN0e3N5bWJvbCxmcm9tVHlwZSx0byx0b1R5cGUsZmVlU3ltYm9sLGxvY2tUb2tlbnMsbG9ja05mdHMscHJvcGVydGllcyxpc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mb309cmVzdWx0LHR5cGVzPVsidXNlciIsImNvbnRyYWN0Il07dmFyIGZpbmFsVG9UeXBlPXZvaWQgMD09PXRvVHlwZT8idXNlciI6dG9UeXBlLGZpbmFsRnJvbVR5cGU9dm9pZCAwPT09ZnJvbVR5cGU/InVzZXIiOmZyb21UeXBlLG5mdElzc3VhbmNlRmVlPShhd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkpWyJuZnRJc3N1YW5jZUZlZSJdO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJmZpbmFsRnJvbVR5cGUmJiJzdHJpbmciPT10eXBlb2YgZmluYWxGcm9tVHlwZSYmdHlwZXMuaW5jbHVkZXMoZmluYWxGcm9tVHlwZSkmJihjYWxsaW5nQ29udHJhY3RJbmZvfHx2b2lkIDA9PT1jYWxsaW5nQ29udHJhY3RJbmZvJiYidXNlciI9PT1maW5hbEZyb21UeXBlKSYmdG8mJiJzdHJpbmciPT10eXBlb2YgdG8mJmZpbmFsVG9UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsVG9UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbFRvVHlwZSkmJmZlZVN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBmZWVTeW1ib2wmJmZlZVN5bWJvbCBpbiBuZnRJc3N1YW5jZUZlZSYmKHZvaWQgMD09PXByb3BlcnRpZXN8fHByb3BlcnRpZXMmJiJvYmplY3QiPT10eXBlb2YgcHJvcGVydGllcykmJih2b2lkIDA9PT1sb2NrVG9rZW5zfHxsb2NrVG9rZW5zJiYib2JqZWN0Ij09dHlwZW9mIGxvY2tUb2tlbnMpJiYodm9pZCAwPT09bG9ja05mdHN8fGxvY2tOZnRzJiYib2JqZWN0Ij09dHlwZW9mIGxvY2tOZnRzJiZBcnJheS5pc0FycmF5KGxvY2tOZnRzKSksImludmFsaWQgcGFyYW1zIikmJih2b2lkIDA9PT1sb2NrTmZ0c3x8aXNWYWxpZE5mdElkQXJyYXkobG9ja05mdHMpKSl7dmFyIGZpbmFsVG89InVzZXIiPT09ZmluYWxUb1R5cGU/dG8udHJpbSgpLnRvTG93ZXJDYXNlKCk6dG8udHJpbSgpLG93bmVkQnk9KCJ1c2VyIj09PWZpbmFsVG9UeXBlP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aDppc1ZhbGlkQ29udHJhY3RMZW5ndGgpKGZpbmFsVG8pLGZpbmFsRnJvbT0idXNlciI9PT1maW5hbEZyb21UeXBlP2FwaS5zZW5kZXI6Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lLGlzTG9ja1ZhbGlkPSJ1c2VyIj09PWZpbmFsRnJvbVR5cGU/ImJhbGFuY2VzIjoiY29udHJhY3RzQmFsYW5jZXMiO2lmKGFwaS5hc3NlcnQob3duZWRCeSwiaW52YWxpZCB0byIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7dmFyIHJlcz1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpmZWVTeW1ib2x9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1uZnQsInN5bWJvbCBkb2VzIG5vdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG51bGwhPT1yZXMsImZlZSBzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7cmVzdWx0PXN5bWJvbCsiaW5zdGFuY2VzIjtpZihhcGkuYXNzZXJ0KCJjb250cmFjdCI9PT1maW5hbEZyb21UeXBlJiZuZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuaW5jbHVkZXMoZmluYWxGcm9tKXx8InVzZXIiPT09ZmluYWxGcm9tVHlwZSYmbmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuaW5jbHVkZXMoZmluYWxGcm9tKSwibm90IGFsbG93ZWQgdG8gaXNzdWUgdG9rZW5zIikmJmFwaS5hc3NlcnQoMD09PW5mdC5tYXhTdXBwbHl8fG5mdC5zdXBwbHk8bmZ0Lm1heFN1cHBseSwibWF4IHN1cHBseSBsaW1pdCByZWFjaGVkIikpe293bmVkQnk9T2JqZWN0LmtleXMobmZ0LnByb3BlcnRpZXMpLmxlbmd0aCxvd25lZEJ5PWFwaS5CaWdOdW1iZXIobmZ0SXNzdWFuY2VGZWVbZmVlU3ltYm9sXSkubXVsdGlwbGllZEJ5KG93bmVkQnkpLG93bmVkQnk9Y2FsY3VsYXRlQmFsYW5jZShuZnRJc3N1YW5jZUZlZVtmZWVTeW1ib2xdLG93bmVkQnkscmVzLnByZWNpc2lvbiwhMCkscmVzPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIixpc0xvY2tWYWxpZCx7YWNjb3VudDpmaW5hbEZyb20sc3ltYm9sOmZlZVN5bWJvbH0pLHJlcz0hIWFwaS5CaWdOdW1iZXIob3duZWRCeSkubHRlKDApfHxyZXMmJmFwaS5CaWdOdW1iZXIocmVzLmJhbGFuY2UpLmd0ZShvd25lZEJ5KTtpZihsb2NrVG9rZW5zKXtpc0xvY2tWYWxpZD1hd2FpdCBpc1ZhbGlkVG9rZW5CYXNrZXQobG9ja1Rva2Vucyxpc0xvY2tWYWxpZCxmaW5hbEZyb20sZmVlU3ltYm9sLG93bmVkQnkpO2lmKCFhcGkuYXNzZXJ0KGlzTG9ja1ZhbGlkLGBpbnZhbGlkIGJhc2tldCBvZiB0b2tlbnMgdG8gbG9jayAoY2Fubm90IGxvY2sgbW9yZSB0aGFuICR7TUFYX05VTV9MT0NLRURfVE9LRU5fVFlQRVN9IHRva2VuIHR5cGVzOyBpc3N1aW5nIGFjY291bnQgbXVzdCBoYXZlIGVub3VnaCBiYWxhbmNlKWApKXJldHVybiExfWxldCBmaW5hbFByb3BlcnRpZXM9e307aWYodm9pZCAwIT09cHJvcGVydGllcyl7dHJ5e2lmKCFpc1ZhbGlkRGF0YVByb3BlcnRpZXMoZmluYWxGcm9tLGZpbmFsRnJvbVR5cGUsbmZ0LHByb3BlcnRpZXMpKXJldHVybiExfWNhdGNoKGUpe3JldHVybiExfWZpbmFsUHJvcGVydGllcz1wcm9wZXJ0aWVzfWlmKGFwaS5hc3NlcnQocmVzLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIGlzc3VhbmNlIGZlZXMiKSl7aWYoYXBpLkJpZ051bWJlcihvd25lZEJ5KS5ndCgwKSlpZigiY29udHJhY3QiPT09ZmluYWxGcm9tVHlwZSl7cmVzPWF3YWl0IGFwaS50cmFuc2ZlclRva2Vuc0Zyb21DYWxsaW5nQ29udHJhY3QoIm51bGwiLGZlZVN5bWJvbCxvd25lZEJ5LCJ1c2VyIik7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGZpbmFsRnJvbSwibnVsbCIsZmVlU3ltYm9sLG93bmVkQnksInRyYW5zZmVyRnJvbUNvbnRyYWN0IiksInVuYWJsZSB0byB0cmFuc2ZlciBpc3N1YW5jZSBmZWUiKSlyZXR1cm4hMX1lbHNle2NvbnN0IHJlcz1hd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDpmZWVTeW1ib2wscXVhbnRpdHk6b3duZWRCeSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSk7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGZpbmFsRnJvbSwibnVsbCIsZmVlU3ltYm9sLG93bmVkQnksInRyYW5zZmVyIiksInVuYWJsZSB0byB0cmFuc2ZlciBpc3N1YW5jZSBmZWUiKSlyZXR1cm4hMX1jb25zdCBmaW5hbExvY2tUb2tlbnM9e307aWYobG9ja1Rva2Vucylmb3IodmFyW2xvY2tzeW1ib2wscXVhbnRpdHldb2YgT2JqZWN0LmVudHJpZXMobG9ja1Rva2VucykpaWYoImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUpe2NvbnN0IHJlcz1hd2FpdCBhcGkudHJhbnNmZXJUb2tlbnNGcm9tQ2FsbGluZ0NvbnRyYWN0KENPTlRSQUNUX05BTUUsbG9ja3N5bWJvbCxxdWFudGl0eSwiY29udHJhY3QiKTtpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsZmluYWxGcm9tLENPTlRSQUNUX05BTUUsbG9ja3N5bWJvbCxxdWFudGl0eSwidHJhbnNmZXJGcm9tQ29udHJhY3QiKSYmKGZpbmFsTG9ja1Rva2Vuc1tsb2Nrc3ltYm9sXT1xdWFudGl0eSl9ZWxzZXtjb25zdCByZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlclRvQ29udHJhY3QiLHt0bzpDT05UUkFDVF9OQU1FLHN5bWJvbDpsb2Nrc3ltYm9sLHF1YW50aXR5OnF1YW50aXR5LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KTtpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsZmluYWxGcm9tLENPTlRSQUNUX05BTUUsbG9ja3N5bWJvbCxxdWFudGl0eSwidHJhbnNmZXJUb0NvbnRyYWN0IikmJihmaW5hbExvY2tUb2tlbnNbbG9ja3N5bWJvbF09cXVhbnRpdHkpfWxldCBmaW5hbExvY2tOZnRzPVtdO2lmKGxvY2tOZnRzJiYwPGxvY2tOZnRzLmxlbmd0aCl7Y29uc3QgcmVzPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhmaW5hbEZyb20sZmluYWxGcm9tVHlwZSxDT05UUkFDVF9OQU1FLCJjb250cmFjdCIsbG9ja05mdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm8pO2ZpbmFsTG9ja05mdHM9cmVzLnN1Y2Nlc3N9b3duZWRCeT0idXNlciI9PT1maW5hbFRvVHlwZT8idSI6ImMiO2xldCBuZXdJbnN0YW5jZT17fTtuZXdJbnN0YW5jZT0wPGZpbmFsTG9ja05mdHMubGVuZ3RoP3thY2NvdW50OmZpbmFsVG8sb3duZWRCeTpvd25lZEJ5LGxvY2tlZFRva2VuczpmaW5hbExvY2tUb2tlbnMsbG9ja2VkTmZ0czpmaW5hbExvY2tOZnRzLHByb3BlcnRpZXM6ZmluYWxQcm9wZXJ0aWVzfTp7YWNjb3VudDpmaW5hbFRvLG93bmVkQnk6b3duZWRCeSxsb2NrZWRUb2tlbnM6ZmluYWxMb2NrVG9rZW5zLHByb3BlcnRpZXM6ZmluYWxQcm9wZXJ0aWVzfTtyZXN1bHQ9YXdhaXQgYXBpLmRiLmluc2VydChyZXN1bHQsbmV3SW5zdGFuY2UpO3JldHVybiBuZnQuc3VwcGx5Kz0xLCJudWxsIj09PWZpbmFsVG8mJiJjb250cmFjdCIhPT1maW5hbFRvVHlwZXx8KG5mdC5jaXJjdWxhdGluZ1N1cHBseSs9MSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSxhcGkuZW1pdCgiaXNzdWUiLHtmcm9tOmZpbmFsRnJvbSxmcm9tVHlwZTpmaW5hbEZyb21UeXBlLHRvOmZpbmFsVG8sdG9UeXBlOmZpbmFsVG9UeXBlLHN5bWJvbDpzeW1ib2wsbG9ja2VkVG9rZW5zOmZpbmFsTG9ja1Rva2Vucyxsb2NrZWROZnRzOmZpbmFsTG9ja05mdHMscHJvcGVydGllczpmaW5hbFByb3BlcnRpZXMsaWQ6cmVzdWx0Ll9pZH0pLCEwfX19fX1yZXR1cm4hMX0sYWN0aW9ucy5pc3N1ZU11bHRpcGxlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtpbnN0YW5jZXMsaXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm99PXBheWxvYWQ7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoaW5zdGFuY2VzJiYib2JqZWN0Ij09dHlwZW9mIGluc3RhbmNlcyYmQXJyYXkuaXNBcnJheShpbnN0YW5jZXMpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGluc3RhbmNlcy5sZW5ndGg8PU1BWF9OVU1fTkZUU19JU1NVQUJMRSxgY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAke01BWF9OVU1fTkZUU19JU1NVQUJMRX0gTkZUIGluc3RhbmNlcyBhdCBvbmNlYCkpe2xldCBjb250YWluZXJDb3VudD0wO2lmKGluc3RhbmNlcy5mb3JFYWNoKGluc3RhbmNlPT57aW5zdGFuY2UubG9ja05mdHMmJihjb250YWluZXJDb3VudCs9MSl9KSxhcGkuYXNzZXJ0KGNvbnRhaW5lckNvdW50PD1NQVhfTlVNX0NPTlRBSU5FUl9ORlRTX09QRVJBQkxFLGBjYW5ub3QgaXNzdWUgbW9yZSB0aGFuICR7TUFYX05VTV9DT05UQUlORVJfTkZUU19PUEVSQUJMRX0gY29udGFpbmVyIE5GVCBpbnN0YW5jZXMgYXQgb25jZWApJiZhcGkuYXNzZXJ0KDA9PT1jb250YWluZXJDb3VudHx8Y29udGFpbmVyQ291bnQ9PT1pbnN0YW5jZXMubGVuZ3RoLCJjYW5ub3QgaXNzdWUgYSBtaXggb2YgY29udGFpbmVyIGFuZCBub24tY29udGFpbmVyIE5GVCBpbnN0YW5jZXMgc2ltdWx0YW5lb3VzbHkiKSlmb3IobGV0IGk9MDtpPGluc3RhbmNlcy5sZW5ndGg7aSs9MSl7dmFye3N5bWJvbCxmcm9tVHlwZSx0byx0b1R5cGUsZmVlU3ltYm9sLGxvY2tUb2tlbnMsbG9ja05mdHMscHJvcGVydGllc309aW5zdGFuY2VzW2ldO2F3YWl0IGFjdGlvbnMuaXNzdWUoe3N5bWJvbDpzeW1ib2wsZnJvbVR5cGU6ZnJvbVR5cGUsdG86dG8sdG9UeXBlOnRvVHlwZSxmZWVTeW1ib2w6ZmVlU3ltYm9sLGxvY2tUb2tlbnM6bG9ja1Rva2Vucyxsb2NrTmZ0czpsb2NrTmZ0cyxwcm9wZXJ0aWVzOnByb3BlcnRpZXMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleSxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99KX19fTsK" }}}

Sort:  

{ "id": "ssc-testnet-hive", "json": { "contractName":"contract", "contractAction":"update", "contractPayload": { "name": "comments", "params": "", "code": "Y29uc3QgU01UX1BSRUNJU0lPTj0xMCxNQVhfVk9USU5HX1BPV0VSPTFlNCxNQVhfV0VJR0hUPTFlNCxQT1NUX1FVRVJZX0xJTUlUPTFlMztmdW5jdGlvbiBjYWxjdWxhdGVXZWlnaHRSc2hhcmVzKHJld2FyZFBvb2wsdm90ZVJzaGFyZVN1bSl7aWYoYXBpLkJpZ051bWJlcih2b3RlUnNoYXJlU3VtKS5sdGUoMCkpcmV0dXJuIGFwaS5CaWdOdW1iZXIoMCk7aWYoInBvd2VyIj09PXJld2FyZFBvb2wuY29uZmlnLnBvc3RSZXdhcmRDdXJ2ZSl7Y29uc3QgcG9zdFJld2FyZEV4cG9uZW50PWFwaS5CaWdOdW1iZXIocmV3YXJkUG9vbC5jb25maWcucG9zdFJld2FyZEN1cnZlUGFyYW1ldGVyKTtyZXR1cm4gcG9zdFJld2FyZEV4cG9uZW50LmVxKCIxIil8fHBvc3RSZXdhcmRFeHBvbmVudC5lcSgiMiIpP2FwaS5CaWdOdW1iZXIodm90ZVJzaGFyZVN1bSkucG93KHJld2FyZFBvb2wuY29uZmlnLnBvc3RSZXdhcmRDdXJ2ZVBhcmFtZXRlcikudG9GaXhlZCgxMCxhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pOmFwaS5CaWdOdW1iZXIocGFyc2VGbG9hdCh2b3RlUnNoYXJlU3VtKSoqcGFyc2VGbG9hdChyZXdhcmRQb29sLmNvbmZpZy5wb3N0UmV3YXJkQ3VydmVQYXJhbWV0ZXIpKS50b0ZpeGVkKDEwLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTil9cmV0dXJuIGFwaS5CaWdOdW1iZXIodm90ZVJzaGFyZVN1bSl9ZnVuY3Rpb24gY2FsY3VsYXRlQ3VyYXRpb25XZWlnaHRSc2hhcmVzKHJld2FyZFBvb2wsdm90ZVJzaGFyZVN1bSl7aWYoYXBpLkJpZ051bWJlcih2b3RlUnNoYXJlU3VtKS5sdGUoMCkpcmV0dXJuIGFwaS5CaWdOdW1iZXIoMCk7aWYoInBvd2VyIj09PXJld2FyZFBvb2wuY29uZmlnLmN1cmF0aW9uUmV3YXJkQ3VydmUpe2NvbnN0IGN1cmF0aW9uUmV3YXJkRXhwb25lbnQ9YXBpLkJpZ051bWJlcihyZXdhcmRQb29sLmNvbmZpZy5jdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyKTtyZXR1cm4gY3VyYXRpb25SZXdhcmRFeHBvbmVudC5lcSgiMC41Iik/YXBpLkJpZ051bWJlcih2b3RlUnNoYXJlU3VtKS5zcXJ0KCkudG9GaXhlZCgxMCxhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pOmN1cmF0aW9uUmV3YXJkRXhwb25lbnQuZXEoIjEiKT9hcGkuQmlnTnVtYmVyKHZvdGVSc2hhcmVTdW0pLnRvRml4ZWQoMTAsYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKTphcGkuQmlnTnVtYmVyKHBhcnNlRmxvYXQodm90ZVJzaGFyZVN1bSkqKnBhcnNlRmxvYXQocmV3YXJkUG9vbC5jb25maWcuY3VyYXRpb25SZXdhcmRDdXJ2ZVBhcmFtZXRlcikpLnRvRml4ZWQoMTAsYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKX1yZXR1cm4gYXBpLkJpZ051bWJlcih2b3RlUnNoYXJlU3VtKX1hc3luYyBmdW5jdGlvbiBwYXlVc2VyKHN5bWJvbCxxdWFudGl0eSx1c2VyLHN0YWtlZFJld2FyZFBlcmNlbnRhZ2UsbXV0ZSl7aWYobXV0ZSlyZXR1cm47Y29uc3QgcXVhbnRpdHlCaWdudW09YXBpLkJpZ051bWJlcihxdWFudGl0eSksc3Rha2VkUXVhbnRpdHk9cXVhbnRpdHlCaWdudW0ubXVsdGlwbGllZEJ5KHN0YWtlZFJld2FyZFBlcmNlbnRhZ2UpLmRpdmlkZWRCeSgxMDApLnRvRml4ZWQocXVhbnRpdHlCaWdudW0uZHAoKSxhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pLGxpcXVpZFF1YW50aXR5PXF1YW50aXR5QmlnbnVtLm1pbnVzKHN0YWtlZFF1YW50aXR5KS50b0ZpeGVkKHF1YW50aXR5QmlnbnVtLmRwKCksYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKTtsZXQgcmVzO2FwaS5CaWdOdW1iZXIobGlxdWlkUXVhbnRpdHkpLmd0KDApJiYocmVzPWF3YWl0IGFwaS50cmFuc2ZlclRva2Vucyh1c2VyLHN5bWJvbCxsaXF1aWRRdWFudGl0eSwidXNlciIpLHJlcy5lcnJvcnMmJmFwaS5kZWJ1ZyhgRXJyb3IgcGF5aW5nIG91dCBsaXF1aWQgJHtsaXF1aWRRdWFudGl0eX0gJHtzeW1ib2x9IHRvICR7dXNlcn0gKFRYSUQgJHthcGkudHJhbnNhY3Rpb25JZH0pOiBcbiR7cmVzLmVycm9yc31gKSksYXBpLkJpZ051bWJlcihzdGFrZWRRdWFudGl0eSkuZ3QoMCkmJihyZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJzdGFrZUZyb21Db250cmFjdCIse3RvOnVzZXIsc3ltYm9sOnN5bWJvbCxxdWFudGl0eTpzdGFrZWRRdWFudGl0eX0pLHJlcy5lcnJvcnMmJmFwaS5kZWJ1ZyhgRXJyb3IgcGF5aW5nIG91dCBzdGFrZWQgJHtzdGFrZWRRdWFudGl0eX0gJHtzeW1ib2x9IHRvICR7dXNlcn0gKFRYSUQgJHthcGkudHJhbnNhY3Rpb25JZH0pOiBcbiR7cmVzLmVycm9yc31gKSl9YXN5bmMgZnVuY3Rpb24gZ2V0TXV0ZShyZXdhcmRQb29sSWQsYWNjb3VudCl7Y29uc3Qgdm90aW5nUG93ZXI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInZvdGluZ1Bvd2VyIix7cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxhY2NvdW50OmFjY291bnR9KTtyZXR1cm4hIXZvdGluZ1Bvd2VyJiZ2b3RpbmdQb3dlci5tdXRlfWFzeW5jIGZ1bmN0aW9uIHBheU91dEJlbmVmaWNpYXJpZXMocmV3YXJkUG9vbCx0b2tlbixwb3N0LGF1dGhvckJlbmVQb3J0aW9uKXtjb25zdHthdXRob3JwZXJtOmF1dGhvcnBlcm0sc3ltYm9sOnN5bWJvbCxyZXdhcmRQb29sSWQ6cmV3YXJkUG9vbElkLGJlbmVmaWNpYXJpZXM6YmVuZWZpY2lhcmllc309cG9zdDtsZXQgdG90YWxCZW5lUGF5PWFwaS5CaWdOdW1iZXIoMCkscG9zdFRheEF1dGhvckJlbmVQb3J0aW9uPWF1dGhvckJlbmVQb3J0aW9uO2lmKHJld2FyZFBvb2wuY29uZmlnLmFwcFRheENvbmZpZyl7Y29uc3R7YXBwOmFwcCxwZXJjZW50OnBlcmNlbnQsYmVuZWZpY2lhcnk6YmVuZWZpY2lhcnl9PXJld2FyZFBvb2wuY29uZmlnLmFwcFRheENvbmZpZztpZihhcHAhPT1wb3N0LmFwcCl7Y29uc3QgYXBwVGF4UG9ydGlvbj1hcGkuQmlnTnVtYmVyKGF1dGhvckJlbmVQb3J0aW9uKS5tdWx0aXBsaWVkQnkocGVyY2VudCkuZGl2aWRlZEJ5KDEwMCkudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKTtwb3N0VGF4QXV0aG9yQmVuZVBvcnRpb249YXBpLkJpZ051bWJlcihwb3N0VGF4QXV0aG9yQmVuZVBvcnRpb24pLm1pbnVzKGFwcFRheFBvcnRpb24pO2NvbnN0IHJld2FyZExvZz17cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxhdXRob3JwZXJtOmF1dGhvcnBlcm0sc3ltYm9sOnN5bWJvbCxhY2NvdW50OmJlbmVmaWNpYXJ5LHF1YW50aXR5OmFwcFRheFBvcnRpb259O2FwaS5lbWl0KCJhcHBUYXgiLHJld2FyZExvZyksYXdhaXQgcGF5VXNlcihzeW1ib2wsYXBwVGF4UG9ydGlvbixiZW5lZmljaWFyeSwwKSx0b3RhbEJlbmVQYXk9YXBpLkJpZ051bWJlcih0b3RhbEJlbmVQYXkpLnBsdXMoYXBwVGF4UG9ydGlvbil9fWlmKCFiZW5lZmljaWFyaWVzfHwwPT09YmVuZWZpY2lhcmllcy5sZW5ndGgpcmV0dXJuIGFwaS5CaWdOdW1iZXIoMCk7Zm9yKGxldCBpPTA7aTxiZW5lZmljaWFyaWVzLmxlbmd0aDtpKz0xKXtjb25zdCBiZW5lZmljaWFyeT1iZW5lZmljaWFyaWVzW2ldLGJlbmVQYXk9YXBpLkJpZ051bWJlcihwb3N0VGF4QXV0aG9yQmVuZVBvcnRpb24pLm11bHRpcGxpZWRCeShiZW5lZmljaWFyeS53ZWlnaHQpLmRpdmlkZWRCeSgxZTQpLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksbXV0ZT1hd2FpdCBnZXRNdXRlKHJld2FyZFBvb2xJZCxiZW5lZmljaWFyeS5hY2NvdW50KSxyZXdhcmRMb2c9e3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsYXV0aG9ycGVybTphdXRob3JwZXJtLHN5bWJvbDpzeW1ib2wsYWNjb3VudDpiZW5lZmljaWFyeS5hY2NvdW50LHF1YW50aXR5OmJlbmVQYXl9O211dGUmJihyZXdhcmRMb2cubXV0ZT0hMCksYXBpLmVtaXQoImJlbmVmaWNpYXJ5UmV3YXJkIixyZXdhcmRMb2cpLGF3YWl0IHBheVVzZXIoc3ltYm9sLGJlbmVQYXksYmVuZWZpY2lhcnkuYWNjb3VudCxyZXdhcmRQb29sLmNvbmZpZy5zdGFrZWRSZXdhcmRQZXJjZW50YWdlLG11dGUpLHRvdGFsQmVuZVBheT1hcGkuQmlnTnVtYmVyKHRvdGFsQmVuZVBheSkucGx1cyhiZW5lUGF5KX1yZXR1cm4gdG90YWxCZW5lUGF5fWFzeW5jIGZ1bmN0aW9uIHBheU91dEN1cmF0b3JzKHJld2FyZFBvb2wsdG9rZW4scG9zdCxjdXJhdG9yUG9ydGlvbixwYXJhbXMpe2NvbnN0e2F1dGhvcnBlcm06YXV0aG9ycGVybSxzeW1ib2w6c3ltYm9sLHJld2FyZFBvb2xJZDpyZXdhcmRQb29sSWR9PXBvc3Qse3ZvdGVRdWVyeUxpbWl0OnZvdGVRdWVyeUxpbWl0fT1wYXJhbXMscmVzcG9uc2U9e2RvbmU6ITEsdm90ZXNQcm9jZXNzZWQ6MH0sdm90ZXNUb1BheW91dD1hd2FpdCBhcGkuZGIuZmluZCgidm90ZXMiLHtyZXdhcmRQb29sSWQ6cmV3YXJkUG9vbElkLGF1dGhvcnBlcm06YXV0aG9ycGVybX0sdm90ZVF1ZXJ5TGltaXQsMCxbe2luZGV4OiJieVRpbWVzdGFtcCIsZGVzY2VuZGluZzohMX0se2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7aWYoMD09PXZvdGVzVG9QYXlvdXQubGVuZ3RoKXJlc3BvbnNlLmRvbmU9ITA7ZWxzZXtmb3IobGV0IGk9MDtpPHZvdGVzVG9QYXlvdXQubGVuZ3RoO2krPTEpe2NvbnN0IHZvdGU9dm90ZXNUb1BheW91dFtpXTtpZihhcGkuQmlnTnVtYmVyKHZvdGUuY3VyYXRpb25XZWlnaHQpPjApe2NvbnN0IHRvdGFsQ3VyYXRpb25XZWlnaHQ9Y2FsY3VsYXRlQ3VyYXRpb25XZWlnaHRSc2hhcmVzKHJld2FyZFBvb2wscG9zdC52b3RlUG9zaXRpdmVSc2hhcmVTdW0pLHZvdGVQYXk9YXBpLkJpZ051bWJlcihjdXJhdG9yUG9ydGlvbikubXVsdGlwbGllZEJ5KHZvdGUuY3VyYXRpb25XZWlnaHQpLmRpdmlkZWRCeSh0b3RhbEN1cmF0aW9uV2VpZ2h0KS50b0ZpeGVkKHRva2VuLnByZWNpc2lvbixhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pLG11dGU9YXdhaXQgZ2V0TXV0ZShyZXdhcmRQb29sSWQsdm90ZS52b3RlcikscmV3YXJkTG9nPXtyZXdhcmRQb29sSWQ6cmV3YXJkUG9vbElkLGF1dGhvcnBlcm06YXV0aG9ycGVybSxzeW1ib2w6c3ltYm9sLGFjY291bnQ6dm90ZS52b3RlcixxdWFudGl0eTp2b3RlUGF5fTttdXRlJiYocmV3YXJkTG9nLm11dGU9ITApLGFwaS5lbWl0KCJjdXJhdGlvblJld2FyZCIscmV3YXJkTG9nKSxhd2FpdCBwYXlVc2VyKHN5bWJvbCx2b3RlUGF5LHZvdGUudm90ZXIscmV3YXJkUG9vbC5jb25maWcuc3Rha2VkUmV3YXJkUGVyY2VudGFnZSxtdXRlKX1hd2FpdCBhcGkuZGIucmVtb3ZlKCJ2b3RlcyIsdm90ZSl9cmVzcG9uc2Uudm90ZXNQcm9jZXNzZWQrPXZvdGVzVG9QYXlvdXQubGVuZ3RoLHZvdGVzVG9QYXlvdXQubGVuZ3RoPHZvdGVRdWVyeUxpbWl0JiYocmVzcG9uc2UuZG9uZT0hMCl9cmV0dXJuIHJlc3BvbnNlfWFzeW5jIGZ1bmN0aW9uIHBheU91dFBvc3QocmV3YXJkUG9vbCx0b2tlbixwb3N0LHBhcmFtcyl7Y29uc3QgcmVzcG9uc2U9e3RvdGFsUGF5b3V0VmFsdWU6MCx2b3Rlc1Byb2Nlc3NlZDowLGRvbmU6ITF9O2lmKHBvc3QuZGVjbGluZVBheW91dClyZXR1cm4gYXBpLmVtaXQoImF1dGhvclJld2FyZCIse3Jld2FyZFBvb2xJZDpwb3N0LnJld2FyZFBvb2xJZCxhdXRob3JwZXJtOnBvc3QuYXV0aG9ycGVybSxzeW1ib2w6cG9zdC5zeW1ib2wsYWNjb3VudDpwb3N0LmF1dGhvcixxdWFudGl0eToiMCJ9KSxyZXNwb25zZS5kb25lPSEwLGF3YWl0IGFwaS5kYi5yZW1vdmUoInBvc3RzIixwb3N0KSxyZXNwb25zZTtjb25zdCBwb3N0Q2xhaW1zPWNhbGN1bGF0ZVdlaWdodFJzaGFyZXMocmV3YXJkUG9vbCxwb3N0LnZvdGVSc2hhcmVTdW0pLHBvc3RQZW5kaW5nVG9rZW49YXBpLkJpZ051bWJlcihyZXdhcmRQb29sLmludGVydmFsUGVuZGluZ0NsYWltcykuZ3QoMCk/YXBpLkJpZ051bWJlcihyZXdhcmRQb29sLmludGVydmFsUmV3YXJkUG9vbCkubXVsdGlwbGllZEJ5KHBvc3RDbGFpbXMpLmRpdmlkZWRCeShyZXdhcmRQb29sLmludGVydmFsUGVuZGluZ0NsYWltcykudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKToiMCI7cmVzcG9uc2UudG90YWxQYXlvdXRWYWx1ZT1wb3N0UGVuZGluZ1Rva2VuO2NvbnN0IGN1cmF0b3JQb3J0aW9uPWFwaS5CaWdOdW1iZXIocG9zdFBlbmRpbmdUb2tlbikubXVsdGlwbGllZEJ5KHJld2FyZFBvb2wuY29uZmlnLmN1cmF0aW9uUmV3YXJkUGVyY2VudGFnZSkuZGl2aWRlZEJ5KDEwMCkudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSxhdXRob3JCZW5lUG9ydGlvbj1hcGkuQmlnTnVtYmVyKHBvc3RQZW5kaW5nVG9rZW4pLm1pbnVzKGN1cmF0b3JQb3J0aW9uKS50b0ZpeGVkKHRva2VuLnByZWNpc2lvbixhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pLGJlbmVmaWNpYXJpZXNQYXlvdXRWYWx1ZT1hd2FpdCBwYXlPdXRCZW5lZmljaWFyaWVzKHJld2FyZFBvb2wsdG9rZW4scG9zdCxhdXRob3JCZW5lUG9ydGlvbiksYXV0aG9yUG9ydGlvbj1hcGkuQmlnTnVtYmVyKGF1dGhvckJlbmVQb3J0aW9uKS5taW51cyhiZW5lZmljaWFyaWVzUGF5b3V0VmFsdWUpLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksY3VyYXRvclBheVN0YXR1cz1hd2FpdCBwYXlPdXRDdXJhdG9ycyhyZXdhcmRQb29sLHRva2VuLHBvc3QsY3VyYXRvclBvcnRpb24scGFyYW1zKTtpZihyZXNwb25zZS52b3Rlc1Byb2Nlc3NlZCs9Y3VyYXRvclBheVN0YXR1cy52b3Rlc1Byb2Nlc3NlZCxyZXNwb25zZS5kb25lPWN1cmF0b3JQYXlTdGF0dXMuZG9uZSxjdXJhdG9yUGF5U3RhdHVzLmRvbmUpe2NvbnN0IG11dGU9YXdhaXQgZ2V0TXV0ZShwb3N0LnJld2FyZFBvb2xJZCxwb3N0LmF1dGhvcikscmV3YXJkTG9nPXtyZXdhcmRQb29sSWQ6cG9zdC5yZXdhcmRQb29sSWQsYXV0aG9ycGVybTpwb3N0LmF1dGhvcnBlcm0sc3ltYm9sOnBvc3Quc3ltYm9sLGFjY291bnQ6cG9zdC5hdXRob3IscXVhbnRpdHk6YXV0aG9yUG9ydGlvbn07bXV0ZSYmKHJld2FyZExvZy5tdXRlPSEwKSxhcGkuZW1pdCgiYXV0aG9yUmV3YXJkIixyZXdhcmRMb2cpLGF3YWl0IHBheVVzZXIocG9zdC5zeW1ib2wsYXV0aG9yUG9ydGlvbixwb3N0LmF1dGhvcixyZXdhcmRQb29sLmNvbmZpZy5zdGFrZWRSZXdhcmRQZXJjZW50YWdlLG11dGUpLGF3YWl0IGFwaS5kYi5yZW1vdmUoInBvc3RzIixwb3N0KX1yZXR1cm4gcmVzcG9uc2V9YXN5bmMgZnVuY3Rpb24gY29tcHV0ZVBvc3RSZXdhcmRzKHBhcmFtcyxyZXdhcmRQb29sLHRva2VuLGVuZFRpbWVzdGFtcCl7Y29uc3R7bGFzdENsYWltRGVjYXlUaW1lc3RhbXA6bGFzdENsYWltRGVjYXlUaW1lc3RhbXB9PXJld2FyZFBvb2wse21heFBvc3RzUHJvY2Vzc2VkUGVyUm91bmQ6bWF4UG9zdHNQcm9jZXNzZWRQZXJSb3VuZCxtYXhWb3Rlc1Byb2Nlc3NlZFBlclJvdW5kOm1heFZvdGVzUHJvY2Vzc2VkUGVyUm91bmR9PXBhcmFtcyxwb3N0c1RvUGF5b3V0PWF3YWl0IGFwaS5kYi5maW5kKCJwb3N0cyIse3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sLl9pZCxjYXNob3V0VGltZTp7JGd0ZTpsYXN0Q2xhaW1EZWNheVRpbWVzdGFtcCwkbHRlOmVuZFRpbWVzdGFtcH19LG1heFBvc3RzUHJvY2Vzc2VkUGVyUm91bmQsMCxbe2luZGV4OiJieUNhc2hvdXRUaW1lIixkZXNjZW5kaW5nOiExfSx7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtsZXQgZG9uZT0hMSxkZWR1Y3RGcm9tUmV3YXJkUG9vbD1hcGkuQmlnTnVtYmVyKDApLHZvdGVzUHJvY2Vzc2VkPTA7aWYocG9zdHNUb1BheW91dCYmcG9zdHNUb1BheW91dC5sZW5ndGg+MCl7bGV0IGxpbWl0UmVhY2hlZD0hMTtmb3IobGV0IGk9MDtpPHBvc3RzVG9QYXlvdXQubGVuZ3RoO2krPTEpe2NvbnN0IHBvc3Q9cG9zdHNUb1BheW91dFtpXSxwb3N0UGF5b3V0UmVzcG9uc2U9YXdhaXQgcGF5T3V0UG9zdChyZXdhcmRQb29sLHRva2VuLHBvc3QscGFyYW1zKSx7dG90YWxQYXlvdXRWYWx1ZTp0b3RhbFBheW91dFZhbHVlfT1wb3N0UGF5b3V0UmVzcG9uc2U7aWYodm90ZXNQcm9jZXNzZWQrPXBvc3RQYXlvdXRSZXNwb25zZS52b3Rlc1Byb2Nlc3NlZCxwb3N0UGF5b3V0UmVzcG9uc2UuZG9uZSYmKGRlZHVjdEZyb21SZXdhcmRQb29sPWRlZHVjdEZyb21SZXdhcmRQb29sLnBsdXModG90YWxQYXlvdXRWYWx1ZSkpLCFwb3N0UGF5b3V0UmVzcG9uc2UuZG9uZXx8dm90ZXNQcm9jZXNzZWQ+PW1heFZvdGVzUHJvY2Vzc2VkUGVyUm91bmQpe2xpbWl0UmVhY2hlZD0hMDticmVha319IWxpbWl0UmVhY2hlZCYmcG9zdHNUb1BheW91dC5sZW5ndGg8bWF4UG9zdHNQcm9jZXNzZWRQZXJSb3VuZCYmKGRvbmU9ITApLHJld2FyZFBvb2wucmV3YXJkUG9vbD1hcGkuQmlnTnVtYmVyKHJld2FyZFBvb2wucmV3YXJkUG9vbCkubWludXMoZGVkdWN0RnJvbVJld2FyZFBvb2wpLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTil9ZWxzZSBkb25lPSEwO2RvbmUmJihyZXdhcmRQb29sLmxhc3RDbGFpbURlY2F5VGltZXN0YW1wPWVuZFRpbWVzdGFtcCl9YXN5bmMgZnVuY3Rpb24gcG9zdENsYWltc0luSW50ZXJ2YWwocGFyYW1zLHJld2FyZFBvb2wsc3RhcnQsZW5kKXtsZXQgcG9zdE9mZnNldD0wLG5ld1BlbmRpbmdDbGFpbXM9YXBpLkJpZ051bWJlcigwKSxwb3N0c1RvUGF5b3V0PWF3YWl0IGFwaS5kYi5maW5kKCJwb3N0cyIse3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sLl9pZCxjYXNob3V0VGltZTp7JGd0ZTpzdGFydCwkbHRlOmVuZH19LDFlMyxwb3N0T2Zmc2V0LFt7aW5kZXg6ImJ5Q2FzaG91dFRpbWUiLGRlc2NlbmRpbmc6ITF9LHtpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2Zvcig7cG9zdHNUb1BheW91dCYmcG9zdHNUb1BheW91dC5sZW5ndGg+MCYmKG5ld1BlbmRpbmdDbGFpbXM9bmV3UGVuZGluZ0NsYWltcy5wbHVzKHBvc3RzVG9QYXlvdXQucmVkdWNlKCgoeCx5KT0+eC5wbHVzKGNhbGN1bGF0ZVdlaWdodFJzaGFyZXMocmV3YXJkUG9vbCx5LnZvdGVSc2hhcmVTdW0pKSksYXBpLkJpZ051bWJlcigwKSkpLmRwKDEwLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksIShwb3N0c1RvUGF5b3V0Lmxlbmd0aDwxZTMpKTspcG9zdE9mZnNldCs9MWUzLHBvc3RzVG9QYXlvdXQ9YXdhaXQgYXBpLmRiLmZpbmQoInBvc3RzIix7cmV3YXJkUG9vbElkOnJld2FyZFBvb2wuX2lkLGNhc2hvdXRUaW1lOnskZ3RlOnN0YXJ0LCRsdGU6ZW5kfX0sMWUzLHBvc3RPZmZzZXQsW3tpbmRleDoiYnlDYXNob3V0VGltZSIsZGVzY2VuZGluZzohMX0se2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7cmV0dXJuIG5ld1BlbmRpbmdDbGFpbXN9YXN5bmMgZnVuY3Rpb24gdG9rZW5NYWludGVuYW5jZSgpe2NvbnN0IHRpbWVzdGFtcD1uZXcgRGF0ZShgJHthcGkuaGl2ZUJsb2NrVGltZXN0YW1wfS4wMDBaYCkuZ2V0VGltZSgpLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2xhc3RNYWludGVuYW5jZUJsb2NrOmxhc3RNYWludGVuYW5jZUJsb2NrLGxhc3RQcm9jZXNzZWRQb29sSWQ6bGFzdFByb2Nlc3NlZFBvb2xJZCxtYWludGVuYW5jZVRva2Vuc1BlckJsb2NrOm1haW50ZW5hbmNlVG9rZW5zUGVyQmxvY2t9PXBhcmFtcztpZihsYXN0TWFpbnRlbmFuY2VCbG9jaz49YXBpLmJsb2NrTnVtYmVyKXJldHVybjtwYXJhbXMubGFzdE1haW50ZW5hbmNlQmxvY2s9YXBpLmJsb2NrTnVtYmVyO2NvbnN0IHJld2FyZFBvb2xQcm9jZXNzaW5nRXhwcmVzc2lvbj17JGx0ZTpbIiRsYXN0Q2xhaW1EZWNheVRpbWVzdGFtcCIseyRzdWJ0cmFjdDpbdGltZXN0YW1wLHskbXVsdGlwbHk6WyIkY29uZmlnLnJld2FyZEludGVydmFsU2Vjb25kcyIsMWUzXX1dfV19O2xldCByZXdhcmRQb29scz1hd2FpdCBhcGkuZGIuZmluZCgicmV3YXJkUG9vbHMiLHthY3RpdmU6ITAsJGV4cHI6cmV3YXJkUG9vbFByb2Nlc3NpbmdFeHByZXNzaW9uLF9pZDp7JGd0Omxhc3RQcm9jZXNzZWRQb29sSWR9fSxtYWludGVuYW5jZVRva2Vuc1BlckJsb2NrLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2lmKCFyZXdhcmRQb29sc3x8cmV3YXJkUG9vbHMubGVuZ3RoPG1haW50ZW5hbmNlVG9rZW5zUGVyQmxvY2spe3Jld2FyZFBvb2xzfHwocmV3YXJkUG9vbHM9W10pO2NvbnN0IG1vcmVSZXdhcmRQb29scz1hd2FpdCBhcGkuZGIuZmluZCgicmV3YXJkUG9vbHMiLHthY3RpdmU6ITAsJGV4cHI6cmV3YXJkUG9vbFByb2Nlc3NpbmdFeHByZXNzaW9ufSxtYWludGVuYW5jZVRva2Vuc1BlckJsb2NrLXJld2FyZFBvb2xzLmxlbmd0aCwwLFt7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKSxleGlzdGluZ0lkcz1uZXcgU2V0KHJld2FyZFBvb2xzLm1hcCgocD0+cC5faWQpKSk7bW9yZVJld2FyZFBvb2xzLmZvckVhY2goKG1ycD0+e2V4aXN0aW5nSWRzLmhhcyhtcnAuX2lkKXx8cmV3YXJkUG9vbHMucHVzaChtcnApfSkpfWlmKHJld2FyZFBvb2xzKWZvcihsZXQgaT0wO2k8cmV3YXJkUG9vbHMubGVuZ3RoO2krPTEpe2NvbnN0IHJld2FyZFBvb2w9cmV3YXJkUG9vbHNbaV07cGFyYW1zLmxhc3RQcm9jZXNzZWRQb29sSWQ9cmV3YXJkUG9vbC5faWQ7Y29uc3R7c3ltYm9sOnN5bWJvbCxsYXN0Q2xhaW1EZWNheVRpbWVzdGFtcDpsYXN0Q2xhaW1EZWNheVRpbWVzdGFtcCxsYXN0UmV3YXJkVGltZXN0YW1wOmxhc3RSZXdhcmRUaW1lc3RhbXAsY29uZmlnOmNvbmZpZ309cmV3YXJkUG9vbCx7cmV3YXJkSW50ZXJ2YWxTZWNvbmRzOnJld2FyZEludGVydmFsU2Vjb25kcyxyZXdhcmRQZXJJbnRlcnZhbDpyZXdhcmRQZXJJbnRlcnZhbCxjYXNob3V0V2luZG93RGF5czpjYXNob3V0V2luZG93RGF5c309Y29uZmlnLHRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnN5bWJvbH0pLHJld2FyZEludGVydmFsRHVyYXRpb25NaWxsaXM9MWUzKnJld2FyZEludGVydmFsU2Vjb25kcyxuZXh0UmV3YXJkVGltZXN0YW1wPWxhc3RSZXdhcmRUaW1lc3RhbXArcmV3YXJkSW50ZXJ2YWxEdXJhdGlvbk1pbGxpcyxuZXh0Q2xhaW1EZWNheVRpbWVzdGFtcD1sYXN0Q2xhaW1EZWNheVRpbWVzdGFtcCtyZXdhcmRJbnRlcnZhbER1cmF0aW9uTWlsbGlzO2lmKG5leHRDbGFpbURlY2F5VGltZXN0YW1wPj1uZXh0UmV3YXJkVGltZXN0YW1wKXtjb25zdCByZXdhcmRUb0FkZD1hcGkuQmlnTnVtYmVyKHJld2FyZFBlckludGVydmFsKTthcGkuQmlnTnVtYmVyKHJld2FyZFRvQWRkKS5ndCgwKSYmKGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwiaXNzdWVUb0NvbnRyYWN0Iix7c3ltYm9sOnJld2FyZFBvb2wuc3ltYm9sLHF1YW50aXR5OnJld2FyZFRvQWRkLHRvOiJjb21tZW50cyIsaXNTaWduZWRXaXRoQWN0aXZlS2V5OiEwfSkscmV3YXJkUG9vbC5yZXdhcmRQb29sPWFwaS5CaWdOdW1iZXIocmV3YXJkUG9vbC5yZXdhcmRQb29sKS5wbHVzKHJld2FyZFRvQWRkKS50b0ZpeGVkKHRva2VuLnByZWNpc2lvbixhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pKTtjb25zdCBhZGp1c3ROdW1lcj1uZXh0UmV3YXJkVGltZXN0YW1wLWxhc3RSZXdhcmRUaW1lc3RhbXAsYWRqdXN0RGVub209MjQqKDIqY2FzaG91dFdpbmRvd0RheXMrMSkqMzYwMCoxZTM7cmV3YXJkUG9vbC5wZW5kaW5nQ2xhaW1zPWFwaS5CaWdOdW1iZXIocmV3YXJkUG9vbC5wZW5kaW5nQ2xhaW1zKS5taW51cyhhcGkuQmlnTnVtYmVyKHJld2FyZFBvb2wucGVuZGluZ0NsYWltcykubXVsdGlwbGllZEJ5KGFkanVzdE51bWVyKS5kaXZpZGVkQnkoYWRqdXN0RGVub20pKS50b0ZpeGVkKDEwLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTikscmV3YXJkUG9vbC5wZW5kaW5nQ2xhaW1zPWFwaS5CaWdOdW1iZXIocmV3YXJkUG9vbC5wZW5kaW5nQ2xhaW1zKS5wbHVzKGF3YWl0IHBvc3RDbGFpbXNJbkludGVydmFsKHBhcmFtcyxyZXdhcmRQb29sLGxhc3RSZXdhcmRUaW1lc3RhbXAsbmV4dFJld2FyZFRpbWVzdGFtcCkpLnRvRml4ZWQoMTAsYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSxyZXdhcmRQb29sLmxhc3RSZXdhcmRUaW1lc3RhbXA9bmV4dFJld2FyZFRpbWVzdGFtcCxyZXdhcmRQb29sLmludGVydmFsUGVuZGluZ0NsYWltcz1yZXdhcmRQb29sLnBlbmRpbmdDbGFpbXMscmV3YXJkUG9vbC5pbnRlcnZhbFJld2FyZFBvb2w9cmV3YXJkUG9vbC5yZXdhcmRQb29sfWF3YWl0IGNvbXB1dGVQb3N0UmV3YXJkcyhwYXJhbXMscmV3YXJkUG9vbCx0b2tlbixuZXh0Q2xhaW1EZWNheVRpbWVzdGFtcCksYXdhaXQgYXBpLmRiLnVwZGF0ZSgicmV3YXJkUG9vbHMiLHJld2FyZFBvb2wpfWF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIscGFyYW1zKX1mdW5jdGlvbiBhc3NlcnRBcHBUYXhDb25maWdWYWxpZChhcHBUYXhDb25maWcpe2lmKCFhcGkuYXNzZXJ0KCFhcHBUYXhDb25maWd8fCJvYmplY3QiPT10eXBlb2YgYXBwVGF4Q29uZmlnLCJhcHBUYXhDb25maWcgaW52YWxpZCIpKXJldHVybiExO2lmKGFwcFRheENvbmZpZyl7Y29uc3R7YXBwOmFwcCxwZXJjZW50OnBlcmNlbnQsYmVuZWZpY2lhcnk6YmVuZWZpY2lhcnl9PWFwcFRheENvbmZpZztpZighYXBpLmFzc2VydChhcHAmJiJzdHJpbmciPT10eXBlb2YgYXBwLCJhcHBUYXhDb25maWcgYXBwIGludmFsaWQiKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydChwZXJjZW50JiZOdW1iZXIuaXNJbnRlZ2VyKHBlcmNlbnQpJiZwZXJjZW50Pj0xJiZwZXJjZW50PD0xMDAsImFwcFRheENvbmZpZyBwZXJjZW50IHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAwIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQoYmVuZWZpY2lhcnkmJmFwaS5pc1ZhbGlkQWNjb3VudE5hbWUoYmVuZWZpY2lhcnkpLCJhcHBUYXhDb25maWcgYmVuZWZpY2lhcnkgaW52YWxpZCIpKXJldHVybiExfXJldHVybiEwfWFzeW5jIGZ1bmN0aW9uIGdldFJld2FyZFBvb2xJZHMocGF5bG9hZCl7Y29uc3R7cmV3YXJkUG9vbHM6cmV3YXJkUG9vbHMsanNvbk1ldGFkYXRhOmpzb25NZXRhZGF0YSxwYXJlbnRBdXRob3I6cGFyZW50QXV0aG9yLHBhcmVudFBlcm1saW5rOnBhcmVudFBlcm1saW5rfT1wYXlsb2FkLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7aWYocGFyZW50QXV0aG9yJiZwYXJlbnRQZXJtbGluayl7Y29uc3QgcGFyZW50QXV0aG9ycGVybT1gQCR7cGFyZW50QXV0aG9yfS8ke3BhcmVudFBlcm1saW5rfWAscGFyZW50UG9zdE1ldGFkYXRhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwb3N0TWV0YWRhdGEiLHthdXRob3JwZXJtOnBhcmVudEF1dGhvcnBlcm19KTtpZihwYXJlbnRQb3N0TWV0YWRhdGEpcmV0dXJuIHBhcmVudFBvc3RNZXRhZGF0YS5yZXdhcmRQb29sSWRzO2NvbnN0IHBhcmVudFBvc3RzPWF3YWl0IGFwaS5kYi5maW5kKCJwb3N0cyIse2F1dGhvcnBlcm06cGFyZW50QXV0aG9ycGVybX0pO3JldHVybiBwYXJlbnRQb3N0cyYmcGFyZW50UG9zdHMubGVuZ3RoPjA/cGFyZW50UG9zdHMubWFwKChwPT5wLnJld2FyZFBvb2xJZCkpOltdfWlmKGpzb25NZXRhZGF0YSYmanNvbk1ldGFkYXRhLnRhZ3MmJkFycmF5LmlzQXJyYXkoanNvbk1ldGFkYXRhLnRhZ3MpJiZqc29uTWV0YWRhdGEudGFncy5ldmVyeSgodD0+InN0cmluZyI9PXR5cGVvZiB0KSkpe2NvbnN0IHNlYXJjaFRhZ3M9cGFyZW50UGVybWxpbms/anNvbk1ldGFkYXRhLnRhZ3MuY29uY2F0KFtwYXJlbnRQZXJtbGlua10pOmpzb25NZXRhZGF0YS50YWdzLHBvb2xRdWVyeT17ImNvbmZpZy50YWdzIjp7JGluOnNlYXJjaFRhZ3N9LCJjb25maWcuZXhjbHVkZVRhZ3MiOnskbm90OnskaW46c2VhcmNoVGFnc319fSx0YWdSZXdhcmRQb29scz1hd2FpdCBhcGkuZGIuZmluZCgicmV3YXJkUG9vbHMiLHBvb2xRdWVyeSxwYXJhbXMubWF4UG9vbHNQZXJQb3N0LDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2lmKHRhZ1Jld2FyZFBvb2xzJiZ0YWdSZXdhcmRQb29scy5sZW5ndGg+MClyZXR1cm4gdGFnUmV3YXJkUG9vbHMubWFwKChyPT5yLl9pZCkpfXJldHVybiByZXdhcmRQb29scyYmQXJyYXkuaXNBcnJheShyZXdhcmRQb29scykmJnJld2FyZFBvb2xzLmxlbmd0aD4wP3Jld2FyZFBvb2xzLnNsaWNlKDAscGFyYW1zLm1heFBvb2xzUGVyUG9zdCk6W119YXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZvdGUocG9zdCx2b3Rlcix3ZWlnaHQsdGltZXN0YW1wKXtjb25zdHtyZXdhcmRQb29sSWQ6cmV3YXJkUG9vbElkLHN5bWJvbDpzeW1ib2wsYXV0aG9ycGVybTphdXRob3JwZXJtLGNhc2hvdXRUaW1lOmNhc2hvdXRUaW1lfT1wb3N0O2lmKGNhc2hvdXRUaW1lPHRpbWVzdGFtcClyZXR1cm47Y29uc3QgcmV3YXJkUG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicmV3YXJkUG9vbHMiLHtfaWQ6cmV3YXJkUG9vbElkfSk7aWYoIXJld2FyZFBvb2x8fCFyZXdhcmRQb29sLmFjdGl2ZSlyZXR1cm47bGV0IHZvdGluZ1Bvd2VyPWF3YWl0IGFwaS5kYi5maW5kT25lKCJ2b3RpbmdQb3dlciIse3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsYWNjb3VudDp2b3Rlcn0pO3ZvdGluZ1Bvd2VyPyh2b3RpbmdQb3dlci52b3RpbmdQb3dlcis9MWU0Kih0aW1lc3RhbXAtdm90aW5nUG93ZXIubGFzdFZvdGVUaW1lc3RhbXApLygyNCpyZXdhcmRQb29sLmNvbmZpZy52b3RlUmVnZW5lcmF0aW9uRGF5cyozNjAwKjFlMyksdm90aW5nUG93ZXIudm90aW5nUG93ZXI9TWF0aC5mbG9vcih2b3RpbmdQb3dlci52b3RpbmdQb3dlciksdm90aW5nUG93ZXIudm90aW5nUG93ZXI9TWF0aC5taW4odm90aW5nUG93ZXIudm90aW5nUG93ZXIsMWU0KSx2b3RpbmdQb3dlci5kb3dudm90aW5nUG93ZXIrPTFlNCoodGltZXN0YW1wLXZvdGluZ1Bvd2VyLmxhc3RWb3RlVGltZXN0YW1wKS8oMjQqcmV3YXJkUG9vbC5jb25maWcuZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzKjM2MDAqMWUzKSx2b3RpbmdQb3dlci5kb3dudm90aW5nUG93ZXI9TWF0aC5mbG9vcih2b3RpbmdQb3dlci5kb3dudm90aW5nUG93ZXIpLHZvdGluZ1Bvd2VyLmRvd252b3RpbmdQb3dlcj1NYXRoLm1pbih2b3RpbmdQb3dlci5kb3dudm90aW5nUG93ZXIsMWU0KSx2b3RpbmdQb3dlci5sYXN0Vm90ZVRpbWVzdGFtcD10aW1lc3RhbXApOih2b3RpbmdQb3dlcj17cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxhY2NvdW50OnZvdGVyLGxhc3RWb3RlVGltZXN0YW1wOnRpbWVzdGFtcCx2b3RpbmdQb3dlcjoxZTQsZG93bnZvdGluZ1Bvd2VyOjFlNH0sdm90aW5nUG93ZXI9YXdhaXQgYXBpLmRiLmluc2VydCgidm90aW5nUG93ZXIiLHZvdGluZ1Bvd2VyKSk7Y29uc3Qgdm90ZXJUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse3N5bWJvbDpzeW1ib2wsYWNjb3VudDp2b3Rlcn0pO2xldCBzdGFrZT12b3RlclRva2VuQmFsYW5jZT92b3RlclRva2VuQmFsYW5jZS5zdGFrZToiMCI7dm90ZXJUb2tlbkJhbGFuY2UmJnZvdGVyVG9rZW5CYWxhbmNlLmRlbGVnYXRpb25zSW4mJmFwaS5CaWdOdW1iZXIodm90ZXJUb2tlbkJhbGFuY2UuZGVsZWdhdGlvbnNJbikuaXNGaW5pdGUoKSYmKHN0YWtlPWFwaS5CaWdOdW1iZXIoc3Rha2UpLnBsdXModm90ZXJUb2tlbkJhbGFuY2UuZGVsZWdhdGlvbnNJbikpO2xldCB2b3RlUnNoYXJlcz0iMCIsdXBkYXRlZFBvc3RSc2hhcmVzPSIwIix1c2VkUG93ZXI9MCx1c2VkRG93bnZvdGVQb3dlcj0wLGN1cmF0aW9uV2VpZ2h0PSIwIjtpZih3ZWlnaHQ+MCl7dm90ZVJzaGFyZXM9YXBpLkJpZ051bWJlcihzdGFrZSkubXVsdGlwbGllZEJ5KHdlaWdodCkubXVsdGlwbGllZEJ5KHZvdGluZ1Bvd2VyLnZvdGluZ1Bvd2VyKS5kaXZpZGVkQnkoMWU0KS5kaXZpZGVkQnkoMWU0KS50b0ZpeGVkKDEwLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksdXNlZFBvd2VyPU1hdGguZmxvb3Iodm90aW5nUG93ZXIudm90aW5nUG93ZXIqTWF0aC5hYnMod2VpZ2h0KSo2MCo2MCoyNC8xZTQpO2NvbnN0IHVzZWRQb3dlckRlbm9tPU1hdGguZmxvb3IoODY0ZTYvcmV3YXJkUG9vbC5jb25maWcudm90ZVBvd2VyQ29uc3VtcHRpb24pO3VzZWRQb3dlcj1NYXRoLmZsb29yKCh1c2VkUG93ZXIrdXNlZFBvd2VyRGVub20tMSkvdXNlZFBvd2VyRGVub20pLHZvdGluZ1Bvd2VyLnZvdGluZ1Bvd2VyPU1hdGgubWF4KDAsTWF0aC5mbG9vcih2b3RpbmdQb3dlci52b3RpbmdQb3dlci11c2VkUG93ZXIpKSxjdXJhdGlvbldlaWdodD1hcGkuQmlnTnVtYmVyKGNhbGN1bGF0ZUN1cmF0aW9uV2VpZ2h0UnNoYXJlcyhyZXdhcmRQb29sLGFwaS5CaWdOdW1iZXIodm90ZVJzaGFyZXMpLnBsdXMocG9zdC52b3RlUG9zaXRpdmVSc2hhcmVTdW0pKSkubWludXMoY2FsY3VsYXRlQ3VyYXRpb25XZWlnaHRSc2hhcmVzKHJld2FyZFBvb2wscG9zdC52b3RlUG9zaXRpdmVSc2hhcmVTdW0pKS50b0ZpeGVkKDEwLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTil9ZWxzZSBpZih3ZWlnaHQ8MCYmIXJld2FyZFBvb2wuY29uZmlnLmRpc2FibGVEb3dudm90ZSl7dm90ZVJzaGFyZXM9YXBpLkJpZ051bWJlcihzdGFrZSkubXVsdGlwbGllZEJ5KHdlaWdodCkubXVsdGlwbGllZEJ5KHZvdGluZ1Bvd2VyLmRvd252b3RpbmdQb3dlcikuZGl2aWRlZEJ5KDFlNCkuZGl2aWRlZEJ5KDFlNCkudG9GaXhlZCgxMCxhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pLHVzZWREb3dudm90ZVBvd2VyPU1hdGguZmxvb3Iodm90aW5nUG93ZXIuZG93bnZvdGluZ1Bvd2VyKk1hdGguYWJzKHdlaWdodCkqNjAqNjAqMjQvMWU0KTtjb25zdCB1c2VkRG93bnZvdGVQb3dlckRlbm9tPU1hdGguZmxvb3IoODY0ZTYvcmV3YXJkUG9vbC5jb25maWcuZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uKTt1c2VkRG93bnZvdGVQb3dlcj1NYXRoLmZsb29yKCh1c2VkRG93bnZvdGVQb3dlcit1c2VkRG93bnZvdGVQb3dlckRlbm9tLTEpL3VzZWREb3dudm90ZVBvd2VyRGVub20pLHZvdGluZ1Bvd2VyLmRvd252b3RpbmdQb3dlcj1NYXRoLm1heCgwLE1hdGguZmxvb3Iodm90aW5nUG93ZXIuZG93bnZvdGluZ1Bvd2VyLXVzZWREb3dudm90ZVBvd2VyKSl9dm90aW5nUG93ZXIubXV0ZSYmKHZvdGVSc2hhcmVzPSIwIixjdXJhdGlvbldlaWdodD0iMCIpLGF3YWl0IGFwaS5kYi51cGRhdGUoInZvdGluZ1Bvd2VyIix2b3RpbmdQb3dlcik7bGV0IHZvdGU9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInZvdGVzIix7cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxhdXRob3JwZXJtOmF1dGhvcnBlcm0sdm90ZXI6dm90ZXJ9KTtpZih2b3RlKXt2b3RlLnRpbWVzdGFtcD10aW1lc3RhbXAsdm90ZS53ZWlnaHQ9d2VpZ2h0LHZvdGUuY3VyYXRpb25XZWlnaHQ9IjAiO2NvbnN0IG9sZFZvdGVSc2hhcmVzPXZvdGUucnNoYXJlczt2b3RlLnJzaGFyZXM9dm90ZVJzaGFyZXMsdXBkYXRlZFBvc3RSc2hhcmVzPWFwaS5CaWdOdW1iZXIodm90ZVJzaGFyZXMpLm1pbnVzKG9sZFZvdGVSc2hhcmVzKS50b0ZpeGVkKDEwLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksYXdhaXQgYXBpLmRiLnVwZGF0ZSgidm90ZXMiLHZvdGUpO2NvbnN0IHZvdGVMb2c9e3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsc3ltYm9sOnJld2FyZFBvb2wuc3ltYm9sLHJzaGFyZXM6dm90ZVJzaGFyZXN9O3ZvdGluZ1Bvd2VyLm11dGUmJih2b3RlTG9nLm11dGU9ITApLGFwaS5lbWl0KCJ1cGRhdGVWb3RlIix2b3RlTG9nKX1lbHNle3ZvdGU9e3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsc3ltYm9sOnN5bWJvbCxhdXRob3JwZXJtOmF1dGhvcnBlcm0sd2VpZ2h0OndlaWdodCxyc2hhcmVzOnZvdGVSc2hhcmVzLGN1cmF0aW9uV2VpZ2h0OmN1cmF0aW9uV2VpZ2h0LHRpbWVzdGFtcDp0aW1lc3RhbXAsdm90ZXI6dm90ZXJ9LHVwZGF0ZWRQb3N0UnNoYXJlcz12b3RlUnNoYXJlcyxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJ2b3RlcyIsdm90ZSk7Y29uc3Qgdm90ZUxvZz17cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxzeW1ib2w6cmV3YXJkUG9vbC5zeW1ib2wscnNoYXJlczp2b3RlUnNoYXJlc307dm90aW5nUG93ZXIubXV0ZSYmKHZvdGVMb2cubXV0ZT0hMCksYXBpLmVtaXQoIm5ld1ZvdGUiLHZvdGVMb2cpfWNvbnN0IG9sZFBvc3RDbGFpbXM9Y2FsY3VsYXRlV2VpZ2h0UnNoYXJlcyhyZXdhcmRQb29sLHBvc3Qudm90ZVJzaGFyZVN1bSk7aWYocG9zdC52b3RlUnNoYXJlU3VtPWFwaS5CaWdOdW1iZXIocG9zdC52b3RlUnNoYXJlU3VtKS5wbHVzKHVwZGF0ZWRQb3N0UnNoYXJlcykudG9GaXhlZCgxMCxhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pLGFwaS5CaWdOdW1iZXIodXBkYXRlZFBvc3RSc2hhcmVzKS5ndCgwKSYmKHBvc3Qudm90ZVBvc2l0aXZlUnNoYXJlU3VtPWFwaS5CaWdOdW1iZXIocG9zdC52b3RlUG9zaXRpdmVSc2hhcmVTdW0pLnBsdXModXBkYXRlZFBvc3RSc2hhcmVzKS50b0ZpeGVkKDEwLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksdGltZXN0YW1wPHJld2FyZFBvb2wuY3JlYXRlZFRpbWVzdGFtcCsyNCooMipyZXdhcmRQb29sLmNvbmZpZy5jYXNob3V0V2luZG93RGF5cysxKSozNjAwKjFlMykpe2NvbnN0IG5ld1Bvc3RDbGFpbXM9Y2FsY3VsYXRlV2VpZ2h0UnNoYXJlcyhyZXdhcmRQb29sLHBvc3Qudm90ZVJzaGFyZVN1bSk7cmV3YXJkUG9vbC5wZW5kaW5nQ2xhaW1zPWFwaS5CaWdOdW1iZXIocmV3YXJkUG9vbC5wZW5kaW5nQ2xhaW1zKS5wbHVzKG5ld1Bvc3RDbGFpbXMpLm1pbnVzKG9sZFBvc3RDbGFpbXMpLnRvRml4ZWQoMTAsYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJyZXdhcmRQb29scyIscmV3YXJkUG9vbCl9YXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9zdHMiLHBvc3QpfWFjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntpZighMT09PWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cygicmV3YXJkUG9vbHMiKSl7YXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwYXJhbXMiKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInJld2FyZFBvb2xzIixbImNvbmZpZy50YWdzIiwibGFzdENsYWltRGVjYXlUaW1lc3RhbXAiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwb3N0cyIsWyJhdXRob3JwZXJtIix7bmFtZToiYnlDYXNob3V0VGltZSIsaW5kZXg6e3Jld2FyZFBvb2xJZDoxLGNhc2hvdXRUaW1lOjF9fV0se3ByaW1hcnlLZXk6WyJhdXRob3JwZXJtIiwicmV3YXJkUG9vbElkIl19KSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBvc3RNZXRhZGF0YSIsW10se3ByaW1hcnlLZXk6WyJhdXRob3JwZXJtIl19KSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInZvdGVzIixbe25hbWU6ImJ5VGltZXN0YW1wIixpbmRleDp7cmV3YXJkUG9vbElkOjEsYXV0aG9ycGVybToxLHRpbWVzdGFtcDoxfX1dLHtwcmltYXJ5S2V5OlsicmV3YXJkUG9vbElkIiwiYXV0aG9ycGVybSIsInZvdGVyIl19KSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInZvdGluZ1Bvd2VyIixbXSx7cHJpbWFyeUtleTpbInJld2FyZFBvb2xJZCIsImFjY291bnQiXX0pO2NvbnN0IHBhcmFtcz17c2V0dXBGZWU6IjEwMDAiLHVwZGF0ZUZlZToiMjAiLG1heFBvb2xzUGVyUG9zdDoyMCxtYXhUYWdzUGVyUG9vbDo1LG1haW50ZW5hbmNlVG9rZW5zUGVyQmxvY2s6MixsYXN0TWFpbnRlbmFuY2VCbG9jazphcGkuYmxvY2tOdW1iZXIsbWF4UG9zdHNQcm9jZXNzZWRQZXJSb3VuZDoyMCx2b3RlUXVlcnlMaW1pdDoxMDAsbWF4Vm90ZXNQcm9jZXNzZWRQZXJSb3VuZDoxMDAsbGFzdFByb2Nlc3NlZFBvb2xJZDowfTthd2FpdCBhcGkuZGIuaW5zZXJ0KCJwYXJhbXMiLHBhcmFtcyl9fSxhY3Rpb25zLnVwZGF0ZVBhcmFtcz1hc3luYyBwYXlsb2FkPT57aWYoYXBpLnNlbmRlciE9PWFwaS5vd25lcilyZXR1cm47Y29uc3R7c2V0dXBGZWU6c2V0dXBGZWUsdXBkYXRlRmVlOnVwZGF0ZUZlZSxtYWludGVuYW5jZVRva2Vuc1BlckJsb2NrOm1haW50ZW5hbmNlVG9rZW5zUGVyQmxvY2ssbWF4UG9zdHNQcm9jZXNzZWRQZXJSb3VuZDptYXhQb3N0c1Byb2Nlc3NlZFBlclJvdW5kLG1heFZvdGVzUHJvY2Vzc2VkUGVyUm91bmQ6bWF4Vm90ZXNQcm9jZXNzZWRQZXJSb3VuZCx2b3RlUXVlcnlMaW1pdDp2b3RlUXVlcnlMaW1pdH09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pO2lmKHNldHVwRmVlKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHNldHVwRmVlJiYhYXBpLkJpZ051bWJlcihzZXR1cEZlZSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihzZXR1cEZlZSkuZ3RlKDApLCJpbnZhbGlkIHNldHVwRmVlIikpcmV0dXJuO3BhcmFtcy5zZXR1cEZlZT1zZXR1cEZlZX1pZih1cGRhdGVGZWUpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgdXBkYXRlRmVlJiYhYXBpLkJpZ051bWJlcih1cGRhdGVGZWUpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIodXBkYXRlRmVlKS5ndGUoMCksImludmFsaWQgdXBkYXRlRmVlIikpcmV0dXJuO3BhcmFtcy51cGRhdGVGZWU9dXBkYXRlRmVlfWlmKG1haW50ZW5hbmNlVG9rZW5zUGVyQmxvY2spe2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobWFpbnRlbmFuY2VUb2tlbnNQZXJCbG9jaykmJm1haW50ZW5hbmNlVG9rZW5zUGVyQmxvY2s+PTEsImludmFsaWQgbWFpbnRlbmFuY2VUb2tlbnNQZXJCbG9jayIpKXJldHVybjtwYXJhbXMubWFpbnRlbmFuY2VUb2tlbnNQZXJCbG9jaz1tYWludGVuYW5jZVRva2Vuc1BlckJsb2NrfWlmKG1heFBvc3RzUHJvY2Vzc2VkUGVyUm91bmQpe2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobWF4UG9zdHNQcm9jZXNzZWRQZXJSb3VuZCkmJm1heFBvc3RzUHJvY2Vzc2VkUGVyUm91bmQ+PTEsImludmFsaWQgbWF4UG9zdHNQcm9jZXNzZWRQZXJSb3VuZCIpKXJldHVybjtwYXJhbXMubWF4UG9zdHNQcm9jZXNzZWRQZXJSb3VuZD1tYXhQb3N0c1Byb2Nlc3NlZFBlclJvdW5kfWlmKG1heFZvdGVzUHJvY2Vzc2VkUGVyUm91bmQpe2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobWF4Vm90ZXNQcm9jZXNzZWRQZXJSb3VuZCkmJm1heFZvdGVzUHJvY2Vzc2VkUGVyUm91bmQ+PTEsImludmFsaWQgbWF4Vm90ZXNQcm9jZXNzZWRQZXJSb3VuZCIpKXJldHVybjtwYXJhbXMubWF4Vm90ZXNQcm9jZXNzZWRQZXJSb3VuZD1tYXhWb3Rlc1Byb2Nlc3NlZFBlclJvdW5kfWlmKHZvdGVRdWVyeUxpbWl0KXtpZighYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKHZvdGVRdWVyeUxpbWl0KSYmdm90ZVF1ZXJ5TGltaXQ+PTEsImludmFsaWQgdm90ZVF1ZXJ5TGltaXQiKSlyZXR1cm47cGFyYW1zLnZvdGVRdWVyeUxpbWl0PXZvdGVRdWVyeUxpbWl0fWF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIscGFyYW1zKX0sYWN0aW9ucy5jcmVhdGVSZXdhcmRQb29sPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLGNvbmZpZzpjb25maWcsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZighYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwib3BlcmF0aW9uIG11c3QgYmUgc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikpcmV0dXJuO2NvbnN0IHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse3NldHVwRmVlOnNldHVwRmVlLG1heFRhZ3NQZXJQb29sOm1heFRhZ3NQZXJQb29sfT1wYXJhbXMsdXRpbGl0eVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDoiQkVFIn0pLGF1dGhvcml6ZWRDcmVhdGlvbj0hKCFhcGkuQmlnTnVtYmVyKHNldHVwRmVlKS5sdGUoMCkmJmFwaS5zZW5kZXIhPT1hcGkub3duZXIpfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKHNldHVwRmVlKTtpZighYXBpLmFzc2VydChhdXRob3JpemVkQ3JlYXRpb24sInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlIikpcmV0dXJuO2NvbnN0IHRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnN5bWJvbH0pO2lmKCFhcGkuYXNzZXJ0KHRva2VuLCJ0b2tlbiBub3QgZm91bmQiKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoY29uZmlnJiYib2JqZWN0Ij09dHlwZW9mIGNvbmZpZywiY29uZmlnIGludmFsaWQiKSlyZXR1cm47Y29uc3R7cG9zdFJld2FyZEN1cnZlOnBvc3RSZXdhcmRDdXJ2ZSxwb3N0UmV3YXJkQ3VydmVQYXJhbWV0ZXI6cG9zdFJld2FyZEN1cnZlUGFyYW1ldGVyLGN1cmF0aW9uUmV3YXJkQ3VydmU6Y3VyYXRpb25SZXdhcmRDdXJ2ZSxjdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyOmN1cmF0aW9uUmV3YXJkQ3VydmVQYXJhbWV0ZXIsY3VyYXRpb25SZXdhcmRQZXJjZW50YWdlOmN1cmF0aW9uUmV3YXJkUGVyY2VudGFnZSxjYXNob3V0V2luZG93RGF5czpjYXNob3V0V2luZG93RGF5cyxyZXdhcmRQZXJJbnRlcnZhbDpyZXdhcmRQZXJJbnRlcnZhbCxyZXdhcmRJbnRlcnZhbFNlY29uZHM6cmV3YXJkSW50ZXJ2YWxTZWNvbmRzLHZvdGVSZWdlbmVyYXRpb25EYXlzOnZvdGVSZWdlbmVyYXRpb25EYXlzLGRvd252b3RlUmVnZW5lcmF0aW9uRGF5czpkb3dudm90ZVJlZ2VuZXJhdGlvbkRheXMsc3Rha2VkUmV3YXJkUGVyY2VudGFnZTpzdGFrZWRSZXdhcmRQZXJjZW50YWdlLHZvdGVQb3dlckNvbnN1bXB0aW9uOnZvdGVQb3dlckNvbnN1bXB0aW9uLGRvd252b3RlUG93ZXJDb25zdW1wdGlvbjpkb3dudm90ZVBvd2VyQ29uc3VtcHRpb24sdGFnczp0YWdzLGRpc2FibGVEb3dudm90ZTpkaXNhYmxlRG93bnZvdGUsaWdub3JlRGVjbGluZVBheW91dDppZ25vcmVEZWNsaW5lUGF5b3V0LGFwcFRheENvbmZpZzphcHBUYXhDb25maWcsZXhjbHVkZVRhZ3M6ZXhjbHVkZVRhZ3N9PWNvbmZpZztpZighYXBpLmFzc2VydChwb3N0UmV3YXJkQ3VydmUmJiJwb3dlciI9PT1wb3N0UmV3YXJkQ3VydmUsInBvc3RSZXdhcmRDdXJ2ZSBzaG91bGQgYmUgb25lIG9mOiBbcG93ZXJdIikpcmV0dXJuO2NvbnN0IHBvc3RFeHBvbmVudD1hcGkuQmlnTnVtYmVyKHBvc3RSZXdhcmRDdXJ2ZVBhcmFtZXRlcik7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBwb3N0UmV3YXJkQ3VydmVQYXJhbWV0ZXImJnBvc3RFeHBvbmVudC5pc0Zpbml0ZSgpJiZwb3N0RXhwb25lbnQuZ3RlKCIxIikmJnBvc3RFeHBvbmVudC5sdGUoIjIiKSYmcG9zdEV4cG9uZW50LmRwKCk8PTIsJ3Bvc3RSZXdhcmRDdXJ2ZVBhcmFtZXRlciBzaG91bGQgYmUgYmV0d2VlbiAiMSIgYW5kICIyIiB3aXRoIHByZWNpc2lvbiBhdCBtb3N0IDInKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoY3VyYXRpb25SZXdhcmRDdXJ2ZSYmInBvd2VyIj09PWN1cmF0aW9uUmV3YXJkQ3VydmUsImN1cmF0aW9uUmV3YXJkQ3VydmUgc2hvdWxkIGJlIG9uZSBvZjogW3Bvd2VyXSIpKXJldHVybjtjb25zdCBjdXJhdGlvbkV4cG9uZW50PWFwaS5CaWdOdW1iZXIoY3VyYXRpb25SZXdhcmRDdXJ2ZVBhcmFtZXRlcik7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBjdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyJiZjdXJhdGlvbkV4cG9uZW50LmlzRmluaXRlKCkmJmN1cmF0aW9uRXhwb25lbnQuZ3RlKCIwLjUiKSYmY3VyYXRpb25FeHBvbmVudC5sdGUoIjEiKSYmY3VyYXRpb25FeHBvbmVudC5kcCgpPD0yLCdjdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyIGNhbiBvbmx5IGJlIGJldHdlZW4gIjAuNSIgYW5kICIxIiB3aXRoIHByZWNpc2lvbiBhdCBtb3N0IDInKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2UpJiZjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2U+PTAmJmN1cmF0aW9uUmV3YXJkUGVyY2VudGFnZTw9MTAwLCJjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2Ugc2hvdWxkIGJlIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAxMDAiKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoY2FzaG91dFdpbmRvd0RheXMmJk51bWJlci5pc0ludGVnZXIoY2FzaG91dFdpbmRvd0RheXMpJiZjYXNob3V0V2luZG93RGF5cz49MSYmY2FzaG91dFdpbmRvd0RheXM8PTMwLCJjYXNob3V0V2luZG93RGF5cyBzaG91bGQgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDMwIikpcmV0dXJuO2NvbnN0IHBhcnNlZFJld2FyZFBlckludGVydmFsPWFwaS5CaWdOdW1iZXIocmV3YXJkUGVySW50ZXJ2YWwpO2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgcmV3YXJkUGVySW50ZXJ2YWwmJnBhcnNlZFJld2FyZFBlckludGVydmFsLmlzRmluaXRlKCkmJnBhcnNlZFJld2FyZFBlckludGVydmFsLmd0KDApLCJyZXdhcmRQZXJJbnRlcnZhbCBpbnZhbGlkIil8fCFhcGkuYXNzZXJ0KHBhcnNlZFJld2FyZFBlckludGVydmFsLmRwKCk8PXRva2VuLnByZWNpc2lvbiwidG9rZW4gcHJlY2lzaW9uIG1pc21hdGNoIGZvciByZXdhcmRQZXJJbnRlcnZhbCIpKXJldHVybjtpZighYXBpLmFzc2VydChyZXdhcmRJbnRlcnZhbFNlY29uZHMmJk51bWJlci5pc0ludGVnZXIocmV3YXJkSW50ZXJ2YWxTZWNvbmRzKSYmcmV3YXJkSW50ZXJ2YWxTZWNvbmRzPj0zJiZyZXdhcmRJbnRlcnZhbFNlY29uZHM8PTg2NDAwJiZyZXdhcmRJbnRlcnZhbFNlY29uZHMlMz09MCwicmV3YXJkSW50ZXJ2YWxTZWNvbmRzIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMyBhbmQgODY0MDAsIGFuZCBkaXZpc2libGUgYnkgMyIpKXJldHVybjtpZighYXBpLmFzc2VydCh2b3RlUmVnZW5lcmF0aW9uRGF5cyYmTnVtYmVyLmlzSW50ZWdlcih2b3RlUmVnZW5lcmF0aW9uRGF5cykmJnZvdGVSZWdlbmVyYXRpb25EYXlzPj0xJiZ2b3RlUmVnZW5lcmF0aW9uRGF5czw9MzAsInZvdGVSZWdlbmVyYXRpb25EYXlzIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMzAiKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzJiZOdW1iZXIuaXNJbnRlZ2VyKGRvd252b3RlUmVnZW5lcmF0aW9uRGF5cykmJmRvd252b3RlUmVnZW5lcmF0aW9uRGF5cz49MSYmZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzPD0zMCwiZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMzAiKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihzdGFrZWRSZXdhcmRQZXJjZW50YWdlKSYmc3Rha2VkUmV3YXJkUGVyY2VudGFnZT49MCYmc3Rha2VkUmV3YXJkUGVyY2VudGFnZTw9MTAwLCJzdGFrZWRSZXdhcmRQZXJjZW50YWdlIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMTAwIikpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KHZvdGVQb3dlckNvbnN1bXB0aW9uJiZOdW1iZXIuaXNJbnRlZ2VyKHZvdGVQb3dlckNvbnN1bXB0aW9uKSYmdm90ZVBvd2VyQ29uc3VtcHRpb24+PTEmJnZvdGVQb3dlckNvbnN1bXB0aW9uPD0xZTQsInZvdGVQb3dlckNvbnN1bXB0aW9uIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAwMDAiKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uJiZOdW1iZXIuaXNJbnRlZ2VyKGRvd252b3RlUG93ZXJDb25zdW1wdGlvbikmJmRvd252b3RlUG93ZXJDb25zdW1wdGlvbj49MSYmZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uPD0xZTQsImRvd252b3RlUG93ZXJDb25zdW1wdGlvbiBzaG91bGQgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEwMDAwIikpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KEFycmF5LmlzQXJyYXkodGFncykmJnRhZ3MubGVuZ3RoPj0xJiZ0YWdzLmxlbmd0aDw9bWF4VGFnc1BlclBvb2wmJnRhZ3MuZXZlcnkoKHQ9PiJzdHJpbmciPT10eXBlb2YgdCkpLGB0YWdzIHNob3VsZCBiZSBhIG5vbi1lbXB0eSBhcnJheSBvZiBzdHJpbmdzIG9mIGxlbmd0aCBhdCBtb3N0ICR7bWF4VGFnc1BlclBvb2x9YCkpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KCJib29sZWFuIj09dHlwZW9mIGRpc2FibGVEb3dudm90ZSwiZGlzYWJsZURvd252b3RlIHNob3VsZCBiZSBib29sZWFuIikpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KCJib29sZWFuIj09dHlwZW9mIGlnbm9yZURlY2xpbmVQYXlvdXQsImlnbm9yZURlY2xpbmVQYXlvdXQgc2hvdWxkIGJlIGJvb2xlYW4iKSlyZXR1cm47aWYoIWFzc2VydEFwcFRheENvbmZpZ1ZhbGlkKGFwcFRheENvbmZpZykpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KCFleGNsdWRlVGFnc3x8QXJyYXkuaXNBcnJheShleGNsdWRlVGFncykmJmV4Y2x1ZGVUYWdzLmxlbmd0aD49MSYmZXhjbHVkZVRhZ3MubGVuZ3RoPD1tYXhUYWdzUGVyUG9vbCYmZXhjbHVkZVRhZ3MuZXZlcnkoKHQ9PiJzdHJpbmciPT10eXBlb2YgdCkpLGBleGNsdWRlVGFncyBzaG91bGQgYmUgYSBub24tZW1wdHkgYXJyYXkgb2Ygc3RyaW5ncyBvZiBsZW5ndGggYXQgbW9zdCAke21heFRhZ3NQZXJQb29sfWApKXJldHVybjtpZighYXBpLmFzc2VydChhcGkuc2VuZGVyPT09dG9rZW4uaXNzdWVyfHxhcGkuc2VuZGVyPT09YXBpLm93bmVyJiYiQkVFIj09PXRva2VuLnN5bWJvbCwibXVzdCBiZSBpc3N1ZXIgb2YgdG9rZW4iKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQodG9rZW4uc3Rha2luZ0VuYWJsZWQsInRva2VuIG11c3QgaGF2ZSBzdGFraW5nIGVuYWJsZWQiKSlyZXR1cm47Y29uc3QgZXhpc3RpbmdSZXdhcmRQb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJyZXdhcmRQb29scyIse3N5bWJvbDpzeW1ib2x9KTtpZighYXBpLmFzc2VydCghZXhpc3RpbmdSZXdhcmRQb29sLCJjYW5ub3QgY3JlYXRlIG11bHRpcGxlIHJld2FyZCBwb29scyBwZXIgdG9rZW4iKSlyZXR1cm47Y29uc3QgdGltZXN0YW1wPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKS5nZXRUaW1lKCkscmV3YXJkUG9vbD17c3ltYm9sOnN5bWJvbCxyZXdhcmRQb29sOiIwIixsYXN0UmV3YXJkVGltZXN0YW1wOnRpbWVzdGFtcCxsYXN0Q2xhaW1EZWNheVRpbWVzdGFtcDp0aW1lc3RhbXAsY3JlYXRlZFRpbWVzdGFtcDp0aW1lc3RhbXAsY29uZmlnOntwb3N0UmV3YXJkQ3VydmU6cG9zdFJld2FyZEN1cnZlLHBvc3RSZXdhcmRDdXJ2ZVBhcmFtZXRlcjpwb3N0UmV3YXJkQ3VydmVQYXJhbWV0ZXIsY3VyYXRpb25SZXdhcmRDdXJ2ZTpjdXJhdGlvblJld2FyZEN1cnZlLGN1cmF0aW9uUmV3YXJkQ3VydmVQYXJhbWV0ZXI6Y3VyYXRpb25SZXdhcmRDdXJ2ZVBhcmFtZXRlcixjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2U6Y3VyYXRpb25SZXdhcmRQZXJjZW50YWdlLGNhc2hvdXRXaW5kb3dEYXlzOmNhc2hvdXRXaW5kb3dEYXlzLHJld2FyZFBlckludGVydmFsOnJld2FyZFBlckludGVydmFsLHJld2FyZEludGVydmFsU2Vjb25kczpyZXdhcmRJbnRlcnZhbFNlY29uZHMsdm90ZVJlZ2VuZXJhdGlvbkRheXM6dm90ZVJlZ2VuZXJhdGlvbkRheXMsZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzOmRvd252b3RlUmVnZW5lcmF0aW9uRGF5cyxzdGFrZWRSZXdhcmRQZXJjZW50YWdlOnN0YWtlZFJld2FyZFBlcmNlbnRhZ2Usdm90ZVBvd2VyQ29uc3VtcHRpb246dm90ZVBvd2VyQ29uc3VtcHRpb24sZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uOmRvd252b3RlUG93ZXJDb25zdW1wdGlvbix0YWdzOnRhZ3MsZGlzYWJsZURvd252b3RlOmRpc2FibGVEb3dudm90ZSxpZ25vcmVEZWNsaW5lUGF5b3V0Omlnbm9yZURlY2xpbmVQYXlvdXQsYXBwVGF4Q29uZmlnOmFwcFRheENvbmZpZyxleGNsdWRlVGFnczpleGNsdWRlVGFnc30scGVuZGluZ0NsYWltczoiMCIsYWN0aXZlOiEwfSxpbnNlcnRlZFJld2FyZFBvb2w9YXdhaXQgYXBpLmRiLmluc2VydCgicmV3YXJkUG9vbHMiLHJld2FyZFBvb2wpO2FwaS5zZW5kZXIhPT1hcGkub3duZXImJmFwaS5CaWdOdW1iZXIoc2V0dXBGZWUpLmd0KDApJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDoiQkVFIixxdWFudGl0eTpzZXR1cEZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSksYXBpLmVtaXQoImNyZWF0ZVJld2FyZFBvb2wiLHtfaWQ6aW5zZXJ0ZWRSZXdhcmRQb29sLl9pZH0pfSxhY3Rpb25zLnVwZGF0ZVJld2FyZFBvb2w9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsY29uZmlnOmNvbmZpZyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJvcGVyYXRpb24gbXVzdCBiZSBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSlyZXR1cm47Y29uc3QgcGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7dXBkYXRlRmVlOnVwZGF0ZUZlZSxtYXhUYWdzUGVyUG9vbDptYXhUYWdzUGVyUG9vbH09cGFyYW1zLHV0aWxpdHlUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6IkJFRSJ9KSxhdXRob3JpemVkPSEoIWFwaS5CaWdOdW1iZXIodXBkYXRlRmVlKS5sdGUoMCkmJmFwaS5zZW5kZXIhPT1hcGkub3duZXIpfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKHVwZGF0ZUZlZSk7aWYoIWFwaS5hc3NlcnQoYXV0aG9yaXplZCwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSB1cGRhdGUgZmVlIikpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KGNvbmZpZyYmIm9iamVjdCI9PXR5cGVvZiBjb25maWcsImNvbmZpZyBpbnZhbGlkIikpcmV0dXJuO2NvbnN0e3Bvc3RSZXdhcmRDdXJ2ZTpwb3N0UmV3YXJkQ3VydmUscG9zdFJld2FyZEN1cnZlUGFyYW1ldGVyOnBvc3RSZXdhcmRDdXJ2ZVBhcmFtZXRlcixjdXJhdGlvblJld2FyZEN1cnZlOmN1cmF0aW9uUmV3YXJkQ3VydmUsY3VyYXRpb25SZXdhcmRDdXJ2ZVBhcmFtZXRlcjpjdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyLGN1cmF0aW9uUmV3YXJkUGVyY2VudGFnZTpjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2UsY2FzaG91dFdpbmRvd0RheXM6Y2FzaG91dFdpbmRvd0RheXMscmV3YXJkUGVySW50ZXJ2YWw6cmV3YXJkUGVySW50ZXJ2YWwscmV3YXJkSW50ZXJ2YWxTZWNvbmRzOnJld2FyZEludGVydmFsU2Vjb25kcyx2b3RlUmVnZW5lcmF0aW9uRGF5czp2b3RlUmVnZW5lcmF0aW9uRGF5cyxkb3dudm90ZVJlZ2VuZXJhdGlvbkRheXM6ZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzLHN0YWtlZFJld2FyZFBlcmNlbnRhZ2U6c3Rha2VkUmV3YXJkUGVyY2VudGFnZSx2b3RlUG93ZXJDb25zdW1wdGlvbjp2b3RlUG93ZXJDb25zdW1wdGlvbixkb3dudm90ZVBvd2VyQ29uc3VtcHRpb246ZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uLHRhZ3M6dGFncyxkaXNhYmxlRG93bnZvdGU6ZGlzYWJsZURvd252b3RlLGlnbm9yZURlY2xpbmVQYXlvdXQ6aWdub3JlRGVjbGluZVBheW91dCxhcHBUYXhDb25maWc6YXBwVGF4Q29uZmlnLGV4Y2x1ZGVUYWdzOmV4Y2x1ZGVUYWdzfT1jb25maWcsZXhpc3RpbmdSZXdhcmRQb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJyZXdhcmRQb29scyIse19pZDpyZXdhcmRQb29sSWR9KTtpZighYXBpLmFzc2VydChleGlzdGluZ1Jld2FyZFBvb2wsInJld2FyZCBwb29sIG5vdCBmb3VuZCIpKXJldHVybjtjb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpleGlzdGluZ1Jld2FyZFBvb2wuc3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQocG9zdFJld2FyZEN1cnZlJiYicG93ZXIiPT09cG9zdFJld2FyZEN1cnZlLCJwb3N0UmV3YXJkQ3VydmUgc2hvdWxkIGJlIG9uZSBvZjogW3Bvd2VyXSIpKXJldHVybjtleGlzdGluZ1Jld2FyZFBvb2wuY29uZmlnLnBvc3RSZXdhcmRDdXJ2ZT1wb3N0UmV3YXJkQ3VydmU7Y29uc3QgcG9zdEV4cG9uZW50PWFwaS5CaWdOdW1iZXIocG9zdFJld2FyZEN1cnZlUGFyYW1ldGVyKTtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHBvc3RSZXdhcmRDdXJ2ZVBhcmFtZXRlciYmcG9zdEV4cG9uZW50LmlzRmluaXRlKCkmJnBvc3RFeHBvbmVudC5ndGUoIjEiKSYmcG9zdEV4cG9uZW50Lmx0ZSgiMiIpJiZwb3N0RXhwb25lbnQuZHAoKTw9MiwncG9zdFJld2FyZEN1cnZlUGFyYW1ldGVyIHNob3VsZCBiZSBiZXR3ZWVuICIxIiBhbmQgIjIiIHdpdGggcHJlY2lzaW9uIGF0IG1vc3QgMicpKXJldHVybjtpZihleGlzdGluZ1Jld2FyZFBvb2wuY29uZmlnLnBvc3RSZXdhcmRDdXJ2ZVBhcmFtZXRlcj1wb3N0UmV3YXJkQ3VydmVQYXJhbWV0ZXIsIWFwaS5hc3NlcnQoY3VyYXRpb25SZXdhcmRDdXJ2ZSYmInBvd2VyIj09PWN1cmF0aW9uUmV3YXJkQ3VydmUsImN1cmF0aW9uUmV3YXJkQ3VydmUgc2hvdWxkIGJlIG9uZSBvZjogW3Bvd2VyXSIpKXJldHVybjtjb25zdCBjdXJhdGlvbkV4cG9uZW50PWFwaS5CaWdOdW1iZXIoY3VyYXRpb25SZXdhcmRDdXJ2ZVBhcmFtZXRlcik7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBjdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyJiZjdXJhdGlvbkV4cG9uZW50LmlzRmluaXRlKCkmJmN1cmF0aW9uRXhwb25lbnQuZ3RlKCIwLjUiKSYmY3VyYXRpb25FeHBvbmVudC5sdGUoIjEiKSYmY3VyYXRpb25FeHBvbmVudC5kcCgpPD0yLCdjdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyIGNhbiBvbmx5IGJlIGJldHdlZW4gIjAuNSIgYW5kICIxIiB3aXRoIHByZWNpc2lvbiBhdCBtb3N0IDInKSlyZXR1cm47aWYoZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy5jdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyPWN1cmF0aW9uUmV3YXJkQ3VydmVQYXJhbWV0ZXIsIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2UpJiZjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2U+PTAmJmN1cmF0aW9uUmV3YXJkUGVyY2VudGFnZTw9MTAwLCJjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2Ugc2hvdWxkIGJlIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAxMDAiKSlyZXR1cm47aWYoZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy5jdXJhdGlvblJld2FyZFBlcmNlbnRhZ2U9Y3VyYXRpb25SZXdhcmRQZXJjZW50YWdlLCFhcGkuYXNzZXJ0KGNhc2hvdXRXaW5kb3dEYXlzJiZOdW1iZXIuaXNJbnRlZ2VyKGNhc2hvdXRXaW5kb3dEYXlzKSYmY2FzaG91dFdpbmRvd0RheXM+PTEmJmNhc2hvdXRXaW5kb3dEYXlzPD0zMCwiY2FzaG91dFdpbmRvd0RheXMgc2hvdWxkIGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAzMCIpKXJldHVybjtleGlzdGluZ1Jld2FyZFBvb2wuY29uZmlnLmNhc2hvdXRXaW5kb3dEYXlzPWNhc2hvdXRXaW5kb3dEYXlzO2NvbnN0IHBhcnNlZFJld2FyZFBlckludGVydmFsPWFwaS5CaWdOdW1iZXIocmV3YXJkUGVySW50ZXJ2YWwpO2FwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiByZXdhcmRQZXJJbnRlcnZhbCYmcGFyc2VkUmV3YXJkUGVySW50ZXJ2YWwuaXNGaW5pdGUoKSYmcGFyc2VkUmV3YXJkUGVySW50ZXJ2YWwuZ3QoMCksInJld2FyZFBlckludGVydmFsIGludmFsaWQiKSYmYXBpLmFzc2VydChwYXJzZWRSZXdhcmRQZXJJbnRlcnZhbC5kcCgpPD10b2tlbi5wcmVjaXNpb24sInRva2VuIHByZWNpc2lvbiBtaXNtYXRjaCBmb3IgcmV3YXJkUGVySW50ZXJ2YWwiKSYmKGV4aXN0aW5nUmV3YXJkUG9vbC5jb25maWcucmV3YXJkUGVySW50ZXJ2YWw9cmV3YXJkUGVySW50ZXJ2YWwsYXBpLmFzc2VydChyZXdhcmRJbnRlcnZhbFNlY29uZHMmJk51bWJlci5pc0ludGVnZXIocmV3YXJkSW50ZXJ2YWxTZWNvbmRzKSYmcmV3YXJkSW50ZXJ2YWxTZWNvbmRzPj0zJiZyZXdhcmRJbnRlcnZhbFNlY29uZHM8PTg2NDAwJiZyZXdhcmRJbnRlcnZhbFNlY29uZHMlMz09MCwicmV3YXJkSW50ZXJ2YWxTZWNvbmRzIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMyBhbmQgODY0MDAsIGFuZCBkaXZpc2libGUgYnkgMyIpJiYoZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy5yZXdhcmRJbnRlcnZhbFNlY29uZHM9cmV3YXJkSW50ZXJ2YWxTZWNvbmRzLGFwaS5hc3NlcnQodm90ZVJlZ2VuZXJhdGlvbkRheXMmJk51bWJlci5pc0ludGVnZXIodm90ZVJlZ2VuZXJhdGlvbkRheXMpJiZ2b3RlUmVnZW5lcmF0aW9uRGF5cz49MSYmdm90ZVJlZ2VuZXJhdGlvbkRheXM8PTMwLCJ2b3RlUmVnZW5lcmF0aW9uRGF5cyBzaG91bGQgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDMwIikmJihleGlzdGluZ1Jld2FyZFBvb2wuY29uZmlnLnZvdGVSZWdlbmVyYXRpb25EYXlzPXZvdGVSZWdlbmVyYXRpb25EYXlzLGFwaS5hc3NlcnQoZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzJiZOdW1iZXIuaXNJbnRlZ2VyKGRvd252b3RlUmVnZW5lcmF0aW9uRGF5cykmJmRvd252b3RlUmVnZW5lcmF0aW9uRGF5cz49MSYmZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzPD0zMCwiZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMzAiKSYmKGV4aXN0aW5nUmV3YXJkUG9vbC5jb25maWcuZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzPWRvd252b3RlUmVnZW5lcmF0aW9uRGF5cyxhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIoc3Rha2VkUmV3YXJkUGVyY2VudGFnZSkmJnN0YWtlZFJld2FyZFBlcmNlbnRhZ2U+PTAmJnN0YWtlZFJld2FyZFBlcmNlbnRhZ2U8PTEwMCwic3Rha2VkUmV3YXJkUGVyY2VudGFnZSBzaG91bGQgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDEwMCIpJiYoZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy5zdGFrZWRSZXdhcmRQZXJjZW50YWdlPXN0YWtlZFJld2FyZFBlcmNlbnRhZ2UsYXBpLmFzc2VydCh2b3RlUG93ZXJDb25zdW1wdGlvbiYmTnVtYmVyLmlzSW50ZWdlcih2b3RlUG93ZXJDb25zdW1wdGlvbikmJnZvdGVQb3dlckNvbnN1bXB0aW9uPj0xJiZ2b3RlUG93ZXJDb25zdW1wdGlvbjw9MWU0LCJ2b3RlUG93ZXJDb25zdW1wdGlvbiBzaG91bGQgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEwMDAwIikmJihleGlzdGluZ1Jld2FyZFBvb2wuY29uZmlnLnZvdGVQb3dlckNvbnN1bXB0aW9uPXZvdGVQb3dlckNvbnN1bXB0aW9uLGFwaS5hc3NlcnQoZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uJiZOdW1iZXIuaXNJbnRlZ2VyKGRvd252b3RlUG93ZXJDb25zdW1wdGlvbikmJmRvd252b3RlUG93ZXJDb25zdW1wdGlvbj49MSYmZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uPD0xZTQsImRvd252b3RlUG93ZXJDb25zdW1wdGlvbiBzaG91bGQgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEwMDAwIikmJihleGlzdGluZ1Jld2FyZFBvb2wuY29uZmlnLmRvd252b3RlUG93ZXJDb25zdW1wdGlvbj1kb3dudm90ZVBvd2VyQ29uc3VtcHRpb24sYXBpLmFzc2VydChBcnJheS5pc0FycmF5KHRhZ3MpJiZ0YWdzLmxlbmd0aD49MSYmdGFncy5sZW5ndGg8PW1heFRhZ3NQZXJQb29sJiZ0YWdzLmV2ZXJ5KCh0PT4ic3RyaW5nIj09dHlwZW9mIHQpKSxgdGFncyBzaG91bGQgYmUgYSBub24tZW1wdHkgYXJyYXkgb2Ygc3RyaW5ncyBvZiBsZW5ndGggYXQgbW9zdCAke21heFRhZ3NQZXJQb29sfWApJiYoZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy50YWdzPXRhZ3MsYXBpLmFzc2VydCgiYm9vbGVhbiI9PXR5cGVvZiBkaXNhYmxlRG93bnZvdGUsImRpc2FibGVEb3dudm90ZSBzaG91bGQgYmUgYm9vbGVhbiIpJiYoZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy5kaXNhYmxlRG93bnZvdGU9ZGlzYWJsZURvd252b3RlLGFwaS5hc3NlcnQoImJvb2xlYW4iPT10eXBlb2YgaWdub3JlRGVjbGluZVBheW91dCwiaWdub3JlRGVjbGluZVBheW91dCBzaG91bGQgYmUgYm9vbGVhbiIpJiYoZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy5pZ25vcmVEZWNsaW5lUGF5b3V0PWlnbm9yZURlY2xpbmVQYXlvdXQsYXNzZXJ0QXBwVGF4Q29uZmlnVmFsaWQoYXBwVGF4Q29uZmlnKSYmKGV4aXN0aW5nUmV3YXJkUG9vbC5jb25maWcuYXBwVGF4Q29uZmlnPWFwcFRheENvbmZpZyxhcGkuYXNzZXJ0KCFleGNsdWRlVGFnc3x8QXJyYXkuaXNBcnJheShleGNsdWRlVGFncykmJmV4Y2x1ZGVUYWdzLmxlbmd0aD49MSYmZXhjbHVkZVRhZ3MubGVuZ3RoPD1tYXhUYWdzUGVyUG9vbCYmZXhjbHVkZVRhZ3MuZXZlcnkoKHQ9PiJzdHJpbmciPT10eXBlb2YgdCkpLGBleGNsdWRlVGFncyBzaG91bGQgYmUgYSBub24tZW1wdHkgYXJyYXkgb2Ygc3RyaW5ncyBvZiBsZW5ndGggYXQgbW9zdCAke21heFRhZ3NQZXJQb29sfWApJiYoZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy5leGNsdWRlVGFncz1leGNsdWRlVGFncyxhcGkuYXNzZXJ0KGFwaS5zZW5kZXI9PT10b2tlbi5pc3N1ZXJ8fGFwaS5zZW5kZXI9PT1hcGkub3duZXImJiJCRUUiPT09dG9rZW4uc3ltYm9sLCJtdXN0IGJlIGlzc3VlciBvZiB0b2tlbiIpJiYoYXBpLnNlbmRlciE9PWFwaS5vd25lciYmYXBpLkJpZ051bWJlcih1cGRhdGVGZWUpLmd0KDApJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDoiQkVFIixxdWFudGl0eTp1cGRhdGVGZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pLGF3YWl0IGFwaS5kYi51cGRhdGUoInJld2FyZFBvb2xzIixleGlzdGluZ1Jld2FyZFBvb2wpKSkpKSkpKSkpKSkpKX0sYWN0aW9ucy5zZXRBY3RpdmU9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsYWN0aXZlOmFjdGl2ZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJvcGVyYXRpb24gbXVzdCBiZSBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSlyZXR1cm47Y29uc3QgZXhpc3RpbmdSZXdhcmRQb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJyZXdhcmRQb29scyIse19pZDpyZXdhcmRQb29sSWR9KTtpZighYXBpLmFzc2VydChleGlzdGluZ1Jld2FyZFBvb2wsInJld2FyZCBwb29sIG5vdCBmb3VuZCIpKXJldHVybjtjb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpleGlzdGluZ1Jld2FyZFBvb2wuc3ltYm9sfSk7YXBpLmFzc2VydChhcGkuc2VuZGVyPT09dG9rZW4uaXNzdWVyfHxhcGkuc2VuZGVyPT09YXBpLm93bmVyLCJtdXN0IGJlIGlzc3VlciBvZiB0b2tlbiIpJiYoZXhpc3RpbmdSZXdhcmRQb29sLmFjdGl2ZT1hY3RpdmUsYXdhaXQgYXBpLmRiLnVwZGF0ZSgicmV3YXJkUG9vbHMiLGV4aXN0aW5nUmV3YXJkUG9vbCkpfSxhY3Rpb25zLnNldE11dGU9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsYWNjb3VudDphY2NvdW50LG11dGU6bXV0ZX09cGF5bG9hZCxleGlzdGluZ1Jld2FyZFBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInJld2FyZFBvb2xzIix7X2lkOnJld2FyZFBvb2xJZH0pO2lmKCFhcGkuYXNzZXJ0KGV4aXN0aW5nUmV3YXJkUG9vbCwicmV3YXJkIHBvb2wgbm90IGZvdW5kIikpcmV0dXJuO2NvbnN0IHRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmV4aXN0aW5nUmV3YXJkUG9vbC5zeW1ib2x9KTtpZighYXBpLmFzc2VydChhcGkuc2VuZGVyPT09dG9rZW4uaXNzdWVyfHxhcGkuc2VuZGVyPT09YXBpLm93bmVyLCJtdXN0IGJlIGlzc3VlciBvZiB0b2tlbiIpKXJldHVybjtpZighYXBpLmFzc2VydChhcGkuaXNWYWxpZEFjY291bnROYW1lKGFjY291bnQpLCJpbnZhbGlkIGFjY291bnQiKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoImJvb2xlYW4iPT10eXBlb2YgbXV0ZSwibXV0ZSBtdXN0IGJlIGEgYm9vbGVhbiIpKXJldHVybjtjb25zdCB2b3RpbmdQb3dlcj1hd2FpdCBhcGkuZGIuZmluZE9uZSgidm90aW5nUG93ZXIiLHtyZXdhcmRQb29sSWQ6cmV3YXJkUG9vbElkLGFjY291bnQ6YWNjb3VudH0pO2lmKHZvdGluZ1Bvd2VyKXZvdGluZ1Bvd2VyLm11dGU9bXV0ZSxhd2FpdCBhcGkuZGIudXBkYXRlKCJ2b3RpbmdQb3dlciIsdm90aW5nUG93ZXIpO2Vsc2V7Y29uc3QgbmV3Vm90aW5nUG93ZXI9e3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsYWNjb3VudDphY2NvdW50LGxhc3RWb3RlVGltZXN0YW1wOm5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKS5nZXRUaW1lKCksdm90aW5nUG93ZXI6MWU0LGRvd252b3RpbmdQb3dlcjoxZTQsbXV0ZTptdXRlfTthd2FpdCBhcGkuZGIuaW5zZXJ0KCJ2b3RpbmdQb3dlciIsbmV3Vm90aW5nUG93ZXIpfX0sYWN0aW9ucy5yZXNldFBvb2w9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZighYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwib3BlcmF0aW9uIG11c3QgYmUgc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikpcmV0dXJuO2NvbnN0IGV4aXN0aW5nUmV3YXJkUG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicmV3YXJkUG9vbHMiLHtfaWQ6cmV3YXJkUG9vbElkfSk7aWYoIWFwaS5hc3NlcnQoZXhpc3RpbmdSZXdhcmRQb29sLCJyZXdhcmQgcG9vbCBub3QgZm91bmQiKSlyZXR1cm47Y29uc3QgdG9rZW49YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6ZXhpc3RpbmdSZXdhcmRQb29sLnN5bWJvbH0pO2lmKCFhcGkuYXNzZXJ0KGFwaS5zZW5kZXI9PT10b2tlbi5pc3N1ZXJ8fGFwaS5zZW5kZXI9PT1hcGkub3duZXIsIm11c3QgYmUgaXNzdWVyIG9mIHRva2VuIikpcmV0dXJuO2NvbnN0IHRpbWVzdGFtcD1uZXcgRGF0ZShgJHthcGkuaGl2ZUJsb2NrVGltZXN0YW1wfS4wMDBaYCkuZ2V0VGltZSgpO2V4aXN0aW5nUmV3YXJkUG9vbC5yZXdhcmRQb29sPSIwIixleGlzdGluZ1Jld2FyZFBvb2wubGFzdFJld2FyZFRpbWVzdGFtcD10aW1lc3RhbXAsZXhpc3RpbmdSZXdhcmRQb29sLmxhc3RDbGFpbURlY2F5VGltZXN0YW1wPXRpbWVzdGFtcCxleGlzdGluZ1Jld2FyZFBvb2wuY3JlYXRlZFRpbWVzdGFtcD10aW1lc3RhbXAsZXhpc3RpbmdSZXdhcmRQb29sLnBlbmRpbmdDbGFpbXM9IjAiLGF3YWl0IGFwaS5kYi51cGRhdGUoInJld2FyZFBvb2xzIixleGlzdGluZ1Jld2FyZFBvb2wpfSxhY3Rpb25zLmNvbW1lbnQ9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2F1dGhvcjphdXRob3IscGVybWxpbms6cGVybWxpbmsscmV3YXJkUG9vbHM6cmV3YXJkUG9vbHN9PXBheWxvYWQ7aWYoIWFwaS5hc3NlcnQoIm51bGwiPT09YXBpLnNlbmRlciwiYWN0aW9uIG11c3QgdXNlIGNvbW1lbnQgb3BlcmF0aW9uIikpcmV0dXJuO2lmKGF3YWl0IHRva2VuTWFpbnRlbmFuY2UoKSwhYXBpLmFzc2VydCghcmV3YXJkUG9vbHN8fEFycmF5LmlzQXJyYXkocmV3YXJkUG9vbHMpJiZyZXdhcmRQb29scy5ldmVyeSgocnA9Pk51bWJlci5pc0ludGVnZXIocnApKSksInJld2FyZFBvb2xzIG11c3QgYmUgYW4gYXJyYXkgb2YgaW50ZWdlcnMiKSlyZXR1cm47Y29uc3QgcmV3YXJkUG9vbElkcz1hd2FpdCBnZXRSZXdhcmRQb29sSWRzKHBheWxvYWQpLGF1dGhvcnBlcm09YEAke2F1dGhvcn0vJHtwZXJtbGlua31gO2lmKGF3YWl0IGFwaS5kYi5maW5kT25lKCJwb3N0TWV0YWRhdGEiLHthdXRob3JwZXJtOmF1dGhvcnBlcm19KSlyZXR1cm47aWYoYXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvc3RzIix7YXV0aG9ycGVybTphdXRob3JwZXJtfSkpcmV0dXJuO2F3YWl0IGFwaS5kYi5pbnNlcnQoInBvc3RNZXRhZGF0YSIse2F1dGhvcnBlcm06YXV0aG9ycGVybSxyZXdhcmRQb29sSWRzOnJld2FyZFBvb2xJZHN9KTtjb25zdCB0aW1lc3RhbXA9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApLmdldFRpbWUoKTtmb3IobGV0IGk9MDtpPHJld2FyZFBvb2xJZHMubGVuZ3RoO2krPTEpe2NvbnN0IHJld2FyZFBvb2xJZD1yZXdhcmRQb29sSWRzW2ldLHJld2FyZFBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInJld2FyZFBvb2xzIix7X2lkOnJld2FyZFBvb2xJZH0pO2lmKHJld2FyZFBvb2wmJnJld2FyZFBvb2wuYWN0aXZlKXtjb25zdCBjYXNob3V0VGltZT10aW1lc3RhbXArMjQqcmV3YXJkUG9vbC5jb25maWcuY2FzaG91dFdpbmRvd0RheXMqMzYwMCoxZTMscG9zdD17cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxzeW1ib2w6cmV3YXJkUG9vbC5zeW1ib2wsYXV0aG9ycGVybTphdXRob3JwZXJtLGF1dGhvcjphdXRob3IsY3JlYXRlZDp0aW1lc3RhbXAsY2FzaG91dFRpbWU6Y2FzaG91dFRpbWUsdm90ZVBvc2l0aXZlUnNoYXJlU3VtOiIwIix2b3RlUnNoYXJlU3VtOiIwIn07aWYocGF5bG9hZC5qc29uTWV0YWRhdGEmJnBheWxvYWQuanNvbk1ldGFkYXRhLmFwcCl7Y29uc3QgYXBwU3RyaW5nPXBheWxvYWQuanNvbk1ldGFkYXRhLmFwcDsic3RyaW5nIj09dHlwZW9mIGFwcFN0cmluZyYmKHBvc3QuYXBwPWFwcFN0cmluZy5zcGxpdCgiLyIpWzBdLnRvTG93ZXJDYXNlKCkpfWF3YWl0IGFwaS5kYi5pbnNlcnQoInBvc3RzIixwb3N0KSxhcGkuZW1pdCgibmV3Q29tbWVudCIse3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsc3ltYm9sOnJld2FyZFBvb2wuc3ltYm9sfSl9fX0sYWN0aW9ucy5jb21tZW50T3B0aW9ucz1hc3luYyBwYXlsb2FkPT57Y29uc3R7YXV0aG9yOmF1dGhvcixwZXJtbGluazpwZXJtbGluayxtYXhBY2NlcHRlZFBheW91dDptYXhBY2NlcHRlZFBheW91dCxiZW5lZmljaWFyaWVzOmJlbmVmaWNpYXJpZXN9PXBheWxvYWQ7aWYoIWFwaS5hc3NlcnQoIm51bGwiPT09YXBpLnNlbmRlciwiYWN0aW9uIG11c3QgdXNlIGNvbW1lbnRPcHRpb25zIG9wZXJhdGlvbiIpKXJldHVybjtjb25zdCBhdXRob3JwZXJtPWBAJHthdXRob3J9LyR7cGVybWxpbmt9YCxleGlzdGluZ1Bvc3RzPWF3YWl0IGFwaS5kYi5maW5kKCJwb3N0cyIse2F1dGhvcnBlcm06YXV0aG9ycGVybX0pO2lmKCFleGlzdGluZ1Bvc3RzKXJldHVybjtjb25zdCBkZWNsaW5lUGF5b3V0PW1heEFjY2VwdGVkUGF5b3V0LnN0YXJ0c1dpdGgoIjAuMDAwIik7Zm9yKGxldCBpPTA7aTxleGlzdGluZ1Bvc3RzLmxlbmd0aDtpKz0xKXtjb25zdCBwb3N0PWV4aXN0aW5nUG9zdHNbaV07KGF3YWl0IGFwaS5kYi5maW5kT25lKCJyZXdhcmRQb29scyIse19pZDpwb3N0LnJld2FyZFBvb2xJZH0pKS5jb25maWcuaWdub3JlRGVjbGluZVBheW91dHx8KHBvc3QuZGVjbGluZVBheW91dD1kZWNsaW5lUGF5b3V0KSxwb3N0LmJlbmVmaWNpYXJpZXM9YmVuZWZpY2lhcmllcyxhd2FpdCBhcGkuZGIudXBkYXRlKCJwb3N0cyIscG9zdCl9fSxhY3Rpb25zLnZvdGU9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3ZvdGVyOnZvdGVyLGF1dGhvcjphdXRob3IscGVybWxpbms6cGVybWxpbmssd2VpZ2h0OndlaWdodH09cGF5bG9hZDtpZighYXBpLmFzc2VydCgibnVsbCI9PT1hcGkuc2VuZGVyLCJjYW4gb25seSB2b3RlIHdpdGggdm90aW5nIG9wIikpcmV0dXJuO2lmKGF3YWl0IHRva2VuTWFpbnRlbmFuY2UoKSwhYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKHdlaWdodCkmJndlaWdodD49LTFlNCYmd2VpZ2h0PD0xZTQsIndlaWdodCBtdXN0IGJlIGFuIGludGVnZXIgZnJvbSAtMTAwMDAgdG8gMTAwMDAiKSlyZXR1cm47Y29uc3QgdGltZXN0YW1wPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKS5nZXRUaW1lKCksYXV0aG9ycGVybT1gQCR7YXV0aG9yfS8ke3Blcm1saW5rfWAscG9zdHM9YXdhaXQgYXBpLmRiLmZpbmQoInBvc3RzIix7YXV0aG9ycGVybTphdXRob3JwZXJtfSwxZTMsMCxbe2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7aWYocG9zdHMpZm9yKGxldCBpPTA7aTxwb3N0cy5sZW5ndGg7aSs9MSl7Y29uc3QgcG9zdD1wb3N0c1tpXTthd2FpdCBwcm9jZXNzVm90ZShwb3N0LHZvdGVyLHdlaWdodCx0aW1lc3RhbXApfX07" } }}

{ "id": "ssc-testnet-hive", "json": { "contractName":"contract", "contractAction":"update", "contractPayload": { "name": "roles", "params": "", "code": "Y29uc3QgQ29udHJhY3ROYW1lPSJyb2xlcyIsRmVlTWV0aG9kPVsiYnVybiIsImlzc3VlciJdO2FzeW5jIGZ1bmN0aW9uIHVwZGF0ZUNhbmRpZGF0ZVdlaWdodChpZCxkZWx0YUFwcHJvdmFsV2VpZ2h0LGRlbHRhVG9rZW49bnVsbCl7Y29uc3QgY2FuZGlkYXRlPWF3YWl0IGFwaS5kYi5maW5kT25lKCJjYW5kaWRhdGVzIix7X2lkOmlkfSk7aWYoY2FuZGlkYXRlKXtpZihkZWx0YVRva2VuKXtjb25zdCByb2xlPWF3YWl0IGFwaS5kYi5maW5kT25lKCJyb2xlcyIse19pZDpjYW5kaWRhdGUucm9sZUlkfSk7aWYoKGF3YWl0IGFwaS5kYi5maW5kT25lKCJpbnN0YW5jZXMiLHtfaWQ6cm9sZS5pbnN0YW5jZUlkfSkpLnZvdGVUb2tlbiE9PWRlbHRhVG9rZW4uc3ltYm9sKXJldHVybiEwfWNhbmRpZGF0ZS5hcHByb3ZhbFdlaWdodD17JG51bWJlckRlY2ltYWw6YXBpLkJpZ051bWJlcihjYW5kaWRhdGUuYXBwcm92YWxXZWlnaHQuJG51bWJlckRlY2ltYWwpLnBsdXMoZGVsdGFBcHByb3ZhbFdlaWdodCl9LGF3YWl0IGFwaS5kYi51cGRhdGUoImNhbmRpZGF0ZXMiLGNhbmRpZGF0ZSk7Y29uc3Qgcm9sZT1hd2FpdCBhcGkuZGIuZmluZE9uZSgicm9sZXMiLHtfaWQ6Y2FuZGlkYXRlLnJvbGVJZH0pO3JldHVybiByb2xlLnRvdGFsQXBwcm92YWxXZWlnaHQ9eyRudW1iZXJEZWNpbWFsOmFwaS5CaWdOdW1iZXIocm9sZS50b3RhbEFwcHJvdmFsV2VpZ2h0LiRudW1iZXJEZWNpbWFsKS5wbHVzKGRlbHRhQXBwcm92YWxXZWlnaHQpfSxhd2FpdCBhcGkuZGIudXBkYXRlKCJyb2xlcyIscm9sZSksITB9cmV0dXJuITF9YXN5bmMgZnVuY3Rpb24gdXBkYXRlVG9rZW5CYWxhbmNlcyhyb2xlLHRva2VuLHF1YW50aXR5KXtjb25zdCB1cFJvbGU9cm9sZTtpZih1cFJvbGUudG9rZW5CYWxhbmNlcyl7Y29uc3QgdEluZGV4PXVwUm9sZS50b2tlbkJhbGFuY2VzLmZpbmRJbmRleCgodD0+dC5zeW1ib2w9PT10b2tlbi5zeW1ib2wpKTstMT09PXRJbmRleD91cFJvbGUudG9rZW5CYWxhbmNlcy5wdXNoKHtzeW1ib2w6dG9rZW4uc3ltYm9sLHF1YW50aXR5OnF1YW50aXR5fSk6dXBSb2xlLnRva2VuQmFsYW5jZXNbdEluZGV4XS5xdWFudGl0eT1hcGkuQmlnTnVtYmVyKHVwUm9sZS50b2tlbkJhbGFuY2VzW3RJbmRleF0ucXVhbnRpdHkpLnBsdXMocXVhbnRpdHkpLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTil9ZWxzZSB1cFJvbGUudG9rZW5CYWxhbmNlcz1be3N5bWJvbDp0b2tlbi5zeW1ib2wscXVhbnRpdHk6cXVhbnRpdHl9XTthd2FpdCBhcGkuZGIudXBkYXRlKCJyb2xlcyIsdXBSb2xlKX1hc3luYyBmdW5jdGlvbiBwYXlSZWNpcGllbnQoYWNjb3VudCxzeW1ib2wscXVhbnRpdHksdHlwZT0idXNlciIsY29udHJhY3RQYXlsb2FkPW51bGwpe2lmKGFwaS5CaWdOdW1iZXIocXVhbnRpdHkpLmd0KDApKXtjb25zdCByZXM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKGFjY291bnQsc3ltYm9sLHF1YW50aXR5LHR5cGUpO3JldHVybiJjb250cmFjdCI9PT10eXBlJiZjb250cmFjdFBheWxvYWQmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdChhY2NvdW50LCJyZWNlaXZlUm9sZXNUb2tlbnMiLHtkYXRhOmNvbnRyYWN0UGF5bG9hZCxzeW1ib2w6c3ltYm9sLHF1YW50aXR5OnF1YW50aXR5fSksIXJlcy5lcnJvcnN8fChhcGkuZGVidWcoYEVycm9yIHBheWluZyBvdXQgcm9sZXMgb2YgJHtxdWFudGl0eX0gJHtzeW1ib2x9IHRvICR7YWNjb3VudH0gKFRYSUQgJHthcGkudHJhbnNhY3Rpb25JZH0pOiBcbiR7cmVzLmVycm9yc31gKSwhMSl9cmV0dXJuITF9YXN5bmMgZnVuY3Rpb24gY2hlY2tQZW5kaW5nQ2FuZGlkYXRlcyhpbnN0LHBhcmFtcyl7Y29uc3QgcmFuZG9tPWFwaS5yYW5kb20oKSxibG9ja0RhdGU9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApLHVwSW5zdD1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGluc3QpKSx2b3RlVG9rZW5PYmo9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6aW5zdC52b3RlVG9rZW59KSx2b3RlVG9rZW5NaW5WYWx1ZT1hcGkuQmlnTnVtYmVyKDEpLmRpdmlkZWRCeShhcGkuQmlnTnVtYmVyKDEwKS5wb3codm90ZVRva2VuT2JqLnByZWNpc2lvbikpLGluc3RUaWNrVGltZT1hcGkuQmlnTnVtYmVyKGJsb2NrRGF0ZS5nZXRUaW1lKCkpLm1pbnVzKDM2MDAqcGFyYW1zLmluc3RhbmNlVGlja0hvdXJzKjFlMykudG9OdW1iZXIoKTtsZXQgcm9sZXNQcm9jZXNzZWQ9MDtjb25zdCBwZW5kaW5nUm9sZXM9YXdhaXQgYXBpLmRiLmZpbmQoInJvbGVzIix7aW5zdGFuY2VJZDppbnN0LmlkLGFjdGl2ZTohMCwidG9rZW5CYWxhbmNlcy4wIjp7JGV4aXN0czohMH0sbGFzdFRpY2tUaW1lOnskbHRlOmluc3RUaWNrVGltZX19LHBhcmFtcy5tYXhSb2xlc1BlckJsb2NrLDAsW3tpbmRleDoiYnlMYXN0VGlja1RpbWUiLGRlc2NlbmRpbmc6ITF9LHtpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8cGVuZGluZ1JvbGVzLmxlbmd0aDtpKz0xKXtjb25zdCByb2xlPXBlbmRpbmdSb2xlc1tpXSxmdW5kZWQ9W10scGF5VG9rZW5zPXJvbGUudG9rZW5CYWxhbmNlcy5maWx0ZXIoKHQ9PmFwaS5CaWdOdW1iZXIodC5xdWFudGl0eSkuZ3QoMCkpKSx0b3RhbFNsb3RzPWFwaS5CaWdOdW1iZXIocm9sZS5tYWluU2xvdHMpLnBsdXMocm9sZS5iYWNrdXBTbG90cykudG9OdW1iZXIoKSxyb2xlVGlja1RpbWU9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS5taW51cygzNjAwKnJvbGUudGlja0hvdXJzKjFlMykudG9OdW1iZXIoKTtpZihyb2xlLmxhc3RUaWNrVGltZTw9cm9sZVRpY2tUaW1lKXtpZihwYXlUb2tlbnMubGVuZ3RoPjApe2xldCBvZmZzZXQ9MCxjYW5kaWRhdGVzPWF3YWl0IGFwaS5kYi5maW5kKCJjYW5kaWRhdGVzIix7cm9sZUlkOnJvbGUuX2lkLGFjdGl2ZTohMCxhcHByb3ZhbFdlaWdodDp7JGd0OnskbnVtYmVyRGVjaW1hbDphcGkuQmlnTnVtYmVyKHJvbGUudm90ZVRocmVzaG9sZCl9fX0scGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0LG9mZnNldCxbe2luZGV4OiJieUFwcHJvdmFsV2VpZ2h0IixkZXNjZW5kaW5nOiEwfSx7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKSxhY2NXZWlnaHQ9MCxiYWNrdXBXZWlnaHQ9bnVsbDtkb3tmb3IobGV0IGo9MDtqPGNhbmRpZGF0ZXMubGVuZ3RoO2orPTEpe2NvbnN0IGNhbmRpZGF0ZT1jYW5kaWRhdGVzW2pdO2lmKGZ1bmRlZC5sZW5ndGg+PXJvbGUubWFpblNsb3RzJiZudWxsPT09YmFja3VwV2VpZ2h0JiYoYmFja3VwV2VpZ2h0PWFwaS5CaWdOdW1iZXIoYWNjV2VpZ2h0KS5wbHVzKHZvdGVUb2tlbk1pblZhbHVlKS5wbHVzKGFwaS5CaWdOdW1iZXIocm9sZS50b3RhbEFwcHJvdmFsV2VpZ2h0LiRudW1iZXJEZWNpbWFsKS5taW51cyhhY2NXZWlnaHQpLnRpbWVzKHJhbmRvbSkpLnRvRml4ZWQodm90ZVRva2VuT2JqLnByZWNpc2lvbixhcGkuQmlnTnVtYmVyLlJPVU5EX0hBTEZfVVApKSxhY2NXZWlnaHQ9YXBpLkJpZ051bWJlcihhY2NXZWlnaHQpLnBsdXMoY2FuZGlkYXRlLmFwcHJvdmFsV2VpZ2h0LiRudW1iZXJEZWNpbWFsKS50b0ZpeGVkKHZvdGVUb2tlbk9iai5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9IQUxGX1VQKSwhMD09PWNhbmRpZGF0ZS5hY3RpdmUmJihmdW5kZWQubGVuZ3RoPHJvbGUubWFpblNsb3RzfHxhcGkuQmlnTnVtYmVyKGJhY2t1cFdlaWdodCkubHRlKGFjY1dlaWdodCkpJiZmdW5kZWQucHVzaCh7Y2FuZGlkYXRlOmNhbmRpZGF0ZS5faWQsYWNjb3VudDpjYW5kaWRhdGUuYWNjb3VudH0pLGZ1bmRlZC5sZW5ndGg+PXRvdGFsU2xvdHMpYnJlYWt9ZnVuZGVkLmxlbmd0aDx0b3RhbFNsb3RzJiYob2Zmc2V0Kz1wYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQsY2FuZGlkYXRlcz1hd2FpdCBhcGkuZGIuZmluZCgiY2FuZGlkYXRlcyIse3JvbGVJZDpyb2xlLl9pZCxhY3RpdmU6ITAsYXBwcm92YWxXZWlnaHQ6eyRndDp7JG51bWJlckRlY2ltYWw6YXBpLkJpZ051bWJlcihyb2xlLnZvdGVUaHJlc2hvbGQpfX19LHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCxvZmZzZXQsW3tpbmRleDoiYnlBcHByb3ZhbFdlaWdodCIsZGVzY2VuZGluZzohMH0se2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSkpfXdoaWxlKGNhbmRpZGF0ZXMubGVuZ3RoPjAmJmZ1bmRlZC5sZW5ndGg8dG90YWxTbG90cyk7Zm9yKGxldCBsPTA7bDxwYXlUb2tlbnMubGVuZ3RoO2wrPTEpe2NvbnN0IHBheVRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnBheVRva2Vuc1tsXS5zeW1ib2x9KSxwYXlvdXRRdHk9YXBpLkJpZ051bWJlcihwYXlUb2tlbnNbbF0ucXVhbnRpdHkpLmRpdmlkZWRCeSh0b3RhbFNsb3RzKS50b0ZpeGVkKHBheVRva2VuLnByZWNpc2lvbixhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pO2lmKGFwaS5CaWdOdW1iZXIocGF5b3V0UXR5KS5ndCgwKSlmb3IobGV0IGs9MDtrPGZ1bmRlZC5sZW5ndGg7ays9MSl7Y29uc3QgZnVuZD1mdW5kZWRba107aWYoYXdhaXQgcGF5UmVjaXBpZW50KGZ1bmQuYWNjb3VudCxwYXlUb2tlbnNbbF0uc3ltYm9sLHBheW91dFF0eSkpe2NvbnN0IHRiSW5kZXg9cm9sZS50b2tlbkJhbGFuY2VzLmZpbmRJbmRleCgoYj0+Yi5zeW1ib2w9PT1wYXlUb2tlbnNbbF0uc3ltYm9sKSk7cm9sZS50b2tlbkJhbGFuY2VzW3RiSW5kZXhdLnF1YW50aXR5PWFwaS5CaWdOdW1iZXIocm9sZS50b2tlbkJhbGFuY2VzW3RiSW5kZXhdLnF1YW50aXR5KS5taW51cyhwYXlvdXRRdHkpLnRvRml4ZWQocGF5VG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksYXBpLmVtaXQoInJvbGVQYXltZW50Iix7aW5zdGFuY2VJZDppbnN0LmlkLHJvbGVJZDpyb2xlLl9pZCxhY2NvdW50OmZ1bmQuYWNjb3VudCxzeW1ib2w6cGF5VG9rZW5zW2xdLnN5bWJvbCxxdWFudGl0eTpwYXlvdXRRdHl9KX19fX1yb2xlc1Byb2Nlc3NlZCs9MTtjb25zdCB1cFJvbGU9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyb2xlKSk7dXBSb2xlLmxhc3RUaWNrVGltZT1ibG9ja0RhdGUuZ2V0VGltZSgpLGF3YWl0IGFwaS5kYi51cGRhdGUoInJvbGVzIix1cFJvbGUpfX0wPT09cm9sZXNQcm9jZXNzZWQmJih1cEluc3QubGFzdFRpY2tUaW1lPWJsb2NrRGF0ZS5nZXRUaW1lKCksYXdhaXQgYXBpLmRiLnVwZGF0ZSgiaW5zdGFuY2VzIix1cEluc3QpKX1hY3Rpb25zLmNyZWF0ZVNTQz1hc3luYygpPT57aWYoITE9PT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoImluc3RhbmNlcyIpKXthd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoImluc3RhbmNlcyIsWyJpZCIsImxhc3RUaWNrVGltZSJdKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInJvbGVzIixbImluc3RhbmNlSWQiLHtuYW1lOiJieUxhc3RUaWNrVGltZSIsaW5kZXg6e2luc3RhbmNlSWQ6MSxhY3RpdmU6MSxsYXN0VGlja1RpbWU6MX19XSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJjYW5kaWRhdGVzIixbImFjY291bnQiLHtuYW1lOiJieUFjY291bnRSb2xlIixpbmRleDp7cm9sZUlkOjEsYWNjb3VudDoxfX0se25hbWU6ImJ5QXBwcm92YWxXZWlnaHQiLGluZGV4Ontyb2xlSWQ6MSxhcHByb3ZhbFdlaWdodDoxLGFjdGl2ZToxfX1dKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoImFwcHJvdmFscyIsWyJmcm9tIiwidG8iXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJhY2NvdW50cyIsW10se3ByaW1hcnlLZXk6WyJhY2NvdW50Il19KSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBhcmFtcyIpO2NvbnN0IHBhcmFtcz17aW5zdGFuY2VDcmVhdGlvbkZlZToiNTAwIixpbnN0YW5jZVVwZGF0ZUZlZToiMTAwIixpbnN0YW5jZVRpY2tIb3VyczoiMjQiLHJvbGVDcmVhdGlvbkZlZToiNTAiLHJvbGVVcGRhdGVGZWU6IjI1IixtYXhTbG90czoxMCxtYXhJbnN0YW5jZXNQZXJCbG9jazoxLG1heFJvbGVzUGVyQmxvY2s6NCxtYXhBY2NvdW50QXBwcm92YWxzOjUwLHByb2Nlc3NRdWVyeUxpbWl0OjFlM307YXdhaXQgYXBpLmRiLmluc2VydCgicGFyYW1zIixwYXJhbXMpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2luc3RhbmNlQ3JlYXRpb25GZWU6aW5zdGFuY2VDcmVhdGlvbkZlZSxpbnN0YW5jZVVwZGF0ZUZlZTppbnN0YW5jZVVwZGF0ZUZlZSxpbnN0YW5jZVRpY2tIb3VyczppbnN0YW5jZVRpY2tIb3Vycyxyb2xlQ3JlYXRpb25GZWU6cm9sZUNyZWF0aW9uRmVlLHJvbGVVcGRhdGVGZWU6cm9sZVVwZGF0ZUZlZSxtYXhTbG90czptYXhTbG90cyxtYXhJbnN0YW5jZXNQZXJCbG9jazptYXhJbnN0YW5jZXNQZXJCbG9jayxtYXhSb2xlc1BlckJsb2NrOm1heFJvbGVzUGVyQmxvY2ssbWF4QWNjb3VudEFwcHJvdmFsczptYXhBY2NvdW50QXBwcm92YWxzLHByb2Nlc3NRdWVyeUxpbWl0OnByb2Nlc3NRdWVyeUxpbWl0fT1wYXlsb2FkO2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2NvbnN0IHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7aWYoaW5zdGFuY2VDcmVhdGlvbkZlZSl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBpbnN0YW5jZUNyZWF0aW9uRmVlJiYhYXBpLkJpZ051bWJlcihpbnN0YW5jZUNyZWF0aW9uRmVlKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGluc3RhbmNlQ3JlYXRpb25GZWUpLmd0ZSgwKSwiaW52YWxpZCBpbnN0YW5jZUNyZWF0aW9uRmVlIikpcmV0dXJuO3BhcmFtcy5pbnN0YW5jZUNyZWF0aW9uRmVlPWluc3RhbmNlQ3JlYXRpb25GZWV9aWYoaW5zdGFuY2VVcGRhdGVGZWUpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgaW5zdGFuY2VVcGRhdGVGZWUmJiFhcGkuQmlnTnVtYmVyKGluc3RhbmNlVXBkYXRlRmVlKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGluc3RhbmNlVXBkYXRlRmVlKS5ndGUoMCksImludmFsaWQgaW5zdGFuY2VVcGRhdGVGZWUiKSlyZXR1cm47cGFyYW1zLmluc3RhbmNlVXBkYXRlRmVlPWluc3RhbmNlVXBkYXRlRmVlfWlmKGluc3RhbmNlVGlja0hvdXJzKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIGluc3RhbmNlVGlja0hvdXJzJiZhcGkuQmlnTnVtYmVyKGluc3RhbmNlVGlja0hvdXJzKS5pc0ludGVnZXIoKSYmYXBpLkJpZ051bWJlcihpbnN0YW5jZVRpY2tIb3VycykuZ3RlKDEpLCJpbnZhbGlkIGluc3RhbmNlVGlja0hvdXJzIikpcmV0dXJuO3BhcmFtcy5pbnN0YW5jZVRpY2tIb3Vycz1pbnN0YW5jZVRpY2tIb3Vyc31pZihyb2xlQ3JlYXRpb25GZWUpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2Ygcm9sZUNyZWF0aW9uRmVlJiYhYXBpLkJpZ051bWJlcihyb2xlQ3JlYXRpb25GZWUpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIocm9sZUNyZWF0aW9uRmVlKS5ndGUoMCksImludmFsaWQgcm9sZUNyZWF0aW9uRmVlIikpcmV0dXJuO3BhcmFtcy5yb2xlQ3JlYXRpb25GZWU9cm9sZUNyZWF0aW9uRmVlfWlmKHJvbGVVcGRhdGVGZWUpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2Ygcm9sZVVwZGF0ZUZlZSYmIWFwaS5CaWdOdW1iZXIocm9sZVVwZGF0ZUZlZSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihyb2xlVXBkYXRlRmVlKS5ndGUoMCksImludmFsaWQgcm9sZVVwZGF0ZUZlZSIpKXJldHVybjtwYXJhbXMucm9sZVVwZGF0ZUZlZT1yb2xlVXBkYXRlRmVlfWlmKG1heFNsb3RzKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIG1heFNsb3RzJiZhcGkuQmlnTnVtYmVyKG1heFNsb3RzKS5pc0ludGVnZXIoKSYmYXBpLkJpZ051bWJlcihtYXhTbG90cykuZ3RlKDEpLCJpbnZhbGlkIG1heFNsb3RzIikpcmV0dXJuO3BhcmFtcy5tYXhTbG90cz1hcGkuQmlnTnVtYmVyKG1heFNsb3RzKS50b051bWJlcigpfWlmKG1heEluc3RhbmNlc1BlckJsb2NrKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIG1heEluc3RhbmNlc1BlckJsb2NrJiZhcGkuQmlnTnVtYmVyKG1heEluc3RhbmNlc1BlckJsb2NrKS5pc0ludGVnZXIoKSYmYXBpLkJpZ051bWJlcihtYXhJbnN0YW5jZXNQZXJCbG9jaykuZ3RlKDEpLCJpbnZhbGlkIG1heEluc3RhbmNlc1BlckJsb2NrIikpcmV0dXJuO3BhcmFtcy5tYXhJbnN0YW5jZXNQZXJCbG9jaz1hcGkuQmlnTnVtYmVyKG1heEluc3RhbmNlc1BlckJsb2NrKS50b051bWJlcigpfWlmKG1heFJvbGVzUGVyQmxvY2spe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgbWF4Um9sZXNQZXJCbG9jayYmYXBpLkJpZ051bWJlcihtYXhSb2xlc1BlckJsb2NrKS5pc0ludGVnZXIoKSYmYXBpLkJpZ051bWJlcihtYXhSb2xlc1BlckJsb2NrKS5ndGUoMSksImludmFsaWQgbWF4Um9sZXNQZXJCbG9jayIpKXJldHVybjtwYXJhbXMubWF4Um9sZXNQZXJCbG9jaz1hcGkuQmlnTnVtYmVyKG1heFJvbGVzUGVyQmxvY2spLnRvTnVtYmVyKCl9aWYobWF4QWNjb3VudEFwcHJvdmFscyl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBtYXhBY2NvdW50QXBwcm92YWxzJiZhcGkuQmlnTnVtYmVyKG1heEFjY291bnRBcHByb3ZhbHMpLmlzSW50ZWdlcigpJiZhcGkuQmlnTnVtYmVyKG1heEFjY291bnRBcHByb3ZhbHMpLmd0ZSgxKSwiaW52YWxpZCBtYXhBY2NvdW50QXBwcm92YWxzIikpcmV0dXJuO3BhcmFtcy5tYXhBY2NvdW50QXBwcm92YWxzPWFwaS5CaWdOdW1iZXIobWF4QWNjb3VudEFwcHJvdmFscykudG9OdW1iZXIoKX1pZihwcm9jZXNzUXVlcnlMaW1pdCl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBwcm9jZXNzUXVlcnlMaW1pdCYmYXBpLkJpZ051bWJlcihwcm9jZXNzUXVlcnlMaW1pdCkuaXNJbnRlZ2VyKCkmJmFwaS5CaWdOdW1iZXIocHJvY2Vzc1F1ZXJ5TGltaXQpLmd0ZSgxKSwiaW52YWxpZCBwcm9jZXNzUXVlcnlMaW1pdCIpKXJldHVybjtwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQ9YXBpLkJpZ051bWJlcihwcm9jZXNzUXVlcnlMaW1pdCkudG9OdW1iZXIoKX1hd2FpdCBhcGkuZGIudXBkYXRlKCJwYXJhbXMiLHBhcmFtcyl9LGFjdGlvbnMuY3JlYXRlSW5zdGFuY2U9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3ZvdGVUb2tlbjp2b3RlVG9rZW4sY2FuZGlkYXRlRmVlOmNhbmRpZGF0ZUZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2luc3RhbmNlQ3JlYXRpb25GZWU6aW5zdGFuY2VDcmVhdGlvbkZlZX09cGFyYW1zLHV0aWxpdHlUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6IkJFRSJ9KSxhdXRob3JpemVkQ3JlYXRpb249ISghYXBpLkJpZ051bWJlcihpbnN0YW5jZUNyZWF0aW9uRmVlKS5sdGUoMCkmJmFwaS5zZW5kZXIhPT1hcGkub3duZXIpfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKGluc3RhbmNlQ3JlYXRpb25GZWUpO2lmKGFwaS5hc3NlcnQoYXV0aG9yaXplZENyZWF0aW9uLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIGNyZWF0aW9uIGZlZSIpJiZhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSB0cmFuc2FjdGlvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSl7aWYoY2FuZGlkYXRlRmVlKXtpZighYXBpLmFzc2VydCgib2JqZWN0Ij09dHlwZW9mIGNhbmRpZGF0ZUZlZSYmInN0cmluZyI9PXR5cGVvZiBjYW5kaWRhdGVGZWUubWV0aG9kJiYtMSE9PUZlZU1ldGhvZC5pbmRleE9mKGNhbmRpZGF0ZUZlZS5tZXRob2QpJiYic3RyaW5nIj09dHlwZW9mIGNhbmRpZGF0ZUZlZS5zeW1ib2wmJiJzdHJpbmciPT10eXBlb2YgY2FuZGlkYXRlRmVlLmFtb3VudCYmYXBpLkJpZ051bWJlcihjYW5kaWRhdGVGZWUuYW1vdW50KS5ndGUoMCksImludmFsaWQgY2FuZGlkYXRlRmVlIHByb3BlcnRpZXMiKSlyZXR1cm47Y29uc3QgZmVlVG9rZW5PYmo9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6Y2FuZGlkYXRlRmVlLnN5bWJvbH0pO2lmKCFhcGkuYXNzZXJ0KGZlZVRva2VuT2JqJiZhcGkuQmlnTnVtYmVyKGNhbmRpZGF0ZUZlZS5hbW91bnQpLmRwKCk8PWZlZVRva2VuT2JqLnByZWNpc2lvbiwiaW52YWxpZCBjYW5kaWRhdGVGZWUgdG9rZW4gb3IgcHJlY2lzaW9uIikpcmV0dXJufWNvbnN0IHZvdGVUb2tlbk9iaj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDp2b3RlVG9rZW59KTtpZighYXBpLmFzc2VydCh2b3RlVG9rZW5PYmomJnZvdGVUb2tlbk9iai5zdGFraW5nRW5hYmxlZCwidm90ZVRva2VuIG11c3QgaGF2ZSBzdGFraW5nIGVuYWJsZWQiKSlyZXR1cm47Y29uc3Qgbm93PW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKSxuZXdJbnN0YW5jZT17dm90ZVRva2VuOnZvdGVUb2tlbixjYW5kaWRhdGVGZWU6Y2FuZGlkYXRlRmVlLGFjdGl2ZTohMSxjcmVhdG9yOmFwaS5zZW5kZXIsbGFzdFRpY2tUaW1lOm5vdy5nZXRUaW1lKCl9LGluc2VydGVkSW5zdD1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJpbnN0YW5jZXMiLG5ld0luc3RhbmNlKTthcGkuc2VuZGVyIT09YXBpLm93bmVyJiYibnVsbCIhPT1hcGkuc2VuZGVyJiZhcGkuQmlnTnVtYmVyKGluc3RhbmNlQ3JlYXRpb25GZWUpLmd0KDApJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDoiQkVFIixxdWFudGl0eTppbnN0YW5jZUNyZWF0aW9uRmVlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KSxhcGkuZW1pdCgiY3JlYXRlSW5zdGFuY2UiLHtpZDppbnNlcnRlZEluc3QuX2lkfSl9fSxhY3Rpb25zLnVwZGF0ZUluc3RhbmNlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtpbnN0YW5jZUlkOmluc3RhbmNlSWQsY2FuZGlkYXRlRmVlOmNhbmRpZGF0ZUZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2luc3RhbmNlVXBkYXRlRmVlOmluc3RhbmNlVXBkYXRlRmVlfT1wYXJhbXMsdXRpbGl0eVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDoiQkVFIn0pLGF1dGhvcml6ZWRVcGRhdGU9ISghYXBpLkJpZ051bWJlcihpbnN0YW5jZVVwZGF0ZUZlZSkubHRlKDApJiZhcGkuc2VuZGVyIT09YXBpLm93bmVyKXx8dXRpbGl0eVRva2VuQmFsYW5jZSYmYXBpLkJpZ051bWJlcih1dGlsaXR5VG9rZW5CYWxhbmNlLmJhbGFuY2UpLmd0ZShpbnN0YW5jZVVwZGF0ZUZlZSk7aWYoYXBpLmFzc2VydChhdXRob3JpemVkVXBkYXRlLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIHVwZGF0ZSBmZWUiKSYmYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgdHJhbnNhY3Rpb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBpbnN0YW5jZUlkJiZhcGkuQmlnTnVtYmVyKGluc3RhbmNlSWQpLmlzSW50ZWdlcigpLCJpbnZhbGlkIGluc3RhbmNlSWQiKSYmYXBpLmFzc2VydChjYW5kaWRhdGVGZWUsInNwZWNpZnkgYXQgbGVhc3Qgb25lIGZpZWxkIHRvIHVwZGF0ZSIpKXtjb25zdCBleGlzdGluZ0luc3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImluc3RhbmNlcyIse19pZDphcGkuQmlnTnVtYmVyKGluc3RhbmNlSWQpLnRvTnVtYmVyKCl9KTtpZighYXBpLmFzc2VydChleGlzdGluZ0luc3QsImluc3RhbmNlIG5vdCBmb3VuZCIpfHwhYXBpLmFzc2VydChleGlzdGluZ0luc3QuY3JlYXRvcj09PWFwaS5zZW5kZXJ8fGFwaS5vd25lcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgaW5zdGFuY2UgY3JlYXRvciIpKXJldHVybjtpZihjYW5kaWRhdGVGZWUpe2lmKCFhcGkuYXNzZXJ0KCJvYmplY3QiPT10eXBlb2YgY2FuZGlkYXRlRmVlJiYic3RyaW5nIj09dHlwZW9mIGNhbmRpZGF0ZUZlZS5tZXRob2QmJi0xIT09RmVlTWV0aG9kLmluZGV4T2YoY2FuZGlkYXRlRmVlLm1ldGhvZCkmJiJzdHJpbmciPT10eXBlb2YgY2FuZGlkYXRlRmVlLnN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBjYW5kaWRhdGVGZWUuYW1vdW50JiZhcGkuQmlnTnVtYmVyKGNhbmRpZGF0ZUZlZS5hbW91bnQpLmd0ZSgwKSwiaW52YWxpZCBjYW5kaWRhdGVGZWUgb2JqZWN0IikpcmV0dXJuO2NvbnN0IGZlZVRva2VuT2JqPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmNhbmRpZGF0ZUZlZS5zeW1ib2x9KTtpZighYXBpLmFzc2VydChmZWVUb2tlbk9iaiYmYXBpLkJpZ051bWJlcihjYW5kaWRhdGVGZWUuYW1vdW50KS5kcCgpPD1mZWVUb2tlbk9iai5wcmVjaXNpb24sImludmFsaWQgY2FuZGlkYXRlRmVlIHRva2VuIG9yIHByZWNpc2lvbiIpKXJldHVybjtleGlzdGluZ0luc3QuY2FuZGlkYXRlRmVlPWNhbmRpZGF0ZUZlZX1hd2FpdCBhcGkuZGIudXBkYXRlKCJpbnN0YW5jZXMiLGV4aXN0aW5nSW5zdCksYXBpLnNlbmRlciE9PWFwaS5vd25lciYmIm51bGwiIT09YXBpLnNlbmRlciYmYXBpLkJpZ051bWJlcihpbnN0YW5jZVVwZGF0ZUZlZSkuZ3QoMCkmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5Omluc3RhbmNlVXBkYXRlRmVlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KSxhcGkuZW1pdCgidXBkYXRlSW5zdGFuY2UiLHtpZDppbnN0YW5jZUlkfSl9fSxhY3Rpb25zLmNyZWF0ZVJvbGVzPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtpbnN0YW5jZUlkOmluc3RhbmNlSWQscm9sZXM6cm9sZXMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtyb2xlQ3JlYXRpb25GZWU6cm9sZUNyZWF0aW9uRmVlfT1wYXJhbXMsdXRpbGl0eVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDoiQkVFIn0pLGF1dGhvcml6ZWRDcmVhdGlvbj0hKCFhcGkuQmlnTnVtYmVyKHJvbGVDcmVhdGlvbkZlZSkubHRlKDApJiZhcGkuc2VuZGVyIT09YXBpLm93bmVyKXx8dXRpbGl0eVRva2VuQmFsYW5jZSYmYXBpLkJpZ051bWJlcih1dGlsaXR5VG9rZW5CYWxhbmNlLmJhbGFuY2UpLmd0ZShyb2xlQ3JlYXRpb25GZWUpO2lmKGFwaS5hc3NlcnQoYXV0aG9yaXplZENyZWF0aW9uLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIGNyZWF0aW9uIGZlZSIpJiZhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSB0cmFuc2FjdGlvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIGluc3RhbmNlSWQmJmFwaS5CaWdOdW1iZXIoaW5zdGFuY2VJZCkuaXNJbnRlZ2VyKCksImludmFsaWQgaW5zdGFuY2VJZCIpJiZhcGkuYXNzZXJ0KCJvYmplY3QiPT10eXBlb2Ygcm9sZXMmJkFycmF5LmlzQXJyYXkocm9sZXMpJiZyb2xlcy5sZW5ndGg+MCYmcm9sZXMubGVuZ3RoPD01MCwiaW52YWxpZCByb2xlcyBvYmplY3QiKSl7Y29uc3QgZXhpc3RpbmdJbnN0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJpbnN0YW5jZXMiLHtfaWQ6YXBpLkJpZ051bWJlcihpbnN0YW5jZUlkKS50b051bWJlcigpfSk7aWYoIWFwaS5hc3NlcnQoZXhpc3RpbmdJbnN0LCJpbnN0YW5jZSBub3QgZm91bmQiKXx8IWFwaS5hc3NlcnQoZXhpc3RpbmdJbnN0LmNyZWF0b3I9PT1hcGkuc2VuZGVyfHxhcGkub3duZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIGluc3RhbmNlIGNyZWF0b3IiKSlyZXR1cm47Y29uc3Qgdm90ZVRva2VuT2JqPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmV4aXN0aW5nSW5zdC52b3RlVG9rZW59KTtmb3IobGV0IGk9MDtpPHJvbGVzLmxlbmd0aDtpKz0xKXtjb25zdCByb2xlPXJvbGVzW2ldO2lmKCFhcGkuYXNzZXJ0KDU9PT1PYmplY3Qua2V5cyhyb2xlKS5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2Ygcm9sZS5uYW1lJiZyb2xlLm5hbWUubGVuZ3RoPDUwJiYic3RyaW5nIj09dHlwZW9mIHJvbGUudm90ZVRocmVzaG9sZCYmYXBpLkJpZ051bWJlcihyb2xlLnZvdGVUaHJlc2hvbGQpLmd0ZSgwKSYmYXBpLkJpZ051bWJlcihyb2xlLnZvdGVUaHJlc2hvbGQpLmRwKCk8PXZvdGVUb2tlbk9iai5wcmVjaXNpb24mJiJzdHJpbmciPT10eXBlb2Ygcm9sZS5tYWluU2xvdHMmJmFwaS5CaWdOdW1iZXIocm9sZS5tYWluU2xvdHMpLmlzSW50ZWdlcigpJiZhcGkuQmlnTnVtYmVyKHJvbGUubWFpblNsb3RzKS5ndCgwKSYmYXBpLkJpZ051bWJlcihyb2xlLm1haW5TbG90cykubHRlKHBhcmFtcy5tYXhTbG90cykmJiJzdHJpbmciPT10eXBlb2Ygcm9sZS5iYWNrdXBTbG90cyYmYXBpLkJpZ051bWJlcihyb2xlLmJhY2t1cFNsb3RzKS5pc0ludGVnZXIoKSYmYXBpLkJpZ051bWJlcihyb2xlLmJhY2t1cFNsb3RzKS5ndGUoMCkmJmFwaS5CaWdOdW1iZXIocm9sZS5iYWNrdXBTbG90cykubHRlKGFwaS5CaWdOdW1iZXIocGFyYW1zLm1heFNsb3RzKS5taW51cyhyb2xlLm1haW5TbG90cykpJiYic3RyaW5nIj09dHlwZW9mIHJvbGUudGlja0hvdXJzJiZhcGkuQmlnTnVtYmVyKHJvbGUudGlja0hvdXJzKS5pc0ludGVnZXIoKSYmYXBpLkJpZ051bWJlcihyb2xlLnRpY2tIb3VycykuZ3RlKHBhcmFtcy5pbnN0YW5jZVRpY2tIb3VycykmJmFwaS5CaWdOdW1iZXIocm9sZS50aWNrSG91cnMpLm1vZChwYXJhbXMuaW5zdGFuY2VUaWNrSG91cnMpLmVxKDApLCJpbnZhbGlkIHJvbGVzIHByb3BlcnRpZXMiKSlyZXR1cm59Y29uc3QgaW5zZXJ0ZWRSb2xlcz1bXTtmb3IobGV0IGk9MDtpPHJvbGVzLmxlbmd0aDtpKz0xKXtjb25zdCBuZXdSb2xlPXtpbnN0YW5jZUlkOmV4aXN0aW5nSW5zdC5faWQsLi4ucm9sZXNbaV0sYWN0aXZlOiEwLGxhc3RUaWNrVGltZTowLHRvdGFsQXBwcm92YWxXZWlnaHQ6eyRudW1iZXJEZWNpbWFsOiIwIn19LGluc2VydGVkUm9sZT1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJyb2xlcyIsbmV3Um9sZSk7aW5zZXJ0ZWRSb2xlcy5wdXNoKHtpbnN0YW5jZUlkOmluc2VydGVkUm9sZS5pbnN0YW5jZUlkLHJvbGVJZDppbnNlcnRlZFJvbGUuX2lkLG5hbWU6aW5zZXJ0ZWRSb2xlLm5hbWV9KX1hcGkuc2VuZGVyIT09YXBpLm93bmVyJiYibnVsbCIhPT1hcGkuc2VuZGVyJiZhcGkuQmlnTnVtYmVyKHJvbGVDcmVhdGlvbkZlZSkuZ3QoMCkmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OnJvbGVDcmVhdGlvbkZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSksYXBpLmVtaXQoImNyZWF0ZVJvbGVzIix7cm9sZXM6aW5zZXJ0ZWRSb2xlc30pfX0sYWN0aW9ucy51cGRhdGVSb2xlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtyb2xlSWQ6cm9sZUlkLGFjdGl2ZTphY3RpdmUsbmFtZTpuYW1lLHZvdGVUaHJlc2hvbGQ6dm90ZVRocmVzaG9sZCxtYWluU2xvdHM6bWFpblNsb3RzLGJhY2t1cFNsb3RzOmJhY2t1cFNsb3RzLHRpY2tIb3Vyczp0aWNrSG91cnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtyb2xlVXBkYXRlRmVlOnJvbGVVcGRhdGVGZWV9PXBhcmFtcyx1dGlsaXR5VG9rZW5CYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksYXV0aG9yaXplZFVwZGF0ZT0hKCFhcGkuQmlnTnVtYmVyKHJvbGVVcGRhdGVGZWUpLmx0ZSgwKSYmYXBpLnNlbmRlciE9PWFwaS5vd25lcil8fHV0aWxpdHlUb2tlbkJhbGFuY2UmJmFwaS5CaWdOdW1iZXIodXRpbGl0eVRva2VuQmFsYW5jZS5iYWxhbmNlKS5ndGUocm9sZVVwZGF0ZUZlZSk7aWYoYXBpLmFzc2VydChhdXRob3JpemVkVXBkYXRlLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIHVwZGF0ZSBmZWUiKSYmYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgdHJhbnNhY3Rpb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiByb2xlSWQmJmFwaS5CaWdOdW1iZXIocm9sZUlkKS5pc0ludGVnZXIoKSwiaW52YWxpZCByb2xlSWQiKSYmYXBpLmFzc2VydCh2b2lkIDAhPT1hY3RpdmV8fG5hbWV8fHZvdGVUaHJlc2hvbGR8fG1haW5TbG90c3x8YmFja3VwU2xvdHN8fHRpY2tIb3Vycywic3BlY2lmeSBhdCBsZWFzdCBvbmUgZmllbGQgdG8gdXBkYXRlIikpe2NvbnN0IGV4aXN0aW5nUm9sZT1hd2FpdCBhcGkuZGIuZmluZE9uZSgicm9sZXMiLHtfaWQ6YXBpLkJpZ051bWJlcihyb2xlSWQpLnRvTnVtYmVyKCl9KSxleGlzdGluZ0luc3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImluc3RhbmNlcyIse19pZDpleGlzdGluZ1JvbGUuaW5zdGFuY2VJZH0pO2lmKCFhcGkuYXNzZXJ0KGV4aXN0aW5nUm9sZSwicm9sZSBub3QgZm91bmQiKXx8IWFwaS5hc3NlcnQoZXhpc3RpbmdJbnN0LCJpbnN0YW5jZSBub3QgZm91bmQiKXx8IWFwaS5hc3NlcnQoZXhpc3RpbmdJbnN0LmNyZWF0b3I9PT1hcGkuc2VuZGVyfHxhcGkub3duZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIGluc3RhbmNlIGNyZWF0b3IiKSlyZXR1cm47aWYodm9pZCAwIT09YWN0aXZlJiYoZXhpc3RpbmdSb2xlLmFjdGl2ZT0hIWFjdGl2ZSksbmFtZSl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBuYW1lJiZuYW1lLmxlbmd0aDw1MCwibmFtZSBtdXN0IGJlIGEgc3RyaW5nIGxlc3MgdGhhbiA1MCBjaGFyYWN0ZXJzIikpcmV0dXJuO2V4aXN0aW5nUm9sZS5uYW1lPW5hbWV9aWYodm90ZVRocmVzaG9sZCl7Y29uc3Qgdm90ZVRva2VuT2JqPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmV4aXN0aW5nSW5zdC52b3RlVG9rZW59KTtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHZvdGVUaHJlc2hvbGQmJmFwaS5CaWdOdW1iZXIodm90ZVRocmVzaG9sZCkuZ3RlKDApJiZhcGkuQmlnTnVtYmVyKHZvdGVUaHJlc2hvbGQpLmRwKCk8PXZvdGVUb2tlbk9iai5wcmVjaXNpb24sInZvdGVUaHJlc2hvbGQgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCwgcHJlY2lzaW9uIG1hdGNoaW5nIHZvdGVUb2tlbiIpKXJldHVybjtleGlzdGluZ1JvbGUudm90ZVRocmVzaG9sZD12b3RlVGhyZXNob2xkfWlmKG1haW5TbG90cyl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBtYWluU2xvdHMmJmFwaS5CaWdOdW1iZXIobWFpblNsb3RzKS5pc0ludGVnZXIoKSYmYXBpLkJpZ051bWJlcihtYWluU2xvdHMpLmd0KDApJiZhcGkuQmlnTnVtYmVyKG1haW5TbG90cykubHRlKHBhcmFtcy5tYXhTbG90cyksIm1haW5TbG90cyBtdXN0IGJlIGEgaW50ZWdlciBiZXR3ZWVuIDEgLSBwYXJhbXMubWF4U2xvdHMiKSlyZXR1cm47ZXhpc3RpbmdSb2xlLm1haW5TbG90cz1tYWluU2xvdHN9aWYoYmFja3VwU2xvdHMpe2NvbnN0IHJlbWFpbmluZ1Nsb3RzPWFwaS5CaWdOdW1iZXIocGFyYW1zLm1heFNsb3RzKS5taW51cyhleGlzdGluZ1JvbGUubWFpblNsb3RzKTtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIGJhY2t1cFNsb3RzJiZhcGkuQmlnTnVtYmVyKGJhY2t1cFNsb3RzKS5pc0ludGVnZXIoKSYmYXBpLkJpZ051bWJlcihiYWNrdXBTbG90cykuZ3RlKDApJiZhcGkuQmlnTnVtYmVyKGJhY2t1cFNsb3RzKS5sdGUocmVtYWluaW5nU2xvdHMpLCJiYWNrdXBTbG90cyBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAwIC0gcmVtYWluaW5nU2xvdHMiKSlyZXR1cm47ZXhpc3RpbmdSb2xlLmJhY2t1cFNsb3RzPWJhY2t1cFNsb3RzfWlmKHRpY2tIb3Vycyl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiB0aWNrSG91cnMmJmFwaS5CaWdOdW1iZXIodGlja0hvdXJzKS5pc0ludGVnZXIoKSYmYXBpLkJpZ051bWJlcih0aWNrSG91cnMpLmd0ZShwYXJhbXMuaW5zdGFuY2VUaWNrSG91cnMpJiZhcGkuQmlnTnVtYmVyKHRpY2tIb3VycykubW9kKHBhcmFtcy5pbnN0YW5jZVRpY2tIb3VycykuZXEoMCksInRpY2tIb3VycyBtdXN0IGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvLCBhbmQgYSBtdWx0aXBsZSBvZiBwYXJhbXMuaW5zdGFuY2VUaWNrSG91cnMiKSlyZXR1cm47ZXhpc3RpbmdSb2xlLnRpY2tIb3Vycz10aWNrSG91cnN9YXdhaXQgYXBpLmRiLnVwZGF0ZSgicm9sZXMiLGV4aXN0aW5nUm9sZSksYXBpLnNlbmRlciE9PWFwaS5vd25lciYmIm51bGwiIT09YXBpLnNlbmRlciYmYXBpLkJpZ051bWJlcihyb2xlVXBkYXRlRmVlKS5ndCgwKSYmYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6cm9sZVVwZGF0ZUZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSksYXBpLmVtaXQoInVwZGF0ZVJvbGUiLHtyb2xlSWQ6ZXhpc3RpbmdSb2xlLl9pZH0pfX0sYWN0aW9ucy5zZXRJbnN0YW5jZUFjdGl2ZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7aW5zdGFuY2VJZDppbnN0YW5jZUlkLGFjdGl2ZTphY3RpdmUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZighYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgdHJhbnNhY3Rpb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5Iil8fCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgaW5zdGFuY2VJZCYmYXBpLkJpZ051bWJlcihpbnN0YW5jZUlkKS5pc0ludGVnZXIoKSwiaW52YWxpZCBpbnN0YW5jZUlkIikpcmV0dXJuO2NvbnN0IGluc3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImluc3RhbmNlcyIse19pZDphcGkuQmlnTnVtYmVyKGluc3RhbmNlSWQpLnRvTnVtYmVyKCl9KTthcGkuYXNzZXJ0KGluc3QsImluc3RhbmNlIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQoaW5zdC5jcmVhdG9yPT09YXBpLnNlbmRlcnx8YXBpLm93bmVyPT09YXBpLnNlbmRlciwibXVzdCBiZSBpbnN0YW5jZSBjcmVhdG9yIikmJihpbnN0LmFjdGl2ZT0hIWFjdGl2ZSxhd2FpdCBhcGkuZGIudXBkYXRlKCJpbnN0YW5jZXMiLGluc3QpLGFwaS5lbWl0KCJzZXRJbnN0YW5jZUFjdGl2ZSIse2luc3RhbmNlSWQ6aW5zdC5faWQsYWN0aXZlOmluc3QuYWN0aXZlfSkpfSxhY3Rpb25zLnNldFJvbGVBY3RpdmU9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3JvbGVJZDpyb2xlSWQsYWN0aXZlOmFjdGl2ZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSB0cmFuc2FjdGlvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKXx8IWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiByb2xlSWQmJmFwaS5CaWdOdW1iZXIocm9sZUlkKS5pc0ludGVnZXIoKSwiaW52YWxpZCByb2xlSWQiKSlyZXR1cm47Y29uc3QgZXhpc3RpbmdSb2xlPWF3YWl0IGFwaS5kYi5maW5kT25lKCJyb2xlcyIse19pZDphcGkuQmlnTnVtYmVyKHJvbGVJZCkudG9OdW1iZXIoKX0pLGV4aXN0aW5nSW5zdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgiaW5zdGFuY2VzIix7X2lkOmV4aXN0aW5nUm9sZS5pbnN0YW5jZUlkfSk7YXBpLmFzc2VydChleGlzdGluZ1JvbGUsInJvbGUgZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydChleGlzdGluZ0luc3QuY3JlYXRvcj09PWFwaS5zZW5kZXJ8fGFwaS5vd25lcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgaW5zdGFuY2UgY3JlYXRvciIpJiYoZXhpc3RpbmdSb2xlLmFjdGl2ZT0hIWFjdGl2ZSxhd2FpdCBhcGkuZGIudXBkYXRlKCJyb2xlcyIsZXhpc3RpbmdSb2xlKSxhcGkuZW1pdCgic2V0Um9sZUFjdGl2ZSIse3JvbGVJZDpleGlzdGluZ1JvbGUuX2lkLGFjdGl2ZTpleGlzdGluZ1JvbGUuYWN0aXZlfSkpfSxhY3Rpb25zLmFwcGx5Rm9yUm9sZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7cm9sZUlkOnJvbGVJZCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSB0cmFuc2FjdGlvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiByb2xlSWQsImludmFsaWQgcm9sZUlkIikpcmV0dXJuO2NvbnN0IHJvbGU9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInJvbGVzIix7X2lkOmFwaS5CaWdOdW1iZXIocm9sZUlkKS50b051bWJlcigpfSk7aWYoIWFwaS5hc3NlcnQocm9sZSwicm9sZSBkb2VzIG5vdCBleGlzdCIpKXJldHVybjtjb25zdCBpbnN0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJpbnN0YW5jZXMiLHtfaWQ6cm9sZS5pbnN0YW5jZUlkfSk7bGV0IGF1dGhvcml6ZWRDcmVhdGlvbj0hMDtpZihpbnN0LmNhbmRpZGF0ZUZlZSl7Y29uc3QgZmVlVG9rZW5CYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOmluc3QuY2FuZGlkYXRlRmVlLnN5bWJvbH0pO2F1dGhvcml6ZWRDcmVhdGlvbj0hKCFhcGkuQmlnTnVtYmVyKGluc3QuY2FuZGlkYXRlRmVlLmFtb3VudCkubHRlKDApJiZhcGkuc2VuZGVyIT09YXBpLm93bmVyKXx8ZmVlVG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKGZlZVRva2VuQmFsYW5jZS5iYWxhbmNlKS5ndGUoaW5zdC5jYW5kaWRhdGVGZWUuYW1vdW50KX1jb25zdCBleGlzdGluZ0FwcGx5PWF3YWl0IGFwaS5kYi5maW5kT25lKCJjYW5kaWRhdGVzIix7cm9sZUlkOnJvbGUuX2lkLGFjY291bnQ6YXBpLnNlbmRlcn0pO2lmKGFwaS5hc3NlcnQoYXV0aG9yaXplZENyZWF0aW9uLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIGFwcGxpY2F0aW9uIGZlZSIpJiZhcGkuYXNzZXJ0KCFleGlzdGluZ0FwcGx5LCJzZW5kZXIgYWxyZWFkeSBhcHBsaWVkIGZvciByb2xlIikpe2NvbnN0IG5ld0NhbmRpZGF0ZT17cm9sZUlkOnJvbGUuX2lkLGFjY291bnQ6YXBpLnNlbmRlcixhY3RpdmU6ITAsYXBwcm92YWxXZWlnaHQ6eyRudW1iZXJEZWNpbWFsOiIwIn19LGluc2VydGVkSWQ9YXdhaXQgYXBpLmRiLmluc2VydCgiY2FuZGlkYXRlcyIsbmV3Q2FuZGlkYXRlKTtpZihhcGkuc2VuZGVyIT09YXBpLm93bmVyJiZpbnN0LmNhbmRpZGF0ZUZlZSlpZigiYnVybiI9PT1pbnN0LmNhbmRpZGF0ZUZlZS5tZXRob2QpYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6aW5zdC5jYW5kaWRhdGVGZWUuc3ltYm9sLHF1YW50aXR5Omluc3QuY2FuZGlkYXRlRmVlLmFtb3VudH0pO2Vsc2UgaWYoImlzc3VlciI9PT1pbnN0LmNhbmRpZGF0ZUZlZS5tZXRob2Qpe2NvbnN0IGZlZVRva2VuT2JqPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmluc3QuY2FuZGlkYXRlRmVlLnN5bWJvbH0pO2F3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzpmZWVUb2tlbk9iai5pc3N1ZXIsc3ltYm9sOmluc3QuY2FuZGlkYXRlRmVlLnN5bWJvbCxxdWFudGl0eTppbnN0LmNhbmRpZGF0ZUZlZS5hbW91bnR9KX1hcGkuZW1pdCgiYXBwbHlGb3JSb2xlIix7cm9sZUlkOnJvbGUuX2lkLGNhbmRpZGF0ZUlkOmluc2VydGVkSWQuX2lkfSl9fSxhY3Rpb25zLnNldEFwcGx5QWN0aXZlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtyb2xlSWQ6cm9sZUlkLGFjdGl2ZTphY3RpdmUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZighYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgdHJhbnNhY3Rpb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJiFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2Ygcm9sZUlkLCJpbnZhbGlkIHJvbGVJZCIpKXJldHVybjtjb25zdCByb2xlPWF3YWl0IGFwaS5kYi5maW5kT25lKCJyb2xlcyIse19pZDphcGkuQmlnTnVtYmVyKHJvbGVJZCkudG9OdW1iZXIoKX0pLGV4aXN0aW5nQXBwbHk9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImNhbmRpZGF0ZXMiLHtyb2xlSWQ6cm9sZS5faWQsYWNjb3VudDphcGkuc2VuZGVyfSk7YXBpLmFzc2VydChyb2xlLCJyb2xlIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQoZXhpc3RpbmdBcHBseSwiY2FuZGlkYXRlIGRvZXMgbm90IGV4aXN0IGZvciBzZW5kZXIiKSYmKGV4aXN0aW5nQXBwbHkuYWN0aXZlPSEhYWN0aXZlLGF3YWl0IGFwaS5kYi51cGRhdGUoImNhbmRpZGF0ZXMiLGV4aXN0aW5nQXBwbHkpLGFwaS5lbWl0KCJzZXRBcHBseUFjdGl2ZSIse3JvbGVJZDpyb2xlLl9pZCxhY2NvdW50OmV4aXN0aW5nQXBwbHkuYWNjb3VudCxhY3RpdmU6YWN0aXZlfSkpfSxhY3Rpb25zLmRlcG9zaXQ9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3JvbGVJZDpyb2xlSWQsc3ltYm9sOnN5bWJvbCxxdWFudGl0eTpxdWFudGl0eSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkLGRlcFRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnN5bWJvbH0pO2lmKCEoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiByb2xlSWQmJmFwaS5CaWdOdW1iZXIocm9sZUlkKS5pc0ludGVnZXIoKSwiaW52YWxpZCByb2xlSWQiKSYmYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHF1YW50aXR5JiZhcGkuQmlnTnVtYmVyKHF1YW50aXR5KS5ndCgwKSwiaW52YWxpZCBxdWFudGl0eSIpJiZhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIocXVhbnRpdHkpLmRwKCk8PWRlcFRva2VuLnByZWNpc2lvbiwicXVhbnRpdHkgcHJlY2lzaW9uIG1pc21hdGNoIikpKXJldHVybjtjb25zdCByb2xlPWF3YWl0IGFwaS5kYi5maW5kT25lKCJyb2xlcyIse19pZDphcGkuQmlnTnVtYmVyKHJvbGVJZCkudG9OdW1iZXIoKX0pO2lmKGFwaS5hc3NlcnQocm9sZSwicm9sZSBub3QgZm91bmQiKSYmYXBpLmFzc2VydChyb2xlLmFjdGl2ZSwicm9sZSBtdXN0IGJlIGFjdGl2ZSB0byBkZXBvc2l0Iikpe2NvbnN0IHJlcz1hd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyVG9Db250cmFjdCIse3N5bWJvbDpzeW1ib2wscXVhbnRpdHk6cXVhbnRpdHksdG86InJvbGVzIn0pO3ZvaWQgMD09PXJlcy5lcnJvcnMmJnJlcy5ldmVudHMmJnZvaWQgMCE9PXJlcy5ldmVudHMuZmluZCgoZWw9PiJ0b2tlbnMiPT09ZWwuY29udHJhY3QmJiJ0cmFuc2ZlclRvQ29udHJhY3QiPT09ZWwuZXZlbnQmJmVsLmRhdGEuZnJvbT09PWFwaS5zZW5kZXImJiJyb2xlcyI9PT1lbC5kYXRhLnRvJiZlbC5kYXRhLnF1YW50aXR5PT09cXVhbnRpdHkpKSYmKGF3YWl0IHVwZGF0ZVRva2VuQmFsYW5jZXMocm9sZSxkZXBUb2tlbixxdWFudGl0eSksYXBpLmVtaXQoImRlcG9zaXQiLHtyb2xlSWQ6cm9sZUlkLHN5bWJvbDpzeW1ib2wscXVhbnRpdHk6cXVhbnRpdHl9KSl9fSxhY3Rpb25zLnJlY2VpdmVEdGZUb2tlbnM9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2RhdGE6ZGF0YSxzeW1ib2w6c3ltYm9sLHF1YW50aXR5OnF1YW50aXR5LGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZDtpZighYXBpLmFzc2VydChjYWxsaW5nQ29udHJhY3RJbmZvJiYidG9rZW5mdW5kcyI9PT1jYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUsIm5vdCBhdXRob3JpemVkIikpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KCJvYmplY3QiPT10eXBlb2YgZGF0YSYmIk9iamVjdCI9PT1kYXRhLmNvbnN0cnVjdG9yLm5hbWUmJiJyb2xlSWQiaW4gZGF0YSYmInN0cmluZyI9PXR5cGVvZiBkYXRhLnJvbGVJZCYmYXBpLkJpZ051bWJlcihkYXRhLnJvbGVJZCkuaXNJbnRlZ2VyKCksImludmFsaWQgaW5jb21pbmcgcGF5bG9hZCIpKXJldHVybjtjb25zdCByb2xlPWF3YWl0IGFwaS5kYi5maW5kT25lKCJyb2xlcyIse19pZDphcGkuQmlnTnVtYmVyKGRhdGEucm9sZUlkKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChyb2xlLCJyb2xlIG5vdCBmb3VuZCIpJiZhcGkuYXNzZXJ0KHJvbGUuYWN0aXZlLCJyb2xlIG11c3QgYmUgYWN0aXZlIHRvIGRlcG9zaXQiKSl7Y29uc3QgZGVwVG9rZW49YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6c3ltYm9sfSk7YXdhaXQgdXBkYXRlVG9rZW5CYWxhbmNlcyhyb2xlLGRlcFRva2VuLHF1YW50aXR5KSxhcGkuZW1pdCgicmVjZWl2ZUR0ZlRva2VucyIse3JvbGVJZDpkYXRhLnJvbGVJZCxzeW1ib2w6c3ltYm9sLHF1YW50aXR5OnF1YW50aXR5fSl9fSxhY3Rpb25zLnJlY2VpdmVEaXN0VG9rZW5zPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtkYXRhOmRhdGEsc3ltYm9sOnN5bWJvbCxxdWFudGl0eTpxdWFudGl0eSxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99PXBheWxvYWQ7aWYoIWFwaS5hc3NlcnQoY2FsbGluZ0NvbnRyYWN0SW5mbyYmImRpc3RyaWJ1dGlvbiI9PT1jYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUsIm5vdCBhdXRob3JpemVkIikpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KCJvYmplY3QiPT10eXBlb2YgZGF0YSYmIk9iamVjdCI9PT1kYXRhLmNvbnN0cnVjdG9yLm5hbWUmJiJyb2xlSWQiaW4gZGF0YSYmInN0cmluZyI9PXR5cGVvZiBkYXRhLnJvbGVJZCYmYXBpLkJpZ051bWJlcihkYXRhLnJvbGVJZCkuaXNJbnRlZ2VyKCksImludmFsaWQgaW5jb21pbmcgcGF5bG9hZCIpKXJldHVybjtjb25zdCByb2xlPWF3YWl0IGFwaS5kYi5maW5kT25lKCJyb2xlcyIse19pZDphcGkuQmlnTnVtYmVyKGRhdGEucm9sZUlkKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChyb2xlLCJyb2xlIG5vdCBmb3VuZCIpJiZhcGkuYXNzZXJ0KHJvbGUuYWN0aXZlLCJyb2xlIG11c3QgYmUgYWN0aXZlIHRvIGRlcG9zaXQiKSl7Y29uc3QgZGVwVG9rZW49YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6c3ltYm9sfSk7YXdhaXQgdXBkYXRlVG9rZW5CYWxhbmNlcyhyb2xlLGRlcFRva2VuLHF1YW50aXR5KSxhcGkuZW1pdCgicmVjZWl2ZURpc3RUb2tlbnMiLHtyb2xlSWQ6ZGF0YS5yb2xlSWQsc3ltYm9sOnN5bWJvbCxxdWFudGl0eTpxdWFudGl0eX0pfX0sYWN0aW9ucy5hcHByb3ZlQ2FuZGlkYXRlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtpZDppZH09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pO2lmKGFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBpZCYmYXBpLkJpZ051bWJlcihpZCkuaXNJbnRlZ2VyKCksImludmFsaWQgaWQiKSl7Y29uc3QgY2FuZGlkYXRlPWF3YWl0IGFwaS5kYi5maW5kT25lKCJjYW5kaWRhdGVzIix7X2lkOmFwaS5CaWdOdW1iZXIoaWQpLnRvTnVtYmVyKCl9KTtpZihhcGkuYXNzZXJ0KGNhbmRpZGF0ZSwiY2FuZGlkYXRlIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQoY2FuZGlkYXRlLmFjdGl2ZSwiY2FuZGlkYXRlIGlzIG5vdCBhY3RpdmUiKSl7Y29uc3Qgcm9sZT1hd2FpdCBhcGkuZGIuZmluZE9uZSgicm9sZXMiLHtfaWQ6Y2FuZGlkYXRlLnJvbGVJZH0pO2lmKCFhcGkuYXNzZXJ0KHJvbGUuYWN0aXZlLCJyb2xlIG11c3QgYmUgYWN0aXZlIHRvIGFwcHJvdmUiKSlyZXR1cm47Y29uc3QgaW5zdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgiaW5zdGFuY2VzIix7X2lkOnJvbGUuaW5zdGFuY2VJZH0pLHZvdGVUb2tlbk9iaj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDppbnN0LnZvdGVUb2tlbn0pO2xldCBhY2N0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJhY2NvdW50cyIse2FjY291bnQ6YXBpLnNlbmRlcn0pO251bGw9PT1hY2N0JiYoYWNjdD17YWNjb3VudDphcGkuc2VuZGVyLHdlaWdodHM6W119LGFjY3Q9YXdhaXQgYXBpLmRiLmluc2VydCgiYWNjb3VudHMiLGFjY3QpKTtsZXQgYWN0aXZlQXBwcm92YWxzPTA7Y29uc3QgYXBwcm92YWxzPWF3YWl0IGFwaS5kYi5maW5kKCJhcHByb3ZhbHMiLHtmcm9tOmFwaS5zZW5kZXIsY2FuZGlkYXRlUGVuZGluZzohMH0scGFyYW1zLm1heEFjY291bnRBcHByb3ZhbHMsMCxbe2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITB9XSk7Zm9yKGxldCBpbmRleD0wO2luZGV4PGFwcHJvdmFscy5sZW5ndGg7aW5kZXgrPTEpe2NvbnN0IGFwcHJvdmFsPWFwcHJvdmFsc1tpbmRleF0sYXBwcm92YWxDYW5kaWRhdGU9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImNhbmRpZGF0ZXMiLHtfaWQ6YXBwcm92YWwudG99KTthcHByb3ZhbENhbmRpZGF0ZSYmYXBwcm92YWxDYW5kaWRhdGUuYWN0aXZlP2FjdGl2ZUFwcHJvdmFscys9MTooYXBwcm92YWwuY2FuZGlkYXRlUGVuZGluZz0hMSxhd2FpdCBhcGkuZGIudXBkYXRlKCJhcHByb3ZhbHMiLGFwcHJvdmFsKSl9aWYoIWFwaS5hc3NlcnQoYWN0aXZlQXBwcm92YWxzPHBhcmFtcy5tYXhBY2NvdW50QXBwcm92YWxzLGB5b3UgY2FuIG9ubHkgYXBwcm92ZSAke3BhcmFtcy5tYXhBY2NvdW50QXBwcm92YWxzfSBhY3RpdmUgY2FuZGlkYXRlc2ApKXJldHVybjtsZXQgYXBwcm92YWw9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImFwcHJvdmFscyIse2Zyb206YXBpLnNlbmRlcix0bzpjYW5kaWRhdGUuX2lkfSk7aWYoYXBpLmFzc2VydChudWxsPT09YXBwcm92YWwsInlvdSBhbHJlYWR5IGFwcHJvdmVkIHRoaXMgY2FuZGlkYXRlIikpe2FwcHJvdmFsPXtmcm9tOmFwaS5zZW5kZXIsdG86Y2FuZGlkYXRlLl9pZCxjYW5kaWRhdGVQZW5kaW5nOiEwfSxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJhcHByb3ZhbHMiLGFwcHJvdmFsKTtjb25zdCBiYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOmluc3Qudm90ZVRva2VufSk7bGV0IGFwcHJvdmFsV2VpZ2h0PTA7YmFsYW5jZSYmYmFsYW5jZS5zdGFrZSYmKGFwcHJvdmFsV2VpZ2h0PWJhbGFuY2Uuc3Rha2UpLGJhbGFuY2UmJmJhbGFuY2UuZGVsZWdhdGlvbnNJbiYmKGFwcHJvdmFsV2VpZ2h0PWFwaS5CaWdOdW1iZXIoYXBwcm92YWxXZWlnaHQpLnBsdXMoYmFsYW5jZS5kZWxlZ2F0aW9uc0luKS50b0ZpeGVkKHZvdGVUb2tlbk9iai5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9IQUxGX1VQKSk7Y29uc3Qgd0luZGV4PWFjY3Qud2VpZ2h0cy5maW5kSW5kZXgoKHg9Pnguc3ltYm9sPT09aW5zdC52b3RlVG9rZW4pKTstMSE9PXdJbmRleD9hY2N0LndlaWdodHNbd0luZGV4XS53ZWlnaHQ9YXBwcm92YWxXZWlnaHQ6YWNjdC53ZWlnaHRzLnB1c2goe3N5bWJvbDppbnN0LnZvdGVUb2tlbix3ZWlnaHQ6YXBwcm92YWxXZWlnaHR9KSxhd2FpdCBhcGkuZGIudXBkYXRlKCJhY2NvdW50cyIsYWNjdCksYXdhaXQgdXBkYXRlQ2FuZGlkYXRlV2VpZ2h0KGNhbmRpZGF0ZS5faWQsYXBwcm92YWxXZWlnaHQpLGFwaS5lbWl0KCJhcHByb3ZlQ2FuZGlkYXRlIix7aWQ6Y2FuZGlkYXRlLl9pZH0pfX19fSxhY3Rpb25zLmRpc2FwcHJvdmVDYW5kaWRhdGU9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2lkOmlkfT1wYXlsb2FkO2lmKGFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBpZCYmYXBpLkJpZ051bWJlcihpZCkuaXNJbnRlZ2VyKCksImludmFsaWQgaWQiKSl7Y29uc3QgY2FuZGlkYXRlPWF3YWl0IGFwaS5kYi5maW5kT25lKCJjYW5kaWRhdGVzIix7X2lkOmFwaS5CaWdOdW1iZXIoaWQpLnRvTnVtYmVyKCl9KTtpZihhcGkuYXNzZXJ0KGNhbmRpZGF0ZSwiY2FuZGlkYXRlIGRvZXMgbm90IGV4aXN0Iikpe2NvbnN0IGluc3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImluc3RhbmNlcyIse2lkOmNhbmRpZGF0ZS5pbnN0YW5jZUlkfSksdm90ZVRva2VuT2JqPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmluc3Qudm90ZVRva2VufSk7bGV0IGFjY3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImFjY291bnRzIix7YWNjb3VudDphcGkuc2VuZGVyfSk7bnVsbD09PWFjY3QmJihhY2N0PXthY2NvdW50OmFwaS5zZW5kZXIsd2VpZ2h0czpbXX0sYWNjdD1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJhY2NvdW50cyIsYWNjdCkpO2NvbnN0IGFwcHJvdmFsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJhcHByb3ZhbHMiLHtmcm9tOmFwaS5zZW5kZXIsdG86Y2FuZGlkYXRlLl9pZH0pO2lmKGFwaS5hc3NlcnQobnVsbCE9PWFwcHJvdmFsLCJ5b3UgaGF2ZSBub3QgYXBwcm92ZWQgdGhpcyBjYW5kaWRhdGUiKSl7YXdhaXQgYXBpLmRiLnJlbW92ZSgiYXBwcm92YWxzIixhcHByb3ZhbCk7Y29uc3QgYmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDppbnN0LnZvdGVUb2tlbn0pO2xldCBhcHByb3ZhbFdlaWdodD0wO2JhbGFuY2UmJmJhbGFuY2Uuc3Rha2UmJihhcHByb3ZhbFdlaWdodD1iYWxhbmNlLnN0YWtlKSxiYWxhbmNlJiZiYWxhbmNlLmRlbGVnYXRpb25zSW4mJihhcHByb3ZhbFdlaWdodD1hcGkuQmlnTnVtYmVyKGFwcHJvdmFsV2VpZ2h0KS5wbHVzKGJhbGFuY2UuZGVsZWdhdGlvbnNJbikudG9GaXhlZCh2b3RlVG9rZW5PYmoucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCkpO2NvbnN0IHdJbmRleD1hY2N0LndlaWdodHMuZmluZEluZGV4KCh4PT54LnN5bWJvbD09PWluc3Qudm90ZVRva2VuKSk7LTEhPT13SW5kZXg/YWNjdC53ZWlnaHRzW3dJbmRleF0ud2VpZ2h0PWFwcHJvdmFsV2VpZ2h0OmFjY3Qud2VpZ2h0cy5wdXNoKHtzeW1ib2w6aW5zdC52b3RlVG9rZW4sd2VpZ2h0OmFwcHJvdmFsV2VpZ2h0fSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgiYWNjb3VudHMiLGFjY3QpLGF3YWl0IHVwZGF0ZUNhbmRpZGF0ZVdlaWdodChjYW5kaWRhdGUuX2lkLGFwaS5CaWdOdW1iZXIoYXBwcm92YWxXZWlnaHQpLm5lZ2F0ZWQoKSksYXBpLmVtaXQoImRpc2FwcHJvdmVDYW5kaWRhdGUiLHtpZDpjYW5kaWRhdGUuX2lkfSl9fX19LGFjdGlvbnMudXBkYXRlQ2FuZGlkYXRlQXBwcm92YWxzPWFzeW5jIHBheWxvYWQ9Pntjb25zdHthY2NvdW50OmFjY291bnQsdG9rZW46dG9rZW4sY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfT1wYXlsb2FkO2lmKHZvaWQgMD09PWNhbGxpbmdDb250cmFjdEluZm8pcmV0dXJuO2lmKCJ0b2tlbnMiIT09Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lKXJldHVybjtjb25zdCBhY2N0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJhY2NvdW50cyIse2FjY291bnQ6YWNjb3VudH0pO2lmKG51bGwhPT1hY2N0KXtjb25zdCBwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHdJbmRleD1hY2N0LndlaWdodHMuZmluZEluZGV4KCh4PT54LnN5bWJvbD09PXRva2VuLnN5bWJvbCkpO2lmKC0xIT09d0luZGV4KXtjb25zdCBiYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFjY291bnQsc3ltYm9sOnRva2VuLnN5bWJvbH0pO2xldCBhcHByb3ZhbFdlaWdodD0wO2JhbGFuY2UmJmJhbGFuY2Uuc3Rha2UmJihhcHByb3ZhbFdlaWdodD1iYWxhbmNlLnN0YWtlKSxiYWxhbmNlJiZiYWxhbmNlLmRlbGVnYXRpb25zSW4mJihhcHByb3ZhbFdlaWdodD1hcGkuQmlnTnVtYmVyKGFwcHJvdmFsV2VpZ2h0KS5wbHVzKGJhbGFuY2UuZGVsZWdhdGlvbnNJbikudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9IQUxGX1VQKSk7bGV0IG9sZEFwcHJvdmFsV2VpZ2h0PTA7b2xkQXBwcm92YWxXZWlnaHQ9YWNjdC53ZWlnaHRzW3dJbmRleF0ud2VpZ2h0LGFjY3Qud2VpZ2h0c1t3SW5kZXhdLndlaWdodD1hcHByb3ZhbFdlaWdodDtjb25zdCBkZWx0YUFwcHJvdmFsV2VpZ2h0PWFwaS5CaWdOdW1iZXIoYXBwcm92YWxXZWlnaHQpLm1pbnVzKG9sZEFwcHJvdmFsV2VpZ2h0KS5kcCh0b2tlbi5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9IQUxGX1VQKTtpZighYXBpLkJpZ051bWJlcihkZWx0YUFwcHJvdmFsV2VpZ2h0KS5lcSgwKSl7YXdhaXQgYXBpLmRiLnVwZGF0ZSgiYWNjb3VudHMiLGFjY3QpO2NvbnN0IGFwcHJvdmFscz1hd2FpdCBhcGkuZGIuZmluZCgiYXBwcm92YWxzIix7ZnJvbTphY2NvdW50LGNhbmRpZGF0ZVBlbmRpbmc6ITB9LHBhcmFtcy5tYXhBY2NvdW50QXBwcm92YWxzLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiEwfV0pO2ZvcihsZXQgaW5kZXg9MDtpbmRleDxhcHByb3ZhbHMubGVuZ3RoO2luZGV4Kz0xKXtjb25zdCBhcHByb3ZhbD1hcHByb3ZhbHNbaW5kZXhdO2F3YWl0IHVwZGF0ZUNhbmRpZGF0ZVdlaWdodChhcHByb3ZhbC50byxkZWx0YUFwcHJvdmFsV2VpZ2h0LHRva2VuKXx8KGFwcHJvdmFsLmNhbmRpZGF0ZVBlbmRpbmc9ITEsYXdhaXQgYXBpLmRiLnVwZGF0ZSgiYXBwcm92YWxzIixhcHByb3ZhbCkpfX19fX0sYWN0aW9ucy5jaGVja1BlbmRpbmdJbnN0YW5jZXM9YXN5bmMoKT0+e2lmKGFwaS5hc3NlcnQoIm51bGwiPT09YXBpLnNlbmRlciwibm90IGF1dGhvcml6ZWQiKSl7Y29uc3QgcGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSxibG9ja0RhdGU9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApLHRpY2tUaW1lPWFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkubWludXMoMzYwMCpwYXJhbXMuaW5zdGFuY2VUaWNrSG91cnMqMWUzKS50b051bWJlcigpLHBlbmRpbmdJbnN0PWF3YWl0IGFwaS5kYi5maW5kKCJpbnN0YW5jZXMiLHthY3RpdmU6ITAsbGFzdFRpY2tUaW1lOnskbHRlOnRpY2tUaW1lfX0scGFyYW1zLm1heEluc3RhbmNlc1BlckJsb2NrLDAsW3tpbmRleDoibGFzdFRpY2tUaW1lIixkZXNjZW5kaW5nOiExfSx7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPHBlbmRpbmdJbnN0Lmxlbmd0aDtpKz0xKWF3YWl0IGNoZWNrUGVuZGluZ0NhbmRpZGF0ZXMocGVuZGluZ0luc3RbaV0scGFyYW1zKX19Ow==" } }}