3N2rk3yzChsJp4wCS5VLo5Q3ifLmDChfbzQ · data · qwer?main.e3350ff4d88d534234ef.js?4?2?1
{
"qwer?main.e3350ff4d88d534234ef.js?4?2?1": "base64:bmN0aW9uIG91KHQsZSxuKXtyZXR1cm4gbmV3IGl1KHQsZSxuKX12YXIgaXU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIG89dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBvLm1vZHVsZVR5cGU9ZSxvLl9ib290c3RyYXBDb21wb25lbnRzPW4sby5fbmdNb2R1bGVEZWZGYWN0b3J5PXIsb31yZXR1cm4gT2JqZWN0KHIuX19leHRlbmRzKShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXshZnVuY3Rpb24oKXtpZighd2Epe3dhPSEwO3ZhciB0PWVlKCk/e3NldEN1cnJlbnROb2RlOkJhLGNyZWF0ZVJvb3RWaWV3OnhhLGNyZWF0ZUVtYmVkZGVkVmlldzpTYSxjcmVhdGVDb21wb25lbnRWaWV3OkVhLGNyZWF0ZU5nTW9kdWxlUmVmOk9hLG92ZXJyaWRlUHJvdmlkZXI6QWEsb3ZlcnJpZGVDb21wb25lbnRWaWV3OklhLGNsZWFyT3ZlcnJpZGVzOlJhLGNoZWNrQW5kVXBkYXRlVmlldzpEYSxjaGVja05vQ2hhbmdlc1ZpZXc6VWEsZGVzdHJveVZpZXc6TGEsY3JlYXRlRGVidWdDb250ZXh0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBKYSh0LGUpfSxoYW5kbGVFdmVudDpaYSx1cGRhdGVEaXJlY3RpdmVzOkdhLHVwZGF0ZVJlbmRlcmVyOnFhfTp7c2V0Q3VycmVudE5vZGU6ZnVuY3Rpb24oKXt9LGNyZWF0ZVJvb3RWaWV3OmJhLGNyZWF0ZUVtYmVkZGVkVmlldzplYSxjcmVhdGVDb21wb25lbnRWaWV3OnJhLGNyZWF0ZU5nTW9kdWxlUmVmOlFyLG92ZXJyaWRlUHJvdmlkZXI6cW4sb3ZlcnJpZGVDb21wb25lbnRWaWV3OnFuLGNsZWFyT3ZlcnJpZGVzOnFuLGNoZWNrQW5kVXBkYXRlVmlldzpsYSxjaGVja05vQ2hhbmdlc1ZpZXc6dWEsZGVzdHJveVZpZXc6cGEsY3JlYXRlRGVidWdDb250ZXh0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBKYSh0LGUpfSxoYW5kbGVFdmVudDpmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdC5kZWYuaGFuZGxlRXZlbnQodCxlLG4scil9LHVwZGF0ZURpcmVjdGl2ZXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWYudXBkYXRlRGlyZWN0aXZlcygwPT09ZT9qYTpOYSx0KX0sdXBkYXRlUmVuZGVyZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWYudXBkYXRlUmVuZGVyZXIoMD09PWU/amE6TmEsdCl9fTtHbi5zZXRDdXJyZW50Tm9kZT10LnNldEN1cnJlbnROb2RlLEduLmNyZWF0ZVJvb3RWaWV3PXQuY3JlYXRlUm9vdFZpZXcsR24uY3JlYXRlRW1iZWRkZWRWaWV3PXQuY3JlYXRlRW1iZWRkZWRWaWV3LEduLmNyZWF0ZUNvbXBvbmVudFZpZXc9dC5jcmVhdGVDb21wb25lbnRWaWV3LEduLmNyZWF0ZU5nTW9kdWxlUmVmPXQuY3JlYXRlTmdNb2R1bGVSZWYsR24ub3ZlcnJpZGVQcm92aWRlcj10Lm92ZXJyaWRlUHJvdmlkZXIsR24ub3ZlcnJpZGVDb21wb25lbnRWaWV3PXQub3ZlcnJpZGVDb21wb25lbnRWaWV3LEduLmNsZWFyT3ZlcnJpZGVzPXQuY2xlYXJPdmVycmlkZXMsR24uY2hlY2tBbmRVcGRhdGVWaWV3PXQuY2hlY2tBbmRVcGRhdGVWaWV3LEduLmNoZWNrTm9DaGFuZ2VzVmlldz10LmNoZWNrTm9DaGFuZ2VzVmlldyxHbi5kZXN0cm95Vmlldz10LmRlc3Ryb3lWaWV3LEduLnJlc29sdmVEZXA9aG8sR24uY3JlYXRlRGVidWdDb250ZXh0PXQuY3JlYXRlRGVidWdDb250ZXh0LEduLmhhbmRsZUV2ZW50PXQuaGFuZGxlRXZlbnQsR24udXBkYXRlRGlyZWN0aXZlcz10LnVwZGF0ZURpcmVjdGl2ZXMsR24udXBkYXRlUmVuZGVyZXI9dC51cGRhdGVSZW5kZXJlcixHbi5kaXJ0eVBhcmVudFF1ZXJpZXM9Wml9fSgpO3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPUFycmF5LmZyb20odC5wcm92aWRlcnMpLG49QXJyYXkuZnJvbSh0Lm1vZHVsZXMpLHI9e307Zm9yKHZhciBvIGluIHQucHJvdmlkZXJzQnlLZXkpcltvXT10LnByb3ZpZGVyc0J5S2V5W29dO3JldHVybntmYWN0b3J5OnQuZmFjdG9yeSxpc1Jvb3Q6dC5pc1Jvb3QscHJvdmlkZXJzOmUsbW9kdWxlczpuLHByb3ZpZGVyc0J5S2V5OnJ9fShkcih0aGlzLl9uZ01vZHVsZURlZkZhY3RvcnkpKTtyZXR1cm4gR24uY3JlYXRlTmdNb2R1bGVSZWYodGhpcy5tb2R1bGVUeXBlLHR8fE1lLk5VTEwsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cyxlKX0sZX0oenQpLGF1PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7fX0oKSx1dT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGl0bGU9InRlc3QifX0oKSxsdT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe319KCksc3U9bmV3IFR0KCJMb2NhdGlvbiBJbml0aWFsaXplZCIpLGN1PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7fX0oKSxmdT1uZXcgVHQoImFwcEJhc2VIcmVmIiksaHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9dGhpczt0aGlzLl9zdWJqZWN0PW5ldyBPbyx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fcGxhdGZvcm1TdHJhdGVneT10O3ZhciBvPXRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPW4sdGhpcy5fYmFzZUhyZWY9ZS5zdHJpcFRyYWlsaW5nU2xhc2gocHUobykpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kub25Qb3BTdGF0ZSgoZnVuY3Rpb24odCl7ci5fc3ViamVjdC5lbWl0KHt1cmw6ci5wYXRoKCEwKSxwb3A6ITAsc3RhdGU6dC5zdGF0ZSx0eXBlOnQudHlwZX0pfSkpfXZhciBlO3JldHVybiBlPXQsdC5wcm90b3R5cGUucGF0aD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITEpLHRoaXMubm9ybWFsaXplKHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucGF0aCh0KSl9LHQucHJvdG90eXBlLmdldFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0U3RhdGUoKX0sdC5wcm90b3R5cGUuaXNDdXJyZW50UGF0aEVxdWFsVG89ZnVuY3Rpb24odCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49IiIpLHRoaXMucGF0aCgpPT10aGlzLm5vcm1hbGl6ZSh0K2Uubm9ybWFsaXplUXVlcnlQYXJhbXMobikpfSx0LnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGUuc3RyaXBUcmFpbGluZ1NsYXNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmUuc3RhcnRzV2l0aCh0KT9lLnN1YnN0cmluZyh0Lmxlbmd0aCk6ZX0odGhpcy5fYmFzZUhyZWYscHUodCkpKX0sdC5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiLyIhPT10WzBdJiYodD0iLyIrdCksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwodCl9LHQucHJvdG90eXBlLmdvPWZ1bmN0aW9uKHQsbixyKXt2b2lkIDA9PT1uJiYobj0iIiksdm9pZCAwPT09ciYmKHI9bnVsbCksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wdXNoU3RhdGUociwiIix0LG4pLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybCh0K2Uubm9ybWFsaXplUXVlcnlQYXJhbXMobikpLHIpfSx0LnByb3RvdHlwZS5yZXBsYWNlU3RhdGU9ZnVuY3Rpb24odCxuLHIpe3ZvaWQgMD09PW4mJihuPSIiKSx2b2lkIDA9PT1yJiYocj1udWxsKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnJlcGxhY2VTdGF0ZShyLCIiLHQsbiksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKHQrZS5ub3JtYWxpemVRdWVyeVBhcmFtcyhuKSkscil9LHQucHJvdG90eXBlLmZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmZvcndhcmQoKX0sdC5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuYmFjaygpfSx0LnByb3RvdHlwZS5vblVybENoYW5nZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5wdXNoKHQpLHRoaXMuc3Vic2NyaWJlKChmdW5jdGlvbih0KXtlLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModC51cmwsdC5zdGF0ZSl9KSl9LHQucHJvdG90eXBlLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnM9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3JldHVybiBuKHQsZSl9KSl9LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OnQsZXJyb3I6ZSxjb21wbGV0ZTpufSl9LHQubm9ybWFsaXplUXVlcnlQYXJhbXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiI/IiE9PXRbMF0/Ij8iK3Q6dH0sdC5qb2luV2l0aFNsYXNoPWZ1bmN0aW9uKHQsZSl7aWYoMD09dC5sZW5ndGgpcmV0dXJuIGU7aWYoMD09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG49MDtyZXR1cm4gdC5lbmRzV2l0aCgiLyIpJiZuKyssZS5zdGFydHNXaXRoKCIvIikmJm4rKywyPT1uP3QrZS5zdWJzdHJpbmcoMSk6MT09bj90K2U6dCsiLyIrZX0sdC5zdHJpcFRyYWlsaW5nU2xhc2g9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaCgvI3xcP3wkLyksbj1lJiZlLmluZGV4fHx0Lmxlbmd0aDtyZXR1cm4gdC5zbGljZSgwLG4tKCIvIj09PXRbbi0xXT8xOjApKSt0LnNsaWNlKG4pfSx0fSgpO2Z1bmN0aW9uIHB1KHQpe3JldHVybiB0LnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX12YXIgZHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fcGxhdGZvcm1Mb2NhdGlvbj1lLHIuX2Jhc2VIcmVmPSIiLG51bGwhPW4mJihyLl9iYXNlSHJlZj1uKSxyfXJldHVybiBPYmplY3Qoci5fX2V4dGVuZHMpKGUsdCksZS5wcm90b3R5cGUub25Qb3BTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUodCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UodCl9LGUucHJvdG90eXBlLmdldEJhc2VIcmVmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfSxlLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIG51bGw9PWUmJihlPSIjIiksZS5sZW5ndGg+MD9lLnN1YnN0cmluZygxKTplfSxlLnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmw9ZnVuY3Rpb24odCl7dmFyIGU9aHUuam9pbldpdGhTbGFzaCh0aGlzLl9iYXNlSHJlZix0KTtyZXR1cm4gZS5sZW5ndGg+MD8iIyIrZTplfSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIG89dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobitodS5ub3JtYWxpemVRdWVyeVBhcmFtcyhyKSk7MD09by5sZW5ndGgmJihvPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQsZSxvKX0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4raHUubm9ybWFsaXplUXVlcnlQYXJhbXMocikpOzA9PW8ubGVuZ3RoJiYobz10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0LGUsbyl9LGUucHJvdG90eXBlLmZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX0sZS5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfSxlfShjdSksZ3U9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztpZihyLl9wbGF0Zm9ybUxvY2F0aW9uPWUsbnVsbD09biYmKG49ci5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKSksbnVsbD09bil0aHJvdyBuZXcgRXJyb3IoIk5vIGJhc2UgaHJlZiBzZXQuIFBsZWFzZSBwcm92aWRlIGEgdmFsdWUgZm9yIHRoZSBBUFBfQkFTRV9IUkVGIHRva2VuIG9yIGFkZCBhIGJhc2UgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQuIik7cmV0dXJuIHIuX2Jhc2VIcmVmPW4scn1yZXR1cm4gT2JqZWN0KHIuX19leHRlbmRzKShlLHQpLGUucHJvdG90eXBlLm9uUG9wU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKHQpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKHQpfSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn0sZS5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3JldHVybiBodS5qb2luV2l0aFNsYXNoKHRoaXMuX2Jhc2VIcmVmLHQpfSxlLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lK2h1Lm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uc2VhcmNoKSxuPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaDtyZXR1cm4gbiYmdD8iIitlK246ZX0sZS5wcm90b3R5cGUucHVzaFN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4raHUubm9ybWFsaXplUXVlcnlQYXJhbXMocikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQsZSxvKX0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4raHUubm9ybWFsaXplUXVlcnlQYXJhbXMocikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKHQsZSxvKX0sZS5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfSxlLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9LGV9KGN1KSx2dT1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Llplcm89MF09Ilplcm8iLHRbdC5PbmU9MV09Ik9uZSIsdFt0LlR3bz0yXT0iVHdvIix0W3QuRmV3PTNdPSJGZXciLHRbdC5NYW55PTRdPSJNYW55Iix0W3QuT3RoZXI9NV09Ik90aGVyIix0fSh7fSkseXU9bmV3IFR0KCJVc2VWNFBsdXJhbHMiKSxtdT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe319KCksX3U9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5sb2NhbGU9ZSxyLmRlcHJlY2F0ZWRQbHVyYWxGbj1uLHJ9cmV0dXJuIE9iamVjdChyLl9fZXh0ZW5kcykoZSx0KSxlLnByb3RvdHlwZS5nZXRQbHVyYWxDYXRlZ29yeT1mdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLmRlcHJlY2F0ZWRQbHVyYWxGbj90aGlzLmRlcHJlY2F0ZWRQbHVyYWxGbihlfHx0aGlzLmxvY2FsZSx0KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpLG49d29bZV07aWYobilyZXR1cm4gbjt2YXIgcj1lLnNwbGl0KCItIilbMF07aWYobj13b1tyXSlyZXR1cm4gbjtpZigiZW4iPT09cilyZXR1cm4gQ287dGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlICInK3QrJyIuJyl9KHQpW2JvLlBsdXJhbENhc2VdfShlfHx0aGlzLmxvY2FsZSkodCkpe2Nhc2UgdnUuWmVybzpyZXR1cm4iemVybyI7Y2FzZSB2dS5PbmU6cmV0dXJuIm9uZSI7Y2FzZSB2dS5Ud286cmV0dXJuInR3byI7Y2FzZSB2dS5GZXc6cmV0dXJuImZldyI7Y2FzZSB2dS5NYW55OnJldHVybiJtYW55IjtkZWZhdWx0OnJldHVybiJvdGhlciJ9fSxlfShtdSksd3U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10LHRoaXMuX3RlbXBsYXRlUmVmPWUsdGhpcy5fY3JlYXRlZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jcmVhdGVkPSExLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX0sdC5wcm90b3R5cGUuZW5mb3JjZVN0YXRlPWZ1bmN0aW9uKHQpe3QmJiF0aGlzLl9jcmVhdGVkP3RoaXMuY3JlYXRlKCk6IXQmJnRoaXMuX2NyZWF0ZWQmJnRoaXMuZGVzdHJveSgpfSx0fSgpLGJ1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2RlZmF1bHRVc2VkPSExLHRoaXMuX2Nhc2VDb3VudD0wLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdTd2l0Y2giLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbmdTd2l0Y2g9dCwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoITApfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9hZGRDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfSx0LnByb3RvdHlwZS5fYWRkRGVmYXVsdD1mdW5jdGlvbih0KXt0aGlzLl9kZWZhdWx0Vmlld3N8fCh0aGlzLl9kZWZhdWx0Vmlld3M9W10pLHRoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKHQpfSx0LnByb3RvdHlwZS5fbWF0Y2hDYXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fGUsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExKSxlfSx0LnByb3RvdHlwZS5fdXBkYXRlRGVmYXVsdENhc2VzPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2RlZmF1bHRWaWV3cyYmdCE9PXRoaXMuX2RlZmF1bHRVc2VkKXt0aGlzLl9kZWZhdWx0VXNlZD10O2Zvcih2YXIgZT0wO2U8dGhpcy5fZGVmYXVsdFZpZXdzLmxlbmd0aDtlKyspdGhpcy5fZGVmYXVsdFZpZXdzW2VdLmVuZm9yY2VTdGF0ZSh0KX19LHR9KCkseHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5nU3dpdGNoPW4sbi5fYWRkQ2FzZSgpLHRoaXMuX3ZpZXc9bmV3IHd1KHQsZSl9cmV0dXJuIHQucHJvdG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuZW5mb3JjZVN0YXRlKHRoaXMubmdTd2l0Y2guX21hdGNoQ2FzZSh0aGlzLm5nU3dpdGNoQ2FzZSkpfSx0fSgpLEN1PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtuLl9hZGREZWZhdWx0KG5ldyB3dSh0LGUpKX19KCksU3U9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt9fSgpLEV1PW5ldyBUdCgiRG9jdW1lbnRUb2tlbiIpLE91PSJzZXJ2ZXIiLFR1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5uZ0luamVjdGFibGVEZWY9ZHQoe3Rva2VuOnQscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgUHUoVXQoRXUpLHdpbmRvdyxVdCgkdCkpfX0pLHR9KCksUHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmRvY3VtZW50PXQsdGhpcy53aW5kb3c9ZSx0aGlzLmVycm9ySGFuZGxlcj1uLHRoaXMub2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuWzAsMF19fXJldHVybiB0LnByb3RvdHlwZS5zZXRPZmZzZXQ9ZnVuY3Rpb24odCl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNBcnJheSh0KT9mdW5jdGlvbigpe3JldHVybiB0fTp0fSx0LnByb3RvdHlwZS5nZXRTY3JvbGxQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN1cHBvcnRTY3JvbGxSZXN0b3JhdGlvbigpP1t0aGlzLndpbmRvdy5zY3JvbGxYLHRoaXMud2luZG93LnNjcm9sbFldOlswLDBdfSx0LnByb3RvdHlwZS5zY3JvbGxUb1Bvc2l0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkmJnRoaXMud2luZG93LnNjcm9sbFRvKHRbMF0sdFsxXSl9LHQucHJvdG90eXBlLnNjcm9sbFRvQW5jaG9yPWZ1bmN0aW9uKHQpe2lmKHRoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkpe3Q9dGhpcy53aW5kb3cuQ1NTJiZ0aGlzLndpbmRvdy5DU1MuZXNjYXBlP3RoaXMud2luZG93LkNTUy5lc2NhcGUodCk6dC5yZXBsYWNlKC8oXCJ8XCdcIHw6fFwufFxbfFxdfCx8PSkvZywiXFwkMSIpO3RyeXt2YXIgZT10aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiMiK3QpO2lmKGUpcmV0dXJuIHZvaWQgdGhpcy5zY3JvbGxUb0VsZW1lbnQoZSk7dmFyIG49dGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbbmFtZT0nIit0KyInXSIpO2lmKG4pcmV0dXJuIHZvaWQgdGhpcy5zY3JvbGxUb0VsZW1lbnQobil9Y2F0Y2gocil7dGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3Iocil9fX0sdC5wcm90b3R5cGUuc2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uPWZ1bmN0aW9uKHQpe2lmKHRoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkpe3ZhciBlPXRoaXMud2luZG93Lmhpc3Rvcnk7ZSYmZS5zY3JvbGxSZXN0b3JhdGlvbiYmKGUuc2Nyb2xsUmVzdG9yYXRpb249dCl9fSx0LnByb3RvdHlwZS5zY3JvbGxUb0VsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxyPWUudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LG89dGhpcy5vZmZzZXQoKTt0aGlzLndpbmRvdy5zY3JvbGxUbyhuLW9bMF0sci1vWzFdKX0sdC5wcm90b3R5cGUuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiEhdGhpcy53aW5kb3cmJiEhdGhpcy53aW5kb3cuc2Nyb2xsVG99Y2F0Y2godCl7cmV0dXJuITF9fSx0fSgpLGt1PW5ldyB4KChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wbGV0ZSgpfSkpO2Z1bmN0aW9uIEF1KHQpe3JldHVybiB0P2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgeCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY29tcGxldGUoKX0pKX0pKX0odCk6a3V9ZnVuY3Rpb24gSXUodCl7dmFyIGU9bmV3IHgoKGZ1bmN0aW9uKGUpe2UubmV4dCh0KSxlLmNvbXBsZXRlKCl9KSk7cmV0dXJuIGUuX2lzU2NhbGFyPSEwLGUudmFsdWU9dCxlfWZ1bmN0aW9uIFJ1KCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBuPXRbdC5sZW5ndGgtMV07c3dpdGNoKEEobik/dC5wb3AoKTpuPXZvaWQgMCx0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBBdShuKTtjYXNlIDE6cmV0dXJuIG4/cSh0LG4pOkl1KHRbMF0pO2RlZmF1bHQ6cmV0dXJuIHEodCxuKX19dmFyIE11PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl92YWx1ZT1lLG59cmV0dXJuIHIuX19leHRlbmRzKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbihlKXt2YXIgbj10LnByb3RvdHlwZS5fc3Vic2NyaWJlLmNhbGwodGhpcyxlKTtyZXR1cm4gbiYmIW4uY2xvc2VkJiZlLm5leHQodGhpcy5fdmFsdWUpLG59LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7aWYodGhpcy5oYXNFcnJvcil0aHJvdyB0aGlzLnRocm93bkVycm9yO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBFO3JldHVybiB0aGlzLl92YWx1ZX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyx0aGlzLl92YWx1ZT1lKX0sZX0oUCk7ZnVuY3Rpb24ganUoKXtyZXR1cm4gRXJyb3IuY2FsbCh0aGlzKSx0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNlIix0aGlzLm5hbWU9IkVtcHR5RXJyb3IiLHRoaXN9anUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTt2YXIgTnU9anUsRHU9e307ZnVuY3Rpb24gVXUoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49bnVsbCxyPW51bGw7cmV0dXJuIEEodFt0Lmxlbmd0aC0xXSkmJihyPXQucG9wKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYobj10LnBvcCgpKSwxPT09dC5sZW5ndGgmJm8odFswXSkmJih0PXRbMF0pLHEodCxyKS5saWZ0KG5ldyBMdShuKSl9dmFyIEx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnJlc3VsdFNlbGVjdG9yPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IFZ1KHQsdGhpcy5yZXN1bHRTZWxlY3RvcikpfSx0fSgpLFZ1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5yZXN1bHRTZWxlY3Rvcj1uLHIuYWN0aXZlPTAsci52YWx1ZXM9W10sci5vYnNlcnZhYmxlcz1bXSxyfXJldHVybiByLl9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMudmFsdWVzLnB1c2goRHUpLHRoaXMub2JzZXJ2YWJsZXMucHVzaCh0KX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vYnNlcnZhYmxlcyxlPXQubGVuZ3RoO2lmKDA9PT1lKXRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtlbHNle3RoaXMuYWN0aXZlPWUsdGhpcy50b1Jlc3BvbmQ9ZTtmb3IodmFyIG49MDtuPGU7bisrKXt2YXIgcj10W25dO3RoaXMuYWRkKHoodGhpcyxyLHIsbikpfX19LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpezA9PSh0aGlzLmFjdGl2ZS09MSkmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLG8pe3ZhciBpPXRoaXMudmFsdWVzLGE9dGhpcy50b1Jlc3BvbmQ/aVtuXT09PUR1Py0tdGhpcy50b1Jlc3BvbmQ6dGhpcy50b1Jlc3BvbmQ6MDtpW25dPWUsMD09PWEmJih0aGlzLnJlc3VsdFNlbGVjdG9yP3RoaXMuX3RyeVJlc3VsdFNlbGVjdG9yKGkpOnRoaXMuZGVzdGluYXRpb24ubmV4dChpLnNsaWNlKCkpKX0sZS5wcm90b3R5cGUuX3RyeVJlc3VsdFNlbGVjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMucmVzdWx0U2VsZWN0b3IuYXBwbHkodGhpcyx0KX1jYXRjaChuKXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKG4pfXRoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZX0oRik7ZnVuY3Rpb24gSHUodCl7cmV0dXJuIG5ldyB4KChmdW5jdGlvbihlKXt2YXIgbjt0cnl7bj10KCl9Y2F0Y2gocil7cmV0dXJuIHZvaWQgZS5lcnJvcihyKX1yZXR1cm4obj9XKG4pOkF1KCkpLnN1YnNjcmliZShlKX0pKX1mdW5jdGlvbiB6dSgpe3JldHVybiAkKDEpfWZ1bmN0aW9uIEZ1KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuLmxpZnQobmV3IEJ1KHQsZSkpfX12YXIgQnU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLnRoaXNBcmc9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgWnUodCx0aGlzLnByZWRpY2F0ZSx0aGlzLnRoaXNBcmcpKX0sdH0oKSxadT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgbz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gby5wcmVkaWNhdGU9bixvLnRoaXNBcmc9cixvLmNvdW50PTAsb31yZXR1cm4gci5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10aGlzLnByZWRpY2F0ZS5jYWxsKHRoaXMudGhpc0FyZyx0LHRoaXMuY291bnQrKyl9Y2F0Y2gobil7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihuKX1lJiZ0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGV9KHYpO2Z1bmN0aW9uIEd1KCl7cmV0dXJuIEVycm9yLmNhbGwodGhpcyksdGhpcy5tZXNzYWdlPSJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiLHRoaXMubmFtZT0iQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IiLHRoaXN9R3UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTt2YXIgcXU9R3U7ZnVuY3Rpb24gV3UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAwPT09dD9BdSgpOmUubGlmdChuZXcgUXUodCkpfX12YXIgUXU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKHRoaXMudG90YWw9dCx0aGlzLnRvdGFsPDApdGhyb3cgbmV3IHF1fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBLdSh0LHRoaXMudG90YWwpKX0sdH0oKSxLdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIudG90YWw9bixyLnJpbmc9bmV3IEFycmF5LHIuY291bnQ9MCxyfXJldHVybiByLl9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmluZyxuPXRoaXMudG90YWwscj10aGlzLmNvdW50Kys7ZS5sZW5ndGg8bj9lLnB1c2godCk6ZVtyJW5dPXR9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGVzdGluYXRpb24sZT10aGlzLmNvdW50O2lmKGU+MClmb3IodmFyIG49dGhpcy5jb3VudD49dGhpcy50b3RhbD90aGlzLnRvdGFsOnRoaXMuY291bnQscj10aGlzLnJpbmcsbz0wO288bjtvKyspe3ZhciBpPWUrKyVuO3QubmV4dChyW2ldKX10LmNvbXBsZXRlKCl9LGV9KHYpO2Z1bmN0aW9uIFl1KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHIubGlmdChuZXcgSnUodCxlLG4pKX19dmFyIEp1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5uZXh0T3JPYnNlcnZlcj10LHRoaXMuZXJyb3I9ZSx0aGlzLmNvbXBsZXRlPW59cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3ICR1KHQsdGhpcy5uZXh0T3JPYnNlcnZlcix0aGlzLmVycm9yLHRoaXMuY29tcGxldGUpKX0sdH0oKSwkdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLG8pe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLl90YXBOZXh0PV8saS5fdGFwRXJyb3I9XyxpLl90YXBDb21wbGV0ZT1fLGkuX3RhcEVycm9yPXJ8fF8saS5fdGFwQ29tcGxldGU9b3x8XyxhKG4pPyhpLl9jb250ZXh0PWksaS5fdGFwTmV4dD1uKTpuJiYoaS5fY29udGV4dD1uLGkuX3RhcE5leHQ9bi5uZXh0fHxfLGkuX3RhcEVycm9yPW4uZXJyb3J8fF8saS5fdGFwQ29tcGxldGU9bi5jb21wbGV0ZXx8XyksaX1yZXR1cm4gci5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0cnl7dGhpcy5fdGFwTmV4dC5jYWxsKHRoaXMuX2NvbnRleHQsdCl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlKX10aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbih0KXt0cnl7dGhpcy5fdGFwRXJyb3IuY2FsbCh0aGlzLl9jb250ZXh0LHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dHJ5e3RoaXMuX3RhcENvbXBsZXRlLmNhbGwodGhpcy5fY29udGV4dCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1yZXR1cm4gdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfSh2KSxYdT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9dGwpLFl1KHtoYXNWYWx1ZTohMSxuZXh0OmZ1bmN0aW9uKCl7dGhpcy5oYXNWYWx1ZT0hMH0sY29tcGxldGU6ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNWYWx1ZSl0aHJvdyB0KCl9fSl9O2Z1bmN0aW9uIHRsKCl7cmV0dXJuIG5ldyBOdX1mdW5jdGlvbiBlbCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bnVsbCksZnVuY3Rpb24oZSl7cmV0dXJuIGUubGlmdChuZXcgbmwodCkpfX12YXIgbmw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVmYXVsdFZhbHVlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHJsKHQsdGhpcy5kZWZhdWx0VmFsdWUpKX0sdH0oKSxybD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuZGVmYXVsdFZhbHVlPW4sci5pc0VtcHR5PSEwLHJ9cmV0dXJuIHIuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5pc0VtcHR5PSExLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5pc0VtcHR5JiZ0aGlzLmRlc3RpbmF0aW9uLm5leHQodGhpcy5kZWZhdWx0VmFsdWUpLHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZX0odik7ZnVuY3Rpb24gb2wodCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gci5waXBlKHQ/RnUoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxuLHIpfSkpOkosV3UoMSksbj9lbChlKTpYdSgoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE51fSkpKX19ZnVuY3Rpb24gaWwodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBhbCh0KSxyPWUubGlmdChuKTtyZXR1cm4gbi5jYXVnaHQ9cn19dmFyIGFsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNlbGVjdG9yPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHVsKHQsdGhpcy5zZWxlY3Rvcix0aGlzLmNhdWdodCkpfSx0fSgpLHVsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBvLnNlbGVjdG9yPW4sby5jYXVnaHQ9cixvfXJldHVybiByLl9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIG49dm9pZCAwO3RyeXtuPXRoaXMuc2VsZWN0b3IoZSx0aGlzLmNhdWdodCl9Y2F0Y2gobyl7cmV0dXJuIHZvaWQgdC5wcm90b3R5cGUuZXJyb3IuY2FsbCh0aGlzLG8pfXRoaXMuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpO3ZhciByPW5ldyBJKHRoaXMsdm9pZCAwLHZvaWQgMCk7dGhpcy5hZGQocikseih0aGlzLG4sdm9pZCAwLHZvaWQgMCxyKX19LGV9KEYpO2Z1bmN0aW9uIGxsKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMD09PXQ/QXUoKTplLmxpZnQobmV3IHNsKHQpKX19dmFyIHNsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0aGlzLnRvdGFsPXQsdGhpcy50b3RhbDwwKXRocm93IG5ldyBxdX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgY2wodCx0aGlzLnRvdGFsKSl9LHR9KCksY2w9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLnRvdGFsPW4sci5jb3VudD0wLHJ9cmV0dXJuIHIuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy50b3RhbCxuPSsrdGhpcy5jb3VudDtuPD1lJiYodGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpLG49PT1lJiYodGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpLHRoaXMudW5zdWJzY3JpYmUoKSkpfSxlfSh2KTtmdW5jdGlvbiBmbCh0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLnBpcGUodD9GdSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG4scil9KSk6SixsbCgxKSxuP2VsKGUpOlh1KChmdW5jdGlvbigpe3JldHVybiBuZXcgTnV9KSkpfX12YXIgaGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMudGhpc0FyZz1lLHRoaXMuc291cmNlPW59cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHBsKHQsdGhpcy5wcmVkaWNhdGUsdGhpcy50aGlzQXJnLHRoaXMuc291cmNlKSl9LHR9KCkscGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixvKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5wcmVkaWNhdGU9bixpLnRoaXNBcmc9cixpLnNvdXJjZT1vLGkuaW5kZXg9MCxpLnRoaXNBcmc9cnx8aSxpfXJldHVybiByLl9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPSExO3RyeXtlPXRoaXMucHJlZGljYXRlLmNhbGwodGhpcy50aGlzQXJnLHQsdGhpcy5pbmRleCsrLHRoaXMuc291cmNlKX1jYXRjaChuKXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKG4pfWV8fHRoaXMubm90aWZ5Q29tcGxldGUoITEpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeUNvbXBsZXRlKCEwKX0sZX0odik7ZnVuY3Rpb24gZGwodCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbihuKXtyZXR1cm4gbi5waXBlKGRsKChmdW5jdGlvbihuLHIpe3JldHVybiBXKHQobixyKSkucGlwZShCKChmdW5jdGlvbih0LG8pe3JldHVybiBlKG4sdCxyLG8pfSkpKX0pKSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlLmxpZnQobmV3IGdsKHQpKX19dmFyIGdsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnByb2plY3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgdmwodCx0aGlzLnByb2plY3QpKX0sdH0oKSx2bD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIucHJvamVjdD1uLHIuaW5kZXg9MCxyfXJldHVybiByLl9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5pbmRleCsrO3RyeXtlPXRoaXMucHJvamVjdCh0LG4pfWNhdGNoKHIpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3Iocil9dGhpcy5faW5uZXJTdWIoZSx0LG4pfSxlLnByb3RvdHlwZS5faW5uZXJTdWI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuaW5uZXJTdWJzY3JpcHRpb247ciYmci51bnN1YnNjcmliZSgpO3ZhciBvPW5ldyBJKHRoaXMsdm9pZCAwLHZvaWQgMCk7dGhpcy5kZXN0aW5hdGlvbi5hZGQobyksdGhpcy5pbm5lclN1YnNjcmlwdGlvbj16KHRoaXMsdCxlLG4sbyl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaW5uZXJTdWJzY3JpcHRpb247ZSYmIWUuY2xvc2VkfHx0LnByb3RvdHlwZS5fY29tcGxldGUuY2FsbCh0aGlzKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eQ=="
}
Changelog:
{
"2019.12.04 14:30": "base64:bmN0aW9uIG91KHQsZSxuKXtyZXR1cm4gbmV3IGl1KHQsZSxuKX12YXIgaXU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIG89dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBvLm1vZHVsZVR5cGU9ZSxvLl9ib290c3RyYXBDb21wb25lbnRzPW4sby5fbmdNb2R1bGVEZWZGYWN0b3J5PXIsb31yZXR1cm4gT2JqZWN0KHIuX19leHRlbmRzKShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXshZnVuY3Rpb24oKXtpZighd2Epe3dhPSEwO3ZhciB0PWVlKCk/e3NldEN1cnJlbnROb2RlOkJhLGNyZWF0ZVJvb3RWaWV3OnhhLGNyZWF0ZUVtYmVkZGVkVmlldzpTYSxjcmVhdGVDb21wb25lbnRWaWV3OkVhLGNyZWF0ZU5nTW9kdWxlUmVmOk9hLG92ZXJyaWRlUHJvdmlkZXI6QWEsb3ZlcnJpZGVDb21wb25lbnRWaWV3OklhLGNsZWFyT3ZlcnJpZGVzOlJhLGNoZWNrQW5kVXBkYXRlVmlldzpEYSxjaGVja05vQ2hhbmdlc1ZpZXc6VWEsZGVzdHJveVZpZXc6TGEsY3JlYXRlRGVidWdDb250ZXh0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBKYSh0LGUpfSxoYW5kbGVFdmVudDpaYSx1cGRhdGVEaXJlY3RpdmVzOkdhLHVwZGF0ZVJlbmRlcmVyOnFhfTp7c2V0Q3VycmVudE5vZGU6ZnVuY3Rpb24oKXt9LGNyZWF0ZVJvb3RWaWV3OmJhLGNyZWF0ZUVtYmVkZGVkVmlldzplYSxjcmVhdGVDb21wb25lbnRWaWV3OnJhLGNyZWF0ZU5nTW9kdWxlUmVmOlFyLG92ZXJyaWRlUHJvdmlkZXI6cW4sb3ZlcnJpZGVDb21wb25lbnRWaWV3OnFuLGNsZWFyT3ZlcnJpZGVzOnFuLGNoZWNrQW5kVXBkYXRlVmlldzpsYSxjaGVja05vQ2hhbmdlc1ZpZXc6dWEsZGVzdHJveVZpZXc6cGEsY3JlYXRlRGVidWdDb250ZXh0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBKYSh0LGUpfSxoYW5kbGVFdmVudDpmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdC5kZWYuaGFuZGxlRXZlbnQodCxlLG4scil9LHVwZGF0ZURpcmVjdGl2ZXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWYudXBkYXRlRGlyZWN0aXZlcygwPT09ZT9qYTpOYSx0KX0sdXBkYXRlUmVuZGVyZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWYudXBkYXRlUmVuZGVyZXIoMD09PWU/amE6TmEsdCl9fTtHbi5zZXRDdXJyZW50Tm9kZT10LnNldEN1cnJlbnROb2RlLEduLmNyZWF0ZVJvb3RWaWV3PXQuY3JlYXRlUm9vdFZpZXcsR24uY3JlYXRlRW1iZWRkZWRWaWV3PXQuY3JlYXRlRW1iZWRkZWRWaWV3LEduLmNyZWF0ZUNvbXBvbmVudFZpZXc9dC5jcmVhdGVDb21wb25lbnRWaWV3LEduLmNyZWF0ZU5nTW9kdWxlUmVmPXQuY3JlYXRlTmdNb2R1bGVSZWYsR24ub3ZlcnJpZGVQcm92aWRlcj10Lm92ZXJyaWRlUHJvdmlkZXIsR24ub3ZlcnJpZGVDb21wb25lbnRWaWV3PXQub3ZlcnJpZGVDb21wb25lbnRWaWV3LEduLmNsZWFyT3ZlcnJpZGVzPXQuY2xlYXJPdmVycmlkZXMsR24uY2hlY2tBbmRVcGRhdGVWaWV3PXQuY2hlY2tBbmRVcGRhdGVWaWV3LEduLmNoZWNrTm9DaGFuZ2VzVmlldz10LmNoZWNrTm9DaGFuZ2VzVmlldyxHbi5kZXN0cm95Vmlldz10LmRlc3Ryb3lWaWV3LEduLnJlc29sdmVEZXA9aG8sR24uY3JlYXRlRGVidWdDb250ZXh0PXQuY3JlYXRlRGVidWdDb250ZXh0LEduLmhhbmRsZUV2ZW50PXQuaGFuZGxlRXZlbnQsR24udXBkYXRlRGlyZWN0aXZlcz10LnVwZGF0ZURpcmVjdGl2ZXMsR24udXBkYXRlUmVuZGVyZXI9dC51cGRhdGVSZW5kZXJlcixHbi5kaXJ0eVBhcmVudFF1ZXJpZXM9Wml9fSgpO3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPUFycmF5LmZyb20odC5wcm92aWRlcnMpLG49QXJyYXkuZnJvbSh0Lm1vZHVsZXMpLHI9e307Zm9yKHZhciBvIGluIHQucHJvdmlkZXJzQnlLZXkpcltvXT10LnByb3ZpZGVyc0J5S2V5W29dO3JldHVybntmYWN0b3J5OnQuZmFjdG9yeSxpc1Jvb3Q6dC5pc1Jvb3QscHJvdmlkZXJzOmUsbW9kdWxlczpuLHByb3ZpZGVyc0J5S2V5OnJ9fShkcih0aGlzLl9uZ01vZHVsZURlZkZhY3RvcnkpKTtyZXR1cm4gR24uY3JlYXRlTmdNb2R1bGVSZWYodGhpcy5tb2R1bGVUeXBlLHR8fE1lLk5VTEwsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cyxlKX0sZX0oenQpLGF1PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7fX0oKSx1dT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGl0bGU9InRlc3QifX0oKSxsdT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe319KCksc3U9bmV3IFR0KCJMb2NhdGlvbiBJbml0aWFsaXplZCIpLGN1PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7fX0oKSxmdT1uZXcgVHQoImFwcEJhc2VIcmVmIiksaHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9dGhpczt0aGlzLl9zdWJqZWN0PW5ldyBPbyx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fcGxhdGZvcm1TdHJhdGVneT10O3ZhciBvPXRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPW4sdGhpcy5fYmFzZUhyZWY9ZS5zdHJpcFRyYWlsaW5nU2xhc2gocHUobykpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kub25Qb3BTdGF0ZSgoZnVuY3Rpb24odCl7ci5fc3ViamVjdC5lbWl0KHt1cmw6ci5wYXRoKCEwKSxwb3A6ITAsc3RhdGU6dC5zdGF0ZSx0eXBlOnQudHlwZX0pfSkpfXZhciBlO3JldHVybiBlPXQsdC5wcm90b3R5cGUucGF0aD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITEpLHRoaXMubm9ybWFsaXplKHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucGF0aCh0KSl9LHQucHJvdG90eXBlLmdldFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0U3RhdGUoKX0sdC5wcm90b3R5cGUuaXNDdXJyZW50UGF0aEVxdWFsVG89ZnVuY3Rpb24odCxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49IiIpLHRoaXMucGF0aCgpPT10aGlzLm5vcm1hbGl6ZSh0K2Uubm9ybWFsaXplUXVlcnlQYXJhbXMobikpfSx0LnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGUuc3RyaXBUcmFpbGluZ1NsYXNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmUuc3RhcnRzV2l0aCh0KT9lLnN1YnN0cmluZyh0Lmxlbmd0aCk6ZX0odGhpcy5fYmFzZUhyZWYscHUodCkpKX0sdC5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiLyIhPT10WzBdJiYodD0iLyIrdCksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwodCl9LHQucHJvdG90eXBlLmdvPWZ1bmN0aW9uKHQsbixyKXt2b2lkIDA9PT1uJiYobj0iIiksdm9pZCAwPT09ciYmKHI9bnVsbCksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wdXNoU3RhdGUociwiIix0LG4pLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybCh0K2Uubm9ybWFsaXplUXVlcnlQYXJhbXMobikpLHIpfSx0LnByb3RvdHlwZS5yZXBsYWNlU3RhdGU9ZnVuY3Rpb24odCxuLHIpe3ZvaWQgMD09PW4mJihuPSIiKSx2b2lkIDA9PT1yJiYocj1udWxsKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnJlcGxhY2VTdGF0ZShyLCIiLHQsbiksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKHQrZS5ub3JtYWxpemVRdWVyeVBhcmFtcyhuKSkscil9LHQucHJvdG90eXBlLmZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmZvcndhcmQoKX0sdC5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuYmFjaygpfSx0LnByb3RvdHlwZS5vblVybENoYW5nZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5wdXNoKHQpLHRoaXMuc3Vic2NyaWJlKChmdW5jdGlvbih0KXtlLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModC51cmwsdC5zdGF0ZSl9KSl9LHQucHJvdG90eXBlLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnM9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3JldHVybiBuKHQsZSl9KSl9LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OnQsZXJyb3I6ZSxjb21wbGV0ZTpufSl9LHQubm9ybWFsaXplUXVlcnlQYXJhbXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiI/IiE9PXRbMF0/Ij8iK3Q6dH0sdC5qb2luV2l0aFNsYXNoPWZ1bmN0aW9uKHQsZSl7aWYoMD09dC5sZW5ndGgpcmV0dXJuIGU7aWYoMD09ZS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG49MDtyZXR1cm4gdC5lbmRzV2l0aCgiLyIpJiZuKyssZS5zdGFydHNXaXRoKCIvIikmJm4rKywyPT1uP3QrZS5zdWJzdHJpbmcoMSk6MT09bj90K2U6dCsiLyIrZX0sdC5zdHJpcFRyYWlsaW5nU2xhc2g9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaCgvI3xcP3wkLyksbj1lJiZlLmluZGV4fHx0Lmxlbmd0aDtyZXR1cm4gdC5zbGljZSgwLG4tKCIvIj09PXRbbi0xXT8xOjApKSt0LnNsaWNlKG4pfSx0fSgpO2Z1bmN0aW9uIHB1KHQpe3JldHVybiB0LnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX12YXIgZHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fcGxhdGZvcm1Mb2NhdGlvbj1lLHIuX2Jhc2VIcmVmPSIiLG51bGwhPW4mJihyLl9iYXNlSHJlZj1uKSxyfXJldHVybiBPYmplY3Qoci5fX2V4dGVuZHMpKGUsdCksZS5wcm90b3R5cGUub25Qb3BTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUodCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UodCl9LGUucHJvdG90eXBlLmdldEJhc2VIcmVmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfSxlLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIG51bGw9PWUmJihlPSIjIiksZS5sZW5ndGg+MD9lLnN1YnN0cmluZygxKTplfSxlLnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmw9ZnVuY3Rpb24odCl7dmFyIGU9aHUuam9pbldpdGhTbGFzaCh0aGlzLl9iYXNlSHJlZix0KTtyZXR1cm4gZS5sZW5ndGg+MD8iIyIrZTplfSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIG89dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobitodS5ub3JtYWxpemVRdWVyeVBhcmFtcyhyKSk7MD09by5sZW5ndGgmJihvPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQsZSxvKX0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4raHUubm9ybWFsaXplUXVlcnlQYXJhbXMocikpOzA9PW8ubGVuZ3RoJiYobz10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0LGUsbyl9LGUucHJvdG90eXBlLmZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX0sZS5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfSxlfShjdSksZ3U9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztpZihyLl9wbGF0Zm9ybUxvY2F0aW9uPWUsbnVsbD09biYmKG49ci5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKSksbnVsbD09bil0aHJvdyBuZXcgRXJyb3IoIk5vIGJhc2UgaHJlZiBzZXQuIFBsZWFzZSBwcm92aWRlIGEgdmFsdWUgZm9yIHRoZSBBUFBfQkFTRV9IUkVGIHRva2VuIG9yIGFkZCBhIGJhc2UgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQuIik7cmV0dXJuIHIuX2Jhc2VIcmVmPW4scn1yZXR1cm4gT2JqZWN0KHIuX19leHRlbmRzKShlLHQpLGUucHJvdG90eXBlLm9uUG9wU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKHQpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKHQpfSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn0sZS5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3JldHVybiBodS5qb2luV2l0aFNsYXNoKHRoaXMuX2Jhc2VIcmVmLHQpfSxlLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lK2h1Lm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uc2VhcmNoKSxuPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaDtyZXR1cm4gbiYmdD8iIitlK246ZX0sZS5wcm90b3R5cGUucHVzaFN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4raHUubm9ybWFsaXplUXVlcnlQYXJhbXMocikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQsZSxvKX0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4raHUubm9ybWFsaXplUXVlcnlQYXJhbXMocikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKHQsZSxvKX0sZS5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfSxlLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9LGV9KGN1KSx2dT1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Llplcm89MF09Ilplcm8iLHRbdC5PbmU9MV09Ik9uZSIsdFt0LlR3bz0yXT0iVHdvIix0W3QuRmV3PTNdPSJGZXciLHRbdC5NYW55PTRdPSJNYW55Iix0W3QuT3RoZXI9NV09Ik90aGVyIix0fSh7fSkseXU9bmV3IFR0KCJVc2VWNFBsdXJhbHMiKSxtdT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe319KCksX3U9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5sb2NhbGU9ZSxyLmRlcHJlY2F0ZWRQbHVyYWxGbj1uLHJ9cmV0dXJuIE9iamVjdChyLl9fZXh0ZW5kcykoZSx0KSxlLnByb3RvdHlwZS5nZXRQbHVyYWxDYXRlZ29yeT1mdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLmRlcHJlY2F0ZWRQbHVyYWxGbj90aGlzLmRlcHJlY2F0ZWRQbHVyYWxGbihlfHx0aGlzLmxvY2FsZSx0KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpLG49d29bZV07aWYobilyZXR1cm4gbjt2YXIgcj1lLnNwbGl0KCItIilbMF07aWYobj13b1tyXSlyZXR1cm4gbjtpZigiZW4iPT09cilyZXR1cm4gQ287dGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlICInK3QrJyIuJyl9KHQpW2JvLlBsdXJhbENhc2VdfShlfHx0aGlzLmxvY2FsZSkodCkpe2Nhc2UgdnUuWmVybzpyZXR1cm4iemVybyI7Y2FzZSB2dS5PbmU6cmV0dXJuIm9uZSI7Y2FzZSB2dS5Ud286cmV0dXJuInR3byI7Y2FzZSB2dS5GZXc6cmV0dXJuImZldyI7Y2FzZSB2dS5NYW55OnJldHVybiJtYW55IjtkZWZhdWx0OnJldHVybiJvdGhlciJ9fSxlfShtdSksd3U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10LHRoaXMuX3RlbXBsYXRlUmVmPWUsdGhpcy5fY3JlYXRlZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jcmVhdGVkPSExLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX0sdC5wcm90b3R5cGUuZW5mb3JjZVN0YXRlPWZ1bmN0aW9uKHQpe3QmJiF0aGlzLl9jcmVhdGVkP3RoaXMuY3JlYXRlKCk6IXQmJnRoaXMuX2NyZWF0ZWQmJnRoaXMuZGVzdHJveSgpfSx0fSgpLGJ1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2RlZmF1bHRVc2VkPSExLHRoaXMuX2Nhc2VDb3VudD0wLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdTd2l0Y2giLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbmdTd2l0Y2g9dCwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoITApfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9hZGRDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfSx0LnByb3RvdHlwZS5fYWRkRGVmYXVsdD1mdW5jdGlvbih0KXt0aGlzLl9kZWZhdWx0Vmlld3N8fCh0aGlzLl9kZWZhdWx0Vmlld3M9W10pLHRoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKHQpfSx0LnByb3RvdHlwZS5fbWF0Y2hDYXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fGUsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExKSxlfSx0LnByb3RvdHlwZS5fdXBkYXRlRGVmYXVsdENhc2VzPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2RlZmF1bHRWaWV3cyYmdCE9PXRoaXMuX2RlZmF1bHRVc2VkKXt0aGlzLl9kZWZhdWx0VXNlZD10O2Zvcih2YXIgZT0wO2U8dGhpcy5fZGVmYXVsdFZpZXdzLmxlbmd0aDtlKyspdGhpcy5fZGVmYXVsdFZpZXdzW2VdLmVuZm9yY2VTdGF0ZSh0KX19LHR9KCkseHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5nU3dpdGNoPW4sbi5fYWRkQ2FzZSgpLHRoaXMuX3ZpZXc9bmV3IHd1KHQsZSl9cmV0dXJuIHQucHJvdG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuZW5mb3JjZVN0YXRlKHRoaXMubmdTd2l0Y2guX21hdGNoQ2FzZSh0aGlzLm5nU3dpdGNoQ2FzZSkpfSx0fSgpLEN1PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtuLl9hZGREZWZhdWx0KG5ldyB3dSh0LGUpKX19KCksU3U9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt9fSgpLEV1PW5ldyBUdCgiRG9jdW1lbnRUb2tlbiIpLE91PSJzZXJ2ZXIiLFR1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5uZ0luamVjdGFibGVEZWY9ZHQoe3Rva2VuOnQscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgUHUoVXQoRXUpLHdpbmRvdyxVdCgkdCkpfX0pLHR9KCksUHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmRvY3VtZW50PXQsdGhpcy53aW5kb3c9ZSx0aGlzLmVycm9ySGFuZGxlcj1uLHRoaXMub2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuWzAsMF19fXJldHVybiB0LnByb3RvdHlwZS5zZXRPZmZzZXQ9ZnVuY3Rpb24odCl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNBcnJheSh0KT9mdW5jdGlvbigpe3JldHVybiB0fTp0fSx0LnByb3RvdHlwZS5nZXRTY3JvbGxQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN1cHBvcnRTY3JvbGxSZXN0b3JhdGlvbigpP1t0aGlzLndpbmRvdy5zY3JvbGxYLHRoaXMud2luZG93LnNjcm9sbFldOlswLDBdfSx0LnByb3RvdHlwZS5zY3JvbGxUb1Bvc2l0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkmJnRoaXMud2luZG93LnNjcm9sbFRvKHRbMF0sdFsxXSl9LHQucHJvdG90eXBlLnNjcm9sbFRvQW5jaG9yPWZ1bmN0aW9uKHQpe2lmKHRoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkpe3Q9dGhpcy53aW5kb3cuQ1NTJiZ0aGlzLndpbmRvdy5DU1MuZXNjYXBlP3RoaXMud2luZG93LkNTUy5lc2NhcGUodCk6dC5yZXBsYWNlKC8oXCJ8XCdcIHw6fFwufFxbfFxdfCx8PSkvZywiXFwkMSIpO3RyeXt2YXIgZT10aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiMiK3QpO2lmKGUpcmV0dXJuIHZvaWQgdGhpcy5zY3JvbGxUb0VsZW1lbnQoZSk7dmFyIG49dGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbbmFtZT0nIit0KyInXSIpO2lmKG4pcmV0dXJuIHZvaWQgdGhpcy5zY3JvbGxUb0VsZW1lbnQobil9Y2F0Y2gocil7dGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3Iocil9fX0sdC5wcm90b3R5cGUuc2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uPWZ1bmN0aW9uKHQpe2lmKHRoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkpe3ZhciBlPXRoaXMud2luZG93Lmhpc3Rvcnk7ZSYmZS5zY3JvbGxSZXN0b3JhdGlvbiYmKGUuc2Nyb2xsUmVzdG9yYXRpb249dCl9fSx0LnByb3RvdHlwZS5zY3JvbGxUb0VsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxyPWUudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LG89dGhpcy5vZmZzZXQoKTt0aGlzLndpbmRvdy5zY3JvbGxUbyhuLW9bMF0sci1vWzFdKX0sdC5wcm90b3R5cGUuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiEhdGhpcy53aW5kb3cmJiEhdGhpcy53aW5kb3cuc2Nyb2xsVG99Y2F0Y2godCl7cmV0dXJuITF9fSx0fSgpLGt1PW5ldyB4KChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wbGV0ZSgpfSkpO2Z1bmN0aW9uIEF1KHQpe3JldHVybiB0P2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgeCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY29tcGxldGUoKX0pKX0pKX0odCk6a3V9ZnVuY3Rpb24gSXUodCl7dmFyIGU9bmV3IHgoKGZ1bmN0aW9uKGUpe2UubmV4dCh0KSxlLmNvbXBsZXRlKCl9KSk7cmV0dXJuIGUuX2lzU2NhbGFyPSEwLGUudmFsdWU9dCxlfWZ1bmN0aW9uIFJ1KCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3ZhciBuPXRbdC5sZW5ndGgtMV07c3dpdGNoKEEobik/dC5wb3AoKTpuPXZvaWQgMCx0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBBdShuKTtjYXNlIDE6cmV0dXJuIG4/cSh0LG4pOkl1KHRbMF0pO2RlZmF1bHQ6cmV0dXJuIHEodCxuKX19dmFyIE11PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl92YWx1ZT1lLG59cmV0dXJuIHIuX19leHRlbmRzKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbihlKXt2YXIgbj10LnByb3RvdHlwZS5fc3Vic2NyaWJlLmNhbGwodGhpcyxlKTtyZXR1cm4gbiYmIW4uY2xvc2VkJiZlLm5leHQodGhpcy5fdmFsdWUpLG59LGUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7aWYodGhpcy5oYXNFcnJvcil0aHJvdyB0aGlzLnRocm93bkVycm9yO2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBFO3JldHVybiB0aGlzLl92YWx1ZX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyx0aGlzLl92YWx1ZT1lKX0sZX0oUCk7ZnVuY3Rpb24ganUoKXtyZXR1cm4gRXJyb3IuY2FsbCh0aGlzKSx0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNlIix0aGlzLm5hbWU9IkVtcHR5RXJyb3IiLHRoaXN9anUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTt2YXIgTnU9anUsRHU9e307ZnVuY3Rpb24gVXUoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49bnVsbCxyPW51bGw7cmV0dXJuIEEodFt0Lmxlbmd0aC0xXSkmJihyPXQucG9wKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYobj10LnBvcCgpKSwxPT09dC5sZW5ndGgmJm8odFswXSkmJih0PXRbMF0pLHEodCxyKS5saWZ0KG5ldyBMdShuKSl9dmFyIEx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnJlc3VsdFNlbGVjdG9yPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IFZ1KHQsdGhpcy5yZXN1bHRTZWxlY3RvcikpfSx0fSgpLFZ1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5yZXN1bHRTZWxlY3Rvcj1uLHIuYWN0aXZlPTAsci52YWx1ZXM9W10sci5vYnNlcnZhYmxlcz1bXSxyfXJldHVybiByLl9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMudmFsdWVzLnB1c2goRHUpLHRoaXMub2JzZXJ2YWJsZXMucHVzaCh0KX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vYnNlcnZhYmxlcyxlPXQubGVuZ3RoO2lmKDA9PT1lKXRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtlbHNle3RoaXMuYWN0aXZlPWUsdGhpcy50b1Jlc3BvbmQ9ZTtmb3IodmFyIG49MDtuPGU7bisrKXt2YXIgcj10W25dO3RoaXMuYWRkKHoodGhpcyxyLHIsbikpfX19LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpezA9PSh0aGlzLmFjdGl2ZS09MSkmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLG8pe3ZhciBpPXRoaXMudmFsdWVzLGE9dGhpcy50b1Jlc3BvbmQ/aVtuXT09PUR1Py0tdGhpcy50b1Jlc3BvbmQ6dGhpcy50b1Jlc3BvbmQ6MDtpW25dPWUsMD09PWEmJih0aGlzLnJlc3VsdFNlbGVjdG9yP3RoaXMuX3RyeVJlc3VsdFNlbGVjdG9yKGkpOnRoaXMuZGVzdGluYXRpb24ubmV4dChpLnNsaWNlKCkpKX0sZS5wcm90b3R5cGUuX3RyeVJlc3VsdFNlbGVjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMucmVzdWx0U2VsZWN0b3IuYXBwbHkodGhpcyx0KX1jYXRjaChuKXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKG4pfXRoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZX0oRik7ZnVuY3Rpb24gSHUodCl7cmV0dXJuIG5ldyB4KChmdW5jdGlvbihlKXt2YXIgbjt0cnl7bj10KCl9Y2F0Y2gocil7cmV0dXJuIHZvaWQgZS5lcnJvcihyKX1yZXR1cm4obj9XKG4pOkF1KCkpLnN1YnNjcmliZShlKX0pKX1mdW5jdGlvbiB6dSgpe3JldHVybiAkKDEpfWZ1bmN0aW9uIEZ1KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuLmxpZnQobmV3IEJ1KHQsZSkpfX12YXIgQnU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLnRoaXNBcmc9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgWnUodCx0aGlzLnByZWRpY2F0ZSx0aGlzLnRoaXNBcmcpKX0sdH0oKSxadT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgbz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gby5wcmVkaWNhdGU9bixvLnRoaXNBcmc9cixvLmNvdW50PTAsb31yZXR1cm4gci5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10aGlzLnByZWRpY2F0ZS5jYWxsKHRoaXMudGhpc0FyZyx0LHRoaXMuY291bnQrKyl9Y2F0Y2gobil7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihuKX1lJiZ0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGV9KHYpO2Z1bmN0aW9uIEd1KCl7cmV0dXJuIEVycm9yLmNhbGwodGhpcyksdGhpcy5tZXNzYWdlPSJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiLHRoaXMubmFtZT0iQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IiLHRoaXN9R3UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTt2YXIgcXU9R3U7ZnVuY3Rpb24gV3UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAwPT09dD9BdSgpOmUubGlmdChuZXcgUXUodCkpfX12YXIgUXU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKHRoaXMudG90YWw9dCx0aGlzLnRvdGFsPDApdGhyb3cgbmV3IHF1fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBLdSh0LHRoaXMudG90YWwpKX0sdH0oKSxLdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIudG90YWw9bixyLnJpbmc9bmV3IEFycmF5LHIuY291bnQ9MCxyfXJldHVybiByLl9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmluZyxuPXRoaXMudG90YWwscj10aGlzLmNvdW50Kys7ZS5sZW5ndGg8bj9lLnB1c2godCk6ZVtyJW5dPXR9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGVzdGluYXRpb24sZT10aGlzLmNvdW50O2lmKGU+MClmb3IodmFyIG49dGhpcy5jb3VudD49dGhpcy50b3RhbD90aGlzLnRvdGFsOnRoaXMuY291bnQscj10aGlzLnJpbmcsbz0wO288bjtvKyspe3ZhciBpPWUrKyVuO3QubmV4dChyW2ldKX10LmNvbXBsZXRlKCl9LGV9KHYpO2Z1bmN0aW9uIFl1KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHIubGlmdChuZXcgSnUodCxlLG4pKX19dmFyIEp1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5uZXh0T3JPYnNlcnZlcj10LHRoaXMuZXJyb3I9ZSx0aGlzLmNvbXBsZXRlPW59cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3ICR1KHQsdGhpcy5uZXh0T3JPYnNlcnZlcix0aGlzLmVycm9yLHRoaXMuY29tcGxldGUpKX0sdH0oKSwkdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLG8pe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLl90YXBOZXh0PV8saS5fdGFwRXJyb3I9XyxpLl90YXBDb21wbGV0ZT1fLGkuX3RhcEVycm9yPXJ8fF8saS5fdGFwQ29tcGxldGU9b3x8XyxhKG4pPyhpLl9jb250ZXh0PWksaS5fdGFwTmV4dD1uKTpuJiYoaS5fY29udGV4dD1uLGkuX3RhcE5leHQ9bi5uZXh0fHxfLGkuX3RhcEVycm9yPW4uZXJyb3J8fF8saS5fdGFwQ29tcGxldGU9bi5jb21wbGV0ZXx8XyksaX1yZXR1cm4gci5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0cnl7dGhpcy5fdGFwTmV4dC5jYWxsKHRoaXMuX2NvbnRleHQsdCl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlKX10aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbih0KXt0cnl7dGhpcy5fdGFwRXJyb3IuY2FsbCh0aGlzLl9jb250ZXh0LHQpfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dHJ5e3RoaXMuX3RhcENvbXBsZXRlLmNhbGwodGhpcy5fY29udGV4dCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1yZXR1cm4gdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfSh2KSxYdT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9dGwpLFl1KHtoYXNWYWx1ZTohMSxuZXh0OmZ1bmN0aW9uKCl7dGhpcy5oYXNWYWx1ZT0hMH0sY29tcGxldGU6ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNWYWx1ZSl0aHJvdyB0KCl9fSl9O2Z1bmN0aW9uIHRsKCl7cmV0dXJuIG5ldyBOdX1mdW5jdGlvbiBlbCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bnVsbCksZnVuY3Rpb24oZSl7cmV0dXJuIGUubGlmdChuZXcgbmwodCkpfX12YXIgbmw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVmYXVsdFZhbHVlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHJsKHQsdGhpcy5kZWZhdWx0VmFsdWUpKX0sdH0oKSxybD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuZGVmYXVsdFZhbHVlPW4sci5pc0VtcHR5PSEwLHJ9cmV0dXJuIHIuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5pc0VtcHR5PSExLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5pc0VtcHR5JiZ0aGlzLmRlc3RpbmF0aW9uLm5leHQodGhpcy5kZWZhdWx0VmFsdWUpLHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZX0odik7ZnVuY3Rpb24gb2wodCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gci5waXBlKHQ/RnUoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxuLHIpfSkpOkosV3UoMSksbj9lbChlKTpYdSgoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE51fSkpKX19ZnVuY3Rpb24gaWwodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBhbCh0KSxyPWUubGlmdChuKTtyZXR1cm4gbi5jYXVnaHQ9cn19dmFyIGFsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNlbGVjdG9yPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHVsKHQsdGhpcy5zZWxlY3Rvcix0aGlzLmNhdWdodCkpfSx0fSgpLHVsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBvLnNlbGVjdG9yPW4sby5jYXVnaHQ9cixvfXJldHVybiByLl9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIG49dm9pZCAwO3RyeXtuPXRoaXMuc2VsZWN0b3IoZSx0aGlzLmNhdWdodCl9Y2F0Y2gobyl7cmV0dXJuIHZvaWQgdC5wcm90b3R5cGUuZXJyb3IuY2FsbCh0aGlzLG8pfXRoaXMuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpO3ZhciByPW5ldyBJKHRoaXMsdm9pZCAwLHZvaWQgMCk7dGhpcy5hZGQocikseih0aGlzLG4sdm9pZCAwLHZvaWQgMCxyKX19LGV9KEYpO2Z1bmN0aW9uIGxsKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMD09PXQ/QXUoKTplLmxpZnQobmV3IHNsKHQpKX19dmFyIHNsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0aGlzLnRvdGFsPXQsdGhpcy50b3RhbDwwKXRocm93IG5ldyBxdX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgY2wodCx0aGlzLnRvdGFsKSl9LHR9KCksY2w9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLnRvdGFsPW4sci5jb3VudD0wLHJ9cmV0dXJuIHIuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy50b3RhbCxuPSsrdGhpcy5jb3VudDtuPD1lJiYodGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpLG49PT1lJiYodGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpLHRoaXMudW5zdWJzY3JpYmUoKSkpfSxlfSh2KTtmdW5jdGlvbiBmbCh0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLnBpcGUodD9GdSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG4scil9KSk6SixsbCgxKSxuP2VsKGUpOlh1KChmdW5jdGlvbigpe3JldHVybiBuZXcgTnV9KSkpfX12YXIgaGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMudGhpc0FyZz1lLHRoaXMuc291cmNlPW59cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHBsKHQsdGhpcy5wcmVkaWNhdGUsdGhpcy50aGlzQXJnLHRoaXMuc291cmNlKSl9LHR9KCkscGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixvKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5wcmVkaWNhdGU9bixpLnRoaXNBcmc9cixpLnNvdXJjZT1vLGkuaW5kZXg9MCxpLnRoaXNBcmc9cnx8aSxpfXJldHVybiByLl9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPSExO3RyeXtlPXRoaXMucHJlZGljYXRlLmNhbGwodGhpcy50aGlzQXJnLHQsdGhpcy5pbmRleCsrLHRoaXMuc291cmNlKX1jYXRjaChuKXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKG4pfWV8fHRoaXMubm90aWZ5Q29tcGxldGUoITEpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeUNvbXBsZXRlKCEwKX0sZX0odik7ZnVuY3Rpb24gZGwodCxlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbihuKXtyZXR1cm4gbi5waXBlKGRsKChmdW5jdGlvbihuLHIpe3JldHVybiBXKHQobixyKSkucGlwZShCKChmdW5jdGlvbih0LG8pe3JldHVybiBlKG4sdCxyLG8pfSkpKX0pKSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlLmxpZnQobmV3IGdsKHQpKX19dmFyIGdsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnByb2plY3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgdmwodCx0aGlzLnByb2plY3QpKX0sdH0oKSx2bD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIucHJvamVjdD1uLHIuaW5kZXg9MCxyfXJldHVybiByLl9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5pbmRleCsrO3RyeXtlPXRoaXMucHJvamVjdCh0LG4pfWNhdGNoKHIpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3Iocil9dGhpcy5faW5uZXJTdWIoZSx0LG4pfSxlLnByb3RvdHlwZS5faW5uZXJTdWI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuaW5uZXJTdWJzY3JpcHRpb247ciYmci51bnN1YnNjcmliZSgpO3ZhciBvPW5ldyBJKHRoaXMsdm9pZCAwLHZvaWQgMCk7dGhpcy5kZXN0aW5hdGlvbi5hZGQobyksdGhpcy5pbm5lclN1YnNjcmlwdGlvbj16KHRoaXMsdCxlLG4sbyl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaW5uZXJTdWJzY3JpcHRpb247ZSYmIWUuY2xvc2VkfHx0LnByb3RvdHlwZS5fY29tcGxldGUuY2FsbCh0aGlzKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eQ=="
}