memoscan
← all memos

Memo 0x75b29160…2ce6b3 on Ethereum

5kZWxldGVWZXJ0ZXgoaC5vcmlnaW4pLGc9ITE7bC5kaXNwb3NlKCksaC5kaXNwb3NlKCk7Y29uc3QgcD1nP25ldyBKKHRoaXMpOm51bGw7cCYmKHAud2VkZ2U9YSk7bGV0IHg9Zj9uZXcgSih0aGlzKTpudWxsO2lmKHgmJih4LndlZGdlPWMpLHAmJngpdHJ5e3AuZXF1YWxzKHgpJiYoeC5kaXNwb3NlKCkseD1udWxsKX1jYXRjaHt4PW51bGx9aWYocCl7bGV0IGU9cC53ZWRnZTtmb3IoZS5mYWNlPXA7ZS5uZXh0aGVkZ2UhPT1wLndlZGdlOyl7aWYoZT1lLm5leHRoZWRnZSwhZS5mYWNlKXJldHVybjtlLmZhY2U9cH1wLmFyZWE8PXRoaXMudG9sZXJhbmNlJiYodT0hMCksby5wdXNoKHApfWlmKHgpe2xldCBlPXgud2VkZ2U7Zm9yKGUuZmFjZT14O2UubmV4dGhlZGdlIT09eC53ZWRnZTspZT1lLm5leHRoZWRnZSxlLmZhY2U9eDt4LmFyZWE8PXRoaXMudG9sZXJhbmNlJiYodT0hMCksby5wdXNoKHgpfWlmKHUpZm9yKGxldCBlPTAsdD1vLmxlbmd0aDtlPHQ7ZSsrKW9bZV0uX2hvbGVzRGlydHk9ITB9c3BsaXRFZGdlKGUsdCxpLG4scyxyKXtjb25zdHt2ZXJ0aWNlczpvLGhlZGdlczpsfT10aGlzO2xldCBoPXRoaXMuZmluZFZlcnRleChzLHIpLGE9dGhpcy5maW5kSGVkZ2UoZSx0LGksbik7aWYoIWEpcmV0dXJuITE7aWYoaClyZXR1cm4hMDtjb25zdCBjPWEudHdpbjtsZXQgZDtjb25zdCBnPXRoaXMuYWRkVmVydGV4KHMsciksZj1uZXcgeihnLGEub3JpZ2luKSx1PW5ldyB6KGMub3JpZ2luLGcpO2wucHVzaChmKSxsLnB1c2godSk7Y29uc3QgcD1uZXcgeihnLGMub3JpZ2luKSx4PW5ldyB6KGEub3JpZ2luLGcpO3JldHVybiBsLnB1c2gocCksbC5wdXNoKHgpLGEuZmFjZS53ZWRnZT09PWEmJihhLmZhY2Uud2VkZ2U9ZiksYS5mYWNlLl92ZXJ0ZXhsaXN0RGlydHk9ITAsZi5mYWNlPWEuZmFjZSx1LmZhY2U9YS5mYWNlLGMuZmFjZS53ZWRnZT09PWMmJihjLmZhY2Uud2VkZ2U9cCksYy5mYWNlLl92ZXJ0ZXhsaXN0RGlydHk9ITAscC5mYWNlPWMuZmFjZSx4LmZhY2U9Yy5mYWNlLGYubmV4dGhlZGdlPXUsdS5wcmV2aGVkZ2U9ZixwLm5leHRoZWRnZT14LHgucHJldmhlZGdlPXAsZi5wcmV2aGVkZ2U9YS5wcmV2aGVkZ2UhPT1jP2EucHJldmhlZGdlOngsZi5wcmV2aGVkZ2UubmV4dGhlZGdlPWYsdS5uZXh0aGVkZ2U9YS5uZXh0aGVkZ2UhPT1jP2EubmV4dGhlZGdlOnAsdS5uZXh0aGVkZ2UucHJldmhlZGdlPXUscC5wcmV2aGVkZ2U9Yy5wcmV2aGVkZ2UhPT1hP2MucHJldmhlZGdlOnUscC5wcmV2aGVkZ2UubmV4dGhlZGdlPXAseC5uZXh0aGVkZ2U9Yy5uZXh0aGVkZ2UhPT1hP2MubmV4dGhlZGdlOmYseC5uZXh0aGVkZ2UucHJldmhlZGdlPXgsZi50d2luPXgsdS50d2luPXAscC50d2luPXUseC50d2luPWYsZy5oZWRnZWxpc3QucHVzaCh1LHgpLGQ9YS5vcmlnaW4uaGVkZ2VsaXN0LmluZGV4T2YoYSksYS5vcmlnaW4uaGVkZ2VsaXN0LnNwbGljZShkLDEsZiksZD1jLm9yaWdpbi5oZWRnZWxpc3QuaW5kZXhPZihjKSxjLm9yaWdpbi5oZWRnZWxpc3Quc3BsaWNlKGQsMSxwKSxhLmRpc3Bvc2UoKSxjLmRpc3Bvc2UoKSxkPWwuaW5kZXhPZihhKSxsLnNwbGljZShkLDEpLGQ9bC5pbmRleE9mKGMpLGwuc3BsaWNlKGQsMSkse2gxOmYsaDI6dX19aW50ZXJzZWN0RmFjZVdpdGhQb2x5TGluZShlLHQsaT0hMSxuPSExKXtsZXQgcz1bXSxyPW4/dC5sZW5ndGg6dC5sZW5ndGgtMTtmb3IobGV0IG49MDtuPHI7bisrKXtsZXQgcj1bdFtuXSx0WyhuKzEpJXQubGVuZ3RoXV07aWYocy5wdXNoKC4uLmUuaW50ZXJzZWN0V2l0aExpbmVTZWcoci5tYXAoKGU9PihuZXcgRCkuZnJvbUFycmF5KGUpKSkpKSxpJiZzLmxlbmd0aD49MilicmVha31yZXR1cm4gc31nZXRGYWNlc0F0UG9pbnQoZSl7bGV0IHQ9W10saT1uZXcgRCguLi5lKTtmb3IobGV0IGUgb2YgdGhpcy5mYWNlcyllLmFhYmIuY29udGFpbnNQb2ludChpKSYmZS5jb250YWluc1BvaW50KGkpJiZ0LnB1c2goZSk7cmV0dXJuIHR9Z2V0RmFjZXNJbnRlcnNlY3RpbmdQb2x5KGUpe2xldCB0PWUubWFwKChlPT4obmV3IEQpLmZyb21BcnJheShlKSkpLGk9bmV3IE47aS5leHBhbmRzKHQpO2xldCBuPVtdO2ZvcihsZXQgcyBvZiB0aGlzLmZhY2VzKWlmKCEocy5hcmVhPD10aGlzLnRvbGVyYW5jZSkmJmkuaW50ZXJzZWN0cyhzLmFhYmIpKXtpZih0ZSh0LHMudmVydGV4bGlzdCkpe24ucHVzaCh7ZmFjZTpzLGludGVyc2VjdGlvbnM6W10saXNDb250YWluZWQ6ITB9KTtjb250aW51ZX1sZXQgaT1bXTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9W3Rbbl0sdFsobisxKSVlLmxlbmd0aF1dO2kucHVzaCguLi5zLmludGVyc2VjdFdpdGhMaW5lU2VnKHIpKX1pLmxlbmd0aD4wJiZuLnB1c2goe2ZhY2U6cyxpbnRlcnNlY3Rpb25zOmksaXNDb250YWluZWQ6ITF9KX1yZXR1cm4gbn19Y2xhc3MgcSBleHRlbmRzIEd7dG9sZXJhbmNlO2NvbnN0cnVjdG9yKGUsdCxpPVcpe3N1cGVyKGUsdCxpKSx0aGlzLnRvbGVyYW5jZT1pfWlzUG9seUxpbmVTZWdtZW50T25FZGdlKGUsdCl7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aC0xO2krKyl7bGV0IG49W3RbaV0sdFtpKzFdXTtpZih0aGlzLmlzTGluZVNlZ21lbnRPbkVkZ2VPZkZhY2UoZSxuKSx0aGlzLnRvbGVyYW5jZSlyZXR1cm4hMH19aXNMaW5lU2VnbWVudE9uRWRnZU9mRmFjZShlLHQsaT1wKXtmb3IobGV0IG49MDtuPGUudmVydGV4bGlzdC5sZW5ndGg7bisrKWlmKEgoW2UudmVydGV4bGlzdFtuXS50b0FycmF5KCksZS52ZXJ0ZXhsaXN0WyhuKzEpJWUudmVydGV4bGlzdC5sZW5ndGhdLnRvQXJyYXkoKV0sdCksaSlyZXR1cm4hMDtyZXR1cm4hMX1nZXRGYWNlc0ludGVyc2VjdGluZ0FBQkIoZSl7bGV0IHQ9W107Zm9yKGxldCBpIG9mIHRoaXMuZmFjZXMuZmlsdGVyKChlPT5lLmFyZWE+MCkpKWUuaW50ZXJzZWN0cyhpLmFhYmIsdGhpcy50b2xlcmFuY2UpJiZ0LnB1c2goaSk7cmV0dXJuIHR9cmVtb3ZlRWRnZXNJbnNpZGVQb2x5Z29uKGUsdD0xMDApe2xldCBpPW5ldyBOO2kuZXhwYW5kcyhlLm1hcCgoZT0+KG5ldyBEKS5mcm9tQXJyYXkoZSkpKSk7bGV0IG49ZS5tYXAoKGU9PihuZXcgRCkuZnJvbUFycmF5KGUpKSkscz10aGlzLmdldEZhY2VzSW50ZXJzZWN0aW5nQUFCQihpKSxyPVtdO2ZvcihsZXQgdCBvZiBzKXtsZXQgaT10LnZlcnRleGxpc3Q7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0Kyspe2xldCBzPWlbdF0sbz1pWyh0KzEpJWkubGVuZ3RoXTtpZighZWUobixzLHRoaXMudG9sZXJhbmNlKXx8IWVlKG4sbyx0aGlzLnRvbGVyYW5jZSkpY29udGludWU7bGV0IGw9MDtbcyxvXS5mb3JFYWNoKCh0PT57VSh0LnRvQXJyYXkoKSxlLHRoaXMudG9sZXJhbmNlKSYmbCsrfSkpLGw+MXx8ci5wdXNoKFtzLG9dKX19Zm9yKGxldCBlIG9mIHIpdi5ib29sKHQpJiZ0aGlzLnJlbW92ZUVkZ2UoZVswXS54LGVbMF0ueSxlWzFdLngsZVsxXS55KTt0aGlzLmNsZWFudXBUcmFpbGluZ0VkZ2VzKCl9aW5zZXJ0UG9seWdvbihlLHQ9ITApe2xldCBpPVtdLG49bmV3IE47bi5leHBhbmRzKGUubWFwKChlPT4obmV3IEQpLmZyb21BcnJheShlKSkpKSxuLmV4cGFuZEJ5VmFsdWUodGhpcy50b2xlcmFuY2UpO2xldCBzPXRoaXMuZ2V0RmFjZXNJbnRlcnNlY3RpbmdBQUJCKG4pLHI9bmV3IFNldDtmb3IobGV0IGUgb2Ygcyl7bGV0IHQ9ZS52ZXJ0ZXhsaXN0O2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtsZXQgaT10W2VdLG49dFsoZSsxKSV0Lmxlbmd0aF0scz10aGlzLmZpbmRIZWRnZShpLngsaS55LG4ueCxuLnkpO3IuaGFzKHMudHdpbil8fHIuYWRkKHMpfX1mb3IobGV0IHQgb2YgZSlpLnB1c2goe3R5cGU6ImFkZFZlcnRleCIsZGF0YTp7eDp0WzBdLHk6dFsxXX19KTtmb3IobGV0IG4gb2Ygcil7bGV0IHM9W107ZTpmb3IobGV0IHI9MDtyPCh0P2UubGVuZ3RoOmUubGVuZ3RoLTEpO3IrKyl7bGV0IHQ9W25ldyBEKC4uLmVbcl0pLG5ldyBEKC4uLmVbKHIrMSklZS5sZW5ndGhdKV0sbz1uLmludGVyc2VjdFdpdGhMaW5lU2VnbWVudCh0KTtpZihvLnR5cGU9PUYuaW50ZXJzZWN0aW5nKXtmb3IobGV0IGUgb2YgcylpZihlLmlzRXF1YWxUbyhvLnBvaW50KSljb250aW51ZSBlO2kucHVzaCh7dHlwZToiYWRkVmVydGV4IixkYXRhOnt4Om8ucG9pbnQueCx5Om8ucG9pbnQueX19KX19fWZvcihsZXQgbj0wO248KHQ/ZS5sZW5ndGg6ZS5sZW5ndGgtMSk7bisrKXtsZXQgdD1bZVtuXSxlWyhuKzEpJWUubGVuZ3RoXV07aS5wdXNoKHt0eXBlOiJhZGRFZGdlIixkYXRhOntmcm9tOnt4OnRbMF1bMF0seTp0WzBdWzFdfSx0bzp7eDp0WzFdWzBdLHk6dFsxXVsxXX19fSl9dGhpcy5leGVjdXRlQWRkT3BlcmF0aW9ucyhpKX1zcGxpdEZhY2VCeVBvbHlMaW5lKGUsdCxpPSExLG49ITEscz0hMSl7Y29uc3Qgcj0oZSx0LGksbik9Pntjb25zdCBzPVsuNSwuMjUsLjc1XTtmb3IobGV0IHIgb2Ygcyl7bGV0IHM9ZS5sZXJwKHQscik7aWYoaS5jb250YWluc1BvaW50KHMpJiYhaS5pc1BvaW50T25Cb3VuZGFyeShzLG4pKXJldHVybiEwfXJldHVybiExfSxvPShlLHQsaSxuKT0+e2xldCBzPVsuMjUsLjUsLjc1XSxyPTA7Zm9yKGxldCBvIG9mIHMpe2xldCBzPWUubGVycCh0LG8pO2lmKGkuaXNQb2ludE9uQm91bmRhcnkocyxuKSYmKHIrKyxyPj0yKSlyZXR1cm4hMH1yZXR1cm4gcj49Mn07bGV0IGw9W10saD1bXSxhPSExLGM9MDtpZihpKXtsZXQgaT10LmZpbmRJbmRleCgodD0+IWUuY29udGFpbnNQb2ludChuZXcgRCguLi50KSl8fGUuaXNQb2ludE9uQm91bmRhcnkobmV3IEQoLi4udCksdGhpcy50b2xlcmFuY2UpKSk7aWYoIShpPj0wKSlyZXR1cm4hMTt0PXQuc2xpY2UoaSkuY29uY2F0KHQuc2xpY2UoMCxpKSl9Y29uc3QgZD1pP3QubGVuZ3RoOnQubGVuZ3RoLTE7Zm9yKGxldCBpPTA7aTxkO2krKyl7bGV0IG49bmV3IEQoLi4udFtpXSkscz1uZXcgRCguLi50WyhpKzEpJXQubGVuZ3RoXSksZD1bbixzXSxnPWUuaW50ZXJzZWN0V2l0aExpbmVTZWcoZCk7Yys9Zy5sZW5ndGg7bGV0IGY9W24sLi4uZy5tYXAoKGU9PmUucG9pbnQpKSxzXTtmPUsobixzLGYsITAsdGhpcy50b2xlcmFuY2UpO2ZvcihsZXQgdD0wO3Q8Zi5sZW5ndGgtMTt0Kyspe2xldCBpPWZbdF0sbj1mW3QrMV07cihpLG4sZSx0aGlzLnRvbGVyYW5jZSkmJiFvKGksbixlLHRoaXMudG9sZXJhbmNlKT8oYXx8KGg9W2ldLGE9ITApLGgucHVzaChuKSk6YSYmKGwucHVzaChoKSxoPVtdLGE9ITEpfX1pZighaSYmYSYmaC5sZW5ndGg+MSYmbC5wdXNoKGgpLG58fChsPWwuZmlsdGVyKCh0PT57bGV0IGk9dFtNYXRoLmZsb29yKHQubGVuZ3RoLzIpXS5sZXJwKHRbTWF0aC5jZWlsKHQubGVuZ3RoLzIpXSwuNSk7cmV0dXJuIGUuY29udGFpbnNQb2ludChpKX0pKSksbC5sZW5ndGg+MSYmcyl7bGV0IGU9bnVsbDtmb3IobGV0IHQgb2YgbCl7bGV0IG49MDtmb3IobGV0IGU9MDtlPChpP3QubGVuZ3RoOnQubGVuZ3RoLTEpO2UrKyluKz10W2VdLmRpc3RhbmNlVG8odFsoZSsxKSV0Lmxlbmd0aF0pOyghZXx8bj5lLmxlbmd0aCkmJihlPXtsZW5ndGg6bixsaW5lOnR9KX1pZighZSlyZXR1cm4hMTtsPVtlLmxpbmVdfWlmKDA9PT1sLmxlbmd0aClyZXR1cm4hMTtpZihuKXJldHVybntsaW5lczpsLGludGVyc2VjdGlvbkNvdW50OmN9O2xldCBnPVtdO2ZvcihsZXQgZSBvZiBsKWZvcihsZXQgdCBvZiBlKWcucHVzaCh7dHlwZToiYWRkVmVydGV4IixkYXRhOnt4OnQueCx5OnQueX19KTtmb3IobGV0IGUgb2YgbClmb3IobGV0IHQ9MDt0PGUubGVuZ3RoLTE7dCsrKWcucHVzaCh7dHlwZToiYWRkRWRnZSIsZGF0YTp7ZnJvbTp7eDplW3RdLngseTplW3RdLnl9LHRvOnt4OmVbdCsxXS54LHk6ZVt0KzFdLnl9fX0pO3JldHVybiB0aGlzLmV4ZWN1dGVBZGRPcGVyYXRpb25zKGcpLCEwfWV4ZWN1dGVBZGRPcGVyYXRpb25zKGUpe2NvbnN0IHQ9ZS5maWx0ZXIoKGU9PiJhZGRWZXJ0ZXgiPT09ZS50eXBlKSksaT1lLmZpbHRlcigoZT0+ImFkZEVkZ2UiPT09ZS50eXBlKSk7bGV0IG49W107Zm9yKGNvbnN0IGUgb2YgaSl7bGV0IHQ9bmV3IE4saT1uZXcgRChlLmRhdGEuZnJvbS54LGUuZGF0YS5mcm9tLnkpLHM9bmV3IEQoZS5kYXRhLnRvLngsZS5kYXRhLnRvLnkpO3QuZXhwYW5kcyhbaSxzXSksdC5leHBhbmRCeVZhbHVlKHRoaXMudG9sZXJhbmNlKTtsZXQgcj1uZXcgU2V0O2ZvcihsZXQgZSBvZiB0aGlzLmhlZGdlcyl7bGV0IG49ZS5nZXRBQUJCKCk7aWYobi5leHBhbmRCeVZhbHVlKHRoaXMudG9sZXJhbmNlKSxuLmludGVyc2VjdHModCkpe2xldCB0PWUuaW50ZXJzZWN0V2l0aExpbmVTZWdtZW50KFtpLHNdKTt0LnR5cGU9PUYuaW50ZXJzZWN0aW5nJiYoci5hZGQodC5wb2ludCksdGhpcy5maW5kVmVydGV4KHQucG9pbnQueCx0LnBvaW50LnkpfHx0aGlzLnNwbGl0RWRnZShlLm9yaWdpbi54LGUub3JpZ2luLnksZS50d2luLm9yaWdpbi54LGUudHdpbi5vcmlnaW4ueSx0LnBvaW50LngsdC5wb2ludC55KSl9fWlmKHIuc2l6ZT4xKXtsZXQgZT1LKGkscyxbaSwuLi5yLHNdLCEwLHRoaXMudG9sZXJhbmNlKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoLTE7dCsrKW4ucHVzaCh7dHlwZToiYWRkRWRnZSIsZGF0YTp7ZnJvbTp7eDplW3RdLngseTplW3RdLnl9LHRvOnt4OmVbdCsxXS54LHk6ZVt0KzFdLnl9fX0pfWVsc2Ugbi5wdXNoKGUpfWZvcihjb25zdCBlIG9mIHQpe2xldHt4OnQseTppfT1lLmRhdGE7aWYoIXRoaXMuZmluZFZlcnRleCh0LGkpKXtsZXQgZT0hMTtmb3IobGV0IG4gb2YgdGhpcy5oZWRnZXMpe2xldCBzPW4uZ2V0QUFCQigpO3MuZXhwYW5kQnlWYWx1ZSh0aGlzLnRvbGVyYW5jZSkscy5jb250YWluc1BvaW50KG5ldyBEKHQsaSkpJiYhdGhpcy5maW5kVmVydGV4KHQsaSkmJiQoW3QsaV0sW24ub3JpZ2luLnRvQXJyYXkoKSxuLnR3aW4ub3JpZ2luLnRvQXJyYXkoKV0pJiYoZT0hMSE9PXRoaXMuc3BsaXRFZGdlKG4ub3JpZ2luLngsbi5vcmlnaW4ueSxuLnR3aW4ub3JpZ2luLngsbi50d2luLm9yaWdpbi55LHQsaSkpfSFlJiZ0aGlzLmFkZFZlcnRleCh0LGkpfX1mb3IoY29uc3QgZSBvZiBuLmZpbHRlcigoZT0+ImFkZEVkZ2UiPT09ZS50eXBlKSkpe2xldHtmcm9tOnQsdG86aX09ZS5kYXRhLG49dGhpcy5maW5kVmVydGV4KHQueCx0LnkpLHM9dGhpcy5maW5kVmVydGV4KGkueCxpLnkpO2lmKG4mJnMpe2xldCBlPW5ldyBTZXQ7ZS5hZGQobik7bGV0IHQ9bmV3IE47dC5leHBhbmRzKFtuLHNdKSx0LmV4cGFuZEJ5VmFsdWUodGhpcy50b2xlcmFuY2UpO2ZvcihsZXQgaSBvZiB0aGlzLnZlcnRpY2VzSW5CQih0KSkkKGkudG9BcnJheSgpLFtuLnRvQXJyYXkoKSxzLnRvQXJyYXkoKV0pJiZlLmFkZChpKTtlLmFkZChzKTtsZXQgaT1LKG4scyxBcnJheS5mcm9tKGUpLCEwKTtmb3IobGV0IGU9MDtlPGkubGVuZ3RoLTE7ZSsrKXRoaXMuZmluZEhlZGdlKGlbZV0ueCxpW2VdLnksaVtlKzFdLngsaVtlKzFdLnkpfHx0aGlzLmFkZEVkZ2UoaVtlXS54LGlbZV0ueSxpW2UrMV0ueCxpW2UrMV0ueSl9fX1jbGVhbnVwRGVnZW5lcmF0ZUhvbGVzKCl7bGV0IGU9bmV3IFNldDt0aGlzLmZhY2VzLmZvckVhY2goKHQ9Pntmb3IobGV0IGkgb2YgdGhpcy5mYWNlcyl0IT1pJiZ0LmFhYmIuY29udGFpbnNCQihpLmFhYmIpJiZ0LnZlcnRleGxpc3QuZXZlcnkoKGU9PmkuY29udGFpbnNQb2ludChlKSkpJiZpLmhlZGdlcy5mb3JFYWNoKCh0PT57dC5mYWNlPT1pJiZlLmFkZCh0KX0pKX0pKSx0aGlzLmZhY2VzLmZpbHRlcigoZT0+ZS5hcmVhPjApKS5mb3JFYWNoKCh0PT57dC5ob2xlcy5mb3JFYWNoKChpPT57aS5oZWRnZXMuZm9yRWFjaCgoaT0+e2kuZmFjZT09dCYmZS5hZGQoaSl9KSl9KSl9KSk7Zm9yKGNvbnN0IHQgb2YgZSl0Lm9yaWdpbiYmdC50d2luLm9yaWdpbiYmdGhpcy5yZW1vdmVFZGdlKHQub3JpZ2luLngsdC5vcmlnaW4ueSx0LnR3aW4ub3JpZ2luLngsdC50d2luLm9yaWdpbi55KX1jbGVhbnVwVHJhaWxpbmdFZGdlcygpe3RoaXMuaGVkZ2VzLmZvckVhY2goKGU9PntlLmZhY2U9PWUudHdpbi5mYWNlJiZ0aGlzLnJlbW92ZUVkZ2UoZS5vcmlnaW4ueCxlLm9yaWdpbi55LGUudHdpbi5vcmlnaW4ueCxlLnR3aW4ub3JpZ2luLnkpfSkpfX1mdW5jdGlvbiBIKGUsdCxpPXApe2xldFtuLHNdPWUsW28sbF09dDtjb25zdCBoPXNbMF0tblswXSxhPXNbMV0tblsxXSxkPWxbMF0tb1swXSxnPWxbMV0tb1sxXTtpZihyKGgqZy1hKmQpPmkpcmV0dXJuITE7Y29uc3QgZj1yKGgqKG5bMV0tb1sxXSktKG5bMF0tb1swXSkqYSksdT1jKGgqaCthKmEpO3JldHVybiEodTxpKSYmZi91PGl9ZnVuY3Rpb24gSyhlLHQsaSxuPSExLHM9cCl7Y29uc3Qgcj10LngtZS54LG89dC55LWUueTtsZXQgbD1yKnIrbypvO2lmKGw8cylyZXR1cm4gaTtjb25zdCBoPTEvbCxhPWkubWFwKCh0PT57Y29uc3QgaT0oKHQueC1lLngpKnIrKHQueS1lLnkpKm8pKmg7cmV0dXJue3BvaW50OnQsdDpNYXRoLm1heCgwLE1hdGgubWluKDEsaSkpfX0pKTthLnNvcnQoKCh0LGkpPT57Y29uc3Qgbj10LnQtaS50O3JldHVybiBNYXRoLmFicyhuKT5zP246KHQucG9pbnQueC1lLngpKioyKyh0LnBvaW50LnktZS55KSoqMi0oKGkucG9pbnQueC1lLngpKioyKyhpLnBvaW50LnktZS55KSoqMil9KSk7bGV0IGM9YS5tYXAoKGU9PmUucG9pbnQpKTtyZXR1cm4gbiYmKGM9ZnVuY3Rpb24oZSx0KXtjb25zdCBpPVtdLG49bmV3IE1hcDtmb3IoY29uc3QgcyBvZiBlKXtjb25zdCBlPWAke01hdGgucm91bmQocy54L3QpfSwke01hdGgucm91bmQocy55L3QpfWA7bi5oYXMoZSl8fChuLnNldChlLCEwKSxpLnB1c2gocykpfXJldHVybiBpfShjLHMpKSxjfWZ1bmN0aW9uIFUoZSx0LGk9cCl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IHM9dFtuXSxyPXRbKG4rMSkldC5sZW5ndGhdLGg9byhzWzBdLHJbMF0pLWksYT1sKHNbMF0sclswXSkraSxjPW8oc1sxXSxyWzFdKSstaSxkPWwoc1sxXSxyWzFdKStpO2lmKGVbMF0+PWgmJmVbMF08PWEmJmVbMV0+PWMmJmVbMV08PWQmJmooZSxzLHIpPD1pKmkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gJChlLHQsaT1wKXtjb25zdFtuLHNdPXQscj0oZVsxXS1uWzFdKSooc1swXS1uWzBdKS0oZVswXS1uWzBdKSooc1sxXS1uWzFdKTtpZihNYXRoLmFicyhyKT5pKXJldHVybiExO2NvbnN0IG89KGVbMF0tblswXSkqKHNbMF0tblswXSkrKGVbMV0tblsxXSkqKHNbMV0tblsxXSk7cmV0dXJuIShvPC1pfHxvLSgoc1swXS1uWzBdKSooc1swXS1uWzBdKSsoc1sxXS1uWzFdKSooc1sxXS1uWzFdKSk+aSl9ZnVuY3Rpb24gaihlLHQsaSl7Y29uc3Qgbj1pWzBdLXRbMF0scz1pWzFdLXRbMV0scj1uKm4rcypzO2lmKHI8MWUtMTQpe2NvbnN0IGk9ZVswXS10WzBdLG49ZVsxXS10WzFdO3JldHVybiBpKmkrbipufWxldCBvPSgoZVswXS10WzBdKSpuKyhlWzFdLXRbMV0pKnMpL3I7bz1NYXRoLm1heCgwLE1hdGgubWluKDEsbykpO2NvbnN0IGw9dFswXStvKm4saD10WzFdK28qcyxhPWVbMF0tbCxjPWVbMV0taDtyZXR1cm4gYSphK2MqY31sZXQgUT0wO2NsYXNzIEp7X2RjZWw7aWQ9USsrO2NoYW5nZUluZGV4PTA7d2VkZ2U9bnVsbDtfYXJlYT0wO19hcmVhRGlydHk9ITA7X3ZlcnRleGxpc3Q9W107X3ZlcnRleGxpc3REaXJ0eT0hMDtfY2VudGVyRGlydHk9ITA7X2hlZGdlcz1bXTtfaGVkZ2VzRGlydHk9ITA7X2NlbnRlcj1udWxsO19oYXNJbnNlcnRlZEludG9QUT0hMTtfaG9sZXM9W107X2hvbGVzRGlydHk9ITA7X2FhYmI9bnVsbDtfYWFiYkRpcnR5PSEwO2NvbnN0cnVjdG9yKGUpe3RoaXMuX2RjZWw9ZX1nZXQgYXJlYSgpe3JldHVybiB0aGlzLl9hcmVhRGlydHkmJih0aGlzLl9hcmVhPWZ1bmN0aW9uKGUpe2lmKGUubGVuZ3RoPDMpcmV0dXJuIDA7bGV0IHQ9MDtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7Y29uc3Qgbj0oaSsxKSVlLmxlbmd0aDt0Kz1lW2ldLngqZVtuXS55LWVbaV0ueSplW25dLnh9cmV0dXJuLjUqdH0odGhpcy52ZXJ0ZXhsaXN0KSx0aGlzLl9hcmVhRGlydHk9ITEpLHRoaXMuX2FyZWF9Z2V0IGFyZWFFeGNlcHRIb2xlcygpe2NvbnN0IGU9dGhpcy5ob2xlcztsZXQgdD10aGlzLmFyZWE7Zm9yKGxldCBpPTAsbj1lLmxlbmd0aDtpPG47aSsrKXQrPWVbaV0uYXJlYTtyZXR1cm4gdH1nZXQgaW50ZXJuYWwoKXtyZXR1cm4gdGhpcy5hcmVhPld9Z2V0IGV4dGVybmFsKCl7cmV0dXJuIHRoaXMuYXJlYTw9V31nZXQgaGVkZ2VzKCl7aWYodGhpcy5faGVkZ2VzRGlydHkpe2NvbnN0IGU9W107bGV0IHQ9dGhpcy53ZWRnZSxpPTA7Y29uc3Qgbj0xZTY7Zm9yKGUucHVzaCh0KTt0Lm5leHRoZWRnZSE9PXRoaXMud2VkZ2UmJmk8bjspdD10Lm5leHRoZWRnZSxlLnB1c2godCksaSsrO2lmKGk+PW4pdGhyb3cgRXJyb3IoIkZhY2UgdmVydGV4IGxpc3QgaXMgdG9vIGxvbmciKTt0aGlzLl9oZWRnZXM9ZSx0aGlzLl9oZWRnZXNEaXJ0eT0hMX1yZXR1cm4gdGhpcy5faGVkZ2VzfWdldCBjZW50ZXIoKXtpZih0aGlzLl9jZW50ZXJEaXJ0eSl7Y29uc3QgZT10aGlzLnZlcnRleGxpc3Q7bGV0IHQ9MCxpPTAsbj0wO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKXtjb25zdCByPWVbc10ueCxvPWVbc10ueSxsPWVbKHMrMSklZS5sZW5ndGhdLngsaD1lWyhzKzEpJWUubGVuZ3RoXS55LGE9cipoLW8qbDt0Kz1hLGkrPShyK2wpKmEsbis9KG8raCkqYX10Kj0uNSxpLz02KnQsbi89Nip0LHRoaXMuX2NlbnRlcj1uZXcgRChpLG4pLHRoaXMuX2NlbnRlckRpcnR5PSExfXJldHVybiB0aGlzLl9jZW50ZXJ9Z2V0IHZlcnRleGxpc3QoKXtyZXR1cm4gdGhpcy5fdmVydGV4bGlzdERpcnR5JiZ0aGlzLmNsZWFuVmVydGV4TGlzdCgpLHRoaXMuX3ZlcnRleGxpc3R9Y2xlYW5WZXJ0ZXhMaXN0KCl7aWYoIXRoaXMuX3ZlcnRleGxpc3REaXJ0eSlyZXR1cm47bGV0IGU9dGhpcy53ZWRnZTtjb25zdCB0PXRoaXMuX3ZlcnRleGxpc3Q7dC5sZW5ndGg9MDtsZXQgaT0wO2NvbnN0IG49MWU2O2Zvcih0LnB1c2goZS5vcmlnaW4pO2UubmV4dGhlZGdlIT09dGhpcy53ZWRnZSYmaTxuOyllPWUubmV4dGhlZGdlLHQucHVzaChlLm9yaWdpbiksaSsrO2lmKGk+PW4pdGhyb3cgRXJyb3IoIkZhY2UgdmVydGV4IGxpc3QgaXMgdG9vIGxvbmciKTt0aGlzLl92ZXJ0ZXhsaXN0RGlydHk9ITF9Z2V0IGhvbGVzKCl7aWYodGhpcy5faG9sZXNEaXJ0eSYmKHRoaXMuX2hvbGVzRGlydHk9ITEsdGhpcy5faG9sZXMubGVuZ3RoPTAsdGhpcy5pbnRlcm5hbCkpe2NvbnN0IGU9dGhpcy5fZGNlbC5mYWNlcztmb3IobGV0IHQ9MCxpPWUubGVuZ3RoO3Q8aTt0KyspdGhpcy5fdHJ5QWRkSG9sZShlW3RdKX1yZXR1cm4gdGhpcy5faG9sZXN9Z2V0IGFhYmIoKXtyZXR1cm4gdGhpcy5fYWFiYnx8KHRoaXMuX2FhYmI9bmV3IE4pLHRoaXMuX2FhYmJEaXJ0eSYmKHRoaXMuX2FhYmIucmVzZXQoKSx0aGlzLl9hYWJiLmV4cGFuZHModGhpcy52ZXJ0ZXhsaXN0KSx0aGlzLl9hYWJiRGlydHk9ITEpLHRoaXMuX2FhYmJ9ZXF1YWxzKGUpe2NvbnN0IHQ9dGhpcy52ZXJ0ZXhsaXN0LGk9ZS52ZXJ0ZXhsaXN0O2lmKHQubGVuZ3RoIT09aS5sZW5ndGgpcmV0dXJuITE7Y29uc3Qgbj10Lmxlbmd0aDtmb3IobGV0IGU9MDtlPG47ZSsrKWZvcihsZXQgcz0wO3M8biYmdFtzXT09PWlbKGUrcyklbl07cysrKWlmKHM9PT1uLTEpcmV0dXJuITA7cmV0dXJuITF9ZmluZE5lYXJlc3RFZGdlKGUpe3JldHVybiBmdW5jdGlvbihlLHQpe2NvbnN0IGk9aWUoZSk7bGV0IG49W2VbMF0sZVsxXV0scz0xZTEwLHI9LTEvMCxvPW51bGw7Zm9yKGxldCBsPTA7bDxlLmxlbmd0aDtsKyspe2NvbnN0IGg9W2VbbF0sZVsobCsxKSVlLmxlbmd0aF1dLHtkaXN0YW5jZTphLHByb2plY3Rpb246Y309bmUodCxoWzBdLGhbMV0pLGQ9e3g6aFsxXS54LWhbMF0ueCx5OmhbMV0ueS1oWzBdLnl9O2xldCBnPXt4Oi1kLnkseTpkLnh9LGY9e3g6KGhbMF0ueCtoWzFdLngpLzItaS54LHk6KGhbMF0ueStoWzFdLnkpLzItaS55fTtnLngqZi54K2cueSpmLnk8MCYmKGc9e3g6ZC55LHk6LWQueH0pO2NvbnN0IHU9e3g6dC54LShoWzBdLngraFsxXS54KS8yLHk6dC55LShoWzBdLnkraFsxXS55KS8yfSxwPWcueCp1LngrZy55KnUueTsoYTxzfHxhPT09cyYmcD5yKSYmcD4wJiYocz1hLG49aCxyPXAsbz1jKX1yZXR1cm57ZWRnZTpuLGRpc3RhbmNlOnMsZWRnZVBvaW50Om99fSh0aGlzLnZlcnRleGxpc3QsZSl9Y29udGFpbnNQb2ludChlKXtyZXR1cm4hKCF0aGlzLmFhYmIuY29udGFpbnNQb2ludChlKXx8IWVlKHRoaXMudmVydGV4bGlzdCxlKSl9aXNQb2ludE9uQm91bmRhcnkoZSx0PVcpe2xldCBpPXRoaXMudmVydGV4bGlzdC5tYXAoKGU9PmUudG9BcnJheSgpKSk7cmV0dXJuISFVKGUudG9BcnJheSgpLGksdCl9aW50ZXJzZWN0V2l0aFBvbHlMaW5lKGUsdD0hMSl7bGV0IGk9W107Y29uc3Qgbj10P2UubGVuZ3RoOmUubGVuZ3RoLTE7Zm9yKGxldCBzPTA7czxuO3MrKyl7Y29uc3Qgbj10PyhzKzEpJWUubGVuZ3RoOnMrMSxyPVtlW3NdLGVbbl1dO2kucHVzaCguLi50aGlzLmludGVyc2VjdFdpdGhMaW5lU2VnKHIpKX1yZXR1cm4gaX1pbnRlcnNlY3RXaXRoTGluZVNlZyhlKXtjb25zdCB0PVtdLGk9dGhpcy5oZWRnZXMuZmlsdGVyKChlPT5lLmZhY2U9PXRoaXMpKSxuPShuZXcgTikuZXhwYW5kcyhlKTtmb3IobGV0IHMgb2YgaSl7aWYoIXMuZ2V0QUFCQigpLmludGVyc2VjdHMobikpY29udGludWU7Y29uc3QgaT1zLmludGVyc2VjdFdpdGhMaW5lU2VnbWVudChlKTtpLnR5cGU9PT1GLmludGVyc2VjdGluZyYmdC5wdXNoKHtwb2ludDppLnBvaW50LGVkZ2U6W3Mub3JpZ2luLHMudHdpbi5vcmlnaW5dfSl9cmV0dXJuIHR9ZGlydHkoKXt0aGlzLl9hcmVhRGlydHk9ITAsdGhpcy5faGVkZ2VzRGlydHk9ITAsdGhpcy5fY2VudGVyRGlydHk9ITAsdGhpcy5fdmVydGV4bGlzdERpcnR5PSEwLHRoaXMuX2hvbGVzRGlydHk9ITAsdGhpcy5fYWFiYkRpcnR5PSEwLHRoaXMuY2hhbmdlSW5kZXgrK31kaXNwb3NlKCl7dGhpcy53ZWRnZT1udWxsLHRoaXMuX3ZlcnRleGxpc3QubGVuZ3RoPTAsdGhpcy5faG9sZXMubGVuZ3RoPTAsdGhpcy5fYWFiYj1udWxsLHRoaXMuX2RjZWw9bnVsbH1fdHJ5QWRkSG9sZShlKXt0aGlzLl9ob2xlc0RpcnR5fHxlLmV4dGVybmFsJiZ0aGlzLmFyZWEtTWF0aC5hYnMoZS5hcmVhKT5XJiZ0aGlzLmFhYmIuY29udGFpbnNQb2ludHMoZS52ZXJ0ZXhsaXN0KSYmdGUodGhpcy52ZXJ0ZXhsaXN0LGUudmVydGV4bGlzdCxXKSYmdGhpcy5faG9sZXMucHVzaChlKX19ZnVuY3Rpb24gWihlLHQsaSl7cmV0dXJuKHQueC1lLngpKihpLnktZS55KS0odC55LWUueSkqKGkueC1lLngpfWZ1bmN0aW9uIGVlKGUsdCxpPVcpe2lmKFUoW3QueCx0LnldLGUubWFwKChlPT5lLnRvQXJyYXkoKSkpLGkpKXJldHVybiEwO2xldCBuPTA7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IHM9ZVtpXSxyPWVbKGkrMSklZS5sZW5ndGhdO3MueTw9dC55P3IueT50LnkmJloocyxyLHQpPjAmJm4rKzpyLnk8PXQueSYmWihzLHIsdCk8MCYmbi0tfXJldHVybiAwIT09bn1mdW5jdGlvbiB0ZShlLHQsaT1XKXtmb3IobGV0IG49MCxzPXQubGVuZ3RoO248cztuKyspaWYoIWVlKGUsdFtuXSxpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBpZShlKXtsZXQgdD0wLGk9MDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0Kz1lW25dLngsaSs9ZVtuXS55O3JldHVybiBuZXcgRCh0L2UubGVuZ3RoLGkvZS5sZW5ndGgpfWZ1bmN0aW9uIG5lKGUsdCxpLG49Vyl7Y29uc3Qgcz0oaS54LXQueCkqKGkueC10LngpKyhpLnktdC55KSooaS55LXQueSk7aWYoczxuKXJldHVybntkaXN0YW5jZTplLmRpc3RhbmNlVG8odCkscHJvamVjdGlvbjp0fTtsZXQgcj0oKGUueC10LngpKihpLngtdC54KSsoZS55LXQueSkqKGkueS10LnkpKS9zO3I8LW4/cj0wOnI+MStuJiYocj0xKTtjb25zdCBvPW5ldyBEKHQueCtyKihpLngtdC54KSx0LnkrciooaS55LXQueSkpO3JldHVybntkaXN0YW5jZTplLmRpc3RhbmNlVG8obykscHJvamVjdGlvbjpvfX1jbGFzcyBzZXt3aWR0aDtoZWlnaHQ7Y2VsbFN0cmlkZTtjZWxsczt2YWxpZE1hc2s7Y2VsbFNpemU7b2Zmc2V0WDtvZmZzZXRZO2NlbGxzV2lkdGg7Y2VsbHNIZWlnaHQ7Y29uc3RydWN0b3IoZSx0LGksbj1bMCwwXSxzPVtdKXt0aGlzLndpZHRoPWUsdGhpcy5oZWlnaHQ9dCx0aGlzLmNlbGxTaXplPWksdGhpcy5vZmZzZXRYPW5bMF0sdGhpcy5vZmZzZXRZPW5bMV0sdGhpcy5jZWxsc1dpZHRoPXkoZS9pLHApLHRoaXMuY2VsbHNIZWlnaHQ9eSh0L2kscCksdGhpcy5jZWxsU3RyaWRlPXRoaXMuY2VsbHNXaWR0aCx0aGlzLmNlbGxzPUFycmF5LmZyb20oe2xlbmd0aDp0aGlzLmNlbGxzV2lkdGgqdGhpcy5jZWxsc0hlaWdodH0sKCgpPT5bXSkpLHRoaXMudmFsaWRNYXNrPW5ldyBVaW50OEFycmF5KHRoaXMuY2VsbHNXaWR0aCp0aGlzLmNlbGxzSGVpZ2h0KTtmb3IobGV0IGU9MDtlPHRoaXMuY2VsbHNIZWlnaHQ7ZSsrKWZvcihsZXQgdD0wO3Q8dGhpcy5jZWxsc1dpZHRoO3QrKyl7bGV0IGk7aWYocy5sZW5ndGgpe2NvbnN0IG49bmV3IE4scj1uZXcgRCh0aGlzLm9mZnNldFgrdCp0aGlzLmNlbGxTaXplLHRoaXMub2Zmc2V0WStlKnRoaXMuY2VsbFNpemUpLG89bmV3IEQodGhpcy5vZmZzZXRYKyh0KzEpKnRoaXMuY2VsbFNpemUsdGhpcy5vZmZzZXRZKyhlKzEpKnRoaXMuY2VsbFNpemUpO24uZXhwYW5kcyhbcixvXSksbi5leHBhbmRCeVZhbHVlKDEuNzUqdGhpcy5jZWxsU2l6ZSksaT1bLi4ubi52ZXJ0ZXhMaXN0LG4uY2VudGVyXS5zb21lKChlPT5lZShzLm1hcCgoZT0+bmV3IEQoLi4uZSkpKSxlKSkpfWVsc2UgaT0hMDt0aGlzLnZhbGlkTWFza1t0aGlzLmNlbGxJbmRleCh0LGUpXT0raX19Y2VsbEluZGV4KGUsdCl7cmV0dXJuIHQqdGhpcy5jZWxsU3RyaWRlK2V9Z2V0Q2VsbENvb3JkcyhlKXtyZXR1cm5beCgoZVswXS10aGlzLm9mZnNldFgpL3RoaXMuY2VsbFNpemUscCkseCgoZVsxXS10aGlzLm9mZnNldFkpL3RoaXMuY2VsbFNpemUscCldfWlzVmFsaWRDZWxsKGUsdCl7cmV0dXJuIGU+PTAmJmU8dGhpcy5jZWxsc1dpZHRoJiZ0Pj0wJiZ0PHRoaXMuY2VsbHNIZWlnaHQmJjE9PT10aGlzLnZhbGlkTWFza1t0aGlzLmNlbGxJbmRleChlLHQpXX1pc1ZhbGlkSW5zZXJ0aW9uUG9pbnQoZSl7Y29uc3RbdCxpXT10aGlzLmdldENlbGxDb29yZHMoZSk7cmV0dXJuIHRoaXMuaXNWYWxpZENlbGwodCxpKX1hZGRPclJlbW92ZVNlZ21lbnQoZSx0KXtjb25zdCBpPXRoaXMuZ2V0Q2VsbHNGb3JTZWdtZW50KHQpO2Zvcihjb25zdFtuLHNdb2YgaSl7Y29uc3QgaT10aGlzLmNlbGxzW3RoaXMuY2VsbEluZGV4KG4scyldO2lmKGUpaS5wdXNoKHQpO2Vsc2V7Y29uc3QgZT1pLmZpbmRJbmRleCgoZT0+ZS5zdHJlYW1saW5lSWQ9PT10LnN0cmVhbWxpbmVJZCYmZS5zZWdtZW50SW5kZXg9PT10LnNlZ21lbnRJbmRleCkpOy0xIT09ZSYmaS5zcGxpY2UoZSwxKX19fWdldENlbGxzRm9yU2VnbWVudChlKXtjb25zdCB0PW8oZS5zdGFydFswXSxlLmVuZFswXSksaT1sKGUuc3RhcnRbMF0sZS5lbmRbMF0pLG49byhlLnN0YXJ0WzFdLGUuZW5kWzFdKSxzPWwoZS5zdGFydFsxXSxlLmVuZFsxXSkscj14KCh0LXRoaXMub2Zmc2V0WCkvdGhpcy5jZWxsU2l6ZSxwKSxoPXgoKGktdGhpcy5vZmZzZXRYKS90aGlzLmNlbGxTaXplLHApLGE9eCgobi10aGlzLm9mZnNldFkpL3RoaXMuY2VsbFNpemUscCksYz14KChzLXRoaXMub2Zmc2V0WSkvdGhpcy5jZWxsU2l6ZSxwKSxkPVtdO2ZvcihsZXQgZT1hO2U8PWM7ZSsrKWZvcihsZXQgdD1yO3Q8PWg7dCsrKXRoaXMuaXNWYWxpZENlbGwodCxlKSYmZC5wdXNoKFt0LGVdKTtyZXR1cm4gZH1pc1BvaW50VG9vQ2xvc2VUb1NlZ21lbnQoZSx0LGkpe2xldHtzdGFydDpuLGVuZDpzfT10O2NvbnN0IHI9byhuWzBdLHNbMF0pLWksaD1sKG5bMF0sc1swXSkraSxhPW8oblsxXSxzWzFdKS1pLGM9bChuWzFdLHNbMV0pK2k7cmV0dXJuIShlWzBdPHJ8fGVbMF0+aHx8ZVsxXTxhfHxlWzFdPmMpJiZCKGUsdC5zdGFydCx0LmVuZCkrcDxpfWNsZWFudXAoKXtmb3IobGV0IGU9MDtlPHRoaXMuY2VsbHMubGVuZ3RoO2UrKyl0aGlzLmNlbGxzW2VdPVtdfWFkZFNlZ21lbnQoZSl7dGhpcy5hZGRPclJlbW92ZVNlZ21lbnQoITAsZSl9cmVtb3ZlU2VnbWVudChlKXt0aGlzLmFkZE9yUmVtb3ZlU2VnbWVudCghMSxlKX1nZXRFbXB0eUNlbGxzKGUpe2NvbnN0IHQ9W107Zm9yKGxldCBpPTA7aTx0aGlzLmNlbGxzSGVpZ2h0O2krKylmb3IobGV0IG49MDtuPHRoaXMuY2VsbHNXaWR0aDtuKyspaWYodGhpcy5pc1ZhbGlkQ2VsbChuLGkpKXtjb25zdCBzPXRoaXMuZ2V0Q2VsbENlbnRlcihuLGkpO3RoaXMuaXNOZWFyT3RoZXJTdHJlYW1saW5lcyhzLC0xLGUpfHx0LnB1c2gocyl9cmV0dXJuIHR9Z2V0Q2VsbENlbnRlcihlLHQpe3JldHVyblt0aGlzLm9mZnNldFgrZSp0aGlzLmNlbGxTaXplK3RoaXMuY2VsbFNpemUvMix0aGlzLm9mZnNldFkrdCp0aGlzLmNlbGxTaXplK3RoaXMuY2VsbFNpemUvMl19aXNOZWFyT3RoZXJTdHJlYW1saW5lcyhlLHQsaSl7Y29uc3RbbixzXT10aGlzLmdldENlbGxDb29yZHMoZSkscj15KGkvdGhpcy5jZWxsU2l6ZSxwKSxoPWwoMCxuLXIpLGE9byh0aGlzLmNlbGxzV2lkdGgtMSxuK3IpLGM9bCgwLHMtciksZD1vKHRoaXMuY2VsbHNIZWlnaHQtMSxzK3IpO2ZvcihsZXQgbj1jO248PWQ7bisrKWZvcihsZXQgcz1oO3M8PWE7cysrKXtjb25zdCByPXRoaXMuY2VsbHNbdGhpcy5jZWxsSW5kZXgocyxuKV07Zm9yKGNvbnN0IG4gb2YgcilpZihuLnN0cmVhbWxpbmVJZCE9PXQmJnRoaXMuaXNQb2ludFRvb0Nsb3NlVG9TZWdtZW50KGUsbixpKSlyZXR1cm4hMH1yZXR1cm4hMX19ZnVuY3Rpb24gcmUoZSx0KXtyZXR1cm4gZVswXT49dC50b3BMZWZ0WzBdLXAmJmVbMF08PXQuYm90dG9tUmlnaHRbMF0rcCYmZVsxXT49dC50b3BMZWZ0WzFdLXAmJmVbMV08PXQuYm90dG9tUmlnaHRbMV0rcH1mdW5jdGlvbipvZShlLHQsaSxuLHMscixvLGwsaC