droppy
Version:
Self-hosted file storage
1 lines • 6.21 MB
JSON
{"res":{"client.js":{"data":":base64:LyoqIQoKIEBsaWNlbnNlCiBoYW5kbGViYXJzIHY0LjcuNgoKQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgYnkgWWVodWRhIEthdHoKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCgoqLwpmdW5jdGlvbiBwcm9taXNpZnkoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9PntlKGU9PnQoZSkpfSl9fWZ1bmN0aW9uIHN2ZyhlKXtjb25zdCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpLSIrZSkuY2xvbmVOb2RlKCEwKTt0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLHQuaWQucmVwbGFjZSgiaS0iLCIiKSksdC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7cmV0dXJuKHQub3V0ZXJIVE1MfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5hcHBlbmRDaGlsZCh0KS5wYXJlbnROb2RlLmlubmVySFRNTCkucmVwbGFjZSgvKD8hPFwvKT9zeW1ib2wvZywic3ZnIil9ZnVuY3Rpb24gc2F2ZVByZWZzKGUpe3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicHJlZnMiLEpTT04uc3RyaW5naWZ5KGUpKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfX1mdW5jdGlvbiBsb2FkUHJlZnMoKXtsZXQgZTt0cnl7ZT1KU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJwcmVmcyIpKX1jYXRjaHt9cmV0dXJuIGV8fGRlZmF1bHRzfWZ1bmN0aW9uIHJlbmRlcihlLHQpeyQoIm1haW4iKS5yZXBsYWNlV2l0aChIYW5kbGViYXJzLnRlbXBsYXRlc1tlXSh0KSl9ZnVuY3Rpb24gZ2V0VmlldyhlKXtyZXR1cm4gJChkcm9wcHkudmlld3NbZV0pfWZ1bmN0aW9uIGdldE90aGVyVmlld3MoZSl7cmV0dXJuICQoZHJvcHB5LnZpZXdzLmZpbHRlcigodCxuKT0+biE9PWUpKX1mdW5jdGlvbiBnZXRBY3RpdmVWaWV3KCl7cmV0dXJuICQoZHJvcHB5LnZpZXdzW2Ryb3BweS5hY3RpdmVWaWV3XSl9ZnVuY3Rpb24gbmV3VmlldyhlLHQpe2NvbnN0IG49JChIYW5kbGViYXJzLnRlbXBsYXRlcy52aWV3KCkpO3JldHVybiBnZXRWaWV3KHQpLnJlbW92ZSgpLGRyb3BweS52aWV3c1t0XT1uWzBdLGRyb3BweS52aWV3cy5sZW5ndGg+MSYmZHJvcHB5LnZpZXdzLmZvckVhY2goZT0+eyQoZSkuYWRkQ2xhc3MoMD09PWUudklkPyJsZWZ0IjoicmlnaHQiKSwkKGUpLmZpbmQoIi5uZXd2aWV3IHN2ZyIpLnJlcGxhY2VXaXRoKHN2Zygid2luZG93LWNyb3NzIikpLCQoZSkuZmluZCgiLm5ld3ZpZXciKVswXS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJDbG9zZSB0aGlzIHZpZXciKX0pLG4uYXBwZW5kVG8oIm1haW4iKSxuWzBdLnZJZD10LG5bMF0udXBsb2FkSWQ9MCxlJiZ1cGRhdGVMb2NhdGlvbihuLGUpLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dC50YXJnZXQudmFsdWUmJih0LnRhcmdldC52YWx1ZSsiIikudHJpbSgpP3NlbmRNZXNzYWdlKGVbMF0udklkLCJTRUFSQ0giLHtxdWVyeTp0LnRhcmdldC52YWx1ZSxkaXI6ZVswXS5jdXJyZW50Rm9sZGVyfSk6b3BlbkRpcmVjdG9yeShlLGVbMF0uY3VycmVudERhdGEpfWVbMF0uZmlsZUlucHV0PWUuZmluZCgiLmZpbGUiKVswXSwobmV3IFVwcGllKShlWzBdLmZpbGVJbnB1dCwoZSx0LG4pPT57Y29uc3Qgbz0kKGUudGFyZ2V0KS5wYXJlbnRzKCIudmlldyIpO2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHZhbGlkYXRlRmlsZXMobixvKSYmKHVwbG9hZChvLHQsbiksb1swXS5maWxlSW5wdXQudmFsdWU9IiIpfSksZS5vZmYoImNsaWNrIiwiLmFmIikub24oImNsaWNrIiwiLmFmIiwoZnVuY3Rpb24oZSl7aWYoJCh0aGlzKS5oYXNDbGFzcygiZGlzYWJsZWQiKSlyZXR1cm47Y29uc3QgdD0kKGUudGFyZ2V0KS5wYXJlbnRzKCIudmlldyIpO2Ryb3BweS5kZXRlY3RzLmRpcmVjdG9yeVVwbG9hZCYmZHJvcHB5LmRpci5mb3JFYWNoKGU9Pnt0WzBdLmZpbGVJbnB1dC5yZW1vdmVBdHRyaWJ1dGUoZSl9KSx0WzBdLmZpbGVJbnB1dC5jbGljaygpfSkpLGRyb3BweS5kZXRlY3RzLmRpcmVjdG9yeVVwbG9hZCYmZS5maW5kKCIuYWQiKS5hZGRDbGFzcygiZGlzYWJsZWQiKTtlLm9mZigiY2xpY2siLCIuYWQiKS5vbigiY2xpY2siLCIuYWQiLChmdW5jdGlvbihlKXtjb25zdCB0PSQoZS50YXJnZXQpLnBhcmVudHMoIi52aWV3Iik7JCh0aGlzKS5oYXNDbGFzcygiZGlzYWJsZWQiKT9zaG93RXJyb3IoZ2V0VmlldygwKSwiWW91ciBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBkaXJlY3RvcnkgdXBsb2FkaW5nIik6KGRyb3BweS5kaXIuZm9yRWFjaChlPT57dFswXS5maWxlSW5wdXQuc2V0QXR0cmlidXRlKGUsZSl9KSx0WzBdLmZpbGVJbnB1dC5pc0ZpbGVzQW5kRGlyZWN0b3JpZXNTdXBwb3J0ZWQ/dFswXS5maWxlSW5wdXQuY2xpY2soKTp0WzBdLmZpbGVJbnB1dC5jaG9vc2VEaXJlY3Rvcnk/dFswXS5maWxlSW5wdXQuY2hvb3NlRGlyZWN0b3J5KCk6dFswXS5maWxlSW5wdXQuY2xpY2soKSl9KSksZS5vZmYoImNsaWNrIiwiLmNmLCAuY2QiKS5vbigiY2xpY2siLCIuY2YsIC5jZCIsKGZ1bmN0aW9uKGUpe2lmKCQodGhpcykuaGFzQ2xhc3MoImRpc2FibGVkIikpcmV0dXJuO2NvbnN0IHQ9JChlLnRhcmdldCkucGFyZW50cygiLnZpZXciKSxuPXQuZmluZCgiLmNvbnRlbnQiKSxvPXRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZiIpLHI9ISF0LmZpbmQoIi5lbXB0eSIpLmxlbmd0aCxpPUhhbmRsZWJhcnMudGVtcGxhdGVzW28/Im5ldy1maWxlIjoibmV3LWZvbGRlciJdKCk7c3RvcEVkaXQodCx0LmZpbmQoIi5lZGl0aW5nIiksciksciYmbi5odG1sKEhhbmRsZWJhcnMudGVtcGxhdGVzWyJmaWxlLWhlYWRlciJdKCkpLG4ucHJlcGVuZChpKSxuWzBdLnNjcm9sbFRvcD0wO2NvbnN0IGE9JCgiLmRhdGEtcm93Lm5ldy0iKyhvPyJmaWxlIjoiZm9sZGVyIikpO2VudHJ5UmVuYW1lKHQsYSxyLChlLG4scik9PntlJiYoImRpcmVjdG9yeSI9PT10WzBdLmRhdGFzZXQudHlwZSYmc2hvd1NwaW5uZXIodCksc2VuZE1lc3NhZ2UodFswXS52SWQsIkNSRUFURV8iKyhvPyJGSUxFIjoiRk9MREVSIikscikpfSl9KSksZS5vZmYoImNsaWNrIiwiLm5ld3ZpZXciKS5vbigiY2xpY2siLCIubmV3dmlldyIsKCk9PntpZigxPT09ZHJvcHB5LnZpZXdzLmxlbmd0aCl7Y29uc3QgdD1qb2luKGVbMF0uY3VycmVudEZvbGRlcixlWzBdLmN1cnJlbnRGaWxlKTtyZXBsYWNlSGlzdG9yeShuZXdWaWV3KHQsMSksdCl9ZWxzZSFmdW5jdGlvbihlKXtnZXRWaWV3KGUpLnJlbW92ZSgpLGRyb3BweS52aWV3cz1kcm9wcHkudmlld3MuZmlsdGVyKCh0LG4pPT5uIT09ZSksZHJvcHB5LnZpZXdzLmZvckVhY2goZT0+eyQoZSkucmVtb3ZlQ2xhc3MoImxlZnQgcmlnaHQiKSwkKGUpLmZpbmQoIi5uZXd2aWV3IHN2ZyIpLnJlcGxhY2VXaXRoKHN2Zygid2luZG93IikpLCQoZSkuZmluZCgiLm5ld3ZpZXciKVswXS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJDcmVhdGUgbmV3IHZpZXciKSxjaGVja1BhdGhPdmVyZmxvdygkKGUpKSxlLnZJZD0wLGUucHMmJmUucHMudXBkYXRlU2l6ZSghMCl9KSxzZW5kTWVzc2FnZShlLCJERVNUUk9ZX1ZJRVciKX0oZVswXS52SWQpLHJlcGxhY2VIaXN0b3J5KGUsam9pbihlWzBdLmN1cnJlbnRGb2xkZXIsZVswXS5jdXJyZW50RmlsZSkpfSksZS5vZmYoImNsaWNrIiwiLmFib3V0Iikub24oImNsaWNrIiwiLmFib3V0IiwoKT0+eyQoIiNhYm91dC1ib3giKS5hZGRDbGFzcygiaW4iKSx0b2dnbGVDYXRjaGVyKCl9KSxlLm9mZigiY2xpY2siLCIucHJlZnMiKS5vbigiY2xpY2siLCIucHJlZnMiLCgpPT57IWZ1bmN0aW9uKCl7Y29uc3QgZT0kKCIjcHJlZnMtYm94Iik7ZS5lbXB0eSgpLmFwcGVuZCgoKT0+e2NvbnN0IGU9W3tuYW1lOiJ0aGVtZSIsbGFiZWw6IkVkaXRvciB0aGVtZSJ9LHtuYW1lOiJlZGl0b3JGb250U2l6ZSIsbGFiZWw6IkVkaXRvciBmb250IHNpemUifSx7bmFtZToiaW5kZW50V2l0aFRhYnMiLGxhYmVsOiJFZGl0b3IgaW5kZW50IHR5cGUifSx7bmFtZToiaW5kZW50VW5pdCIsbGFiZWw6IkVkaXRvciBpbmRlbnQgd2lkdGgifSx7bmFtZToibGluZVdyYXBwaW5nIixsYWJlbDoiRWRpdG9yIHdvcmQgd3JhcCJ9LHtuYW1lOiJzaGFyZWxpbmtEb3dubG9hZCIsbGFiZWw6IlNoYXJlbGluayBkb3dubG9hZCJ9XTtsZXQgdDtmb3IoZS5mb3JFYWNoKCh0LG4pPT57ZVtuXS52YWx1ZXM9e30sZVtuXS5zZWxlY3RlZD1kcm9wcHkuZ2V0KGVbbl0ubmFtZSl9KSxkcm9wcHkudGhlbWVzLmZvckVhY2godD0+e2VbMF0udmFsdWVzW3RdPXR9KSx0PTEwO3Q8PTMwO3QrPTIpZVsxXS52YWx1ZXNbdCsiIl09dCsiIjtmb3IoZVsyXS52YWx1ZXM9e1RhYnM6ITAsU3BhY2VzOiExfSx0PTE7dDw9ODt0Kj0yKWVbM10udmFsdWVzW3QrIiJdPXQrIiI7cmV0dXJuIGVbNF0udmFsdWVzPXtXcmFwOiEwLCJObyBXcmFwIjohMX0sZVs1XS52YWx1ZXM9eyJEZWZhdWx0IE9uIjohMCwiRGVmYXVsdCBPZmYiOiExfSxIYW5kbGViYXJzLnRlbXBsYXRlcy5vcHRpb25zKHtvcHRzOmV9KX0pLCQoInNlbGVjdC50aGVtZSIpLm9mZigiY2hhbmdlIikub24oImNoYW5nZSIsKGZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLnZhbHVlO2xvYWRUaGVtZShlKX0pKSwkKCJzZWxlY3QuZWRpdG9yRm9udFNpemUiKS5vZmYoImNoYW5nZSIpLm9uKCJjaGFuZ2UiLChmdW5jdGlvbigpe3NldEVkaXRvckZvbnRTaXplKHRoaXMudmFsdWUpfSkpLHNldFRpbWVvdXQoKCk9PntlLmFkZENsYXNzKCJpbiIpLnRyYW5zaXRpb25lbmQoKGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIil9KSksdG9nZ2xlQ2F0Y2hlcighMCksJCgiI292ZXJsYXkiKS5vbmUoImNsaWNrIiwoKT0+e2UuZmluZCgic2VsZWN0IikuZWFjaCgoZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMuY2xhc3NOYW1lO2xldCB0PXRoaXMudmFsdWU7InRydWUiPT09dD90PSEwOiJmYWxzZSI9PT10P3Q9ITE6L14tP1xkKihcLlxkKyk/JC8udGVzdCh0KSYmKHQ9cGFyc2VGbG9hdCh0KSksZHJvcHB5LnNldChlLHQpLCJpbmRlbnRVbml0Ij09PWUmJmRyb3BweS5zZXQoInRhYlNpemUiLHQpLCQoIi52aWV3IikuZWFjaCgoZnVuY3Rpb24oKXt0aGlzLmVkaXRvciYmKHRoaXMuZWRpdG9yLnNldE9wdGlvbihlLHQpLCJpbmRlbnRVbml0Ij09PWUmJnRoaXMuZWRpdG9yLnNldE9wdGlvbigidGFiU2l6ZSIsdCkpfSkpfSkpfSl9LDApfSgpLGRyb3BweS5wcml2JiZzZW5kTWVzc2FnZShudWxsLCJHRVRfVVNFUlMiKX0pLGUub2ZmKCJjbGljayIsIi5yZWxvYWQiKS5vbigiY2xpY2siLCIucmVsb2FkIiwoKT0+e2Ryb3BweS5zb2NrZXRXYWl0fHwoc2hvd1NwaW5uZXIoZSksc2VuZE1lc3NhZ2UoZVswXS52SWQsIlJFTE9BRF9ESVJFQ1RPUlkiLHtkaXI6ZVswXS5jdXJyZW50Rm9sZGVyfSkpfSksZS5vZmYoImNsaWNrIiwiLmxvZ291dCIpLm9uKCJjbGljayIsIi5sb2dvdXQiLCgpPT57YWpheCh7bWV0aG9kOiJQT1NUIix1cmw6IiEvbG9nb3V0IixkYXRhOntwYXRoOmdldFJvb3RQYXRoKCl9fSkudGhlbigoKT0+e2Ryb3BweS5zb2NrZXQuY2xvc2UoNGUzKSxyZW5kZXIoImxvZ2luIiksaW5pdEF1dGhQYWdlKCl9KX0pLGUub2ZmKCJjbGljayIsIi5zZWFyY2gudG9nZ2xlZC1vZmYiKS5vbigiY2xpY2siLCIuc2VhcmNoLnRvZ2dsZWQtb2ZmIiwoZnVuY3Rpb24oKXtjb25zdCBlPSQodGhpcyk7ZS5yZW1vdmVDbGFzcygidG9nZ2xlZC1vZmYiKS5hZGRDbGFzcygidG9nZ2xlZC1vbiIpLHNldFRpbWVvdXQoKCk9PntlLmZpbmQoImlucHV0IilbMF0uZm9jdXMoKX0sMCl9KSksZS5vZmYoImNsaWNrIiwiLnNlYXJjaC50b2dnbGVkLW9uIHN2ZyIpLm9uKCJjbGljayIsIi5zZWFyY2gudG9nZ2xlZC1vbiBzdmciLChmdW5jdGlvbigpe2NvbnN0IGU9JCh0aGlzKS5wYXJlbnRzKCIudmlldyIpO29wZW5EaXJlY3RvcnkoZSxlWzBdLmN1cnJlbnREYXRhKX0pKSxlLm9mZigia2V5dXAiLCIuc2VhcmNoIGlucHV0Iikub24oImtleXVwIiwiLnNlYXJjaCBpbnB1dCIsKGZ1bmN0aW9uKGUpe2lmKDI3PT09ZS5rZXlDb2RlKXtjb25zdCBlPSQodGhpcykucGFyZW50cygiLnZpZXciKTtvcGVuRGlyZWN0b3J5KGUsZVswXS5jdXJyZW50RGF0YSksdGhpcy52YWx1ZT0iIiwkKHRoaXMpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCJ0b2dnbGVkLW9uIikuYWRkQ2xhc3MoInRvZ2dsZWQtb2ZmIil9ZWxzZSAxMz09PWUua2V5Q29kZSYmdChlKX0pKSxlLm9mZigiaW5wdXQiLCIuc2VhcmNoIGlucHV0Iikub24oImlucHV0IiwiLnNlYXJjaCBpbnB1dCIsZnVuY3Rpb24oZSx0LG4pe2xldCBvO3JldHVybiBmdW5jdGlvbiguLi5yKXtjb25zdCBpPSgpPT57bz1udWxsLG58fGUoLi4ucil9LGE9biYmIW87Y2xlYXJUaW1lb3V0KG8pLG89c2V0VGltZW91dChpLHQpLGEmJmUoLi4ucil9fSh0LDFlMykpLGUub2ZmKCJjbGljayIsIi5nbG9iYWxzZWFyY2ggaW5wdXQiKS5vbigiY2xpY2siLCIuZ2xvYmFsc2VhcmNoIGlucHV0IixlPT57ZS5zdG9wUHJvcGFnYXRpb24oKX0pfShuKSxmdW5jdGlvbihlKXsobmV3IFVwcGllKShlWzBdLCh0LG4sbyk9PntpZihvLmxlbmd0aCl7aWYoZHJvcHB5LnJlYWRPbmx5KXJldHVybiBzaG93RXJyb3IoZSwiRmlsZXMgYXJlIHJlYWQtb25seS4iKTt0LnN0b3BQcm9wYWdhdGlvbigpLHZhbGlkYXRlRmlsZXMobyxlKSYmdXBsb2FkKGUsbixvKX19KSxlLm9mZigiZHJvcCIpLm9uKCJkcm9wIixlPT57Y29uc3QgdD0kKGUudGFyZ2V0KS5wYXJlbnRzKCIudmlldyIpO2xldCBuPWUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgidGV4dCIpO2UucHJldmVudERlZmF1bHQoKSwkKCIuZHJvcHpvbmUiKS5yZW1vdmVDbGFzcygiaW4iKSxuJiYoZS5zdG9wUHJvcGFnYXRpb24oKSxuPUpTT04ucGFyc2UobiksImRpcmVjdG9yeSI9PT10WzBdLmRhdGFzZXQudHlwZT9mdW5jdGlvbihlLHQsbixvLHIpe2NvbnN0IGk9JCgiI2Ryb3Atc2VsZWN0IiksYT1lWzBdLmRyYWdBY3Rpb247aWYoZHJvcHB5LmRyYWdUaW1lci5jbGVhcigpLGRlbGV0ZSBlWzBdLmRyYWdBY3Rpb24sJCgiLmRyb3B6b25lIikucmVtb3ZlQ2xhc3MoImluIiksImNvcHkiPT09YXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXl8fHQuYWx0S2V5KXNlbmREcm9wKGUsImNvcHkiLG4sbyxyKTtlbHNle2lmKCJjdXQiIT09YSYmIXQuc2hpZnRLZXkpe2NvbnN0IGE9dC5vcmlnaW5hbEV2ZW50LmNsaWVudFgsbD10Lm9yaWdpbmFsRXZlbnQuY2xpZW50WSxzPWlbMF0ub2Zmc2V0V2lkdGgvMi0yMDtsZXQgYztyZXR1cm4gYz1hPHM/YStzOmErcz53aW5kb3cuaW5uZXJXaWR0aD9hLXM6YSxpWzBdLnN0eWxlLmxlZnQ9YysicHgiLGlbMF0uc3R5bGUudG9wPXQub3JpZ2luYWxFdmVudC5jbGllbnRZKyJweCIsaS5hZGRDbGFzcygiaW4iKSwkKGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoYSxsKSkuYWRkQ2xhc3MoImFjdGl2ZSIpLm9uZSgibW91c2VsZWF2ZSIsKGZ1bmN0aW9uKCl7JCh0aGlzKS5yZW1vdmVDbGFzcygiYWN0aXZlIil9KSksdG9nZ2xlQ2F0Y2hlcighMCksaS5jaGlsZHJlbigiLm1vdmVmaWxlIikub2ZmKCJjbGljayIpLm9uZSgiY2xpY2siLCgpPT57c2VuZERyb3AoZSwiY3V0IixuLG8sciksdG9nZ2xlQ2F0Y2hlcighMSl9KSxpLmNoaWxkcmVuKCIuY29weWZpbGUiKS5vZmYoImNsaWNrIikub25lKCJjbGljayIsKCk9PntzZW5kRHJvcChlLCJjb3B5IixuLG8sciksdG9nZ2xlQ2F0Y2hlcighMSl9KSx2b2lkIGkuY2hpbGRyZW4oIi52aWV3ZmlsZSIpLm9mZigiY2xpY2siKS5vbmUoImNsaWNrIiwoKT0+e3VwZGF0ZUxvY2F0aW9uKGUsbiksdG9nZ2xlQ2F0Y2hlcighMSl9KX1zZW5kRHJvcChlLCJjdXQiLG4sbyxyKX19KHQsZSxuLnBhdGgsam9pbih0WzBdLmN1cnJlbnRGb2xkZXIsYmFzZW5hbWUobi5wYXRoKSksITApOiJmb2xkZXIiPT09bi50eXBlPyh0WzBdLmRhdGFzZXQudHlwZT0iZGlyZWN0b3J5Iix1cGRhdGVMb2NhdGlvbih0LG4ucGF0aCkpOmpvaW4odFswXS5jdXJyZW50Rm9sZGVyLHRbMF0uY3VycmVudEZpbGUpIT09bi5wYXRoJiZvcGVuRmlsZSh0LGRpcm5hbWUobi5wYXRoKSxiYXNlbmFtZShuLnBhdGgpKSl9KX0obiksZnVuY3Rpb24oZSl7Y29uc3QgdD1lLmZpbmQoIi5kcm9wem9uZSIpO2Uub2ZmKCJkcmFnZW50ZXIiKS5vbigiZHJhZ2VudGVyIixuPT57bi5zdG9wUHJvcGFnYXRpb24oKSxkcm9wcHkuYWN0aXZlVmlldz1lWzBdLnZJZDtjb25zdCBvPSJjb3B5TW92ZSI9PT1uLm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ7bGV0IHI7cj0iZGlyZWN0b3J5Ij09PWVbMF0uZGF0YXNldC50eXBlJiZvPyJtZW51IjpvPyJvcGVuIjoidXBsb2FkLWNsb3VkIixlLmZpbmQoIi5kcm9wem9uZSBzdmciKS5yZXBsYWNlV2l0aChzdmcocikpLHQuaGFzQ2xhc3MoImluIil8fHQuYWRkQ2xhc3MoImluIiksZ2V0T3RoZXJWaWV3cygkKG4udGFyZ2V0KS5wYXJlbnRzKCIudmlldyIpWzBdLnZJZCkuZmluZCgiLmRyb3B6b25lIikucmVtb3ZlQ2xhc3MoImluIil9KX0obiksbi5vZmYoImRyYWdvdmVyIikub24oImRyYWdvdmVyIixlPT57ZS5wcmV2ZW50RGVmYXVsdCgpLGRyb3BweS5kcmFnVGltZXIucmVmcmVzaCgpfSksY2hlY2tDbGlwYm9hcmQoKSxkcm9wcHkudmlld3MuZm9yRWFjaChlPT57Y2hlY2tQYXRoT3ZlcmZsb3coJChlKSksZS5wcyYmZS5wcy51cGRhdGVTaXplKCEwKX0pLGdldFZpZXcodCl9ZnVuY3Rpb24gaW5pdCgpe2Ryb3BweS53c1JldHJpZXM9NSxkcm9wcHkuaW5pdGlhbGl6ZWR8fHNlbmRNZXNzYWdlKG51bGwsIlJFUVVFU1RfU0VUVElOR1MiKSxkcm9wcHkucXVldWVkRGF0YT9zZW5kTWVzc2FnZSgpOmdldExvY2F0aW9uc0Zyb21IYXNoKCkuZm9yRWFjaCgoZSx0KT0+e25ld1ZpZXcoam9pbihkZWNvZGVVUklDb21wb25lbnQoZSkpLHQpfSl9ZnVuY3Rpb24gb3BlblNvY2tldCgpe2Ryb3BweS5zb2NrZXQ9bmV3IFdlYlNvY2tldCh3aW5kb3cubG9jYXRpb24ub3JpZ2luLnJlcGxhY2UoL15odHRwLywid3MiKSt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrIiEvc29ja2V0IiksZHJvcHB5LnNvY2tldC5hZGRFdmVudExpc3RlbmVyKCJvcGVuIiwoKT0+e2Ryb3BweS50b2tlbj9pbml0KCk6YWpheCh7dXJsOiIhL3Rva2VuIixoZWFkZXJzOnsieC1hcHAiOiJkcm9wcHkifX0pLnRoZW4oZT0+ZS50ZXh0KCkpLnRoZW4oZT0+e2Ryb3BweS50b2tlbj1lLGluaXQoKX0pfSksZHJvcHB5LnNvY2tldC5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsZT0+ezRlMyE9PWUuY29kZSYmKDEwMTE9PT1lLmNvZGU/KGRyb3BweS50b2tlbj1udWxsLG9wZW5Tb2NrZXQoKSk6ZS5jb2RlPj0xMDAxJiZlLmNvZGU8Mzk5OT9kcm9wcHkud3NSZXRyaWVzPjAmJnNldFRpbWVvdXQoKCk9PntvcGVuU29ja2V0KCksZHJvcHB5LndzUmV0cmllcy0tfSxkcm9wcHkud3NSZXRyeVRpbWVvdXQpOmRyb3BweS5yZW9wZW4mJihkcm9wcHkucmVvcGVuPSExLG9wZW5Tb2NrZXQoKSkpfSksZHJvcHB5LnNvY2tldC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixlPT57Y29uc3QgdD1KU09OLnBhcnNlKGUuZGF0YSksbj10LnZJZCxvPWdldFZpZXcobik7c3dpdGNoKGRyb3BweS5zb2NrZXRXYWl0PSExLHQudHlwZSl7Y2FzZSJVUERBVEVfRElSRUNUT1JZIjppZigodm9pZCAwPT09b1swXS5kYXRhc2V0LnR5cGV8fG9bMF0uc3dpdGNoUmVxdWVzdCkmJihvWzBdLmRhdGFzZXQudHlwZT0iZGlyZWN0b3J5IiksIW8ubGVuZ3RoKXJldHVybjsiZGlyZWN0b3J5Ij09PW9bMF0uZGF0YXNldC50eXBlPyh0LmZvbGRlciE9PWdldFZpZXdMb2NhdGlvbihvKSYmKG9bMF0uY3VycmVudEZpbGU9bnVsbCxvWzBdLmN1cnJlbnRGb2xkZXI9dC5mb2xkZXIsMD09PW9bMF0udklkJiZzZXRUaXRsZShiYXNlbmFtZSh0LmZvbGRlcikpLHJlcGxhY2VIaXN0b3J5KG8sam9pbihvWzBdLmN1cnJlbnRGb2xkZXIsb1swXS5jdXJyZW50RmlsZSkpLHVwZGF0ZVBhdGgobykpLG9bMF0uc3dpdGNoUmVxdWVzdD0hMSxvWzBdLmN1cnJlbnREYXRhPXQuZGF0YSxvcGVuRGlyZWN0b3J5KG8sb1swXS5jdXJyZW50RGF0YSkpOiJtZWRpYSI9PT1vWzBdLmRhdGFzZXQudHlwZSYmKG9bMF0uY3VycmVudERhdGE9dC5kYXRhKTticmVhaztjYXNlIlVQREFURV9CRV9GSUxFIjpvcGVuRmlsZShnZXRWaWV3KG4pLHQuZm9sZGVyLHQuZmlsZSk7YnJlYWs7Y2FzZSJSRUxPQUQiOnQuY3NzPygkKCIjY3NzIikucmVtb3ZlKCksJChgPHN0eWxlIGlkPSdjc3MnPiR7dC5jc3N9PC9zdHlsZT5gKS5hcHBlbmRUbygkKCJoZWFkIikpKTp3aW5kb3cubG9jYXRpb24ucmVsb2FkKCEwKTticmVhaztjYXNlIlNIQVJFTElOSyI6aGlkZVNwaW5uZXIobyksby5maW5kKCIuaW5mby1ib3gubGluay5pbiIpLmxlbmd0aD9vLmZpbmQoIi5saW5rLW91dCIpWzBdLnRleHRDb250ZW50PWdldEZ1bGxMaW5rKHQubGluayk6ZnVuY3Rpb24oZSx0LG4pe3RvZ2dsZUNhdGNoZXIoITApLGNsZWFyVGltZW91dChkcm9wcHkuZXJyb3JUaW1lcik7Y29uc3Qgbz1lLmZpbmQoIi5pbmZvLWJveCIpLHI9by5maW5kKCIubGluay1vdXQiKSxpPW8uZmluZCgiLmNvcHktbGluayIpLGE9by5maW5kKCIuZGwtbGluayIpO2Fbbj8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKCJjaGVja2VkIik7Y29uc3QgbD1mdW5jdGlvbigpe2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSx0PWdldFNlbGVjdGlvbigpO2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHJbMF0pLHQucmVtb3ZlQWxsUmFuZ2VzKCksdC5hZGRSYW5nZShlKX07clswXS50ZXh0Q29udGVudD1nZXRGdWxsTGluayh0KSxyLm9mZigiY29weSIpLm9uKCJjb3B5IiwoKT0+e3NldFRpbWVvdXQodG9nZ2xlQ2F0Y2hlci5iaW5kKG51bGwsITEpLDEwMCl9KSxvLmZpbmQoIi5pY29uIHN2ZyIpLnJlcGxhY2VXaXRoKHN2ZygibGluayIpKSxvWzBdLmNsYXNzTmFtZT0iaW5mby1ib3ggbGluayBpbiIsby50cmFuc2l0aW9uZW5kKCgpPT57bCgpfSksaS5vZmYoImNsaWNrIikub24oImNsaWNrIiwoKT0+e2xldCBlO2woKTt0cnl7ZT1kb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpfWNhdGNoe31pWzBdLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsITA9PT1lPyJDb3BpZWQhIjoiQ29weSBmYWlsZWQiKX0pLm9uKCJtb3VzZWxlYXZlIiwoKT0+e2lbMF0uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiQ29weSB0byBjbGlwYm9hcmQiKX0pLGEub2ZmKCJjbGljayIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7JCh0aGlzKS50b2dnbGVDbGFzcygiY2hlY2tlZCIpLHJlcXVlc3RMaW5rKCQodGhpcykucGFyZW50cygiLnZpZXciKSxlWzBdLnNoYXJlbGlua0lkLCQodGhpcykuaGFzQ2xhc3MoImNoZWNrZWQiKSl9KSl9KG8sdC5saW5rLHQuYXR0YWNoZW1lbnQpO2JyZWFrO2Nhc2UiVVNFUl9MSVNUIjohZnVuY3Rpb24oZSl7aWYoMD09PU9iamVjdC5rZXlzKGUpLmxlbmd0aClyZXR1cm4gdG9nZ2xlQ2F0Y2hlcighMSkscmVuZGVyKCJsb2dpbiIse2ZpcnN0OiEwfSksdm9pZCBpbml0QXV0aFBhZ2UoITApO2NvbnN0IHQ9JCgiI3ByZWZzLWJveCIpO3QuZmluZCgiLmxpc3QtdXNlciIpLnJlbW92ZSgpLHQuYXBwZW5kKEhhbmRsZWJhcnMudGVtcGxhdGVzWyJsaXN0LXVzZXIiXSh7dXNlcnM6ZX0pKSx0LmZpbmQoIi5hZGQtdXNlciIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLCgpPT57Y29uc3QgZT1wcm9tcHQoIlVzZXJuYW1lPyIpO2lmKCFlKXJldHVybjtjb25zdCB0PXByb21wdCgiUGFzc3dvcmQ/Iik7aWYoIXQpcmV0dXJuO3NlbmRNZXNzYWdlKG51bGwsIlVQREFURV9VU0VSIix7bmFtZTplLHBhc3M6dCxwcml2OndpbmRvdy5jb25maXJtKCJQcml2aWxlZ2VkIFVzZXI/Iil9KX0pLHQuZmluZCgiLmRlbGV0ZS11c2VyIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksc2VuZE1lc3NhZ2UobnVsbCwiVVBEQVRFX1VTRVIiLHtuYW1lOiQodGhpcykucGFyZW50cygibGkiKS5jaGlsZHJlbigiLnVzZXJuYW1lIikudGV4dCgpLnRyaW0oKSxwYXNzOiIifSl9KSl9KHQudXNlcnMpO2JyZWFrO2Nhc2UiU0FWRV9TVEFUVVMiOntoaWRlU3Bpbm5lcihvKTtjb25zdCBlPW8uZmluZCgiLnBhdGggbGk6bGFzdC1jaGlsZCIpO2UucmVtb3ZlQ2xhc3MoImRpcnR5IikuYWRkQ2xhc3MoMD09PXQuc3RhdHVzPyJzYXZlZCI6InNhdmUtZmFpbGVkIiksc2V0VGltZW91dCgoKT0+e2UucmVtb3ZlQ2xhc3MoInNhdmVkIHNhdmUtZmFpbGVkIil9LDNlMyk7YnJlYWt9Y2FzZSJTRVRUSU5HUyI6T2JqZWN0LmtleXModC5zZXR0aW5ncykuZm9yRWFjaChlPT57ZHJvcHB5W2VdPXQuc2V0dGluZ3NbZV19KSwkKCIjYWJvdXQtdGl0bGUiKVswXS50ZXh0Q29udGVudD0iZHJvcHB5ICIrZHJvcHB5LnZlcnNpb24sJCgiI2Fib3V0LWVuZ2luZSIpWzBdLnRleHRDb250ZW50PWRyb3BweS5lbmdpbmUsZHJvcHB5LnRoZW1lcz1kcm9wcHkudGhlbWVzLnNwbGl0KCJ8IiksZHJvcHB5Lm1vZGVzPWRyb3BweS5tb2Rlcy5zcGxpdCgifCIpLGRyb3BweS50aGVtZXMucG9wKCksZHJvcHB5LnRoZW1lcy51bnNoaWZ0KCJkcm9wcHkiKSxkcm9wcHkubW9kZXMudW5zaGlmdCgicGxhaW4iKSxkcm9wcHkuZGV2JiYod2luZG93LmRyb3BweT1kcm9wcHkpLGRyb3BweS5yZWFkT25seSYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoInJlYWRvbmx5IiksZHJvcHB5LnB1YmxpYyYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoInB1YmxpYyIpLGRyb3BweS53YXRjaHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm5vd2F0Y2giKTticmVhaztjYXNlIk1FRElBX0ZJTEVTIjohZnVuY3Rpb24oZSx0KXtsZXQgbjt0LmZvckVhY2goKHQsbyk9Pnt0LnNyYz09PWVbMF0uY3VycmVudEZpbGUmJihuPW8pLHQuc3JjPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1qb2luKGVbMF0uY3VycmVudEZvbGRlcix0KS5zcGxpdCgiLyIpO2xldCBvPW4ubGVuZ3RoLTE7Zm9yKDtvPj0wO28tLSluW29dPWVuY29kZVVSSUNvbXBvbmVudChuW29dKTtyZXR1cm4iIS9maWxlIituLmpvaW4oIi8iKX0oZSx0LnNyYyksdC5maWxlbmFtZT1iYXNlbmFtZShkZWNvZGVVUklDb21wb25lbnQodC5zcmMpKSx0LnZpZGVvPyhkZWxldGUgdC52aWRlbyx0Lmh0bWw9SGFuZGxlYmFycy50ZW1wbGF0ZXMudmlkZW8oe3ZpZDplWzBdLnZJZCxzcmM6dC5zcmN9KSxkZWxldGUgdC5zcmMpOnQucGRmJiYoZGVsZXRlIHQucGRmLHQuaHRtbD1IYW5kbGViYXJzLnRlbXBsYXRlcy5wZGYoe3ZpZDplWzBdLnZJZCxzcmM6dC5zcmN9KSxkZWxldGUgdC5zcmMpfSksUHJvbWlzZS5hbGwoW2xvYWRTdHlsZSgicHMtY3NzIiwiIS9yZXMvbGliL3BzLmNzcyIpLGxvYWRTY3JpcHQoInBzLWpzIiwiIS9yZXMvbGliL3BzLmpzIildKS50aGVuKCgpPT57ZVswXS5hbmltRGlyZWN0aW9uPSJmb3J3YXJkIjtjb25zdCBvPUhhbmRsZWJhcnMudGVtcGxhdGVzLm1lZGlhKHthdXRvbmV4dDpkcm9wcHkuZ2V0KCJhdXRvbmV4dCIpPyJvbiAiOiIiLGxvb3A6ZHJvcHB5LmdldCgibG9vcCIpPyJvbiAiOiIifSk7bG9hZENvbnRlbnQoZSwibWVkaWEiLHR5cGUsbykudGhlbigoKT0+e2Z1bmN0aW9uIG8oKXtjb25zdCB0PWVbMF0ucHMudmlld3BvcnRTaXplLngsbj1lWzBdLnBzLmN1cnJJdGVtLncsbz1lWzBdLnBzLmN1cnJJdGVtLmluaXRpYWxab29tTGV2ZWwscj1lWzBdLnBzLnpvb21lZC5oP286dC9uO2VbMF0ucHMuem9vbVRvKHIsbWlkZGxlKGVbMF0ucHMpLDApLGVbMF0ucHMuem9vbWVkLnY9ITEsZVswXS5wcy56b29tZWQuaD0hZVswXS5wcy56b29tZWQuaH1mdW5jdGlvbiByKCl7Y29uc3QgdD1lWzBdLnBzLnZpZXdwb3J0U2l6ZS55LG49ZVswXS5wcy5jdXJySXRlbS5oLG89ZVswXS5wcy5jdXJySXRlbS5pbml0aWFsWm9vbUxldmVsLHI9ZVswXS5wcy56b29tZWQudj9vOnQvbjtlWzBdLnBzLnpvb21UbyhyLG1pZGRsZShlWzBdLnBzKSwwKSxlWzBdLnBzLnpvb21lZC5oPSExLGVbMF0ucHMuem9vbWVkLnY9IWVbMF0ucHMuem9vbWVkLnZ9Y29uc3QgaT1lLmZpbmQoIi5wc3dwIilbMF0sYT1kcm9wcHkuZGV0ZWN0cy5tb2JpbGU/MzUwMDoyNTAwO2VbMF0ucHM9bmV3IFBob3RvU3dpcGUoaSxQaG90b1N3aXBlVUlfRGVmYXVsdCx0LHthcnJvd0tleXM6ITEsYmFyc1NpemU6e3RvcDowLGJvdHRvbTowfSxiZ09wYWNpdHk6MSxjYXB0aW9uRWw6ITEsY2xpY2tUb0Nsb3NlTm9uWm9vbWFibGU6ITEsY2xvc2VFbENsYXNzZXM6W10sY2xvc2VPblNjcm9sbDohMSxjbG9zZU9uVmVydGljYWxEcmFnOiExLGVzY0tleTohMSxnZXREb3VibGVUYXBab29tOihlLHQpPT4yKnQuaW5pdGlhbFpvb21MZXZlbCxoaWRlQW5pbWF0aW9uRHVyYXRpb246MCxoaXN0b3J5OiExLGluZGV4Om4sbWF4U3ByZWFkWm9vbToxNixtb2RhbDohMSxwaW5jaFRvQ2xvc2U6ITEsc2hhcmVCdXR0b25zOltdLHNoYXJlRWw6ITEsc2hvd0FuaW1hdGlvbkR1cmF0aW9uOjAsc3BhY2luZzowLHRpbWVUb0lkbGU6YSx0aW1lVG9JZGxlT3V0c2lkZTphfSk7Y29uc3QgbD1lLmZpbmQoIi5hdXRvbmV4dCIpLHM9ZS5maW5kKCIubG9vcCIpO2wub2ZmKCJjbGljayIpLm9uKCJjbGljayIsKCk9Pntjb25zdCBlPSFkcm9wcHkuZ2V0KCJhdXRvbmV4dCIpO2Ryb3BweS5zZXQoImF1dG9uZXh0IixlKSxsW2U/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXSgib24iKX0pLHMub2ZmKCJjbGljayIpLm9uKCJjbGljayIsKCk9Pntjb25zdCBlPSFkcm9wcHkuZ2V0KCJsb29wIik7ZHJvcHB5LnNldCgibG9vcCIsZSksc1tlPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oIm9uIil9KSxlWzBdLnBzLmxpc3RlbigicHJldmVudERyYWdFdmVudCIsKGUsdCxuKT0+e2UmJmUudGFyZ2V0JiYobi5wcmV2ZW50PWUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygicHN3cF9faW1nIikpfSksZVswXS5wcy5saXN0ZW4oImFmdGVyQ2hhbmdlIiwoZnVuY3Rpb24oKXtjb25zdCB0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7JCh0KS5oYXNDbGFzcygicHN3cF9fYnV0dG9uIikmJnQuYmx1cigpLGVbMF0uY3VycmVudEZpbGU9dGhpcy5jdXJySXRlbS5maWxlbmFtZTtjb25zdCBuPWUuZmluZCgiLmZpdC1oLCAuZml0LXYiKSxvPWUuZmluZCgiLmxvb3AsIC5hdXRvbmV4dCIpLHI9ZS5maW5kKCIuem9vbS1pbiwgLnpvb20tb3V0Iik7bGV0IGk7aT0vXC5wZGYkLy50ZXN0KHRoaXMuY3Vyckl0ZW0uZmlsZW5hbWUpPyJwZGYiOnRoaXMuY3Vyckl0ZW0uaHRtbD8idmlkZW8iOiJpbWFnZSIsInBkZiI9PT1pPyghZnVuY3Rpb24oZSl7Y29uc3QgdD04O2xvYWRTY3JpcHQoInBkZi1qcyIsIiEvcmVzL2xpYi9wZGYuanMiKS50aGVuKCgpPT57cGRmanNMaWIuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmM9IiEvcmVzL2xpYi9wZGYud29ya2VyLmpzIixwZGZqc0xpYi5nZXREb2N1bWVudChlLmRhdGEoInNyYyIpKS5wcm9taXNlLnRoZW4obj0+e2NvbnN0IG89ZVswXS5wYXJlbnROb2RlLmNsaWVudFdpZHRoLHI9ZVswXS5wYXJlbnROb2RlLmNsaWVudEhlaWdodDtsZXQgaT0wLGE9MDtjb25zdCBsPVtdO2ZvcihsZXQgcz0xO3M8PW4ubnVtUGFnZXM7cysrKWwucHVzaChuLmdldFBhZ2UocykudGhlbihuPT57Y29uc3QgbD1uLmdldFZpZXdwb3J0KHtzY2FsZToxfSkscz1vL2wud2lkdGgsYz1yL2wuaGVpZ2h0LHU9TWF0aC5taW4ocyxjKSxkPW4uZ2V0Vmlld3BvcnQoe3NjYWxlOnUqdH0pLHA9ZC53aWR0aC90LGY9ZC5oZWlnaHQvdCxoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2guaGVpZ2h0PWQuaGVpZ2h0LGgud2lkdGg9ZC53aWR0aCxoLnN0eWxlLndpZHRoPXArInB4IixoLnN0eWxlLmhlaWdodD1mKyJweCIsZS5hcHBlbmQoaCkscD5pJiYoaT1wKSxmPmEmJihhPWYpLG4ucmVuZGVyKHtjYW52YXNDb250ZXh0OmguZ2V0Q29udGV4dCgiMmQiKSx2aWV3cG9ydDpkfSl9KSk7UHJvbWlzZS5hbGwobCkudGhlbigoKT0+e2VbMF0uc3R5bGUud2lkdGg9aSsicHgiLGVbMF0uc3R5bGUuaGVpZ2h0PWErInB4IixlWzBdLnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheT0iZmxleCIsZVswXS5wYXJlbnROb2RlLnN0eWxlLmp1c3RpZnlDb250ZW50PSJjZW50ZXIiLGVbMF0ucGFyZW50Tm9kZS5zdHlsZS5hbGlnbkl0ZW1zPSJjZW50ZXIifSl9KX0pfSgkKHRoaXMuY3Vyckl0ZW0uY29udGFpbmVyKS5maW5kKCIucGRmLWNvbnRhaW5lciIpKSxuLmFkZENsYXNzKCJoaWRkZW4iKSxvLmFkZENsYXNzKCJoaWRkZW4iKSxyLnJlbW92ZUNsYXNzKCJoaWRkZW4iKSx0aGlzLmN1cnJJdGVtLmNvbnRhaW5lci5wYXJlbnROb2RlLnN0eWxlLm92ZXJmbG93PSJhdXRvIix0aGlzLmN1cnJJdGVtLmNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm1PcmlnaW49ImNlbnRlciB0b3AiLGUuZmluZCgidmlkZW8iKS5lYWNoKChmdW5jdGlvbigpe3RoaXMucGF1c2UoKX0pKSk6InZpZGVvIj09PWk/KCFmdW5jdGlvbihlKXtjb25zdCB0PSQoZSkucGFyZW50cygiLnZpZXciKTtQcm9taXNlLmFsbChbbG9hZFN0eWxlKCJwbHlyLWNzcyIsIiEvcmVzL2xpYi9wbHlyLmNzcyIpLGxvYWRTY3JpcHQoInBseXItanMiLCIhL3Jlcy9saWIvcGx5ci5qcyIpXSkudGhlbigoKT0+eyFmdW5jdGlvbiBuKCl7aWYoISgiUGx5ciJpbiB3aW5kb3cpKXJldHVybiBzZXRUaW1lb3V0KG4sMjAwKTt0LmZpbmQoInZpZGVvIikuZWFjaCgoZnVuY3Rpb24oKXt0aGlzIT09ZSYmdGhpcy5wYXVzZSgpfSkpO2NvbnN0IG89bmV3IFBseXIoZSx7Y29udHJvbHM6WyJwbGF5Iiwidm9sdW1lIiwicHJvZ3Jlc3MiLCJjdXJyZW50LXRpbWUiLCJtdXRlIiwiY2FwdGlvbnMiXSxpY29uVXJsOiIhL3Jlcy9saWIvcGx5ci5zdmciLGJsYW5rVXJsOiIhL3Jlcy9saWIvYmxhbmsubXA0IixhdXRvcGxheTohZHJvcHB5LmRldGVjdHMubW9iaWxlLHZvbHVtZTpkcm9wcHkuZ2V0KCJ2b2x1bWUiKSxtdXRlZDowPT09ZHJvcHB5LmdldCgidm9sdW1lIiksa2V5Ym9hcmRTaG9ydGN1dHM6e2ZvY3VzZWQ6ITAsZ2xvYmFsOiEwfSx0b29sdGlwczp7Y29udHJvbHM6ITEsc2VlazohMH0sZGlzYWJsZUNvbnRleHRNZW51OiExLHN0b3JhZ2U6e2VuYWJsZWQ6ITF9LGZ1bGxzY3JlZW46e2VuYWJsZTohMX0saGlkZUNvbnRyb2xzOiEwfSk7by5vbigicmVhZHkiLCgpPT57JCh0KS5maW5kKCIucGx5cl9fY29udHJvbHMiKS5vbigibW91c2Vtb3ZlIixlPT57ZS5vcmlnaW5hbEV2ZW50JiYwIT09ZS5vcmlnaW5hbEV2ZW50LmJ1dHRvbnMmJmUuc3RvcFByb3BhZ2F0aW9uKCl9KX0pLG8ub24oImVuZGVkIiwoKT0+e2Ryb3BweS5nZXQoImxvb3AiKT9vLnBsYXkoKTpkcm9wcHkuZ2V0KCJhdXRvbmV4dCIpJiZ0WzBdLnBzLm5leHQoKX0pLG8ub24oImVycm9yIixlPT57Y29uc29sZS5lcnJvcihlKSxzaG93RXJyb3IodCwiWW91ciBicm93c2VyIGNhbid0IHBsYXkgdGhpcyBmaWxlIil9KSxvLm9uKCJ2b2x1bWVjaGFuZ2UiLCgpPT57ZHJvcHB5LnNldCgidm9sdW1lIixvLm11dGVkPzA6by52b2x1bWUpfSl9KCl9KX0oJCh0aGlzLmN1cnJJdGVtLmNvbnRhaW5lcikuZmluZCgidmlkZW8iKVswXSksbi5hZGRDbGFzcygiaGlkZGVuIiksby5yZW1vdmVDbGFzcygiaGlkZGVuIiksci5hZGRDbGFzcygiaGlkZGVuIikpOiJpbWFnZSI9PT1pJiYobi5yZW1vdmVDbGFzcygiaGlkZGVuIiksby5hZGRDbGFzcygiaGlkZGVuIiksci5yZW1vdmVDbGFzcygiaGlkZGVuIiksZS5maW5kKCJ2aWRlbyIpLmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5wYXVzZSgpfSkpKSxzZXRUaXRsZSh0aGlzLmN1cnJJdGVtLmZpbGVuYW1lLnJlcGxhY2UoL1wuLiovZywiIikpLHJlcGxhY2VIaXN0b3J5KGUsam9pbihlWzBdLmN1cnJlbnRGb2xkZXIsZVswXS5jdXJyZW50RmlsZSkpLHVwZGF0ZVBhdGgoZSl9KSksZVswXS5wcy5saXN0ZW4oInByZXZlbnREcmFnRXZlbnQiLCh0LG4pPT57ZS5maW5kKCIucHN3cF9fY29udGFpbmVyIilbMF0uY2xhc3NMaXN0W24/ImFkZCI6InJlbW92ZSJdKCJuby10cmFuc2l0aW9uIil9KSxlWzBdLnBzLmxpc3RlbigiZGVzdHJveSIsKCk9PntlWzBdLnN3aXRjaFJlcXVlc3Q9ITAsZVswXS5wcz1udWxsLHVwZGF0ZUxvY2F0aW9uKGUsZVswXS5jdXJyZW50Rm9sZGVyKX0pLGVbMF0ucHMuem9vbWVkPXtoOiExLHY6ITF9LGUuZmluZCgiLmZpdC1oIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsbyksZS5maW5kKCIuZml0LXYiKS5vZmYoImNsaWNrIikub24oImNsaWNrIixyKSxlWzBdLnBzLmxpc3RlbigiYWZ0ZXJDaGFuZ2UiLCgpPT57ZVswXS5wcy56b29tZWQuaD8oZVswXS5wcy56b29tZWQuaD0hMSxvKCEwKSk6ZVswXS5wcy56b29tZWQudiYmKGVbMF0ucHMuem9vbWVkLnY9ITEscighMCkpfSksZS5maW5kKCIuem9vbS1pbiIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLHQ9Pntjb25zdCBuPTEuNSplWzBdLnBzLmdldFpvb21MZXZlbCgpO2VbMF0ucHMuem9vbVRvKG4sbWlkZGxlKGVbMF0ucHMpLDI1MCksJCh0LnRhcmdldCkucGFyZW50cygiLnBzd3AiKS5hZGRDbGFzcygicHN3cC0tem9vbWVkLWluIil9KSxlLmZpbmQoIi56b29tLW91dCIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLCgpPT57Y29uc3QgdD1lWzBdLnBzLmdldFpvb21MZXZlbCgpLzEuNTtlWzBdLnBzLnpvb21Ubyh0LG1pZGRsZShlWzBdLnBzKSwyNTApfSksZVswXS5wcy5pbml0KCksaGlkZVNwaW5uZXIoZSl9KX0pfShvLHQuZmlsZXMpO2JyZWFrO2Nhc2UiU0VBUkNIX1JFU1VMVFMiOm9wZW5EaXJlY3Rvcnkobyx0LnJlc3VsdHMsITApO2JyZWFrO2Nhc2UiRVJST1IiOnNob3dFcnJvcihvLHQudGV4dCksaGlkZVNwaW5uZXIobyl9fSl9ZnVuY3Rpb24gc2VuZE1lc3NhZ2UoZSx0LG4pe2NvbnN0IG89e3ZJZDplLHR5cGU6dCxkYXRhOm4sdG9rZW46ZHJvcHB5LnRva2VufTsic3RyaW5nIj09dHlwZW9mIG8uZGF0YT9vLmRhdGE9bm9ybWFsaXplKG8uZGF0YSk6Im9iamVjdCI9PXR5cGVvZiBvLmRhdGEmJk9iamVjdC5rZXlzKG8uZGF0YSkuZm9yRWFjaChlPT57InN0cmluZyI9PXR5cGVvZiBvLmRhdGFbZV0mJihvLmRhdGFbZV09bm9ybWFsaXplKG8uZGF0YVtlXSkpfSk7Y29uc3Qgcj1KU09OLnN0cmluZ2lmeShvKTsxPT09ZHJvcHB5LnNvY2tldC5yZWFkeVN0YXRlPyhkcm9wcHkuc29ja2V0V2FpdD0hMCxzZXRUaW1lb3V0KCgpPT57ZHJvcHB5LnNvY2tldFdhaXQ9ITF9LDFlMyksZHJvcHB5LnF1ZXVlZERhdGEmJihkcm9wcHkuc29ja2V0LnNlbmQoZHJvcHB5LnF1ZXVlZERhdGEpLGRyb3BweS5xdWV1ZWREYXRhPW51bGwpLGRyb3BweS5zb2NrZXQuc2VuZChyKSk6KGRyb3BweS5xdWV1ZWREYXRhPXIsMj09PWRyb3BweS5zb2NrZXQucmVhZHlTdGF0ZT9kcm9wcHkucmVvcGVuPSEwOjM9PT1kcm9wcHkuc29ja2V0LnJlYWR5U3RhdGUmJm9wZW5Tb2NrZXQoKSl9ZnVuY3Rpb24gaW5pdEF1dGhQYWdlKGUpeyQoIiNyZW1lbWJlciIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLChmdW5jdGlvbigpeyQodGhpcykudG9nZ2xlQ2xhc3MoImNoZWNrZWQiKX0pKSwkKCIjZm9ybSIpLm9mZigic3VibWl0Iikub24oInN1Ym1pdCIsdD0+e3QucHJldmVudERlZmF1bHQoKSxhamF4KHttZXRob2Q6IlBPU1QiLHVybDplPyIhL2FkZHVzZXIiOiIhL2xvZ2luIixkYXRhOnt1c2VybmFtZTokKCIjdXNlciIpWzBdLnZhbHVlLHBhc3N3b3JkOiQoIiNwYXNzIilbMF0udmFsdWUscmVtZW1iZXI6JCgiI3JlbWVtYmVyIikuaGFzQ2xhc3MoImNoZWNrZWQiKSxwYXRoOmdldFJvb3RQYXRoKCl9fSkudGhlbih0PT57aWYoMjAwPT09dC5zdGF0dXMpcmVuZGVyKCJtYWluIiksaW5pdE1haW5QYWdlKCk7ZWxzZXtjb25zdCB0PSQoIiNsb2dpbi1pbmZvLWJveCIpO3QudGV4dENvbnRlbnQ9ZT8iUGxlYXNlIGZpbGwgYm90aCBmaWVsZHMuIjoiV3JvbmcgbG9naW4hIix0Lmhhc0NsYXNzKCJlcnJvciIpPyh0LmFkZENsYXNzKCJzaGFrZSIpLHNldFRpbWVvdXQoKCk9Pnt0LnJlbW92ZUNsYXNzKCJzaGFrZSIpfSw1MDApKTp0WzBdLmNsYXNzTmFtZT0iZXJyb3IiLGV8fCQoIiNwYXNzIilbMF0uZm9jdXMoKX19KX0pfWZ1bmN0aW9uIGluaXRNYWluUGFnZSgpe2Ryb3BweS5pbml0aWFsaXplZD0hMSxvcGVuU29ja2V0KCksJCh3aW5kb3cpLm9mZigicmVzaXplIikub24oInJlc2l6ZSIsKCk9PntjbGVhclRpbWVvdXQoZHJvcHB5LnJlc2l6ZVRpbWVyKSxkcm9wcHkucmVzaXplVGltZXI9c2V0VGltZW91dCgoKT0+eyQoIi52aWV3IikuZWFjaCgoZnVuY3Rpb24oKXtjaGVja1BhdGhPdmVyZmxvdygkKHRoaXMpKX0pKX0sMjUpfSksTW91c2V0cmFwLmJpbmQoImVzY2FwZSIsKCk9Pnt0b2dnbGVDYXRjaGVyKCExKX0pLmJpbmQoIm1vZCtzIixlPT57ZS5wcmV2ZW50RGVmYXVsdCgpfSkuYmluZChbInNwYWNlIiwiZG93biIsInJpZ2h0IiwicmV0dXJuIl0sKCk9Pntjb25zdCBlPWdldEFjdGl2ZVZpZXcoKTsibWVkaWEiPT09ZVswXS5kYXRhc2V0LnR5cGUmJmVbMF0ucHMubmV4dCgpfSkuYmluZChbInNoaWZ0K3NwYWNlIiwidXAiLCJsZWZ0IiwiYmFja3NwYWNlIl0sKCk9Pntjb25zdCBlPWdldEFjdGl2ZVZpZXcoKTsibWVkaWEiPT09ZVswXS5kYXRhc2V0LnR5cGUmJmVbMF0ucHMucHJldigpfSkuYmluZChbImFsdCtlbnRlciIsImYiXSwoKT0+e2NvbnN0IGU9Z2V0QWN0aXZlVmlldygpO2UmJiJtZWRpYSI9PT1lWzBdLmRhdGFzZXQudHlwZSYmc2NyZWVuZnVsbC50b2dnbGUoZS5maW5kKCIuY29udGVudCIpWzBdKX0pLCQod2luZG93KS5vbigiY2xpY2sgZGJsY2xpY2sgY29udGV4dG1lbnUiLGU9Pntjb25zdCB0PSQoZS50YXJnZXQpLnBhcmVudHMoIi52aWV3Iik7dC5sZW5ndGgmJihkcm9wcHkuYWN0aXZlVmlldz10WzBdLnZJZCx0b2dnbGVCdXR0b25zKHQsdFswXS5kYXRhc2V0LnR5cGUpKX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsYXN5bmMgZT0+e2NvbnN0IHQ9Z2V0QWN0aXZlVmlldygpO2lmKCJkaXJlY3RvcnkiPT09dFswXS5kYXRhc2V0LnR5cGUpaWYoZS5jbGlwYm9hcmREYXRhJiZlLmNsaXBib2FyZERhdGEuaXRlbXMpe2NvbnN0IG49W10sbz1bXTtmb3IoY29uc3QgdCBvZiBlLmNsaXBib2FyZERhdGEuaXRlbXMpKCJmaWxlIj09PXQua2luZHx8dC50eXBlLmluY2x1ZGVzKCJpbWFnZSIpKSYmby5wdXNoKHQuZ2V0QXNGaWxlKCkpO2Zvcihjb25zdCB0IG9mIGUuY2xpcGJvYXJkRGF0YS5pdGVtcylpZigic3RyaW5nIj09PXQua2luZCl7Y29uc3QgZT1hd2FpdCBwcm9taXNpZnkodC5nZXRBc1N0cmluZy5iaW5kKHQpKSgpO24ucHVzaChuZXcgQmxvYihbZV0se3R5cGU6InRleHQvcGxhaW4ifSkpfW8ubGVuZ3RoP28uZm9yRWFjaChlPT51cGxvYWRCbG9iKHQsZSkpOm4uZm9yRWFjaChlPT51cGxvYWRCbG9iKHQsZSkpfWVsc2UgaWYoZS5jbGlwYm9hcmREYXRhLnR5cGVzKWlmKGUuY2xpcGJvYXJkRGF0YS50eXBlcy5pbmNsdWRlcygidGV4dC9wbGFpbiIpKXtjb25zdCBuPW5ldyBCbG9iKFtlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgiVGV4dCIpXSx7dHlwZToidGV4dC9wbGFpbiJ9KTt1cGxvYWRCbG9iKHQsbiksJCgiLmNlIikuZW1wdHkoKSxkcm9wcHkuc2F2ZWRGb2N1cyYmZHJvcHB5LnNhdmVkRm9jdXMuZm9jdXMoKX1lbHNle2NvbnN0IGU9cGVyZm9ybWFuY2Uubm93KCk7IWZ1bmN0aW9uIG4oKXtjb25zdCBvPSQoIi5jZSBpbWciKTtpZighby5sZW5ndGgmJnBlcmZvcm1hbmNlLm5vdygpLWU8NWUzKXJldHVybiBzZXRUaW1lb3V0KG4sMjUpO28uZWFjaCgoZnVuY3Rpb24oKXshZnVuY3Rpb24oZSx0KXtjb25zdCBuPW5ldyBJbWFnZTtuLmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLG4uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsKCk9Pntjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Uud2lkdGg9bi53aWR0aCxlLmhlaWdodD1uLmhlaWdodDtlLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKG4sMCwwLGUud2lkdGgsZS5oZWlnaHQpO2NvbnN0IG89YXRvYihlLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIikuc3BsaXQoIiwiKVsxXSkscj1vLmxlbmd0aCxpPW5ldyBVaW50OEFycmF5KHIpO2ZvcihsZXQgZT0wO2U8cjtlKyspaVtlXT1vLmNoYXJDb2RlQXQoZSk7dChuZXcgQmxvYihbaS5idWZmZXJdLHt0eXBlOiJpbWFnZS9wbmcifSkpfSksbi5zcmM9ZX0odGhpcy5zcmMsZT0+e3VwbG9hZEJsb2IodCxlKSwkKCIuY2UiKS5lbXB0eSgpLGRyb3BweS5zYXZlZEZvY3VzJiZkcm9wcHkuc2F2ZWRGb2N1cy5mb2N1cygpfSl9KSl9KCl9fSksZHJvcHB5LmRldGVjdHMuc2FmYXJpJiYoJCgiYm9keSIpLmFwcGVuZCgnPGRpdiBjbGFzcz0iY2UiIGNvbnRlbnRlZGl0YWJsZT4nKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZT0+e2UubWV0YUtleSYmInYiPT09ZS5rZXkmJiJpbnB1dCIhPT1lLnRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYoZHJvcHB5LnNhdmVkRm9jdXM9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCwkKCIuY2UiKVswXS5mb2N1cygpKX0pKSxzY3JlZW5mdWxsLm9uKCJjaGFuZ2UiLCgpPT57ZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCksJCgic3ZnLmZ1bGxzY3JlZW4sIHN2Zy51bmZ1bGxzY3JlZW4iKS5yZXBsYWNlV2l0aChzdmcoc2NyZWVuZnVsbC5pc0Z1bGxzY3JlZW4/InVuZnVsbHNjcmVlbiI6ImZ1bGxzY3JlZW4iKSl9KSwkKCIjZW50cnktbWVudSAucGxheSIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLGU9PntlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IHQ9JChgLmRhdGEtcm93W2RhdGEtaWQ9IiR7ZHJvcHB5Lm1lbnVUYXJnZXRJZH0iXWApO3BsYXkodC5wYXJlbnRzKCIudmlldyIpLHQpLHRvZ2dsZUNhdGNoZXIoITEpfSksJCgiI2VudHJ5LW1lbnUgLmVkaXQiKS5vZmYoImNsaWNrIikub24oImNsaWNrIixlPT57ZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCB0PSQoYC5kYXRhLXJvd1tkYXRhLWlkPSIke2Ryb3BweS5tZW51VGFyZ2V0SWR9Il1gKSxuPXQucGFyZW50cygiLnZpZXciKTt0b2dnbGVDYXRjaGVyKCExKSxvcGVuRmlsZShuLG5bMF0uY3VycmVudEZvbGRlcix0LmZpbmQoIi5maWxlLWxpbmsiKVswXS50ZXh0Q29udGVudCx7dGV4dDohMH0pfSksJCgiI2VudHJ5LW1lbnUgLm9wZW5maWxlIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3QgdD0kKGAuZGF0YS1yb3dbZGF0YS1pZD0iJHtkcm9wcHkubWVudVRhcmdldElkfSJdYCksbj10LnBhcmVudHMoIi52aWV3Iik7dG9nZ2xlQ2F0Y2hlcighMSksImZvbGRlciI9PT10WzBdLmRhdGFzZXQudHlwZT91cGRhdGVMb2NhdGlvbihuLHRbMF0uZGF0YXNldC5pZCk6b3BlbkZpbGUobixuWzBdLmN1cnJlbnRGb2xkZXIsdC5maW5kKCIuZmlsZS1saW5rIilbMF0udGV4dENvbnRlbnQpfSksJCgiI2VudHJ5LW1lbnUgLnJlbmFtZSIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLGU9PntpZihlLnN0b3BQcm9wYWdhdGlvbigpLGRyb3BweS5zb2NrZXRXYWl0KXJldHVybjtjb25zdCB0PSQoYC5kYXRhLXJvd1tkYXRhLWlkPSIke2Ryb3BweS5tZW51VGFyZ2V0SWR9Il1gKSxuPXQucGFyZW50cygiLnZpZXciKTtlbnRyeVJlbmFtZShuLHQsITEsKGUsdCxvKT0+e2UmJm8hPT10JiYoc2hvd1NwaW5uZXIobiksc2VuZE1lc3NhZ2UoblswXS52SWQsIlJFTkFNRSIse3NyYzp0LGRzdDpvfSkpfSl9KSwkKCIjZW50cnktbWVudSAuc2hhcmUiKS5vZmYoImNsaWNrIikub24oImNsaWNrIixlPT57aWYoZS5zdG9wUHJvcGFnYXRpb24oKSxkcm9wcHkuc29ja2V0V2FpdClyZXR1cm47Y29uc3QgdD0kKGAuZGF0YS1yb3dbZGF0YS1pZD0iJHtkcm9wcHkubWVudVRhcmdldElkfSJdYCksbj10LnBhcmVudHMoIi52aWV3Iik7dG9nZ2xlQ2F0Y2hlcighMSkscmVxdWVzdExpbmsobix0WzBdLmRhdGFzZXQuaWQsZHJvcHB5LmdldCgic2hhcmVsaW5rRG93bmxvYWQiKSl9KSwkKCIjZW50cnktbWVudSAuY29weSwgI2VudHJ5LW1lbnUgLmN1dCIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLChmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRvZ2dsZUNhdGNoZXIoITEpLGRyb3BweS5jbGlwYm9hcmQ9e3R5cGU6dGhpcy5jbGFzc05hbWUsc3JjOmRyb3BweS5tZW51VGFyZ2V0SWR9LGNoZWNrQ2xpcGJvYXJkKCl9KSksJCgiI2VudHJ5LW1lbnUgLmRlbGV0ZSIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLGU9PntpZihlLnN0b3BQcm9wYWdhdGlvbigpLGRyb3BweS5zb2NrZXRXYWl0KXJldHVybjtjb25zdCB0PSQoYC5kYXRhLXJvd1tkYXRhLWlkPSIke2Ryb3BweS5tZW51VGFyZ2V0SWR9Il1gKSxuPXQucGFyZW50cygiLnZpZXciKTt0b2dnbGVDYXRjaGVyKCExKSxzaG93U3Bpbm5lcihuKSxzZW5kTWVzc2FnZShuWzBdLnZJZCwiREVMRVRFX0ZJTEUiLHRbMF0uZGF0YXNldC5pZCl9KX1mdW5jdGlvbiB1cGxvYWRCbG9iKGUsdCl7Y29uc3Qgbj1uZXcgRm9ybURhdGE7bGV0IG89InBhc3RlZC0iO3QudHlwZS5zdGFydHNXaXRoKCJpbWFnZSIpP28rPWBpbWFnZS0ke2RhdGVGaWxlbmFtZSgpfS4ke2Z1bmN0aW9uKGUpe2xldCB0O3JldHVybiBPYmplY3Qua2V5cyhkcm9wcHkuaW1hZ2VUeXBlcykuc29tZShuPT57aWYoZT09PWRyb3BweS5pbWFnZVR5cGVzW25dKXJldHVybiB0PW4sITB9KSx0fSh0LnR5cGUpfWA6bys9YHRleHQtJHtkYXRlRmlsZW5hbWUoKX0udHh0YCxuLmFwcGVuZCgiZmlsZXNbXSIsdCxvKSx1cGxvYWQoZSxuLFtvXSl9ZnVuY3Rpb24gdXBsb2FkKGUsdCxuKXtsZXQgbz0hMTtpZihlWzBdLmN1cnJlbnREYXRhJiZPYmplY3Qua2V5cyhlWzBdLmN1cnJlbnREYXRhKS5sZW5ndGgpe2xldCB0PSExO2NvbnN0IHI9T2JqZWN0LmtleXMoZVswXS5jdXJyZW50RGF0YSk7bi5zb21lKGU9PntpZihyLmluY2x1ZGVzKGUpKXJldHVybiB0PSEwLCEwfSksdCYmKG89IXdpbmRvdy5jb25maXJtKCJTb21lIG9mIHRoZSB1cGxvYWRlZCBmaWxlcyBhbHJlYWR5IGV4aXN0LiBPdmVyd3JpdGUgdGhlbT8iKSl9aWYoIW58fCFuLmxlbmd0aClyZXR1cm4gc2hvd0Vycm9yKGUsIlVuYWJsZSB0byB1cGxvYWQuIik7Y29uc3Qgcj1lWzBdLnVwbG9hZElkKz0xLGk9bmV3IFhNTEh0dHBSZXF1ZXN0OyQoSGFuZGxlYmFycy50ZW1wbGF0ZXNbInVwbG9hZC1pbmZvIl0oe2lkOnIsdGl0bGU6MT09PW4ubGVuZ3RoP2Jhc2VuYW1lKG5bMF0pOm4ubGVuZ3RoKyIgZmlsZXMifSkpLmFwcGVuZFRvKGUpLnRyYW5zaXRpb24oImluIikuZmluZCgiLnVwbG9hZC1jYW5jZWwiKS5vZmYoImNsaWNrIikub24oImNsaWNrIiwoKT0+e2kuYWJvcnQoKSx1cGxvYWRDYW5jZWwoZSxyKX0pLGkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix0aHJvdHRsZSh0PT57dCYmdC5sZW5ndGhDb21wdXRhYmxlJiZmdW5jdGlvbihlLHQsbixvKXtpZighZVswXS5pc1VwbG9hZGluZylyZXR1cm47Y29uc3Qgcj0kKGAudXBsb2FkLWluZm9bZGF0YS1pZD0iJHt0fSJdYCksaT0oTWF0aC5yb3VuZChuL28qMWUzKS8xMCkudG9GaXhlZCgwKSsiJSIsYT1wZXJmb3JtYW5jZS5ub3coKSxsPW4vKChhLWVbMF0udXBsb2FkU3RhcnQpLzFlMykscz1hLWVbMF0udXBsb2FkU3RhcnQsYz0oby8obi9zKS1zKS8xZTM7TnVtYmVyKGUuZmluZCgiLnVwbG9hZC1pbmZvIilbMF0uZGF0YXNldC5pZCk9PT10JiZzZXRUaXRsZShpKTtyLmZpbmQoIi51cGxvYWQtYmFyIilbMF0uc3R5bGUud2lkdGg9aSxyLmZpbmQoIi51cGxvYWQtcGVyY2VudGFnZSIpWzBdLnRleHRDb250ZW50PWksci5maW5kKCIudXBsb2FkLXRpbWUiKVswXS50ZXh0Q29udGVudD1bYz42MD9NYXRoLmNlaWwoYy82MCkrIiBtaW5zIjpNYXRoLmNlaWwoYykrIiBzZWNzIixmb3JtYXRCeXRlcygxZTMqTWF0aC5yb3VuZChsLzFlMykpKyIvcyJdLmpvaW4oIiBAICIpfShlLHIsdC5sb2FkZWQsdC50b3RhbCl9LDEwMCkpLGkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwoKT0+e3Nob3dFcnJvcihlLCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkLiIpLHVwbG9hZENhbmNlbChlLHIpfSksaS5hZGRFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIiwoKT0+e2lmKDQ9PT1pLnJlYWR5U3RhdGUpe2lmKDIwMD09PWkuc3RhdHVzKSFmdW5jdGlvbihlKXtjb25zdCB0PSQoYC51cGxvYWQtaW5mb1tkYXRhLWlkPSIke2V9Il1gKTt0LmZpbmQoIi51cGxvYWQtYmFyIilbMF0uc3R5bGUud2lkdGg9IjEwMCUiLHQuZmluZCgiLnVwbG9hZC1wZXJjZW50YWdlIilbMF0udGV4dENvbnRlbnQ9IjEwMCUiLHQuZmluZCgiLnVwbG9hZC10aXRsZSIpWzBdLnRleHRDb250ZW50PSJQcm9jZXNzaW5nIC4uLiJ9KHIpO2Vsc2UgaWYoNDAwPT09aS5zdGF0dXMpdXBsb2FkQ2FuY2VsKGUscik7ZWxzZXtpZigwPT09aS5zdGF0dXMpcmV0dXJuO3Nob3dFcnJvcihlLCJTZXJ2ZXIgcmVzcG9uZGVkIHdpdGggSFRUUCAiK2kuc3RhdHVzKSx1cGxvYWRDYW5jZWwoZSxyKX11cGxvYWRGaW5pc2goZSxyKX19KSxlWzBdLmlzVXBsb2FkaW5nPSEwLGVbMF0udXBsb2FkU3RhcnQ9cGVyZm9ybWFuY2Uubm93KCksaS5vcGVuKCJQT1NUIixgJHtnZXRSb290UGF0aCgpfSEvdXBsb2FkP3ZJZD0ke2VbMF0udklkfSZ0bz0ke2VuY29kZVVSSUNvbXBvbmVudChlWzBdLmN1cnJlbnRGb2xkZXIpfSZyZW5hbWU9JHtvPyIxIjoiMCJ9YCksaS5yZXNwb25zZVR5cGU9InRleHQiLGkuc2VuZCh0KX1mdW5jdGlvbiB1cGxvYWRDYW5jZWwoZSx0KXt1cGxvYWRGaW5pc2goZSx0LCEwKX1mdW5jdGlvbiB1cGxvYWRGaW5pc2goZSx0LG4pe2VbMF0uaXNVcGxvYWRpbmc9ITEsc2V0VGl0bGUoYmFzZW5hbWUoZVswXS5jdXJyZW50Rm9sZGVyKSksJChgLnVwbG9hZC1pbmZvW2RhdGEtaWQ9IiR7dH0iXWApLnJlbW92ZUNsYXNzKCJpbiIpLnRyYW5zaXRpb25lbmQoKGZ1bmN0aW9uKCl7JCh0aGlzKS5yZW1vdmUoKX0pKSxufHxmdW5jdGlvbihlLHQpe2lmKGRyb3BweS5kZXRlY3RzLm5vdGlmaWNhdGlvbiYmZG9jdW1lbnQuaGlkZGVuKXtjb25zdCBuPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj17aWNvbjoiIS9yZXMvbG9nbzE5Mi5wbmcifTt0JiYobi5ib2R5PXQpO25ldyBOb3RpZmljYXRpb24oZSxuKS5hZGRFdmVudExpc3RlbmVyKCJzaG93IiwoZnVuY3Rpb24oKXtjb25zdCBlPXRoaXM7c2V0VGltZW91dCgoKT0+e2UuY2xvc2UoKX0sNGUzKX0pKX07ImdyYW50ZWQiPT09Tm90aWZpY2F0aW9uLnBlcm1pc3Npb24/bihlLHQpOiJkZW5pZWQiIT09Tm90aWZpY2F0aW9uLnBlcm1pc3Npb24mJk5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbihvPT57InBlcm1pc3Npb24iaW4gTm90aWZpY2F0aW9ufHwoTm90aWZpY2F0aW9uLnBlcm1pc3Npb249byksImdyYW50ZWQiPT09byYmbihlLHQpfSl9fSgiVXBsb2FkIGZpbmlzaGVkIixgVXBsb2FkIHRvICR7ZVswXS5jdXJyZW50Rm9sZGVyfSBoYXMgZmluaXNoZWQhYCl9ZnVuY3Rpb24gZW50cnlSZW5hbWUoZSx0LG4sbyl7ZnVuY3Rpb24gcihlLG8scil7bGV0IGk7Y29uc3QgYT1jWzBdLmdldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiKSxsPWNbMF0udmFsdWU7cz8oaT0hMCxzdG9wRWRpdChlLHQsbikpOm8/KGk9ITEsc3RvcEVkaXQoZSx0LG4pKTooYy5hZGRDbGFzcygic2hha2UiKSxzZXRUaW1lb3V0KCgpPT57Yy5yZW1vdmVDbGFzcygic2hha2UiKX0sNTAwKSksImJvb2xlYW4iPT10eXBlb2YgaSYmImZ1bmN0aW9uIj09dHlwZW9mIHImJnIoaSxqb2luKGVbMF0uY3VycmVudEZvbGRlcixhKSxqb2luKGVbMF0uY3VycmVudEZvbGRlcixsKSl9Y29uc3QgaT1bXTt0LnNpYmxpbmdzKCIuZGF0YS1yb3ciKS5lYWNoKChmdW5jdGlvbigpeyQodGhpcykucmVtb3ZlQ2xhc3MoImVkaXRpbmcgaW52YWxpZCIpO2NvbnN0IGU9ZHJvcHB5LmNhc2VTZW5zaXRpdmU/dGhpcy5kYXRhc2V0Lm5hbWU6dGhpcy5kYXRhc2V0Lm5hbWUudG9Mb3dlckNhc2UoKTtlJiZpLnB1c2goZSl9KSksdG9nZ2xlQ2F0Y2hlcighMSk7Y29uc3QgYT10LmZpbmQoIi5lbnRyeS1saW5rIiksbD1hWzBdLnRleHRDb250ZW50O2xldCBzPXZhbGlkRmlsZW5hbWUobCxkcm9wcHkucGxhdGZvcm0pO3QuYWRkQ2xhc3MoImVkaXRpbmciKTtjb25zdCBjPSQoYDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5saW5lLW5hbWVyIiB2YWx1ZT0iJHtsfSIgcGxhY2Vob2xkZXI9IiR7bH0iPmApLmluc2VydEFmdGVyKGEpO2Mub2ZmKCJpbnB1dCIpLm9uKCJpbnB1dCIsKGZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLnZhbHVlLG49dmFsaWRGaWxlbmFtZShlLGRyb3BweS5wbGF0Zm9ybSksbz1pLnNvbWUodD0+dD09PShkcm9wcHkuY2FzZVNlbnNpdGl2ZT9lOmUudG9Mb3dlckNhc2UoKSkpO3M9biYmIW8sdFtzPyJyZW1vdmVDbGFzcyI6ImFkZENsYXNzIl0oImludmFsaWQiKX0pKS5vZmYoImJsdXIgZm9jdXNvdXQiKS5vbigiYmx1ciBmb2N1c291dCIsci5iaW5kKG51bGwsZSwhMCxvKSk7Y29uc3QgdT1sLmxhc3RJbmRleE9mKCIuIik7Y1swXS5zZXRTZWxlY3Rpb25SYW5nZSgwLHU+LTE/dTpsLmxlbmd0aCksY1swXS5mb2N1cygpLE1vdXNldHJhcChjWzBdKS5iaW5kKCJlc2NhcGUiLHN0b3BFZGl0LmJpbmQobnVsbCxlLHQsbikpLmJpbmQoInJldHVybiIsci5iaW5kKG51bGwsZSwhMSxvKSl9ZnVuY3Rpb24gc3RvcEVkaXQoZSx0LG4pe3QucmVtb3ZlQ2xhc3MoImVkaXRpbmcgaW52YWxpZCIpLGUuZmluZCgiLmlubGluZS1uYW1lciwgLmRhdGEtcm93Lm5ldy1maWxlLCAuZGF0YS1yb3cubmV3LWZvbGRlciIpLnJlbW92ZSgpLG4mJmUuZmluZCgiLmNvbnRlbnQiKS5odG1sKEhhbmRsZWJhcnMudGVtcGxhdGVzLmRpcmVjdG9yeSh7ZW50cmllczpbXX0pKX1mdW5jdGlvbiB0b2dnbGVDYXRjaGVyKGUpe2NvbnN0IHQ9JCgiI292ZXJsYXkiKSxuPVsiI3ByZWZzLWJveCIsIiNhYm91dC1ib3giLCIjZW50cnktbWVudSIsIiNkcm9wLXNlbGVjdCIsIi5pbmZvLWJveCJdO3ZvaWQgMD09PWUmJihlPW4uc29tZShlPT4kKGUpLmhhc0NsYXNzKCJpbiIpKSksZXx8KG4uZm9yRWFjaCh0PT57JCh0KVtlPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oImluIil9KSwkKCIuZGF0YS1yb3cuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpKSx0Lm9mZigiY2xpY2siKS5vbigiY2xpY2siLHRvZ2dsZUNhdGNoZXIuYmluZChudWxsLCExKSksdFtlPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oImluIil9ZnVuY3Rpb24gc2V0VGl0bGUoZSl7ZG9jdW1lbnQudGl0bGU9KGV8fCIvIikrIiAtIGRyb3BweSJ9ZnVuY3Rpb24gZ2V0Vmlld0xvY2F0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lWzBdLmN1cnJlbnRGb2xkZXI/IiI6am9pbihlWzBdLmN1cnJlbnRGb2xkZXIsZVswXS5jdXJyZW50RmlsZSl9ZnVuY3Rpb24gZ2V0TG9jYXRpb25zRnJvbUhhc2goKXtjb25zdCBlPXdpbmRvdy5sb2NhdGlvbi5oYXNoLnNwbGl0KCIjIik7cmV0dXJuIGUuc2hpZnQoKSwwPT09ZS5sZW5ndGgmJmUucHVzaCgiIiksZS5mb3JFYWNoKCh0LG4pPT57ZVtuXT10LnJlcGxhY2UoL1wvKiQvZywiIiksIiI9PT1lW25dJiYoZVtuXT0iLyIpfSksZX1mdW5jdGlvbiBnZXRIYXNoUGF0aHMoZSx0KXtsZXQgbj13aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7cmV0dXJuIGRyb3BweS52aWV3cy5mb3JFYWNoKG89PntvPSQobyksZSYmZS5pcyhvKT9uKz0iLyMiK3Q6bis9Ii8jIitnZXRWaWV3TG9jYXRpb24obyl9KSxuLnJlcGxhY2UoL1wvKy9nLCIvIil9ZnVuY3Rpb24gcHVzaEhpc3RvcnkoZSx0KXt3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCxudWxsLGdldEhhc2hQYXRocyhlLHQpKX1mdW5jdGlvbiByZXBsYWNlSGlzdG9yeShlLHQpe3dpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLG51bGwsZ2V0SGFzaFBhdGhzKGUsdCkpfWZ1bmN0aW9uIHVwZGF0ZUxvY2F0aW9uKGUsdCxuKXtmdW5jdGlvbiBvKGUsdCxvKXshZnVuY3Rpb24gbyhyKXtpZighZHJvcHB5LnNvY2tldFdhaXQmJiFlWzBdLmlzQW5pbWF0aW5nfHxyPjJlMyl7Y29uc3Qgbz1nZXRWaWV3TG9jYXRpb24oZSk7c2hvd1NwaW5uZXIoZSksbyYmdC5sZW5ndGghPT1vLmxlbmd0aD90Lmxlbmd0aD5vLmxlbmd0aD9lWzBdLmFuaW1EaXJlY3Rpb249ImZvcndhcmQiOmVbMF0uYW5pbURpcmVjdGlvbj0iYmFjayI6ZVswXS5hbmltRGlyZWN0aW9uPSJjZW50ZXIiLHNlbmRNZXNzYWdlKGVbMF0udklkLCJSRVFVRVNUX1VQREFURSIsdCksbnx8cHVzaEhpc3RvcnkoZSx0KX1lbHNlIHNldFRpbWVvdXQobyw1MCxyKzUwKX0obyl9aWYoIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aCl0aHJvdyBFcnJvcigiRGVzdGluYXRpb24gbmVlZHMgdG8gYmUgc3RyaW5nIG9yIGFycmF5Iik7aWYobnVsbD09PWUpZm9yKGxldCBlPXQubGVuZ3RoLTE7ZT49MDtlLS0pdFtlXS5sZW5ndGgmJmdldFZpZXdMb2NhdGlvbihnZXRWaWV3KGUpKSE9PXRbZV0mJm8oZ2V0VmlldyhlKSx0W2VdLDApO2Vsc2UgZHJvcHB5LnZpZXdzW2VbMF0udklkXSYmbyhlLHQsMCl9ZnVuY3Rpb24gdXBkYXRlUGF0aChlKXtmdW5jdGlvbiB0KHQsbil7Y29uc3Qgbz0kKGA8bGk+PGE+JHt0fTwvYT48L2xpPmApO29bMF0uZGF0YXNldC5kZXN0aW5hdGlvbj1uLG8ub2ZmKCJjbGljayIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKGUpe2NvbnN0IHQ9JChlLnRhcmdldCkucGFyZW50cygiLnZpZXciKTtkcm9wcHkuc29ja2V0V2FpdHx8KCQodGhpcykuaXMoIjpsYXN0LWNoaWxkIik/ImRpcmVjdG9yeSI9PT0kKHRoaXMpLnBhcmVudHMoIi52aWV3IilbMF0uZGF0YXNldC50eXBlJiZ1cGRhdGVMb2NhdGlvbih0LHRoaXMuZGF0YXNldC5kZXN0aW5hdGlvbik6KHRbMF0uc3dpdGNoUmVxdWVzdD0hMCx1cGRhdGVMb2NhdGlvbih0LHRoaXMuZGF0YXNldC5kZXN0aW5hdGlvbikpLHNldFRpbWVvdXQoKCk9PntjaGVja1BhdGhPdmVyZmxvdyh0KX0sNDAwKSl9KSksZS5maW5kKCIucGF0aCIpLmFwcGVuZChvKSxvLmFwcGVuZChzdmcoInRyaWFuZ2xlIikpfWZ1bmN0aW9uIG4odCl7ZS5maW5kKCIucGF0aCBsaSIpLnNsaWNlKHQpLnJlcGxhY2VDbGFzcygiaW4iLCJnb25lIikudHJhbnNpdGlvbmVuZCgoZnVuY3Rpb24oKXskKHRoaXMpLnJlbW92ZSgpfSkpfWxldCBvLHI9IiIsaT0xO2NvbnN0IGE9am9pbihlWzBdLmN1cnJlbnRGb2xkZXIpLnNwbGl0KCIvIik7aWYoIiI9PT1hW2EubGVuZ3RoLTFdJiZhLnBvcCgpLG51bGwhPT1lWzBdLmN1cnJlbnRGaWxlJiZhLnB1c2goZVswXS5jdXJyZW50RmlsZSksYVswXT1zdmcoImhvbWUiKSxlWzBdLnNhdmVkUGFydHMpZm9yKG89ZVswXS5zYXZlZFBhcnRzO2FbaV18fG9baV07KXtpZihyKz0iLyIrYVtpXSxhW2ldIT09b1tpXSlpZihhW2ldfHxvW2ldPT09YVtpXSlpZihvW2ldfHxvW2ldPT09YVtpXSl7Y29uc3QgdD0kKGUuZmluZCgiLnBhdGggbGkiKVtpXSk7dC5odG1sKGA8YT4ke2FbaV19PC9hPiR7c3ZnKCJ0cmlhbmdsZSIpfWApLHRbMF0uZGF0YXNldC5kZXN0aW5hdGlvbj1yfWVsc2UgdChhW2ldLHIpO2Vsc2UgbihpKTtpKyt9ZWxzZXt0KGFbMF0sIi8iKTtmb3IobGV0IGU9YS5sZW5ndGg7aTxlO2krKylyKz0iLyIrYVtpXSx0KGFbaV0scil9ZS5maW5kKCIucGF0aCBsaTpub3QoLmdvbmUpIikudHJhbnNpdGlvbigiaW4iKSxzZXRUaW1lb3V0KCgpPT57Y2hlY2tQYXRoT3ZlcmZsb3coZSl9LDQwMCksZVswXS5zYXZlZFBhcnRzPWF9ZnVuY3Rpb24gY2hlY2tQYXRoT3ZlcmZsb3coZSl7bGV0IHQ9NDA7Y29uc3Qgbj1lWzBdLmNsaWVudFdpZHRoO2UuZmluZCgiLnBhdGggbGkuaW4iKS5lYWNoKChmdW5jdGlvbigpe3QrPSQodGhpcylbMF0uY2xpZW50V2lkdGh9KSksZS5maW5kKCIucGF0aCBsaSIpLmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5sZWZ0PXQ+bj9uLXQrInB4IjowfSkpfWZ1bmN0aW9uIG9wZW5EaXJlY3RvcnkoZSx0LG4pe2xldCBvPWVbMF0udGVtcGxhdGVFbnRyaWVzPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1bXTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChvPT57Y29uc3Qgcj10W29dLnNwbGl0KCJ8IiksaT1yWzBdLGE9MWUzKk51bWJlcihyWzFdKSxsPU51bWJlcihyWzJdKSxzPXtuYW1lOm89bm9ybWFsaXplKG8pLHNvcnRuYW1lOm8ucmVwbGFjZSgvWyciXS9nLCJfIikudG9Mb3dlckNhc2UoKSx0eXBlOmksbXRpbWU6YSxhZ2U6dGltZURpZmZlcmVuY2UoYSksc2l6ZTpsLHBzaXplOmZvcm1hdEJ5dGVzKGwpLGlkOigiLyI9PT1lWzBdLmN1cnJlbnRGb2xkZXI/Ii8iOmVbMF0uY3VycmVudEZvbGRlcisiLyIpK28sc3ByaXRlOmdldFNwcml0ZUNsYXNzKGZpbGVFeHRlbnNpb24obykpLGNsYXNzZXM6IiJ9O09iamVjdC5rZXlzKGRyb3BweS5hdWRpb1R5cGVzKS5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKG8pKT8ocy5jbGFzc2VzPSJwbGF5YWJsZSIscy5wbGF5YWJsZT0hMCk6T2JqZWN0LmtleXMoZHJvcHB5LnZpZGVvVHlwZXMpLmluY2x1ZGVzKGZpbGVFeHRlbnNpb24obykpPyhzLmNsYXNzZXM9InZpZXdhYmxlIHZpZXdhYmxlLXZpZGVvIixzLnZpZXdhYmxlVmlkZW89ITApOk9iamVjdC5rZXlzKGRyb3BweS5pbWFnZVR5cGVzKS5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKG8pKT8ocy5jbGFzc2VzPSJ2aWV3YWJsZSB2aWV3YWJsZS1pbWFnZSIscy52aWV3YWJsZUltYWdlPSEwKToicGRmIj09PWZpbGVFeHRlbnNpb24obykmJihzLmNsYXNzZXM9InZpZXdhYmxlIHZpZXdhYmxlLXBkZiIscy52aWV3YWJsZVBkZj0hMCksbi5wdXNoKHMpfSksbn0oZSx0fHxbXSk7Y2xlYXJTZWFyY2goZSk7Y29uc3Qgcj1kcm9wcHkuZ2V0KCJzb3J0aW5ncyIpW2VbMF0uY3VycmVudEZvbGRlcl07ZVswXS5zb3J0Qnk9cj9yLnNvcnRCeToibmFtZSIsZVswXS5zb3J0QXNjPSEhciYmci5zb3J0QXNjO2NvbnN0IGk9Im5hbWUiPT09ZVswXS5zb3J0Qnk/InR5cGUiOmVbMF0uc29ydEJ5O289c29ydEFycmF5QnlQcm9wKG8saSksZVswXS5zb3J0QXNjJiZvLnJldmVyc2UoKTtjb25zdCBhPXt0eXBlOiIiLG10aW1lOiIiLHNpemU6IiJ9O2FbaV09ImFjdGl2ZSAiKyhlWzBdLnNvcnRBc2M/InVwIjoiZG93biIpO2NvbnN0IGw9SGFuZGxlYmFycy50ZW1wbGF0ZXMuZGlyZWN0b3J5KHtlbnRyaWVzOm8sc29ydDphLGlzU2VhcmNoOm59KTtsb2FkQ29udGVudChlLCJkaXJlY3RvcnkiLG51bGwsbCkudGhlbigoKT0+e2UuZmluZCgiLmVtcHR5Iikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsZT0+e2NvbnN0IHQ9JChlLnRhcmdldCkucGFyZW50cygiLnZpZXciKS5maW5kKCIuZmlsZSIpO2Ryb3BweS5kZXRlY3RzLmRpcmVjdG9yeVVwbG9hZCYmZHJvcHB5LmRpci5mb3JFYWNoKGU9Pnt0WzBdLnJlbW92ZUF0dHJpYnV0ZShlKX0pLHRbMF0uY2xpY2soKX0pLGUuZmluZCgiLmZvbGRlci1saW5rIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKHQpe2Ryb3BweS5zb2NrZXRXYWl0fHwodXBkYXRlTG9jYXRpb24oZSwkKHRoaXMpLnBhcmVudHMoIi5kYXRhLXJvdyIpWzBdLmRhdGFzZXQuaWQpLHQucHJldmVudERlZmF1bHQoKSl9KSksZS5maW5kKCIuZmlsZS1saW5rIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKGUpe2lmKGRyb3BweS5zb2NrZXRXYWl0KXJldHVybjtjb25zdCB0PSQoZS50YXJnZXQpLnBhcmVudHMoIi52aWV3Iik7b3BlbkZpbGUodCx0WzBdLmN1cnJlbnRGb2xkZXIsZS50YXJnZXQudGV4dENvbnRlbnQudHJpbSgpLHtyZWY6dGhpc30pLGUucHJldmVudERlZmF1bHQoKX0pKSxlLmZpbmQoIi5kYXRhLXJvdyIpLmVhY2goKGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlKCJvcmRlciIsZSl9KSksZS5maW5kKCIuZGF0YS1yb3ciKS5vZmYoImNvbnRleHRtZW51Iikub24oImNvbnRleHRtZW51IixlPT57Y29uc3QgdD0kKGUuY3VycmVudFRhcmdldCk7ImVycm9yIiE9PXRbMF0uZGF0YXNldC50eXBlJiYoc2hvd0VudHJ5TWVudSh0LGUuY2xpZW50WCxlLmNsaWVudFkpLGUucHJldmVudERlZmF1bHQoKSl9KSxlLmZpbmQoIi5kYXRhLXJvdyAuZW50cnktbWVudSIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLGU9PntzaG93RW50cnlNZW51KCQoZS50YXJnZXQpLnBhcmVudHMoIi5kYXRhLXJvdyIpLGUuY2xpZW50WCxlLmNsaWVudFkpfSksZS5maW5kKCIuZGF0YS1yb3cgLnppcCwgLmRhdGEtcm93IC5kb3dubG9hZCwgLmVudHJ5LWxpbmsuZmlsZSIpLm9mZigiY2xpY2siKS5vbigiY2xpY2siLGU9PntlLnN0b3BQcm9wYWdhdGlvbigpLGRyb3BweS5zb2NrZXRXYWl0fHwoZHJvcHB5LnJlb3Blbj0hMCxzZXRUaW1lb3V0KCgpPT57ZHJvcHB5LnJlb3Blbj0hMX0sMmUzKSl9KSxlLmZpbmQoIi5zaGFyZS1maWxlIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7ZHJvcHB5LnNvY2tldFdhaXR8fHJlcXVlc3RMaW5rKCQodGhpcykucGFyZW50cygiLnZpZXciKSwkKHRoaXMpLnBhcmVudHMoIi5kYXRhLXJvdyIpWzBdLmRhdGFzZXQuaWQsZHJvcHB5LmdldCgic2hhcmVsaW5rRG93bmxvYWQiKSl9KSksZS5maW5kKCIuZGVsZXRlLWZpbGUiKS5vZmYoImNsaWNrIikub24oImNsaWNrIiwoZnVuY3Rpb24oKXtkcm9wcHkuc29ja2V0V2FpdHx8KHNob3dTcGlubmVyKGUpLHNlbmRNZXNzYWdlKGVbMF0udklkLCJERUxFVEVfRklMRSIsJCh0aGlzKS5wYXJlbnRzKCIuZGF0YS1yb3ciKVswXS5kYXRhc2V0LmlkKSl9KSksZS5maW5kKCIuaWNvbi1wbGF5LCAuaWNvbi12aWV3Iikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7JCh0aGlzKS5wYXJlbnRzKCIuZGF0YS1yb3ciKS5maW5kKCIuZmlsZS1saW5rIilbMF0uY2xpY2soKX0pKSxlLmZpbmQoIi5oZWFkZXItbmFtZSwgLmhlYWRlci1tdGltZSwgLmhlYWRlci1zaXplIikub2ZmKCJjbGljayIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKGUsdCl7ZVswXS5zb3J0Qnk9L2hlYWRlci0oXHcrKS8uZXhlYyh0WzBdLmNsYXNzTmFtZSlbMV0sZVswXS5zb3J0QXNjPXQuaGFzQ2xhc3MoImRvd24iKSx0WzBdLmNsYXNzTmFtZT1gaGVhZGVyLSR7ZVswXS5zb3J0Qnl9ICR7ZVswXS5zb3J0QXNjPyJ1cCI6ImRvd24ifSBhY3RpdmVgLHQuc2libGluZ3MoKS5yZW1vdmVDbGFzcygiYWN0aXZlIHVwIGRvd24iKTtsZXQgbj1zb3J0QXJyYXlCeVByb3AoZVswXS50ZW1wbGF0ZUVudHJpZXMsdFswXS5kYXRhc2V0LnNvcnQpO2VbMF0uc29ydEFzYyYmKG49bi5yZXZlcnNlKCkpO24uZm9yRWFjaCgodCxvKT0+e2NvbnN0IHI9ZS5maW5kKGBbZGF0YS1uYW1lPSIke25bb10uc29ydG5hbWV9Il1gKVswXTtyLnN0eWxlLm9yZGVyPW8sci5zZXRBdHRyaWJ1dGUoIm9yZGVyIixvKX0pO2NvbnN0IG89ZHJvcHB5LmdldCgic29ydGluZ3MiKTtvW2VbMF0uY3VycmVudEZvbGRlcl09e3NvcnRCeTplWzBdLnNvcnRCeSxzb3J0QXNjOmVbMF0uc29ydEFzY30sZHJvcHB5LnNldCgic29ydGluZ3MiLG8pfShlLCQodGhpcykpfSkpLGhpZGVTcGlubmVyKGUpfSl9ZnVuY3Rpb24gbG9hZENvbnRlbnQoZSx0LG4sbyl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntmdW5jdGlvbiBpKCl7ZVswXS5pc0FuaW1hdGluZz0hMSxnZXRPdGhlclZpZXdzKGVbMF0udklkKS5lYWNoKChmdW5jdGlvbigpe3RoaXMuc3R5bGUuekluZGV4PSJhdXRvIn0pKSxlLmZpbmQoIi5jb250ZW50Om5vdCgubmV3KSIpLnJlbW92ZSgpLGUuZmluZCgiLm5ldyIpLnJlbW92ZUNsYXNzKCJuZXciKSxlLmZpbmQoIi5kYXRhLXJvdyIpLnJlbW92ZUNsYXNzKCJhbmltYXRpbmciKSwiZGlyZWN0b3J5Ij09PWVbMF0uZGF0YXNldC50eXBlJiZmdW5jdGlvbihlKXtlLmZpbmQoIi5kYXRhLXJvdyAuZW50cnktbGluayIpLmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoImRyYWdnYWJsZSIsInRydWUiKX0pKSxlLm9mZigiZHJhZ3N0YXJ0Iikub24oImRyYWdzdGFydCIsdD0+e2NvbnN0IG49JCh0LnRhcmdldCkuaGFzQ2xhc3MoImRhdGEtcm93Iik/JCh0LnRhcmdldCk6JCh0LnRhcmdldCkucGFyZW50cygiLmRhdGEtcm93Iik7dC5jdHJsS2V5fHx0Lm1ldGFLZXl8fHQuYWx0S2V5P2VbMF0uZHJhZ0FjdGlvbj0iY29weSI6dC5zaGlmdEtleSYmKGVbMF0uZHJhZ0FjdGlvbj0iY3V0IiksZHJvcHB5LmRyYWdUaW1lci5yZWZyZXNoKG5bMF0uZGF0YXNldC5pZCksdC5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0IixKU09OLnN0cmluZ2lmeSh7dHlwZTpuWzBdLmRhdGFzZXQudHlwZSxwYXRoOm5bMF0uZGF0YXNldC5pZH0pKSx0Lm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9ImNvcHlNb3ZlIiwic2V0RHJhZ0ltYWdlImluIHQub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXImJnQub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKG4uZmluZCgiLnNwcml0ZSIpWzBdLDAsMCl9KX0oZSksdG9nZ2xlQnV0dG9ucyhlLHQpLHIoKX1pZihlWzBdLmlzQW5pbWF0aW5nKXJldHVybjtlWzBdLmRhdGFzZXQudHlwZT10LG89YDxkaXYgY2xhc3M9Im5ldyBjb250ZW50ICR7dH0ke249bj8iIHR5cGUtIituOiIifSAke2VbMF0uYW5pbURpcmVjdGlvbn0iPiR7b308L2Rpdj5gO2NvbnN0IGE9Lyhmb3J3YXJkfGJhY2t8Y2VudGVyKS87ImNlbnRlciI9PT1lWzBdLmFuaW1EaXJlY3Rpb24/KGUuZmluZCgiLmNvbnRlbnQiKS5yZXBsYWNlQ2xhc3MoYSw