hive-engine avatar

comments Smart Contract

hive-engine

Published: 14 Jul 2026 › Updated: 14 Jul 2026comments Smart Contract

comments Smart Contract

{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"comments","params":"","code":"Y29uc3QgU01UX1BSRUNJU0lPTj0xMCxNQVhfVk9USU5HX1BPV0VSPTFlNCxNQVhfV0VJR0hUPTFlNCxQT1NUX1FVRVJZX0xJTUlUPTFlMztmdW5jdGlvbiBjYWxjdWxhdGVXZWlnaHRSc2hhcmVzKHJld2FyZFBvb2wsdm90ZVJzaGFyZVN1bSl7aWYoYXBpLkJpZ051bWJlcih2b3RlUnNoYXJlU3VtKS5sdGUoMCkpcmV0dXJuIGFwaS5CaWdOdW1iZXIoMCk7aWYoInBvd2VyIj09PXJld2FyZFBvb2wuY29uZmlnLnBvc3RSZXdhcmRDdXJ2ZSl7Y29uc3QgcG9zdFJld2FyZEV4cG9uZW50PWFwaS5CaWdOdW1iZXIocmV3YXJkUG9vbC5jb25maWcucG9zdFJld2FyZEN1cnZlUGFyYW1ldGVyKTtyZXR1cm4gcG9zdFJld2FyZEV4cG9uZW50LmVxKCIxIil8fHBvc3RSZXdhcmRFeHBvbmVudC5lcSgiMiIpP2FwaS5CaWdOdW1iZXIodm90ZVJzaGFyZVN1bSkucG93KHJld2FyZFBvb2wuY29uZmlnLnBvc3RSZXdhcmRDdXJ2ZVBhcmFtZXRlcikudG9GaXhlZCgxMCxhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pOmFwaS5CaWdOdW1iZXIocGFyc2VGbG9hdCh2b3RlUnNoYXJlU3VtKSoqcGFyc2VGbG9hdChyZXdhcmRQb29sLmNvbmZpZy5wb3N0UmV3YXJkQ3VydmVQYXJhbWV0ZXIpKS50b0ZpeGVkKDEwLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTil9cmV0dXJuIGFwaS5CaWdOdW1iZXIodm90ZVJzaGFyZVN1bSl9ZnVuY3Rpb24gY2FsY3VsYXRlQ3VyYXRpb25XZWlnaHRSc2hhcmVzKHJld2FyZFBvb2wsdm90ZVJzaGFyZVN1bSl7aWYoYXBpLkJpZ051bWJlcih2b3RlUnNoYXJlU3VtKS5sdGUoMCkpcmV0dXJuIGFwaS5CaWdOdW1iZXIoMCk7aWYoInBvd2VyIj09PXJld2FyZFBvb2wuY29uZmlnLmN1cmF0aW9uUmV3YXJkQ3VydmUpe2NvbnN0IGN1cmF0aW9uUmV3YXJkRXhwb25lbnQ9YXBpLkJpZ051bWJlcihyZXdhcmRQb29sLmNvbmZpZy5jdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyKTtyZXR1cm4gY3VyYXRpb25SZXdhcmRFeHBvbmVudC5lcSgiMC41Iik/YXBpLkJpZ051bWJlcih2b3RlUnNoYXJlU3VtKS5zcXJ0KCkudG9GaXhlZCgxMCxhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pOmN1cmF0aW9uUmV3YXJkRXhwb25lbnQuZXEoIjEiKT9hcGkuQmlnTnVtYmVyKHZvdGVSc2hhcmVTdW0pLnRvRml4ZWQoMTAsYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKTphcGkuQmlnTnVtYmVyKHBhcnNlRmxvYXQodm90ZVJzaGFyZVN1bSkqKnBhcnNlRmxvYXQocmV3YXJkUG9vbC5jb25maWcuY3VyYXRpb25SZXdhcmRDdXJ2ZVBhcmFtZXRlcikpLnRvRml4ZWQoMTAsYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKX1yZXR1cm4gYXBpLkJpZ051bWJlcih2b3RlUnNoYXJlU3VtKX1hc3luYyBmdW5jdGlvbiBwYXlVc2VyKHN5bWJvbCxxdWFudGl0eSx1c2VyLHN0YWtlZFJld2FyZFBlcmNlbnRhZ2UsbXV0ZSl7aWYobXV0ZSlyZXR1cm47Y29uc3QgcXVhbnRpdHlCaWdudW09YXBpLkJpZ051bWJlcihxdWFudGl0eSksc3Rha2VkUXVhbnRpdHk9cXVhbnRpdHlCaWdudW0ubXVsdGlwbGllZEJ5KHN0YWtlZFJld2FyZFBlcmNlbnRhZ2UpLmRpdmlkZWRCeSgxMDApLnRvRml4ZWQocXVhbnRpdHlCaWdudW0uZHAoKSxhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pLGxpcXVpZFF1YW50aXR5PXF1YW50aXR5QmlnbnVtLm1pbnVzKHN0YWtlZFF1YW50aXR5KS50b0ZpeGVkKHF1YW50aXR5QmlnbnVtLmRwKCksYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKTtsZXQgcmVzO2FwaS5CaWdOdW1iZXIobGlxdWlkUXVhbnRpdHkpLmd0KDApJiYocmVzPWF3YWl0IGFwaS50cmFuc2ZlclRva2Vucyh1c2VyLHN5bWJvbCxsaXF1aWRRdWFudGl0eSwidXNlciIpLHJlcy5lcnJvcnMmJmFwaS5kZWJ1ZyhgRXJyb3IgcGF5aW5nIG91dCBsaXF1aWQgJHtsaXF1aWRRdWFudGl0eX0gJHtzeW1ib2x9IHRvICR7dXNlcn0gKFRYSUQgJHthcGkudHJhbnNhY3Rpb25JZH0pOiBcbiR7cmVzLmVycm9yc31gKSksYXBpLkJpZ051bWJlcihzdGFrZWRRdWFudGl0eSkuZ3QoMCkmJihyZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJzdGFrZUZyb21Db250cmFjdCIse3RvOnVzZXIsc3ltYm9sOnN5bWJvbCxxdWFudGl0eTpzdGFrZWRRdWFudGl0eX0pLHJlcy5lcnJvcnMmJmFwaS5kZWJ1ZyhgRXJyb3IgcGF5aW5nIG91dCBzdGFrZWQgJHtzdGFrZWRRdWFudGl0eX0gJHtzeW1ib2x9IHRvICR7dXNlcn0gKFRYSUQgJHthcGkudHJhbnNhY3Rpb25JZH0pOiBcbiR7cmVzLmVycm9yc31gKSl9YXN5bmMgZnVuY3Rpb24gZ2V0TXV0ZShyZXdhcmRQb29sSWQsYWNjb3VudCl7Y29uc3Qgdm90aW5nUG93ZXI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInZvdGluZ1Bvd2VyIix7cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxhY2NvdW50OmFjY291bnR9KTtyZXR1cm4hIXZvdGluZ1Bvd2VyJiZ2b3RpbmdQb3dlci5tdXRlfWFzeW5jIGZ1bmN0aW9uIHBheU91dEJlbmVmaWNpYXJpZXMocmV3YXJkUG9vbCx0b2tlbixwb3N0LGF1dGhvckJlbmVQb3J0aW9uKXtjb25zdHthdXRob3JwZXJtOmF1dGhvcnBlcm0sc3ltYm9sOnN5bWJvbCxyZXdhcmRQb29sSWQ6cmV3YXJkUG9vbElkLGJlbmVmaWNpYXJpZXM6YmVuZWZpY2lhcmllc309cG9zdDtsZXQgdG90YWxCZW5lUGF5PWFwaS5CaWdOdW1iZXIoMCkscG9zdFRheEF1dGhvckJlbmVQb3J0aW9uPWF1dGhvckJlbmVQb3J0aW9uO2lmKHJld2FyZFBvb2wuY29uZmlnLmFwcFRheENvbmZpZyl7Y29uc3R7YXBwOmFwcCxwZXJjZW50OnBlcmNlbnQsYmVuZWZpY2lhcnk6YmVuZWZpY2lhcnl9PXJld2FyZFBvb2wuY29uZmlnLmFwcFRheENvbmZpZztpZihhcHAhPT1wb3N0LmFwcCl7Y29uc3QgYXBwVGF4UG9ydGlvbj1hcGkuQmlnTnVtYmVyKGF1dGhvckJlbmVQb3J0aW9uKS5tdWx0aXBsaWVkQnkocGVyY2VudCkuZGl2aWRlZEJ5KDEwMCkudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKTtwb3N0VGF4QXV0aG9yQmVuZVBvcnRpb249YXBpLkJpZ051bWJlcihwb3N0VGF4QXV0aG9yQmVuZVBvcnRpb24pLm1pbnVzKGFwcFRheFBvcnRpb24pO2NvbnN0IHJld2FyZExvZz17cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxhdXRob3JwZXJtOmF1dGhvcnBlcm0sc3ltYm9sOnN5bWJvbCxhY2NvdW50OmJlbmVmaWNpYXJ5LHF1YW50aXR5OmFwcFRheFBvcnRpb259O2FwaS5lbWl0KCJhcHBUYXgiLHJld2FyZExvZyksYXdhaXQgcGF5VXNlcihzeW1ib2wsYXBwVGF4UG9ydGlvbixiZW5lZmljaWFyeSwwKSx0b3RhbEJlbmVQYXk9YXBpLkJpZ051bWJlcih0b3RhbEJlbmVQYXkpLnBsdXMoYXBwVGF4UG9ydGlvbil9fWlmKCFiZW5lZmljaWFyaWVzfHwwPT09YmVuZWZpY2lhcmllcy5sZW5ndGgpcmV0dXJuIHRvdGFsQmVuZVBheTtmb3IobGV0IGk9MDtpPGJlbmVmaWNpYXJpZXMubGVuZ3RoO2krPTEpe2NvbnN0IGJlbmVmaWNpYXJ5PWJlbmVmaWNpYXJpZXNbaV0sYmVuZVBheT1hcGkuQmlnTnVtYmVyKHBvc3RUYXhBdXRob3JCZW5lUG9ydGlvbikubXVsdGlwbGllZEJ5KGJlbmVmaWNpYXJ5LndlaWdodCkuZGl2aWRlZEJ5KDFlNCkudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSxtdXRlPWF3YWl0IGdldE11dGUocmV3YXJkUG9vbElkLGJlbmVmaWNpYXJ5LmFjY291bnQpLHJld2FyZExvZz17cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxhdXRob3JwZXJtOmF1dGhvcnBlcm0sc3ltYm9sOnN5bWJvbCxhY2NvdW50OmJlbmVmaWNpYXJ5LmFjY291bnQscXVhbnRpdHk6YmVuZVBheX07bXV0ZSYmKHJld2FyZExvZy5tdXRlPSEwKSxhcGkuZW1pdCgiYmVuZWZpY2lhcnlSZXdhcmQiLHJld2FyZExvZyksYXdhaXQgcGF5VXNlcihzeW1ib2wsYmVuZVBheSxiZW5lZmljaWFyeS5hY2NvdW50LHJld2FyZFBvb2wuY29uZmlnLnN0YWtlZFJld2FyZFBlcmNlbnRhZ2UsbXV0ZSksdG90YWxCZW5lUGF5PWFwaS5CaWdOdW1iZXIodG90YWxCZW5lUGF5KS5wbHVzKGJlbmVQYXkpfXJldHVybiB0b3RhbEJlbmVQYXl9YXN5bmMgZnVuY3Rpb24gcGF5T3V0Q3VyYXRvcnMocmV3YXJkUG9vbCx0b2tlbixwb3N0LGN1cmF0b3JQb3J0aW9uLHBhcmFtcyl7Y29uc3R7YXV0aG9ycGVybTphdXRob3JwZXJtLHN5bWJvbDpzeW1ib2wscmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZH09cG9zdCx7dm90ZVF1ZXJ5TGltaXQ6dm90ZVF1ZXJ5TGltaXR9PXBhcmFtcyxyZXNwb25zZT17ZG9uZTohMSx2b3Rlc1Byb2Nlc3NlZDowfSx2b3Rlc1RvUGF5b3V0PWF3YWl0IGFwaS5kYi5maW5kKCJ2b3RlcyIse3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsYXV0aG9ycGVybTphdXRob3JwZXJtfSx2b3RlUXVlcnlMaW1pdCwwLFt7aW5kZXg6ImJ5VGltZXN0YW1wIixkZXNjZW5kaW5nOiExfSx7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtpZigwPT09dm90ZXNUb1BheW91dC5sZW5ndGgpcmVzcG9uc2UuZG9uZT0hMDtlbHNle2ZvcihsZXQgaT0wO2k8dm90ZXNUb1BheW91dC5sZW5ndGg7aSs9MSl7Y29uc3Qgdm90ZT12b3Rlc1RvUGF5b3V0W2ldO2lmKGFwaS5CaWdOdW1iZXIodm90ZS5jdXJhdGlvbldlaWdodCk+MCl7Y29uc3QgdG90YWxDdXJhdGlvbldlaWdodD1jYWxjdWxhdGVDdXJhdGlvbldlaWdodFJzaGFyZXMocmV3YXJkUG9vbCxwb3N0LnZvdGVQb3NpdGl2ZVJzaGFyZVN1bSksdm90ZVBheT1hcGkuQmlnTnVtYmVyKGN1cmF0b3JQb3J0aW9uKS5tdWx0aXBsaWVkQnkodm90ZS5jdXJhdGlvbldlaWdodCkuZGl2aWRlZEJ5KHRvdGFsQ3VyYXRpb25XZWlnaHQpLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksbXV0ZT1hd2FpdCBnZXRNdXRlKHJld2FyZFBvb2xJZCx2b3RlLnZvdGVyKSxyZXdhcmRMb2c9e3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsYXV0aG9ycGVybTphdXRob3JwZXJtLHN5bWJvbDpzeW1ib2wsYWNjb3VudDp2b3RlLnZvdGVyLHF1YW50aXR5OnZvdGVQYXl9O211dGUmJihyZXdhcmRMb2cubXV0ZT0hMCksYXBpLmVtaXQoImN1cmF0aW9uUmV3YXJkIixyZXdhcmRMb2cpLGF3YWl0IHBheVVzZXIoc3ltYm9sLHZvdGVQYXksdm90ZS52b3RlcixyZXdhcmRQb29sLmNvbmZpZy5zdGFrZWRSZXdhcmRQZXJjZW50YWdlLG11dGUpfWF3YWl0IGFwaS5kYi5yZW1vdmUoInZvdGVzIix2b3RlKX1yZXNwb25zZS52b3Rlc1Byb2Nlc3NlZCs9dm90ZXNUb1BheW91dC5sZW5ndGgsdm90ZXNUb1BheW91dC5sZW5ndGg8dm90ZVF1ZXJ5TGltaXQmJihyZXNwb25zZS5kb25lPSEwKX1yZXR1cm4gcmVzcG9uc2V9YXN5bmMgZnVuY3Rpb24gcGF5T3V0UG9zdChyZXdhcmRQb29sLHRva2VuLHBvc3QscGFyYW1zKXtjb25zdCByZXNwb25zZT17dG90YWxQYXlvdXRWYWx1ZTowLHZvdGVzUHJvY2Vzc2VkOjAsZG9uZTohMX07aWYocG9zdC5kZWNsaW5lUGF5b3V0fHxwb3N0Lm11dGUpcmV0dXJuIGFwaS5lbWl0KCJhdXRob3JSZXdhcmQiLHtyZXdhcmRQb29sSWQ6cG9zdC5yZXdhcmRQb29sSWQsYXV0aG9ycGVybTpwb3N0LmF1dGhvcnBlcm0sc3ltYm9sOnBvc3Quc3ltYm9sLGFjY291bnQ6cG9zdC5hdXRob3IscXVhbnRpdHk6IjAifSkscmVzcG9uc2UuZG9uZT0hMCxhd2FpdCBhcGkuZGIucmVtb3ZlKCJwb3N0cyIscG9zdCkscmVzcG9uc2U7Y29uc3QgcG9zdENsYWltcz1jYWxjdWxhdGVXZWlnaHRSc2hhcmVzKHJld2FyZFBvb2wscG9zdC52b3RlUnNoYXJlU3VtKSxwb3N0UGVuZGluZ1Rva2VuPWFwaS5CaWdOdW1iZXIocmV3YXJkUG9vbC5pbnRlcnZhbFBlbmRpbmdDbGFpbXMpLmd0KDApP2FwaS5CaWdOdW1iZXIocmV3YXJkUG9vbC5pbnRlcnZhbFJld2FyZFBvb2wpLm11bHRpcGxpZWRCeShwb3N0Q2xhaW1zKS5kaXZpZGVkQnkocmV3YXJkUG9vbC5pbnRlcnZhbFBlbmRpbmdDbGFpbXMpLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTik6IjAiO3Jlc3BvbnNlLnRvdGFsUGF5b3V0VmFsdWU9cG9zdFBlbmRpbmdUb2tlbjtjb25zdCBjdXJhdG9yUG9ydGlvbj1hcGkuQmlnTnVtYmVyKHBvc3RQZW5kaW5nVG9rZW4pLm11bHRpcGxpZWRCeShyZXdhcmRQb29sLmNvbmZpZy5jdXJhdGlvblJld2FyZFBlcmNlbnRhZ2UpLmRpdmlkZWRCeSgxMDApLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksYXV0aG9yQmVuZVBvcnRpb249YXBpLkJpZ051bWJlcihwb3N0UGVuZGluZ1Rva2VuKS5taW51cyhjdXJhdG9yUG9ydGlvbikudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSxjdXJhdG9yUGF5U3RhdHVzPWF3YWl0IHBheU91dEN1cmF0b3JzKHJld2FyZFBvb2wsdG9rZW4scG9zdCxjdXJhdG9yUG9ydGlvbixwYXJhbXMpO2lmKHJlc3BvbnNlLnZvdGVzUHJvY2Vzc2VkKz1jdXJhdG9yUGF5U3RhdHVzLnZvdGVzUHJvY2Vzc2VkLHJlc3BvbnNlLmRvbmU9Y3VyYXRvclBheVN0YXR1cy5kb25lLGN1cmF0b3JQYXlTdGF0dXMuZG9uZSl7Y29uc3QgYmVuZWZpY2lhcmllc1BheW91dFZhbHVlPWF3YWl0IHBheU91dEJlbmVmaWNpYXJpZXMocmV3YXJkUG9vbCx0b2tlbixwb3N0LGF1dGhvckJlbmVQb3J0aW9uKSxhdXRob3JQb3J0aW9uPWFwaS5CaWdOdW1iZXIoYXV0aG9yQmVuZVBvcnRpb24pLm1pbnVzKGJlbmVmaWNpYXJpZXNQYXlvdXRWYWx1ZSkudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSxtdXRlPWF3YWl0IGdldE11dGUocG9zdC5yZXdhcmRQb29sSWQscG9zdC5hdXRob3IpLHJld2FyZExvZz17cmV3YXJkUG9vbElkOnBvc3QucmV3YXJkUG9vbElkLGF1dGhvcnBlcm06cG9zdC5hdXRob3JwZXJtLHN5bWJvbDpwb3N0LnN5bWJvbCxhY2NvdW50OnBvc3QuYXV0aG9yLHF1YW50aXR5OmF1dGhvclBvcnRpb259O211dGUmJihyZXdhcmRMb2cubXV0ZT0hMCksYXBpLmVtaXQoImF1dGhvclJld2FyZCIscmV3YXJkTG9nKSxhd2FpdCBwYXlVc2VyKHBvc3Quc3ltYm9sLGF1dGhvclBvcnRpb24scG9zdC5hdXRob3IscmV3YXJkUG9vbC5jb25maWcuc3Rha2VkUmV3YXJkUGVyY2VudGFnZSxtdXRlKSxhd2FpdCBhcGkuZGIucmVtb3ZlKCJwb3N0cyIscG9zdCl9cmV0dXJuIHJlc3BvbnNlfWFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVQb3N0UmV3YXJkcyhwYXJhbXMscmV3YXJkUG9vbCx0b2tlbixlbmRUaW1lc3RhbXApe2NvbnN0e2xhc3RDbGFpbURlY2F5VGltZXN0YW1wOmxhc3RDbGFpbURlY2F5VGltZXN0YW1wfT1yZXdhcmRQb29sLHttYXhQb3N0c1Byb2Nlc3NlZFBlclJvdW5kOm1heFBvc3RzUHJvY2Vzc2VkUGVyUm91bmQsbWF4Vm90ZXNQcm9jZXNzZWRQZXJSb3VuZDptYXhWb3Rlc1Byb2Nlc3NlZFBlclJvdW5kfT1wYXJhbXMscG9zdHNUb1BheW91dD1hd2FpdCBhcGkuZGIuZmluZCgicG9zdHMiLHtyZXdhcmRQb29sSWQ6cmV3YXJkUG9vbC5faWQsY2FzaG91dFRpbWU6eyRndGU6bGFzdENsYWltRGVjYXlUaW1lc3RhbXAsJGx0ZTplbmRUaW1lc3RhbXB9fSxtYXhQb3N0c1Byb2Nlc3NlZFBlclJvdW5kLDAsW3tpbmRleDoiYnlDYXNob3V0VGltZSIsZGVzY2VuZGluZzohMX0se2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7bGV0IGRvbmU9ITEsZGVkdWN0RnJvbVJld2FyZFBvb2w9YXBpLkJpZ051bWJlcigwKSx2b3Rlc1Byb2Nlc3NlZD0wO2lmKHBvc3RzVG9QYXlvdXQmJnBvc3RzVG9QYXlvdXQubGVuZ3RoPjApe2xldCBsaW1pdFJlYWNoZWQ9ITE7Zm9yKGxldCBpPTA7aTxwb3N0c1RvUGF5b3V0Lmxlbmd0aDtpKz0xKXtjb25zdCBwb3N0PXBvc3RzVG9QYXlvdXRbaV0scG9zdFBheW91dFJlc3BvbnNlPWF3YWl0IHBheU91dFBvc3QocmV3YXJkUG9vbCx0b2tlbixwb3N0LHBhcmFtcykse3RvdGFsUGF5b3V0VmFsdWU6dG90YWxQYXlvdXRWYWx1ZX09cG9zdFBheW91dFJlc3BvbnNlO2lmKHZvdGVzUHJvY2Vzc2VkKz1wb3N0UGF5b3V0UmVzcG9uc2Uudm90ZXNQcm9jZXNzZWQscG9zdFBheW91dFJlc3BvbnNlLmRvbmUmJihkZWR1Y3RGcm9tUmV3YXJkUG9vbD1kZWR1Y3RGcm9tUmV3YXJkUG9vbC5wbHVzKHRvdGFsUGF5b3V0VmFsdWUpKSwhcG9zdFBheW91dFJlc3BvbnNlLmRvbmV8fHZvdGVzUHJvY2Vzc2VkPj1tYXhWb3Rlc1Byb2Nlc3NlZFBlclJvdW5kKXtsaW1pdFJlYWNoZWQ9ITA7YnJlYWt9fSFsaW1pdFJlYWNoZWQmJnBvc3RzVG9QYXlvdXQubGVuZ3RoPG1heFBvc3RzUHJvY2Vzc2VkUGVyUm91bmQmJihkb25lPSEwKSxyZXdhcmRQb29sLnJld2FyZFBvb2w9YXBpLkJpZ051bWJlcihyZXdhcmRQb29sLnJld2FyZFBvb2wpLm1pbnVzKGRlZHVjdEZyb21SZXdhcmRQb29sKS50b0ZpeGVkKHRva2VuLnByZWNpc2lvbixhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pfWVsc2UgZG9uZT0hMDtkb25lJiYocmV3YXJkUG9vbC5sYXN0Q2xhaW1EZWNheVRpbWVzdGFtcD1lbmRUaW1lc3RhbXApfWFzeW5jIGZ1bmN0aW9uIHBvc3RDbGFpbXNJbkludGVydmFsKHBhcmFtcyxyZXdhcmRQb29sLHN0YXJ0LGVuZCl7bGV0IHBvc3RPZmZzZXQ9MCxuZXdQZW5kaW5nQ2xhaW1zPWFwaS5CaWdOdW1iZXIoMCkscG9zdHNUb1BheW91dD1hd2FpdCBhcGkuZGIuZmluZCgicG9zdHMiLHtyZXdhcmRQb29sSWQ6cmV3YXJkUG9vbC5faWQsY2FzaG91dFRpbWU6eyRndGU6c3RhcnQsJGx0ZTplbmR9fSwxZTMscG9zdE9mZnNldCxbe2luZGV4OiJieUNhc2hvdXRUaW1lIixkZXNjZW5kaW5nOiExfSx7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IoO3Bvc3RzVG9QYXlvdXQmJnBvc3RzVG9QYXlvdXQubGVuZ3RoPjAmJihuZXdQZW5kaW5nQ2xhaW1zPW5ld1BlbmRpbmdDbGFpbXMucGx1cyhwb3N0c1RvUGF5b3V0LnJlZHVjZSgoKHgseSk9PngucGx1cyhjYWxjdWxhdGVXZWlnaHRSc2hhcmVzKHJld2FyZFBvb2wseS52b3RlUnNoYXJlU3VtKSkpLGFwaS5CaWdOdW1iZXIoMCkpKS5kcCgxMCxhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pLCEocG9zdHNUb1BheW91dC5sZW5ndGg8MWUzKSk7KXBvc3RPZmZzZXQrPTFlMyxwb3N0c1RvUGF5b3V0PWF3YWl0IGFwaS5kYi5maW5kKCJwb3N0cyIse3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sLl9pZCxjYXNob3V0VGltZTp7JGd0ZTpzdGFydCwkbHRlOmVuZH19LDFlMyxwb3N0T2Zmc2V0LFt7aW5kZXg6ImJ5Q2FzaG91dFRpbWUiLGRlc2NlbmRpbmc6ITF9LHtpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO3JldHVybiBuZXdQZW5kaW5nQ2xhaW1zfWFzeW5jIGZ1bmN0aW9uIHRva2VuTWFpbnRlbmFuY2UoKXtjb25zdCB0aW1lc3RhbXA9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApLmdldFRpbWUoKSxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtsYXN0TWFpbnRlbmFuY2VCbG9jazpsYXN0TWFpbnRlbmFuY2VCbG9jayxsYXN0UHJvY2Vzc2VkUG9vbElkOmxhc3RQcm9jZXNzZWRQb29sSWQsbWFpbnRlbmFuY2VUb2tlbnNQZXJCbG9jazptYWludGVuYW5jZVRva2Vuc1BlckJsb2NrfT1wYXJhbXM7aWYobGFzdE1haW50ZW5hbmNlQmxvY2s+PWFwaS5ibG9ja051bWJlcilyZXR1cm47cGFyYW1zLmxhc3RNYWludGVuYW5jZUJsb2NrPWFwaS5ibG9ja051bWJlcjtjb25zdCByZXdhcmRQb29sUHJvY2Vzc2luZ0V4cHJlc3Npb249eyRsdGU6WyIkbGFzdENsYWltRGVjYXlUaW1lc3RhbXAiLHskc3VidHJhY3Q6W3RpbWVzdGFtcCx7JG11bHRpcGx5OlsiJGNvbmZpZy5yZXdhcmRJbnRlcnZhbFNlY29uZHMiLDFlM119XX1dfTtsZXQgcmV3YXJkUG9vbHM9YXdhaXQgYXBpLmRiLmZpbmQoInJld2FyZFBvb2xzIix7YWN0aXZlOiEwLCRleHByOnJld2FyZFBvb2xQcm9jZXNzaW5nRXhwcmVzc2lvbixfaWQ6eyRndDpsYXN0UHJvY2Vzc2VkUG9vbElkfX0sbWFpbnRlbmFuY2VUb2tlbnNQZXJCbG9jaywwLFt7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtpZighcmV3YXJkUG9vbHN8fHJld2FyZFBvb2xzLmxlbmd0aDxtYWludGVuYW5jZVRva2Vuc1BlckJsb2NrKXtyZXdhcmRQb29sc3x8KHJld2FyZFBvb2xzPVtdKTtjb25zdCBtb3JlUmV3YXJkUG9vbHM9YXdhaXQgYXBpLmRiLmZpbmQoInJld2FyZFBvb2xzIix7YWN0aXZlOiEwLCRleHByOnJld2FyZFBvb2xQcm9jZXNzaW5nRXhwcmVzc2lvbn0sbWFpbnRlbmFuY2VUb2tlbnNQZXJCbG9jay1yZXdhcmRQb29scy5sZW5ndGgsMCxbe2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSksZXhpc3RpbmdJZHM9bmV3IFNldChyZXdhcmRQb29scy5tYXAoKHA9PnAuX2lkKSkpO21vcmVSZXdhcmRQb29scy5mb3JFYWNoKChtcnA9PntleGlzdGluZ0lkcy5oYXMobXJwLl9pZCl8fHJld2FyZFBvb2xzLnB1c2gobXJwKX0pKX1pZihyZXdhcmRQb29scylmb3IobGV0IGk9MDtpPHJld2FyZFBvb2xzLmxlbmd0aDtpKz0xKXtjb25zdCByZXdhcmRQb29sPXJld2FyZFBvb2xzW2ldO3BhcmFtcy5sYXN0UHJvY2Vzc2VkUG9vbElkPXJld2FyZFBvb2wuX2lkO2NvbnN0e3N5bWJvbDpzeW1ib2wsbGFzdENsYWltRGVjYXlUaW1lc3RhbXA6bGFzdENsYWltRGVjYXlUaW1lc3RhbXAsbGFzdFJld2FyZFRpbWVzdGFtcDpsYXN0UmV3YXJkVGltZXN0YW1wLGNvbmZpZzpjb25maWd9PXJld2FyZFBvb2wse3Jld2FyZEludGVydmFsU2Vjb25kczpyZXdhcmRJbnRlcnZhbFNlY29uZHMsY2FzaG91dFdpbmRvd0RheXM6Y2FzaG91dFdpbmRvd0RheXN9PWNvbmZpZyx0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpzeW1ib2x9KSxyZXdhcmRJbnRlcnZhbER1cmF0aW9uTWlsbGlzPTFlMypyZXdhcmRJbnRlcnZhbFNlY29uZHMsbmV4dFJld2FyZFRpbWVzdGFtcD1sYXN0UmV3YXJkVGltZXN0YW1wK3Jld2FyZEludGVydmFsRHVyYXRpb25NaWxsaXMsbmV4dENsYWltRGVjYXlUaW1lc3RhbXA9bGFzdENsYWltRGVjYXlUaW1lc3RhbXArcmV3YXJkSW50ZXJ2YWxEdXJhdGlvbk1pbGxpcztpZihuZXh0Q2xhaW1EZWNheVRpbWVzdGFtcD49bmV4dFJld2FyZFRpbWVzdGFtcCl7bGV0e3Jld2FyZFBlckludGVydmFsOnJld2FyZFBlckludGVydmFsfT1jb25maWc7aWYoY29uZmlnLnJld2FyZFJlZHVjdGlvbkludGVydmFsU2Vjb25kcyYmY29uZmlnLnJld2FyZFJlZHVjdGlvblBlcmNlbnRhZ2Upe2NvbnN0IHJld2FyZFJlZHVjdGlvbkludGVydmFsTWlsbGlzPTFlMypjb25maWcucmV3YXJkUmVkdWN0aW9uSW50ZXJ2YWxTZWNvbmRzLG5leHRSZXdhcmRSZWR1Y3Rpb25UaW1lc3RhbXA9cmV3YXJkUG9vbC5sYXN0UmV3YXJkUmVkdWN0aW9uVGltZXN0YW1wK3Jld2FyZFJlZHVjdGlvbkludGVydmFsTWlsbGlzO2lmKG5leHRDbGFpbURlY2F5VGltZXN0YW1wPj1uZXh0UmV3YXJkUmVkdWN0aW9uVGltZXN0YW1wKXtjb25zdCByZWR1Y3Rpb249YXBpLkJpZ051bWJlcihyZXdhcmRQZXJJbnRlcnZhbCkubXVsdGlwbGllZEJ5KGNvbmZpZy5yZXdhcmRSZWR1Y3Rpb25QZXJjZW50YWdlKS5kaXZpZGVkQnkoMTAwKS50b0ZpeGVkKHRva2VuLnByZWNpc2lvbixhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pO3Jld2FyZFBlckludGVydmFsPWFwaS5CaWdOdW1iZXIocmV3YXJkUGVySW50ZXJ2YWwpLm1pbnVzKHJlZHVjdGlvbikudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSxyZXdhcmRQb29sLmxhc3RSZXdhcmRSZWR1Y3Rpb25UaW1lc3RhbXA9bmV4dFJld2FyZFJlZHVjdGlvblRpbWVzdGFtcCxjb25maWcucmV3YXJkUGVySW50ZXJ2YWw9cmV3YXJkUGVySW50ZXJ2YWx9fWNvbnN0IHJld2FyZFRvQWRkPWFwaS5CaWdOdW1iZXIocmV3YXJkUGVySW50ZXJ2YWwpO2FwaS5CaWdOdW1iZXIocmV3YXJkVG9BZGQpLmd0KDApJiYoYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJpc3N1ZVRvQ29udHJhY3QiLHtzeW1ib2w6cmV3YXJkUG9vbC5zeW1ib2wscXVhbnRpdHk6cmV3YXJkVG9BZGQsdG86ImNvbW1lbnRzIixpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ITB9KSxyZXdhcmRQb29sLnJld2FyZFBvb2w9YXBpLkJpZ051bWJlcihyZXdhcmRQb29sLnJld2FyZFBvb2wpLnBsdXMocmV3YXJkVG9BZGQpLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTikpO2NvbnN0IGFkanVzdE51bWVyPW5leHRSZXdhcmRUaW1lc3RhbXAtbGFzdFJld2FyZFRpbWVzdGFtcCxhZGp1c3REZW5vbT0yNCooMipjYXNob3V0V2luZG93RGF5cysxKSozNjAwKjFlMztyZXdhcmRQb29sLnBlbmRpbmdDbGFpbXM9YXBpLkJpZ051bWJlcihyZXdhcmRQb29sLnBlbmRpbmdDbGFpbXMpLm1pbnVzKGFwaS5CaWdOdW1iZXIocmV3YXJkUG9vbC5wZW5kaW5nQ2xhaW1zKS5tdWx0aXBsaWVkQnkoYWRqdXN0TnVtZXIpLmRpdmlkZWRCeShhZGp1c3REZW5vbSkpLnRvRml4ZWQoMTAsYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSxyZXdhcmRQb29sLnBlbmRpbmdDbGFpbXM9YXBpLkJpZ051bWJlcihyZXdhcmRQb29sLnBlbmRpbmdDbGFpbXMpLnBsdXMoYXdhaXQgcG9zdENsYWltc0luSW50ZXJ2YWwocGFyYW1zLHJld2FyZFBvb2wsbGFzdFJld2FyZFRpbWVzdGFtcCxuZXh0UmV3YXJkVGltZXN0YW1wKSkudG9GaXhlZCgxMCxhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pLHJld2FyZFBvb2wubGFzdFJld2FyZFRpbWVzdGFtcD1uZXh0UmV3YXJkVGltZXN0YW1wLHJld2FyZFBvb2wuaW50ZXJ2YWxQZW5kaW5nQ2xhaW1zPXJld2FyZFBvb2wucGVuZGluZ0NsYWltcyxyZXdhcmRQb29sLmludGVydmFsUmV3YXJkUG9vbD1yZXdhcmRQb29sLnJld2FyZFBvb2x9YXdhaXQgY29tcHV0ZVBvc3RSZXdhcmRzKHBhcmFtcyxyZXdhcmRQb29sLHRva2VuLG5leHRDbGFpbURlY2F5VGltZXN0YW1wKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJyZXdhcmRQb29scyIscmV3YXJkUG9vbCl9YXdhaXQgYXBpLmRiLnVwZGF0ZSgicGFyYW1zIixwYXJhbXMpfWZ1bmN0aW9uIGFzc2VydEFwcFRheENvbmZpZ1ZhbGlkKGFwcFRheENvbmZpZyl7aWYoIWFwaS5hc3NlcnQoIWFwcFRheENvbmZpZ3x8Im9iamVjdCI9PXR5cGVvZiBhcHBUYXhDb25maWcsImFwcFRheENvbmZpZyBpbnZhbGlkIikpcmV0dXJuITE7aWYoYXBwVGF4Q29uZmlnKXtjb25zdHthcHA6YXBwLHBlcmNlbnQ6cGVyY2VudCxiZW5lZmljaWFyeTpiZW5lZmljaWFyeX09YXBwVGF4Q29uZmlnO2lmKCFhcGkuYXNzZXJ0KGFwcCYmInN0cmluZyI9PXR5cGVvZiBhcHAsImFwcFRheENvbmZpZyBhcHAgaW52YWxpZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KHBlcmNlbnQmJk51bWJlci5pc0ludGVnZXIocGVyY2VudCkmJnBlcmNlbnQ+PTEmJnBlcmNlbnQ8PTEwMCwiYXBwVGF4Q29uZmlnIHBlcmNlbnQgc2hvdWxkIGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxMDAiKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydChiZW5lZmljaWFyeSYmYXBpLmlzVmFsaWRBY2NvdW50TmFtZShiZW5lZmljaWFyeSksImFwcFRheENvbmZpZyBiZW5lZmljaWFyeSBpbnZhbGlkIikpcmV0dXJuITF9cmV0dXJuITB9YXN5bmMgZnVuY3Rpb24gZ2V0UmV3YXJkUG9vbElkcyhwYXlsb2FkKXtjb25zdHtqc29uTWV0YWRhdGE6anNvbk1ldGFkYXRhLHBhcmVudEF1dGhvcjpwYXJlbnRBdXRob3IscGFyZW50UGVybWxpbms6cGFyZW50UGVybWxpbmt9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KTtpZihwYXJlbnRBdXRob3ImJnBhcmVudFBlcm1saW5rKXtjb25zdCBwYXJlbnRBdXRob3JwZXJtPWBAJHtwYXJlbnRBdXRob3J9LyR7cGFyZW50UGVybWxpbmt9YCxwYXJlbnRQb3N0TWV0YWRhdGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvc3RNZXRhZGF0YSIse2F1dGhvcnBlcm06cGFyZW50QXV0aG9ycGVybX0pO2lmKHBhcmVudFBvc3RNZXRhZGF0YSlyZXR1cm4gcGFyZW50UG9zdE1ldGFkYXRhLnJld2FyZFBvb2xJZHM7Y29uc3QgcGFyZW50UG9zdHM9YXdhaXQgYXBpLmRiLmZpbmQoInBvc3RzIix7YXV0aG9ycGVybTpwYXJlbnRBdXRob3JwZXJtfSk7cmV0dXJuIHBhcmVudFBvc3RzJiZwYXJlbnRQb3N0cy5sZW5ndGg+MD9wYXJlbnRQb3N0cy5tYXAoKHA9PnAucmV3YXJkUG9vbElkKSk6W119aWYoanNvbk1ldGFkYXRhJiZqc29uTWV0YWRhdGEudGFncyYmQXJyYXkuaXNBcnJheShqc29uTWV0YWRhdGEudGFncykmJmpzb25NZXRhZGF0YS50YWdzLmV2ZXJ5KCh0PT4ic3RyaW5nIj09dHlwZW9mIHQpKSl7Y29uc3Qgc2VhcmNoVGFncz1wYXJlbnRQZXJtbGluaz9qc29uTWV0YWRhdGEudGFncy5jb25jYXQoW3BhcmVudFBlcm1saW5rXSk6anNvbk1ldGFkYXRhLnRhZ3MscG9vbFF1ZXJ5PXsiY29uZmlnLnRhZ3MiOnskaW46c2VhcmNoVGFnc30sImNvbmZpZy5leGNsdWRlVGFncyI6eyRub3Q6eyRpbjpzZWFyY2hUYWdzfX19LHRhZ1Jld2FyZFBvb2xzPWF3YWl0IGFwaS5kYi5maW5kKCJyZXdhcmRQb29scyIscG9vbFF1ZXJ5LHBhcmFtcy5tYXhQb29sc1BlclBvc3QsMCxbe2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7aWYodGFnUmV3YXJkUG9vbHMmJnRhZ1Jld2FyZFBvb2xzLmxlbmd0aD4wKXJldHVybiB0YWdSZXdhcmRQb29scy5tYXAoKHI9PnIuX2lkKSl9cmV0dXJuW119YXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZvdGUocG9zdCx2b3Rlcix3ZWlnaHQsdGltZXN0YW1wKXtjb25zdHtyZXdhcmRQb29sSWQ6cmV3YXJkUG9vbElkLHN5bWJvbDpzeW1ib2wsYXV0aG9ycGVybTphdXRob3JwZXJtLGNhc2hvdXRUaW1lOmNhc2hvdXRUaW1lfT1wb3N0O2lmKGNhc2hvdXRUaW1lPHRpbWVzdGFtcClyZXR1cm47Y29uc3QgcmV3YXJkUG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicmV3YXJkUG9vbHMiLHtfaWQ6cmV3YXJkUG9vbElkfSk7aWYoIXJld2FyZFBvb2x8fCFyZXdhcmRQb29sLmFjdGl2ZSlyZXR1cm47bGV0IHZvdGluZ1Bvd2VyPWF3YWl0IGFwaS5kYi5maW5kT25lKCJ2b3RpbmdQb3dlciIse3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsYWNjb3VudDp2b3Rlcn0pO3ZvdGluZ1Bvd2VyPyh2b3RpbmdQb3dlci52b3RpbmdQb3dlcis9MWU0Kih0aW1lc3RhbXAtdm90aW5nUG93ZXIubGFzdFZvdGVUaW1lc3RhbXApLygyNCpyZXdhcmRQb29sLmNvbmZpZy52b3RlUmVnZW5lcmF0aW9uRGF5cyozNjAwKjFlMyksdm90aW5nUG93ZXIudm90aW5nUG93ZXI9TWF0aC5mbG9vcih2b3RpbmdQb3dlci52b3RpbmdQb3dlciksdm90aW5nUG93ZXIudm90aW5nUG93ZXI9TWF0aC5taW4odm90aW5nUG93ZXIudm90aW5nUG93ZXIsMWU0KSx2b3RpbmdQb3dlci5kb3dudm90aW5nUG93ZXIrPTFlNCoodGltZXN0YW1wLXZvdGluZ1Bvd2VyLmxhc3RWb3RlVGltZXN0YW1wKS8oMjQqcmV3YXJkUG9vbC5jb25maWcuZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzKjM2MDAqMWUzKSx2b3RpbmdQb3dlci5kb3dudm90aW5nUG93ZXI9TWF0aC5mbG9vcih2b3RpbmdQb3dlci5kb3dudm90aW5nUG93ZXIpLHZvdGluZ1Bvd2VyLmRvd252b3RpbmdQb3dlcj1NYXRoLm1pbih2b3RpbmdQb3dlci5kb3dudm90aW5nUG93ZXIsMWU0KSx2b3RpbmdQb3dlci5sYXN0Vm90ZVRpbWVzdGFtcD10aW1lc3RhbXApOih2b3RpbmdQb3dlcj17cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxhY2NvdW50OnZvdGVyLGxhc3RWb3RlVGltZXN0YW1wOnRpbWVzdGFtcCx2b3RpbmdQb3dlcjoxZTQsZG93bnZvdGluZ1Bvd2VyOjFlNH0sdm90aW5nUG93ZXI9YXdhaXQgYXBpLmRiLmluc2VydCgidm90aW5nUG93ZXIiLHZvdGluZ1Bvd2VyKSk7Y29uc3Qgdm90ZXJUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse3N5bWJvbDpzeW1ib2wsYWNjb3VudDp2b3Rlcn0pO2xldCBzdGFrZT12b3RlclRva2VuQmFsYW5jZT92b3RlclRva2VuQmFsYW5jZS5zdGFrZToiMCI7dm90ZXJUb2tlbkJhbGFuY2UmJnZvdGVyVG9rZW5CYWxhbmNlLmRlbGVnYXRpb25zSW4mJmFwaS5CaWdOdW1iZXIodm90ZXJUb2tlbkJhbGFuY2UuZGVsZWdhdGlvbnNJbikuaXNGaW5pdGUoKSYmKHN0YWtlPWFwaS5CaWdOdW1iZXIoc3Rha2UpLnBsdXModm90ZXJUb2tlbkJhbGFuY2UuZGVsZWdhdGlvbnNJbikpO2xldCB2b3RlUnNoYXJlcz0iMCIsdXBkYXRlZFBvc3RSc2hhcmVzPSIwIix1c2VkUG93ZXI9MCx1c2VkRG93bnZvdGVQb3dlcj0wLGN1cmF0aW9uV2VpZ2h0PSIwIjtpZih3ZWlnaHQ+MCl7dm90ZVJzaGFyZXM9YXBpLkJpZ051bWJlcihzdGFrZSkubXVsdGlwbGllZEJ5KHdlaWdodCkubXVsdGlwbGllZEJ5KHZvdGluZ1Bvd2VyLnZvdGluZ1Bvd2VyKS5kaXZpZGVkQnkoMWU0KS5kaXZpZGVkQnkoMWU0KS50b0ZpeGVkKDEwLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksdXNlZFBvd2VyPU1hdGguZmxvb3Iodm90aW5nUG93ZXIudm90aW5nUG93ZXIqTWF0aC5hYnMod2VpZ2h0KSo2MCo2MCoyNC8xZTQpO2NvbnN0IHVzZWRQb3dlckRlbm9tPU1hdGguZmxvb3IoODY0ZTYvcmV3YXJkUG9vbC5jb25maWcudm90ZVBvd2VyQ29uc3VtcHRpb24pO3VzZWRQb3dlcj1NYXRoLmZsb29yKCh1c2VkUG93ZXIrdXNlZFBvd2VyRGVub20tMSkvdXNlZFBvd2VyRGVub20pLHZvdGluZ1Bvd2VyLnZvdGluZ1Bvd2VyPU1hdGgubWF4KDAsTWF0aC5mbG9vcih2b3RpbmdQb3dlci52b3RpbmdQb3dlci11c2VkUG93ZXIpKSxjdXJhdGlvbldlaWdodD1hcGkuQmlnTnVtYmVyKGNhbGN1bGF0ZUN1cmF0aW9uV2VpZ2h0UnNoYXJlcyhyZXdhcmRQb29sLGFwaS5CaWdOdW1iZXIodm90ZVJzaGFyZXMpLnBsdXMocG9zdC52b3RlUG9zaXRpdmVSc2hhcmVTdW0pKSkubWludXMoY2FsY3VsYXRlQ3VyYXRpb25XZWlnaHRSc2hhcmVzKHJld2FyZFBvb2wscG9zdC52b3RlUG9zaXRpdmVSc2hhcmVTdW0pKS50b0ZpeGVkKDEwLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTil9ZWxzZSBpZih3ZWlnaHQ8MCYmIXJld2FyZFBvb2wuY29uZmlnLmRpc2FibGVEb3dudm90ZSl7dm90ZVJzaGFyZXM9YXBpLkJpZ051bWJlcihzdGFrZSkubXVsdGlwbGllZEJ5KHdlaWdodCkubXVsdGlwbGllZEJ5KHZvdGluZ1Bvd2VyLmRvd252b3RpbmdQb3dlcikuZGl2aWRlZEJ5KDFlNCkuZGl2aWRlZEJ5KDFlNCkudG9GaXhlZCgxMCxhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pLHVzZWREb3dudm90ZVBvd2VyPU1hdGguZmxvb3Iodm90aW5nUG93ZXIuZG93bnZvdGluZ1Bvd2VyKk1hdGguYWJzKHdlaWdodCkqNjAqNjAqMjQvMWU0KTtjb25zdCB1c2VkRG93bnZvdGVQb3dlckRlbm9tPU1hdGguZmxvb3IoODY0ZTYvcmV3YXJkUG9vbC5jb25maWcuZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uKTt1c2VkRG93bnZvdGVQb3dlcj1NYXRoLmZsb29yKCh1c2VkRG93bnZvdGVQb3dlcit1c2VkRG93bnZvdGVQb3dlckRlbm9tLTEpL3VzZWREb3dudm90ZVBvd2VyRGVub20pLHZvdGluZ1Bvd2VyLmRvd252b3RpbmdQb3dlcj1NYXRoLm1heCgwLE1hdGguZmxvb3Iodm90aW5nUG93ZXIuZG93bnZvdGluZ1Bvd2VyLXVzZWREb3dudm90ZVBvd2VyKSl9dm90aW5nUG93ZXIubXV0ZSYmKHZvdGVSc2hhcmVzPSIwIixjdXJhdGlvbldlaWdodD0iMCIpLGF3YWl0IGFwaS5kYi51cGRhdGUoInZvdGluZ1Bvd2VyIix2b3RpbmdQb3dlcik7bGV0IHZvdGU9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInZvdGVzIix7cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxhdXRob3JwZXJtOmF1dGhvcnBlcm0sdm90ZXI6dm90ZXJ9KTtpZih2b3RlKXt2b3RlLnRpbWVzdGFtcD10aW1lc3RhbXAsdm90ZS53ZWlnaHQ9d2VpZ2h0LHZvdGUuY3VyYXRpb25XZWlnaHQ9IjAiO2NvbnN0IG9sZFZvdGVSc2hhcmVzPXZvdGUucnNoYXJlczt2b3RlLnJzaGFyZXM9dm90ZVJzaGFyZXMsdXBkYXRlZFBvc3RSc2hhcmVzPWFwaS5CaWdOdW1iZXIodm90ZVJzaGFyZXMpLm1pbnVzKG9sZFZvdGVSc2hhcmVzKS50b0ZpeGVkKDEwLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksYXdhaXQgYXBpLmRiLnVwZGF0ZSgidm90ZXMiLHZvdGUpO2NvbnN0IHZvdGVMb2c9e3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsc3ltYm9sOnJld2FyZFBvb2wuc3ltYm9sLHJzaGFyZXM6dm90ZVJzaGFyZXN9O3ZvdGluZ1Bvd2VyLm11dGUmJih2b3RlTG9nLm11dGU9ITApLGFwaS5lbWl0KCJ1cGRhdGVWb3RlIix2b3RlTG9nKX1lbHNle3ZvdGU9e3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsc3ltYm9sOnN5bWJvbCxhdXRob3JwZXJtOmF1dGhvcnBlcm0sd2VpZ2h0OndlaWdodCxyc2hhcmVzOnZvdGVSc2hhcmVzLGN1cmF0aW9uV2VpZ2h0OmN1cmF0aW9uV2VpZ2h0LHRpbWVzdGFtcDp0aW1lc3RhbXAsdm90ZXI6dm90ZXJ9LHVwZGF0ZWRQb3N0UnNoYXJlcz12b3RlUnNoYXJlcyxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJ2b3RlcyIsdm90ZSk7Y29uc3Qgdm90ZUxvZz17cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxzeW1ib2w6cmV3YXJkUG9vbC5zeW1ib2wscnNoYXJlczp2b3RlUnNoYXJlc307dm90aW5nUG93ZXIubXV0ZSYmKHZvdGVMb2cubXV0ZT0hMCksYXBpLmVtaXQoIm5ld1ZvdGUiLHZvdGVMb2cpfWNvbnN0IG9sZFBvc3RDbGFpbXM9Y2FsY3VsYXRlV2VpZ2h0UnNoYXJlcyhyZXdhcmRQb29sLHBvc3Qudm90ZVJzaGFyZVN1bSk7aWYocG9zdC52b3RlUnNoYXJlU3VtPWFwaS5CaWdOdW1iZXIocG9zdC52b3RlUnNoYXJlU3VtKS5wbHVzKHVwZGF0ZWRQb3N0UnNoYXJlcykudG9GaXhlZCgxMCxhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pLGFwaS5CaWdOdW1iZXIodXBkYXRlZFBvc3RSc2hhcmVzKS5ndCgwKSYmKHBvc3Qudm90ZVBvc2l0aXZlUnNoYXJlU3VtPWFwaS5CaWdOdW1iZXIocG9zdC52b3RlUG9zaXRpdmVSc2hhcmVTdW0pLnBsdXModXBkYXRlZFBvc3RSc2hhcmVzKS50b0ZpeGVkKDEwLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksdGltZXN0YW1wPHJld2FyZFBvb2wuY3JlYXRlZFRpbWVzdGFtcCsyNCooMipyZXdhcmRQb29sLmNvbmZpZy5jYXNob3V0V2luZG93RGF5cysxKSozNjAwKjFlMykpe2NvbnN0IG5ld1Bvc3RDbGFpbXM9Y2FsY3VsYXRlV2VpZ2h0UnNoYXJlcyhyZXdhcmRQb29sLHBvc3Qudm90ZVJzaGFyZVN1bSk7cmV3YXJkUG9vbC5wZW5kaW5nQ2xhaW1zPWFwaS5CaWdOdW1iZXIocmV3YXJkUG9vbC5wZW5kaW5nQ2xhaW1zKS5wbHVzKG5ld1Bvc3RDbGFpbXMpLm1pbnVzKG9sZFBvc3RDbGFpbXMpLnRvRml4ZWQoMTAsYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJyZXdhcmRQb29scyIscmV3YXJkUG9vbCl9YXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9zdHMiLHBvc3QpfWFjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntpZighMT09PWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cygicmV3YXJkUG9vbHMiKSl7YXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwYXJhbXMiKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInJld2FyZFBvb2xzIixbImNvbmZpZy50YWdzIiwibGFzdENsYWltRGVjYXlUaW1lc3RhbXAiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwb3N0cyIsWyJhdXRob3JwZXJtIix7bmFtZToiYnlDYXNob3V0VGltZSIsaW5kZXg6e3Jld2FyZFBvb2xJZDoxLGNhc2hvdXRUaW1lOjF9fV0se3ByaW1hcnlLZXk6WyJhdXRob3JwZXJtIiwicmV3YXJkUG9vbElkIl19KSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBvc3RNZXRhZGF0YSIsW10se3ByaW1hcnlLZXk6WyJhdXRob3JwZXJtIl19KSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInZvdGVzIixbe25hbWU6ImJ5VGltZXN0YW1wIixpbmRleDp7cmV3YXJkUG9vbElkOjEsYXV0aG9ycGVybToxLHRpbWVzdGFtcDoxfX1dLHtwcmltYXJ5S2V5OlsicmV3YXJkUG9vbElkIiwiYXV0aG9ycGVybSIsInZvdGVyIl19KSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInZvdGluZ1Bvd2VyIixbXSx7cHJpbWFyeUtleTpbInJld2FyZFBvb2xJZCIsImFjY291bnQiXX0pO2NvbnN0IHBhcmFtcz17c2V0dXBGZWU6IjEwMDAiLHVwZGF0ZUZlZToiMjAiLG1heFBvb2xzUGVyUG9zdDoyMCxtYXhUYWdzUGVyUG9vbDo1LG1haW50ZW5hbmNlVG9rZW5zUGVyQmxvY2s6MixsYXN0TWFpbnRlbmFuY2VCbG9jazphcGkuYmxvY2tOdW1iZXIsbWF4UG9zdHNQcm9jZXNzZWRQZXJSb3VuZDoyMCx2b3RlUXVlcnlMaW1pdDoxMDAsbWF4Vm90ZXNQcm9jZXNzZWRQZXJSb3VuZDoxMDAsbGFzdFByb2Nlc3NlZFBvb2xJZDowfTthd2FpdCBhcGkuZGIuaW5zZXJ0KCJwYXJhbXMiLHBhcmFtcyl9fSxhY3Rpb25zLnVwZGF0ZVBhcmFtcz1hc3luYyBwYXlsb2FkPT57aWYoYXBpLnNlbmRlciE9PWFwaS5vd25lcilyZXR1cm47Y29uc3R7c2V0dXBGZWU6c2V0dXBGZWUsdXBkYXRlRmVlOnVwZGF0ZUZlZSxtYWludGVuYW5jZVRva2Vuc1BlckJsb2NrOm1haW50ZW5hbmNlVG9rZW5zUGVyQmxvY2ssbWF4UG9zdHNQcm9jZXNzZWRQZXJSb3VuZDptYXhQb3N0c1Byb2Nlc3NlZFBlclJvdW5kLG1heFZvdGVzUHJvY2Vzc2VkUGVyUm91bmQ6bWF4Vm90ZXNQcm9jZXNzZWRQZXJSb3VuZCx2b3RlUXVlcnlMaW1pdDp2b3RlUXVlcnlMaW1pdH09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pO2lmKHNldHVwRmVlKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHNldHVwRmVlJiYhYXBpLkJpZ051bWJlcihzZXR1cEZlZSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihzZXR1cEZlZSkuZ3RlKDApLCJpbnZhbGlkIHNldHVwRmVlIikpcmV0dXJuO3BhcmFtcy5zZXR1cEZlZT1zZXR1cEZlZX1pZih1cGRhdGVGZWUpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgdXBkYXRlRmVlJiYhYXBpLkJpZ051bWJlcih1cGRhdGVGZWUpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIodXBkYXRlRmVlKS5ndGUoMCksImludmFsaWQgdXBkYXRlRmVlIikpcmV0dXJuO3BhcmFtcy51cGRhdGVGZWU9dXBkYXRlRmVlfWlmKG1haW50ZW5hbmNlVG9rZW5zUGVyQmxvY2spe2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobWFpbnRlbmFuY2VUb2tlbnNQZXJCbG9jaykmJm1haW50ZW5hbmNlVG9rZW5zUGVyQmxvY2s+PTEsImludmFsaWQgbWFpbnRlbmFuY2VUb2tlbnNQZXJCbG9jayIpKXJldHVybjtwYXJhbXMubWFpbnRlbmFuY2VUb2tlbnNQZXJCbG9jaz1tYWludGVuYW5jZVRva2Vuc1BlckJsb2NrfWlmKG1heFBvc3RzUHJvY2Vzc2VkUGVyUm91bmQpe2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobWF4UG9zdHNQcm9jZXNzZWRQZXJSb3VuZCkmJm1heFBvc3RzUHJvY2Vzc2VkUGVyUm91bmQ+PTEsImludmFsaWQgbWF4UG9zdHNQcm9jZXNzZWRQZXJSb3VuZCIpKXJldHVybjtwYXJhbXMubWF4UG9zdHNQcm9jZXNzZWRQZXJSb3VuZD1tYXhQb3N0c1Byb2Nlc3NlZFBlclJvdW5kfWlmKG1heFZvdGVzUHJvY2Vzc2VkUGVyUm91bmQpe2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobWF4Vm90ZXNQcm9jZXNzZWRQZXJSb3VuZCkmJm1heFZvdGVzUHJvY2Vzc2VkUGVyUm91bmQ+PTEsImludmFsaWQgbWF4Vm90ZXNQcm9jZXNzZWRQZXJSb3VuZCIpKXJldHVybjtwYXJhbXMubWF4Vm90ZXNQcm9jZXNzZWRQZXJSb3VuZD1tYXhWb3Rlc1Byb2Nlc3NlZFBlclJvdW5kfWlmKHZvdGVRdWVyeUxpbWl0KXtpZighYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKHZvdGVRdWVyeUxpbWl0KSYmdm90ZVF1ZXJ5TGltaXQ+PTEsImludmFsaWQgdm90ZVF1ZXJ5TGltaXQiKSlyZXR1cm47cGFyYW1zLnZvdGVRdWVyeUxpbWl0PXZvdGVRdWVyeUxpbWl0fWF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIscGFyYW1zKX0sYWN0aW9ucy5jcmVhdGVSZXdhcmRQb29sPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLGNvbmZpZzpjb25maWcsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZighYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwib3BlcmF0aW9uIG11c3QgYmUgc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikpcmV0dXJuO2NvbnN0IHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse3NldHVwRmVlOnNldHVwRmVlLG1heFRhZ3NQZXJQb29sOm1heFRhZ3NQZXJQb29sfT1wYXJhbXMsdXRpbGl0eVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDoiQkVFIn0pLGF1dGhvcml6ZWRDcmVhdGlvbj0hKCFhcGkuQmlnTnVtYmVyKHNldHVwRmVlKS5sdGUoMCkmJmFwaS5zZW5kZXIhPT1hcGkub3duZXIpfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKHNldHVwRmVlKTtpZighYXBpLmFzc2VydChhdXRob3JpemVkQ3JlYXRpb24sInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlIikpcmV0dXJuO2NvbnN0IHRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnN5bWJvbH0pO2lmKCFhcGkuYXNzZXJ0KHRva2VuLCJ0b2tlbiBub3QgZm91bmQiKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoY29uZmlnJiYib2JqZWN0Ij09dHlwZW9mIGNvbmZpZywiY29uZmlnIGludmFsaWQiKSlyZXR1cm47Y29uc3R7cG9zdFJld2FyZEN1cnZlOnBvc3RSZXdhcmRDdXJ2ZSxwb3N0UmV3YXJkQ3VydmVQYXJhbWV0ZXI6cG9zdFJld2FyZEN1cnZlUGFyYW1ldGVyLGN1cmF0aW9uUmV3YXJkQ3VydmU6Y3VyYXRpb25SZXdhcmRDdXJ2ZSxjdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyOmN1cmF0aW9uUmV3YXJkQ3VydmVQYXJhbWV0ZXIsY3VyYXRpb25SZXdhcmRQZXJjZW50YWdlOmN1cmF0aW9uUmV3YXJkUGVyY2VudGFnZSxjYXNob3V0V2luZG93RGF5czpjYXNob3V0V2luZG93RGF5cyxyZXdhcmRQZXJJbnRlcnZhbDpyZXdhcmRQZXJJbnRlcnZhbCxyZXdhcmRJbnRlcnZhbFNlY29uZHM6cmV3YXJkSW50ZXJ2YWxTZWNvbmRzLHZvdGVSZWdlbmVyYXRpb25EYXlzOnZvdGVSZWdlbmVyYXRpb25EYXlzLGRvd252b3RlUmVnZW5lcmF0aW9uRGF5czpkb3dudm90ZVJlZ2VuZXJhdGlvbkRheXMsc3Rha2VkUmV3YXJkUGVyY2VudGFnZTpzdGFrZWRSZXdhcmRQZXJjZW50YWdlLHZvdGVQb3dlckNvbnN1bXB0aW9uOnZvdGVQb3dlckNvbnN1bXB0aW9uLGRvd252b3RlUG93ZXJDb25zdW1wdGlvbjpkb3dudm90ZVBvd2VyQ29uc3VtcHRpb24sdGFnczp0YWdzLGRpc2FibGVEb3dudm90ZTpkaXNhYmxlRG93bnZvdGUsaWdub3JlRGVjbGluZVBheW91dDppZ25vcmVEZWNsaW5lUGF5b3V0LGFwcFRheENvbmZpZzphcHBUYXhDb25maWcsZXhjbHVkZVRhZ3M6ZXhjbHVkZVRhZ3MscmV3YXJkUmVkdWN0aW9uSW50ZXJ2YWxTZWNvbmRzOnJld2FyZFJlZHVjdGlvbkludGVydmFsU2Vjb25kcyxyZXdhcmRSZWR1Y3Rpb25QZXJjZW50YWdlOnJld2FyZFJlZHVjdGlvblBlcmNlbnRhZ2V9PWNvbmZpZztpZighYXBpLmFzc2VydChwb3N0UmV3YXJkQ3VydmUmJiJwb3dlciI9PT1wb3N0UmV3YXJkQ3VydmUsInBvc3RSZXdhcmRDdXJ2ZSBzaG91bGQgYmUgb25lIG9mOiBbcG93ZXJdIikpcmV0dXJuO2NvbnN0IHBvc3RFeHBvbmVudD1hcGkuQmlnTnVtYmVyKHBvc3RSZXdhcmRDdXJ2ZVBhcmFtZXRlcik7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBwb3N0UmV3YXJkQ3VydmVQYXJhbWV0ZXImJnBvc3RFeHBvbmVudC5pc0Zpbml0ZSgpJiZwb3N0RXhwb25lbnQuZ3RlKCIxIikmJnBvc3RFeHBvbmVudC5sdGUoIjIiKSYmcG9zdEV4cG9uZW50LmRwKCk8PTIsJ3Bvc3RSZXdhcmRDdXJ2ZVBhcmFtZXRlciBzaG91bGQgYmUgYmV0d2VlbiAiMSIgYW5kICIyIiB3aXRoIHByZWNpc2lvbiBhdCBtb3N0IDInKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoY3VyYXRpb25SZXdhcmRDdXJ2ZSYmInBvd2VyIj09PWN1cmF0aW9uUmV3YXJkQ3VydmUsImN1cmF0aW9uUmV3YXJkQ3VydmUgc2hvdWxkIGJlIG9uZSBvZjogW3Bvd2VyXSIpKXJldHVybjtjb25zdCBjdXJhdGlvbkV4cG9uZW50PWFwaS5CaWdOdW1iZXIoY3VyYXRpb25SZXdhcmRDdXJ2ZVBhcmFtZXRlcik7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBjdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyJiZjdXJhdGlvbkV4cG9uZW50LmlzRmluaXRlKCkmJmN1cmF0aW9uRXhwb25lbnQuZ3RlKCIwLjUiKSYmY3VyYXRpb25FeHBvbmVudC5sdGUoIjEiKSYmY3VyYXRpb25FeHBvbmVudC5kcCgpPD0yLCdjdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyIGNhbiBvbmx5IGJlIGJldHdlZW4gIjAuNSIgYW5kICIxIiB3aXRoIHByZWNpc2lvbiBhdCBtb3N0IDInKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2UpJiZjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2U+PTAmJmN1cmF0aW9uUmV3YXJkUGVyY2VudGFnZTw9MTAwLCJjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2Ugc2hvdWxkIGJlIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAxMDAiKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoY2FzaG91dFdpbmRvd0RheXMmJk51bWJlci5pc0ludGVnZXIoY2FzaG91dFdpbmRvd0RheXMpJiZjYXNob3V0V2luZG93RGF5cz49MSYmY2FzaG91dFdpbmRvd0RheXM8PTMwLCJjYXNob3V0V2luZG93RGF5cyBzaG91bGQgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDMwIikpcmV0dXJuO2NvbnN0IHBhcnNlZFJld2FyZFBlckludGVydmFsPWFwaS5CaWdOdW1iZXIocmV3YXJkUGVySW50ZXJ2YWwpO2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgcmV3YXJkUGVySW50ZXJ2YWwmJnBhcnNlZFJld2FyZFBlckludGVydmFsLmlzRmluaXRlKCkmJnBhcnNlZFJld2FyZFBlckludGVydmFsLmd0KDApLCJyZXdhcmRQZXJJbnRlcnZhbCBpbnZhbGlkIil8fCFhcGkuYXNzZXJ0KHBhcnNlZFJld2FyZFBlckludGVydmFsLmRwKCk8PXRva2VuLnByZWNpc2lvbiwidG9rZW4gcHJlY2lzaW9uIG1pc21hdGNoIGZvciByZXdhcmRQZXJJbnRlcnZhbCIpKXJldHVybjtpZighYXBpLmFzc2VydChyZXdhcmRJbnRlcnZhbFNlY29uZHMmJk51bWJlci5pc0ludGVnZXIocmV3YXJkSW50ZXJ2YWxTZWNvbmRzKSYmcmV3YXJkSW50ZXJ2YWxTZWNvbmRzPj0zJiZyZXdhcmRJbnRlcnZhbFNlY29uZHM8PTg2NDAwJiZyZXdhcmRJbnRlcnZhbFNlY29uZHMlMz09MCwicmV3YXJkSW50ZXJ2YWxTZWNvbmRzIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMyBhbmQgODY0MDAsIGFuZCBkaXZpc2libGUgYnkgMyIpKXJldHVybjtpZighYXBpLmFzc2VydCh2b3RlUmVnZW5lcmF0aW9uRGF5cyYmTnVtYmVyLmlzSW50ZWdlcih2b3RlUmVnZW5lcmF0aW9uRGF5cykmJnZvdGVSZWdlbmVyYXRpb25EYXlzPj0xJiZ2b3RlUmVnZW5lcmF0aW9uRGF5czw9MzAsInZvdGVSZWdlbmVyYXRpb25EYXlzIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMzAiKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzJiZOdW1iZXIuaXNJbnRlZ2VyKGRvd252b3RlUmVnZW5lcmF0aW9uRGF5cykmJmRvd252b3RlUmVnZW5lcmF0aW9uRGF5cz49MSYmZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzPD0zMCwiZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMzAiKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihzdGFrZWRSZXdhcmRQZXJjZW50YWdlKSYmc3Rha2VkUmV3YXJkUGVyY2VudGFnZT49MCYmc3Rha2VkUmV3YXJkUGVyY2VudGFnZTw9MTAwLCJzdGFrZWRSZXdhcmRQZXJjZW50YWdlIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMTAwIikpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KHZvdGVQb3dlckNvbnN1bXB0aW9uJiZOdW1iZXIuaXNJbnRlZ2VyKHZvdGVQb3dlckNvbnN1bXB0aW9uKSYmdm90ZVBvd2VyQ29uc3VtcHRpb24+PTEmJnZvdGVQb3dlckNvbnN1bXB0aW9uPD0xZTQsInZvdGVQb3dlckNvbnN1bXB0aW9uIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAwMDAiKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uJiZOdW1iZXIuaXNJbnRlZ2VyKGRvd252b3RlUG93ZXJDb25zdW1wdGlvbikmJmRvd252b3RlUG93ZXJDb25zdW1wdGlvbj49MSYmZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uPD0xZTQsImRvd252b3RlUG93ZXJDb25zdW1wdGlvbiBzaG91bGQgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEwMDAwIikpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KEFycmF5LmlzQXJyYXkodGFncykmJnRhZ3MubGVuZ3RoPj0xJiZ0YWdzLmxlbmd0aDw9bWF4VGFnc1BlclBvb2wmJnRhZ3MuZXZlcnkoKHQ9PiJzdHJpbmciPT10eXBlb2YgdCkpLGB0YWdzIHNob3VsZCBiZSBhIG5vbi1lbXB0eSBhcnJheSBvZiBzdHJpbmdzIG9mIGxlbmd0aCBhdCBtb3N0ICR7bWF4VGFnc1BlclBvb2x9YCkpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KCJib29sZWFuIj09dHlwZW9mIGRpc2FibGVEb3dudm90ZSwiZGlzYWJsZURvd252b3RlIHNob3VsZCBiZSBib29sZWFuIikpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KCJib29sZWFuIj09dHlwZW9mIGlnbm9yZURlY2xpbmVQYXlvdXQsImlnbm9yZURlY2xpbmVQYXlvdXQgc2hvdWxkIGJlIGJvb2xlYW4iKSlyZXR1cm47aWYoIWFzc2VydEFwcFRheENvbmZpZ1ZhbGlkKGFwcFRheENvbmZpZykpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KCFleGNsdWRlVGFnc3x8QXJyYXkuaXNBcnJheShleGNsdWRlVGFncykmJmV4Y2x1ZGVUYWdzLmxlbmd0aD49MSYmZXhjbHVkZVRhZ3MubGVuZ3RoPD1tYXhUYWdzUGVyUG9vbCYmZXhjbHVkZVRhZ3MuZXZlcnkoKHQ9PiJzdHJpbmciPT10eXBlb2YgdCkpLGBleGNsdWRlVGFncyBzaG91bGQgYmUgYSBub24tZW1wdHkgYXJyYXkgb2Ygc3RyaW5ncyBvZiBsZW5ndGggYXQgbW9zdCAke21heFRhZ3NQZXJQb29sfWApKXJldHVybjtpZighYXBpLmFzc2VydCghcmV3YXJkUmVkdWN0aW9uSW50ZXJ2YWxTZWNvbmRzfHxOdW1iZXIuaXNJbnRlZ2VyKHJld2FyZFJlZHVjdGlvbkludGVydmFsU2Vjb25kcykmJnJld2FyZFJlZHVjdGlvbkludGVydmFsU2Vjb25kcz49cmV3YXJkSW50ZXJ2YWxTZWNvbmRzLCJyZXdhcmRSZWR1Y3Rpb25JbnRlcnZhbFNlY29uZHMgc2hvdWxkIGJlIGFuIGludGVnZXIgZ3JlYXRlciBvciBlcXVhbCB0byByZXdhcmRJbnRlcnZhbFNlY29uZHMiKSlyZXR1cm47Y29uc3QgcmV3YXJkUmVkdWN0aW9uUGVyY2VudGFnZURlY2ltYWw9YXBpLkJpZ051bWJlcihyZXdhcmRSZWR1Y3Rpb25QZXJjZW50YWdlKTtpZighYXBpLmFzc2VydCghcmV3YXJkUmVkdWN0aW9uUGVyY2VudGFnZXx8InN0cmluZyI9PXR5cGVvZiByZXdhcmRSZWR1Y3Rpb25QZXJjZW50YWdlJiZyZXdhcmRSZWR1Y3Rpb25QZXJjZW50YWdlRGVjaW1hbC5pc0Zpbml0ZSgpJiZyZXdhcmRSZWR1Y3Rpb25QZXJjZW50YWdlRGVjaW1hbC5ndGUoIjAiKSYmcmV3YXJkUmVkdWN0aW9uUGVyY2VudGFnZURlY2ltYWwubHRlKCIxMDAiKSYmcmV3YXJkUmVkdWN0aW9uUGVyY2VudGFnZURlY2ltYWwuZHAoKTw9MSwncmV3YXJkUmVkdWN0aW9uUGVyY2VudGFnZSBzaG91bGQgYmUgYmV0d2VlbiAiMCIgYW5kICIxMDAiIHdpdGggcHJlY2lzaW9uIGF0IG1vc3QgMScpKXJldHVybjtpZighYXBpLmFzc2VydChhcGkuc2VuZGVyPT09dG9rZW4uaXNzdWVyfHxhcGkuc2VuZGVyPT09YXBpLm93bmVyJiYiQkVFIj09PXRva2VuLnN5bWJvbCwibXVzdCBiZSBpc3N1ZXIgb2YgdG9rZW4iKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQodG9rZW4uc3Rha2luZ0VuYWJsZWQsInRva2VuIG11c3QgaGF2ZSBzdGFraW5nIGVuYWJsZWQiKSlyZXR1cm47Y29uc3QgZXhpc3RpbmdSZXdhcmRQb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJyZXdhcmRQb29scyIse3N5bWJvbDpzeW1ib2x9KTtpZighYXBpLmFzc2VydCghZXhpc3RpbmdSZXdhcmRQb29sLCJjYW5ub3QgY3JlYXRlIG11bHRpcGxlIHJld2FyZCBwb29scyBwZXIgdG9rZW4iKSlyZXR1cm47Y29uc3QgdGltZXN0YW1wPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKS5nZXRUaW1lKCkscmV3YXJkUG9vbD17c3ltYm9sOnN5bWJvbCxyZXdhcmRQb29sOiIwIixsYXN0UmV3YXJkVGltZXN0YW1wOnRpbWVzdGFtcCxsYXN0Q2xhaW1EZWNheVRpbWVzdGFtcDp0aW1lc3RhbXAsY3JlYXRlZFRpbWVzdGFtcDp0aW1lc3RhbXAsbGFzdFJld2FyZFJlZHVjdGlvblRpbWVzdGFtcDp0aW1lc3RhbXAsY29uZmlnOntwb3N0UmV3YXJkQ3VydmU6cG9zdFJld2FyZEN1cnZlLHBvc3RSZXdhcmRDdXJ2ZVBhcmFtZXRlcjpwb3N0UmV3YXJkQ3VydmVQYXJhbWV0ZXIsY3VyYXRpb25SZXdhcmRDdXJ2ZTpjdXJhdGlvblJld2FyZEN1cnZlLGN1cmF0aW9uUmV3YXJkQ3VydmVQYXJhbWV0ZXI6Y3VyYXRpb25SZXdhcmRDdXJ2ZVBhcmFtZXRlcixjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2U6Y3VyYXRpb25SZXdhcmRQZXJjZW50YWdlLGNhc2hvdXRXaW5kb3dEYXlzOmNhc2hvdXRXaW5kb3dEYXlzLHJld2FyZFBlckludGVydmFsOnJld2FyZFBlckludGVydmFsLHJld2FyZEludGVydmFsU2Vjb25kczpyZXdhcmRJbnRlcnZhbFNlY29uZHMsdm90ZVJlZ2VuZXJhdGlvbkRheXM6dm90ZVJlZ2VuZXJhdGlvbkRheXMsZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzOmRvd252b3RlUmVnZW5lcmF0aW9uRGF5cyxzdGFrZWRSZXdhcmRQZXJjZW50YWdlOnN0YWtlZFJld2FyZFBlcmNlbnRhZ2Usdm90ZVBvd2VyQ29uc3VtcHRpb246dm90ZVBvd2VyQ29uc3VtcHRpb24sZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uOmRvd252b3RlUG93ZXJDb25zdW1wdGlvbix0YWdzOnRhZ3MsZGlzYWJsZURvd252b3RlOmRpc2FibGVEb3dudm90ZSxpZ25vcmVEZWNsaW5lUGF5b3V0Omlnbm9yZURlY2xpbmVQYXlvdXQsYXBwVGF4Q29uZmlnOmFwcFRheENvbmZpZyxleGNsdWRlVGFnczpleGNsdWRlVGFncyxyZXdhcmRSZWR1Y3Rpb25JbnRlcnZhbFNlY29uZHM6cmV3YXJkUmVkdWN0aW9uSW50ZXJ2YWxTZWNvbmRzLHJld2FyZFJlZHVjdGlvblBlcmNlbnRhZ2U6cmV3YXJkUmVkdWN0aW9uUGVyY2VudGFnZX0scGVuZGluZ0NsYWltczoiMCIsYWN0aXZlOiEwfSxpbnNlcnRlZFJld2FyZFBvb2w9YXdhaXQgYXBpLmRiLmluc2VydCgicmV3YXJkUG9vbHMiLHJld2FyZFBvb2wpO2FwaS5zZW5kZXIhPT1hcGkub3duZXImJmFwaS5CaWdOdW1iZXIoc2V0dXBGZWUpLmd0KDApJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDoiQkVFIixxdWFudGl0eTpzZXR1cEZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSksYXBpLmVtaXQoImNyZWF0ZVJld2FyZFBvb2wiLHtfaWQ6aW5zZXJ0ZWRSZXdhcmRQb29sLl9pZH0pfSxhY3Rpb25zLnVwZGF0ZVJld2FyZFBvb2w9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsY29uZmlnOmNvbmZpZyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJvcGVyYXRpb24gbXVzdCBiZSBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSlyZXR1cm47Y29uc3QgcGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7dXBkYXRlRmVlOnVwZGF0ZUZlZSxtYXhUYWdzUGVyUG9vbDptYXhUYWdzUGVyUG9vbH09cGFyYW1zLHV0aWxpdHlUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6IkJFRSJ9KSxhdXRob3JpemVkPSEoIWFwaS5CaWdOdW1iZXIodXBkYXRlRmVlKS5sdGUoMCkmJmFwaS5zZW5kZXIhPT1hcGkub3duZXIpfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKHVwZGF0ZUZlZSk7aWYoIWFwaS5hc3NlcnQoYXV0aG9yaXplZCwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSB1cGRhdGUgZmVlIikpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KGNvbmZpZyYmIm9iamVjdCI9PXR5cGVvZiBjb25maWcsImNvbmZpZyBpbnZhbGlkIikpcmV0dXJuO2NvbnN0e3Bvc3RSZXdhcmRDdXJ2ZTpwb3N0UmV3YXJkQ3VydmUscG9zdFJld2FyZEN1cnZlUGFyYW1ldGVyOnBvc3RSZXdhcmRDdXJ2ZVBhcmFtZXRlcixjdXJhdGlvblJld2FyZEN1cnZlOmN1cmF0aW9uUmV3YXJkQ3VydmUsY3VyYXRpb25SZXdhcmRDdXJ2ZVBhcmFtZXRlcjpjdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyLGN1cmF0aW9uUmV3YXJkUGVyY2VudGFnZTpjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2UsY2FzaG91dFdpbmRvd0RheXM6Y2FzaG91dFdpbmRvd0RheXMscmV3YXJkUGVySW50ZXJ2YWw6cmV3YXJkUGVySW50ZXJ2YWwscmV3YXJkSW50ZXJ2YWxTZWNvbmRzOnJld2FyZEludGVydmFsU2Vjb25kcyx2b3RlUmVnZW5lcmF0aW9uRGF5czp2b3RlUmVnZW5lcmF0aW9uRGF5cyxkb3dudm90ZVJlZ2VuZXJhdGlvbkRheXM6ZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzLHN0YWtlZFJld2FyZFBlcmNlbnRhZ2U6c3Rha2VkUmV3YXJkUGVyY2VudGFnZSx2b3RlUG93ZXJDb25zdW1wdGlvbjp2b3RlUG93ZXJDb25zdW1wdGlvbixkb3dudm90ZVBvd2VyQ29uc3VtcHRpb246ZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uLHRhZ3M6dGFncyxkaXNhYmxlRG93bnZvdGU6ZGlzYWJsZURvd252b3RlLGlnbm9yZURlY2xpbmVQYXlvdXQ6aWdub3JlRGVjbGluZVBheW91dCxhcHBUYXhDb25maWc6YXBwVGF4Q29uZmlnLGV4Y2x1ZGVUYWdzOmV4Y2x1ZGVUYWdzLHJld2FyZFJlZHVjdGlvbkludGVydmFsU2Vjb25kczpyZXdhcmRSZWR1Y3Rpb25JbnRlcnZhbFNlY29uZHMscmV3YXJkUmVkdWN0aW9uUGVyY2VudGFnZTpyZXdhcmRSZWR1Y3Rpb25QZXJjZW50YWdlfT1jb25maWcsZXhpc3RpbmdSZXdhcmRQb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJyZXdhcmRQb29scyIse19pZDpyZXdhcmRQb29sSWR9KTtpZighYXBpLmFzc2VydChleGlzdGluZ1Jld2FyZFBvb2wsInJld2FyZCBwb29sIG5vdCBmb3VuZCIpKXJldHVybjtjb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpleGlzdGluZ1Jld2FyZFBvb2wuc3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQocG9zdFJld2FyZEN1cnZlJiYicG93ZXIiPT09cG9zdFJld2FyZEN1cnZlLCJwb3N0UmV3YXJkQ3VydmUgc2hvdWxkIGJlIG9uZSBvZjogW3Bvd2VyXSIpKXJldHVybjtleGlzdGluZ1Jld2FyZFBvb2wuY29uZmlnLnBvc3RSZXdhcmRDdXJ2ZT1wb3N0UmV3YXJkQ3VydmU7Y29uc3QgcG9zdEV4cG9uZW50PWFwaS5CaWdOdW1iZXIocG9zdFJld2FyZEN1cnZlUGFyYW1ldGVyKTtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHBvc3RSZXdhcmRDdXJ2ZVBhcmFtZXRlciYmcG9zdEV4cG9uZW50LmlzRmluaXRlKCkmJnBvc3RFeHBvbmVudC5ndGUoIjEiKSYmcG9zdEV4cG9uZW50Lmx0ZSgiMiIpJiZwb3N0RXhwb25lbnQuZHAoKTw9MiwncG9zdFJld2FyZEN1cnZlUGFyYW1ldGVyIHNob3VsZCBiZSBiZXR3ZWVuICIxIiBhbmQgIjIiIHdpdGggcHJlY2lzaW9uIGF0IG1vc3QgMicpKXJldHVybjtpZihleGlzdGluZ1Jld2FyZFBvb2wuY29uZmlnLnBvc3RSZXdhcmRDdXJ2ZVBhcmFtZXRlcj1wb3N0UmV3YXJkQ3VydmVQYXJhbWV0ZXIsIWFwaS5hc3NlcnQoY3VyYXRpb25SZXdhcmRDdXJ2ZSYmInBvd2VyIj09PWN1cmF0aW9uUmV3YXJkQ3VydmUsImN1cmF0aW9uUmV3YXJkQ3VydmUgc2hvdWxkIGJlIG9uZSBvZjogW3Bvd2VyXSIpKXJldHVybjtjb25zdCBjdXJhdGlvbkV4cG9uZW50PWFwaS5CaWdOdW1iZXIoY3VyYXRpb25SZXdhcmRDdXJ2ZVBhcmFtZXRlcik7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBjdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyJiZjdXJhdGlvbkV4cG9uZW50LmlzRmluaXRlKCkmJmN1cmF0aW9uRXhwb25lbnQuZ3RlKCIwLjUiKSYmY3VyYXRpb25FeHBvbmVudC5sdGUoIjEiKSYmY3VyYXRpb25FeHBvbmVudC5kcCgpPD0yLCdjdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyIGNhbiBvbmx5IGJlIGJldHdlZW4gIjAuNSIgYW5kICIxIiB3aXRoIHByZWNpc2lvbiBhdCBtb3N0IDInKSlyZXR1cm47aWYoZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy5jdXJhdGlvblJld2FyZEN1cnZlUGFyYW1ldGVyPWN1cmF0aW9uUmV3YXJkQ3VydmVQYXJhbWV0ZXIsIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2UpJiZjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2U+PTAmJmN1cmF0aW9uUmV3YXJkUGVyY2VudGFnZTw9MTAwLCJjdXJhdGlvblJld2FyZFBlcmNlbnRhZ2Ugc2hvdWxkIGJlIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAxMDAiKSlyZXR1cm47aWYoZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy5jdXJhdGlvblJld2FyZFBlcmNlbnRhZ2U9Y3VyYXRpb25SZXdhcmRQZXJjZW50YWdlLCFhcGkuYXNzZXJ0KGNhc2hvdXRXaW5kb3dEYXlzJiZOdW1iZXIuaXNJbnRlZ2VyKGNhc2hvdXRXaW5kb3dEYXlzKSYmY2FzaG91dFdpbmRvd0RheXM+PTEmJmNhc2hvdXRXaW5kb3dEYXlzPD0zMCwiY2FzaG91dFdpbmRvd0RheXMgc2hvdWxkIGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAzMCIpKXJldHVybjtleGlzdGluZ1Jld2FyZFBvb2wuY29uZmlnLmNhc2hvdXRXaW5kb3dEYXlzPWNhc2hvdXRXaW5kb3dEYXlzO2NvbnN0IHBhcnNlZFJld2FyZFBlckludGVydmFsPWFwaS5CaWdOdW1iZXIocmV3YXJkUGVySW50ZXJ2YWwpO2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgcmV3YXJkUGVySW50ZXJ2YWwmJnBhcnNlZFJld2FyZFBlckludGVydmFsLmlzRmluaXRlKCkmJnBhcnNlZFJld2FyZFBlckludGVydmFsLmd0KDApLCJyZXdhcmRQZXJJbnRlcnZhbCBpbnZhbGlkIil8fCFhcGkuYXNzZXJ0KHBhcnNlZFJld2FyZFBlckludGVydmFsLmRwKCk8PXRva2VuLnByZWNpc2lvbiwidG9rZW4gcHJlY2lzaW9uIG1pc21hdGNoIGZvciByZXdhcmRQZXJJbnRlcnZhbCIpKXJldHVybjtpZihleGlzdGluZ1Jld2FyZFBvb2wuY29uZmlnLnJld2FyZFBlckludGVydmFsPXJld2FyZFBlckludGVydmFsLCFhcGkuYXNzZXJ0KHJld2FyZEludGVydmFsU2Vjb25kcyYmTnVtYmVyLmlzSW50ZWdlcihyZXdhcmRJbnRlcnZhbFNlY29uZHMpJiZyZXdhcmRJbnRlcnZhbFNlY29uZHM+PTMmJnJld2FyZEludGVydmFsU2Vjb25kczw9ODY0MDAmJnJld2FyZEludGVydmFsU2Vjb25kcyUzPT0wLCJyZXdhcmRJbnRlcnZhbFNlY29uZHMgc2hvdWxkIGJlIGFuIGludGVnZXIgYmV0d2VlbiAzIGFuZCA4NjQwMCwgYW5kIGRpdmlzaWJsZSBieSAzIikpcmV0dXJuO2lmKGV4aXN0aW5nUmV3YXJkUG9vbC5jb25maWcucmV3YXJkSW50ZXJ2YWxTZWNvbmRzPXJld2FyZEludGVydmFsU2Vjb25kcywhYXBpLmFzc2VydCh2b3RlUmVnZW5lcmF0aW9uRGF5cyYmTnVtYmVyLmlzSW50ZWdlcih2b3RlUmVnZW5lcmF0aW9uRGF5cykmJnZvdGVSZWdlbmVyYXRpb25EYXlzPj0xJiZ2b3RlUmVnZW5lcmF0aW9uRGF5czw9MzAsInZvdGVSZWdlbmVyYXRpb25EYXlzIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMzAiKSlyZXR1cm47aWYoZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy52b3RlUmVnZW5lcmF0aW9uRGF5cz12b3RlUmVnZW5lcmF0aW9uRGF5cywhYXBpLmFzc2VydChkb3dudm90ZVJlZ2VuZXJhdGlvbkRheXMmJk51bWJlci5pc0ludGVnZXIoZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzKSYmZG93bnZvdGVSZWdlbmVyYXRpb25EYXlzPj0xJiZkb3dudm90ZVJlZ2VuZXJhdGlvbkRheXM8PTMwLCJkb3dudm90ZVJlZ2VuZXJhdGlvbkRheXMgc2hvdWxkIGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAzMCIpKXJldHVybjtpZihleGlzdGluZ1Jld2FyZFBvb2wuY29uZmlnLmRvd252b3RlUmVnZW5lcmF0aW9uRGF5cz1kb3dudm90ZVJlZ2VuZXJhdGlvbkRheXMsIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihzdGFrZWRSZXdhcmRQZXJjZW50YWdlKSYmc3Rha2VkUmV3YXJkUGVyY2VudGFnZT49MCYmc3Rha2VkUmV3YXJkUGVyY2VudGFnZTw9MTAwLCJzdGFrZWRSZXdhcmRQZXJjZW50YWdlIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMTAwIikpcmV0dXJuO2lmKGV4aXN0aW5nUmV3YXJkUG9vbC5jb25maWcuc3Rha2VkUmV3YXJkUGVyY2VudGFnZT1zdGFrZWRSZXdhcmRQZXJjZW50YWdlLCFhcGkuYXNzZXJ0KHZvdGVQb3dlckNvbnN1bXB0aW9uJiZOdW1iZXIuaXNJbnRlZ2VyKHZvdGVQb3dlckNvbnN1bXB0aW9uKSYmdm90ZVBvd2VyQ29uc3VtcHRpb24+PTEmJnZvdGVQb3dlckNvbnN1bXB0aW9uPD0xZTQsInZvdGVQb3dlckNvbnN1bXB0aW9uIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAwMDAiKSlyZXR1cm47aWYoZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy52b3RlUG93ZXJDb25zdW1wdGlvbj12b3RlUG93ZXJDb25zdW1wdGlvbiwhYXBpLmFzc2VydChkb3dudm90ZVBvd2VyQ29uc3VtcHRpb24mJk51bWJlci5pc0ludGVnZXIoZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uKSYmZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uPj0xJiZkb3dudm90ZVBvd2VyQ29uc3VtcHRpb248PTFlNCwiZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAwMDAiKSlyZXR1cm47aWYoZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy5kb3dudm90ZVBvd2VyQ29uc3VtcHRpb249ZG93bnZvdGVQb3dlckNvbnN1bXB0aW9uLCFhcGkuYXNzZXJ0KEFycmF5LmlzQXJyYXkodGFncykmJnRhZ3MubGVuZ3RoPj0xJiZ0YWdzLmxlbmd0aDw9bWF4VGFnc1BlclBvb2wmJnRhZ3MuZXZlcnkoKHQ9PiJzdHJpbmciPT10eXBlb2YgdCkpLGB0YWdzIHNob3VsZCBiZSBhIG5vbi1lbXB0eSBhcnJheSBvZiBzdHJpbmdzIG9mIGxlbmd0aCBhdCBtb3N0ICR7bWF4VGFnc1BlclBvb2x9YCkpcmV0dXJuO2lmKGV4aXN0aW5nUmV3YXJkUG9vbC5jb25maWcudGFncz10YWdzLCFhcGkuYXNzZXJ0KCJib29sZWFuIj09dHlwZW9mIGRpc2FibGVEb3dudm90ZSwiZGlzYWJsZURvd252b3RlIHNob3VsZCBiZSBib29sZWFuIikpcmV0dXJuO2lmKGV4aXN0aW5nUmV3YXJkUG9vbC5jb25maWcuZGlzYWJsZURvd252b3RlPWRpc2FibGVEb3dudm90ZSwhYXBpLmFzc2VydCgiYm9vbGVhbiI9PXR5cGVvZiBpZ25vcmVEZWNsaW5lUGF5b3V0LCJpZ25vcmVEZWNsaW5lUGF5b3V0IHNob3VsZCBiZSBib29sZWFuIikpcmV0dXJuO2lmKGV4aXN0aW5nUmV3YXJkUG9vbC5jb25maWcuaWdub3JlRGVjbGluZVBheW91dD1pZ25vcmVEZWNsaW5lUGF5b3V0LCFhc3NlcnRBcHBUYXhDb25maWdWYWxpZChhcHBUYXhDb25maWcpKXJldHVybjtpZihleGlzdGluZ1Jld2FyZFBvb2wuY29uZmlnLmFwcFRheENvbmZpZz1hcHBUYXhDb25maWcsIWFwaS5hc3NlcnQoIWV4Y2x1ZGVUYWdzfHxBcnJheS5pc0FycmF5KGV4Y2x1ZGVUYWdzKSYmZXhjbHVkZVRhZ3MubGVuZ3RoPj0xJiZleGNsdWRlVGFncy5sZW5ndGg8PW1heFRhZ3NQZXJQb29sJiZleGNsdWRlVGFncy5ldmVyeSgodD0+InN0cmluZyI9PXR5cGVvZiB0KSksYGV4Y2x1ZGVUYWdzIHNob3VsZCBiZSBhIG5vbi1lbXB0eSBhcnJheSBvZiBzdHJpbmdzIG9mIGxlbmd0aCBhdCBtb3N0ICR7bWF4VGFnc1BlclBvb2x9YCkpcmV0dXJuO2lmKGV4aXN0aW5nUmV3YXJkUG9vbC5jb25maWcuZXhjbHVkZVRhZ3M9ZXhjbHVkZVRhZ3MsIWFwaS5hc3NlcnQoIXJld2FyZFJlZHVjdGlvbkludGVydmFsU2Vjb25kc3x8TnVtYmVyLmlzSW50ZWdlcihyZXdhcmRSZWR1Y3Rpb25JbnRlcnZhbFNlY29uZHMpJiZyZXdhcmRSZWR1Y3Rpb25JbnRlcnZhbFNlY29uZHM+PXJld2FyZEludGVydmFsU2Vjb25kcywicmV3YXJkUmVkdWN0aW9uSW50ZXJ2YWxTZWNvbmRzIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGdyZWF0ZXIgb3IgZXF1YWwgdG8gcmV3YXJkSW50ZXJ2YWxTZWNvbmRzIikpcmV0dXJuO2lmKGV4aXN0aW5nUmV3YXJkUG9vbC5jb25maWcucmV3YXJkUmVkdWN0aW9uSW50ZXJ2YWxTZWNvbmRzIT09cmV3YXJkUmVkdWN0aW9uSW50ZXJ2YWxTZWNvbmRzKXtjb25zdCB0aW1lc3RhbXA9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApLmdldFRpbWUoKTtleGlzdGluZ1Jld2FyZFBvb2wubGFzdFJld2FyZFJlZHVjdGlvblRpbWVzdGFtcD10aW1lc3RhbXB9ZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy5yZXdhcmRSZWR1Y3Rpb25JbnRlcnZhbFNlY29uZHM9cmV3YXJkUmVkdWN0aW9uSW50ZXJ2YWxTZWNvbmRzO2NvbnN0IHJld2FyZFJlZHVjdGlvblBlcmNlbnRhZ2VEZWNpbWFsPWFwaS5CaWdOdW1iZXIocmV3YXJkUmVkdWN0aW9uUGVyY2VudGFnZSk7YXBpLmFzc2VydCghcmV3YXJkUmVkdWN0aW9uUGVyY2VudGFnZXx8InN0cmluZyI9PXR5cGVvZiByZXdhcmRSZWR1Y3Rpb25QZXJjZW50YWdlJiZyZXdhcmRSZWR1Y3Rpb25QZXJjZW50YWdlRGVjaW1hbC5pc0Zpbml0ZSgpJiZyZXdhcmRSZWR1Y3Rpb25QZXJjZW50YWdlRGVjaW1hbC5ndGUoIjAiKSYmcmV3YXJkUmVkdWN0aW9uUGVyY2VudGFnZURlY2ltYWwubHRlKCIxMDAiKSYmcmV3YXJkUmVkdWN0aW9uUGVyY2VudGFnZURlY2ltYWwuZHAoKTw9MSwncmV3YXJkUmVkdWN0aW9uUGVyY2VudGFnZSBzaG91bGQgYmUgYmV0d2VlbiAiMCIgYW5kICIxMDAiIHdpdGggcHJlY2lzaW9uIGF0IG1vc3QgMScpJiYoZXhpc3RpbmdSZXdhcmRQb29sLmNvbmZpZy5yZXdhcmRSZWR1Y3Rpb25QZXJjZW50YWdlPXJld2FyZFJlZHVjdGlvblBlcmNlbnRhZ2UsYXBpLmFzc2VydChhcGkuc2VuZGVyPT09dG9rZW4uaXNzdWVyfHxhcGkuc2VuZGVyPT09YXBpLm93bmVyJiYiQkVFIj09PXRva2VuLnN5bWJvbCwibXVzdCBiZSBpc3N1ZXIgb2YgdG9rZW4iKSYmKGFwaS5zZW5kZXIhPT1hcGkub3duZXImJmFwaS5CaWdOdW1iZXIodXBkYXRlRmVlKS5ndCgwKSYmYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6dXBkYXRlRmVlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KSxhd2FpdCBhcGkuZGIudXBkYXRlKCJyZXdhcmRQb29scyIsZXhpc3RpbmdSZXdhcmRQb29sKSkpfSxhY3Rpb25zLnNldEFjdGl2ZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxhY3RpdmU6YWN0aXZlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoIWFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksIm9wZXJhdGlvbiBtdXN0IGJlIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpKXJldHVybjtjb25zdCBleGlzdGluZ1Jld2FyZFBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInJld2FyZFBvb2xzIix7X2lkOnJld2FyZFBvb2xJZH0pO2lmKCFhcGkuYXNzZXJ0KGV4aXN0aW5nUmV3YXJkUG9vbCwicmV3YXJkIHBvb2wgbm90IGZvdW5kIikpcmV0dXJuO2NvbnN0IHRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmV4aXN0aW5nUmV3YXJkUG9vbC5zeW1ib2x9KTthcGkuYXNzZXJ0KGFwaS5zZW5kZXI9PT10b2tlbi5pc3N1ZXJ8fGFwaS5zZW5kZXI9PT1hcGkub3duZXIsIm11c3QgYmUgaXNzdWVyIG9mIHRva2VuIikmJihleGlzdGluZ1Jld2FyZFBvb2wuYWN0aXZlPWFjdGl2ZSxhd2FpdCBhcGkuZGIudXBkYXRlKCJyZXdhcmRQb29scyIsZXhpc3RpbmdSZXdhcmRQb29sKSl9LGFjdGlvbnMuc2V0TXV0ZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxhY2NvdW50OmFjY291bnQsbXV0ZTptdXRlfT1wYXlsb2FkLGV4aXN0aW5nUmV3YXJkUG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicmV3YXJkUG9vbHMiLHtfaWQ6cmV3YXJkUG9vbElkfSk7aWYoIWFwaS5hc3NlcnQoZXhpc3RpbmdSZXdhcmRQb29sLCJyZXdhcmQgcG9vbCBub3QgZm91bmQiKSlyZXR1cm47Y29uc3QgdG9rZW49YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6ZXhpc3RpbmdSZXdhcmRQb29sLnN5bWJvbH0pO2lmKCFhcGkuYXNzZXJ0KGFwaS5zZW5kZXI9PT10b2tlbi5pc3N1ZXJ8fGFwaS5zZW5kZXI9PT1hcGkub3duZXIsIm11c3QgYmUgaXNzdWVyIG9mIHRva2VuIikpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KGFwaS5pc1ZhbGlkQWNjb3VudE5hbWUoYWNjb3VudCksImludmFsaWQgYWNjb3VudCIpKXJldHVybjtpZighYXBpLmFzc2VydCgiYm9vbGVhbiI9PXR5cGVvZiBtdXRlLCJtdXRlIG11c3QgYmUgYSBib29sZWFuIikpcmV0dXJuO2NvbnN0IHZvdGluZ1Bvd2VyPWF3YWl0IGFwaS5kYi5maW5kT25lKCJ2b3RpbmdQb3dlciIse3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsYWNjb3VudDphY2NvdW50fSk7aWYodm90aW5nUG93ZXIpdm90aW5nUG93ZXIubXV0ZT1tdXRlLGF3YWl0IGFwaS5kYi51cGRhdGUoInZvdGluZ1Bvd2VyIix2b3RpbmdQb3dlcik7ZWxzZXtjb25zdCBuZXdWb3RpbmdQb3dlcj17cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxhY2NvdW50OmFjY291bnQsbGFzdFZvdGVUaW1lc3RhbXA6bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApLmdldFRpbWUoKSx2b3RpbmdQb3dlcjoxZTQsZG93bnZvdGluZ1Bvd2VyOjFlNCxtdXRlOm11dGV9O2F3YWl0IGFwaS5kYi5pbnNlcnQoInZvdGluZ1Bvd2VyIixuZXdWb3RpbmdQb3dlcil9fSxhY3Rpb25zLnNldFBvc3RNdXRlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtyZXdhcmRQb29sSWQ6cmV3YXJkUG9vbElkLGF1dGhvcnBlcm06YXV0aG9ycGVybSxtdXRlOm11dGV9PXBheWxvYWQsZXhpc3RpbmdSZXdhcmRQb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJyZXdhcmRQb29scyIse19pZDpyZXdhcmRQb29sSWR9KTtpZighYXBpLmFzc2VydChleGlzdGluZ1Jld2FyZFBvb2wsInJld2FyZCBwb29sIG5vdCBmb3VuZCIpKXJldHVybjtjb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpleGlzdGluZ1Jld2FyZFBvb2wuc3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQoYXBpLnNlbmRlcj09PXRva2VuLmlzc3Vlcnx8YXBpLnNlbmRlcj09PWFwaS5vd25lciwibXVzdCBiZSBpc3N1ZXIgb2YgdG9rZW4iKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBhdXRob3JwZXJtLCJhdXRob3JwZXJtIG11c3QgYmUgYSBzdHJpbmciKSlyZXR1cm47Y29uc3QgcG9zdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicG9zdHMiLHtyZXdhcmRQb29sSWQ6cmV3YXJkUG9vbElkLGF1dGhvcnBlcm06YXV0aG9ycGVybX0pO2FwaS5hc3NlcnQocG9zdCwicG9zdCBub3QgZm91bmQiKSYmYXBpLmFzc2VydCgiYm9vbGVhbiI9PXR5cGVvZiBtdXRlLCJtdXRlIG11c3QgYmUgYSBib29sZWFuIikmJihwb3N0Lm11dGU9bXV0ZSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwb3N0cyIscG9zdCkpfSxhY3Rpb25zLnJlc2V0UG9vbD1hc3luYyBwYXlsb2FkPT57Y29uc3R7cmV3YXJkUG9vbElkOnJld2FyZFBvb2xJZCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJvcGVyYXRpb24gbXVzdCBiZSBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSlyZXR1cm47Y29uc3QgZXhpc3RpbmdSZXdhcmRQb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJyZXdhcmRQb29scyIse19pZDpyZXdhcmRQb29sSWR9KTtpZighYXBpLmFzc2VydChleGlzdGluZ1Jld2FyZFBvb2wsInJld2FyZCBwb29sIG5vdCBmb3VuZCIpKXJldHVybjtjb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpleGlzdGluZ1Jld2FyZFBvb2wuc3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQoYXBpLnNlbmRlcj09PXRva2VuLmlzc3Vlcnx8YXBpLnNlbmRlcj09PWFwaS5vd25lciwibXVzdCBiZSBpc3N1ZXIgb2YgdG9rZW4iKSlyZXR1cm47Y29uc3QgdGltZXN0YW1wPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKS5nZXRUaW1lKCk7ZXhpc3RpbmdSZXdhcmRQb29sLnJld2FyZFBvb2w9IjAiLGV4aXN0aW5nUmV3YXJkUG9vbC5sYXN0UmV3YXJkVGltZXN0YW1wPXRpbWVzdGFtcCxleGlzdGluZ1Jld2FyZFBvb2wubGFzdENsYWltRGVjYXlUaW1lc3RhbXA9dGltZXN0YW1wLGV4aXN0aW5nUmV3YXJkUG9vbC5jcmVhdGVkVGltZXN0YW1wPXRpbWVzdGFtcCxleGlzdGluZ1Jld2FyZFBvb2wucGVuZGluZ0NsYWltcz0iMCIsYXdhaXQgYXBpLmRiLnVwZGF0ZSgicmV3YXJkUG9vbHMiLGV4aXN0aW5nUmV3YXJkUG9vbCl9LGFjdGlvbnMuY29tbWVudD1hc3luYyBwYXlsb2FkPT57Y29uc3R7YXV0aG9yOmF1dGhvcixwZXJtbGluazpwZXJtbGlua309cGF5bG9hZDtpZighYXBpLmFzc2VydCgibnVsbCI9PT1hcGkuc2VuZGVyLCJhY3Rpb24gbXVzdCB1c2UgY29tbWVudCBvcGVyYXRpb24iKSlyZXR1cm47YXdhaXQgdG9rZW5NYWludGVuYW5jZSgpO2NvbnN0IHJld2FyZFBvb2xJZHM9YXdhaXQgZ2V0UmV3YXJkUG9vbElkcyhwYXlsb2FkKSxhdXRob3JwZXJtPWBAJHthdXRob3J9LyR7cGVybWxpbmt9YDtpZihhd2FpdCBhcGkuZGIuZmluZE9uZSgicG9zdE1ldGFkYXRhIix7YXV0aG9ycGVybTphdXRob3JwZXJtfSkpcmV0dXJuO2lmKGF3YWl0IGFwaS5kYi5maW5kT25lKCJwb3N0cyIse2F1dGhvcnBlcm06YXV0aG9ycGVybX0pKXJldHVybjthd2FpdCBhcGkuZGIuaW5zZXJ0KCJwb3N0TWV0YWRhdGEiLHthdXRob3JwZXJtOmF1dGhvcnBlcm0scmV3YXJkUG9vbElkczpyZXdhcmRQb29sSWRzfSk7Y29uc3QgdGltZXN0YW1wPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKS5nZXRUaW1lKCk7Zm9yKGxldCBpPTA7aTxyZXdhcmRQb29sSWRzLmxlbmd0aDtpKz0xKXtjb25zdCByZXdhcmRQb29sSWQ9cmV3YXJkUG9vbElkc1tpXSxyZXdhcmRQb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJyZXdhcmRQb29scyIse19pZDpyZXdhcmRQb29sSWR9KTtpZihyZXdhcmRQb29sJiZyZXdhcmRQb29sLmFjdGl2ZSl7Y29uc3QgY2FzaG91dFRpbWU9dGltZXN0YW1wKzI0KnJld2FyZFBvb2wuY29uZmlnLmNhc2hvdXRXaW5kb3dEYXlzKjM2MDAqMWUzLHBvc3Q9e3Jld2FyZFBvb2xJZDpyZXdhcmRQb29sSWQsc3ltYm9sOnJld2FyZFBvb2wuc3ltYm9sLGF1dGhvcnBlcm06YXV0aG9ycGVybSxhdXRob3I6YXV0aG9yLGNyZWF0ZWQ6dGltZXN0YW1wLGNhc2hvdXRUaW1lOmNhc2hvdXRUaW1lLHZvdGVQb3NpdGl2ZVJzaGFyZVN1bToiMCIsdm90ZVJzaGFyZVN1bToiMCJ9O2lmKHBheWxvYWQuanNvbk1ldGFkYXRhJiZwYXlsb2FkLmpzb25NZXRhZGF0YS5hcHApe2NvbnN0IGFwcFN0cmluZz1wYXlsb2FkLmpzb25NZXRhZGF0YS5hcHA7InN0cmluZyI9PXR5cGVvZiBhcHBTdHJpbmcmJihwb3N0LmFwcD1hcHBTdHJpbmcuc3BsaXQoIi8iKVswXS50b0xvd2VyQ2FzZSgpKX1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJwb3N0cyIscG9zdCksYXBpLmVtaXQoIm5ld0NvbW1lbnQiLHtyZXdhcmRQb29sSWQ6cmV3YXJkUG9vbElkLHN5bWJvbDpyZXdhcmRQb29sLnN5bWJvbH0pfX19LGFjdGlvbnMuY29tbWVudE9wdGlvbnM9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2F1dGhvcjphdXRob3IscGVybWxpbms6cGVybWxpbmssbWF4QWNjZXB0ZWRQYXlvdXQ6bWF4QWNjZXB0ZWRQYXlvdXQsYmVuZWZpY2lhcmllczpiZW5lZmljaWFyaWVzfT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsImFjdGlvbiBtdXN0IHVzZSBjb21tZW50T3B0aW9ucyBvcGVyYXRpb24iKSlyZXR1cm47Y29uc3QgYXV0aG9ycGVybT1gQCR7YXV0aG9yfS8ke3Blcm1saW5rfWAsZXhpc3RpbmdQb3N0cz1hd2FpdCBhcGkuZGIuZmluZCgicG9zdHMiLHthdXRob3JwZXJtOmF1dGhvcnBlcm19KTtpZighZXhpc3RpbmdQb3N0cylyZXR1cm47Y29uc3QgZGVjbGluZVBheW91dD1tYXhBY2NlcHRlZFBheW91dC5zdGFydHNXaXRoKCIwLjAwMCIpO2ZvcihsZXQgaT0wO2k8ZXhpc3RpbmdQb3N0cy5sZW5ndGg7aSs9MSl7Y29uc3QgcG9zdD1leGlzdGluZ1Bvc3RzW2ldOyhhd2FpdCBhcGkuZGIuZmluZE9uZSgicmV3YXJkUG9vbHMiLHtfaWQ6cG9zdC5yZXdhcmRQb29sSWR9KSkuY29uZmlnLmlnbm9yZURlY2xpbmVQYXlvdXR8fChwb3N0LmRlY2xpbmVQYXlvdXQ9ZGVjbGluZVBheW91dCkscG9zdC5iZW5lZmljaWFyaWVzPWJlbmVmaWNpYXJpZXMsYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9zdHMiLHBvc3QpfX0sYWN0aW9ucy52b3RlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHt2b3Rlcjp2b3RlcixhdXRob3I6YXV0aG9yLHBlcm1saW5rOnBlcm1saW5rLHdlaWdodDp3ZWlnaHR9PXBheWxvYWQ7aWYoIWFwaS5hc3NlcnQoIm51bGwiPT09YXBpLnNlbmRlciwiY2FuIG9ubHkgdm90ZSB3aXRoIHZvdGluZyBvcCIpKXJldHVybjtpZihhd2FpdCB0b2tlbk1haW50ZW5hbmNlKCksIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcih3ZWlnaHQpJiZ3ZWlnaHQ+PS0xZTQmJndlaWdodDw9MWU0LCJ3ZWlnaHQgbXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gLTEwMDAwIHRvIDEwMDAwIikpcmV0dXJuO2NvbnN0IHRpbWVzdGFtcD1uZXcgRGF0ZShgJHthcGkuaGl2ZUJsb2NrVGltZXN0YW1wfS4wMDBaYCkuZ2V0VGltZSgpLGF1dGhvcnBlcm09YEAke2F1dGhvcn0vJHtwZXJtbGlua31gLHBvc3RzPWF3YWl0IGFwaS5kYi5maW5kKCJwb3N0cyIse2F1dGhvcnBlcm06YXV0aG9ycGVybX0sMWUzLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2lmKHBvc3RzKWZvcihsZXQgaT0wO2k8cG9zdHMubGVuZ3RoO2krPTEpe2NvbnN0IHBvc3Q9cG9zdHNbaV07YXdhaXQgcHJvY2Vzc1ZvdGUocG9zdCx2b3Rlcix3ZWlnaHQsdGltZXN0YW1wKX19Ow=="}}}

Leave comments Smart Contract to:

Written by

Read more #hive-engine posts


Best Posts From hive-engine

We have not curated any of hive-engine's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From hive-engine