Каталог техники в лизинг
Выберите технику для вашего бизнеса с лучшими условиями лизинга
Найдено: 0
Оформить заявку на лизинг
Оставьте свои данные, и наш менеджер свяжется с вами для расчета индивидуального графика платежей за выбранную технику.
Brand
Model Title
от 0 ₽
CiAgICAgICAgCiAgICAgICAgLyog0KHQodCr0JvQmtCQINCd0JAgR09PR0xFINCi0JDQkdCb0JjQptCjICjQntC/0YPQsdC70LjQutC+0LLQsNC90L3Rg9GOINCyINGE0L7RgNC80LDRgtC1IENTVikgKi8KICAgICAgICBjb25zdCBTUFJFQURTSEVFVF9VUkwgPSAiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvZS8yUEFDWC0xdlNTT01zN0p1RWVJdXl3T2lid0lOYjljUGxMcldISm5PaWFPMFNjR3NoLWNHd0hFWnplNFN0VTdRellMakNYU1R4TkxxdDU1LWhEcEIzYS9wdWI/b3V0cHV0PWNzdiI7CiAgICAgICAgLyog0KDQtdC30LXRgNCy0L3QsNGPINGB0YHRi9C70LrQsCDQtNC70Y8g0LvQvtC60LDQu9GM0L3QvtCz0L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8gKi8KICAgICAgICBjb25zdCBMT0NBTF9DU1ZfVVJMID0gImNhdGFsb2dfdGVtcGxhdGUuY3N2IjsKICAgICAgICAKICAgICAgICBsZXQgcHJvZHVjdHMgPSBbXTsKCiAgICAgICAgZnVuY3Rpb24gcGFyc2VTcGVjcyhzcGVjc1N0cikgewogICAgICAgICAgICBjb25zdCBzcGVjcyA9IHt9OwogICAgICAgICAgICBpZighc3BlY3NTdHIpIHJldHVybiBzcGVjczsKICAgICAgICAgICAgc3BlY3NTdHIuc3BsaXQoJzsnKS5mb3JFYWNoKHBhaXIgPT4gewogICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBwYWlyLnNwbGl0KCc6Jyk7CiAgICAgICAgICAgICAgICBpZihwYXJ0cy5sZW5ndGggPT09IDIpIHsKICAgICAgICAgICAgICAgICAgICBzcGVjc1twYXJ0c1swXS50cmltKCldID0gcGFydHNbMV0udHJpbSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIHNwZWNzOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZmV0Y2hBbmRJbml0RGF0YShjYWxsYmFjaykgewogICAgICAgICAgICBsZXQgdXJsVG9GZXRjaCA9IFNQUkVBRFNIRUVUX1VSTC5pbmNsdWRlcygi0JLQodCi0JDQktCs0KLQlSIpID8gTE9DQUxfQ1NWX1VSTCA6IFNQUkVBRFNIRUVUX1VSTDsKICAgICAgICAgICAgCiAgICAgICAgICAgIFBhcGEucGFyc2UodXJsVG9GZXRjaCwgewogICAgICAgICAgICAgICAgZG93bmxvYWQ6IHRydWUsCiAgICAgICAgICAgICAgICBoZWFkZXI6IHRydWUsCiAgICAgICAgICAgICAgICBza2lwRW1wdHlMaW5lczogdHJ1ZSwKICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdHMgPSByZXN1bHRzLmRhdGEubWFwKHJvdyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByaWNlID0gcGFyc2VJbnQocm93WyfQptC10L3QsCddKSB8fCAwOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHJvd1snSUQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiByb3dbJ9Ci0LjQvyddIHx8ICdhdXRvJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5kOiByb3dbJ9CR0YDQtdC90LQnXSB8fCAnVW5rbm93bicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogcm93WyfQnNC+0LTQtdC70YwnXSB8fCAnVW5rbm93bicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYCR7cm93WyfQkdGA0LXQvdC0J119ICR7cm93WyfQnNC+0LTQtdC70YwnXX1gLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IHByaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2VTdHI6IHByaWNlID4gMCA/ICfQvtGCICcgKyBwcmljZS50b0xvY2FsZVN0cmluZygncnUtUlUnKSArICcg4oK9JyA6ICfQptC10L3QsCDQv9C+INC30LDQv9GA0L7RgdGDJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogcm93WyfQpNC+0YLQviddICYmIChyb3dbJ9Ck0L7RgtC+J10uc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHJvd1sn0KTQvtGC0L4nXS5zdGFydHNXaXRoKCdodHRwczovLycpKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dbJ9Ck0L7RgtC+J10gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYC93cC1jb250ZW50L3VwbG9hZHMvYXNzZXRzL2ltYWdlcy9tb2RlbHMvJHtyb3dbJ9Ck0L7RgtC+J10gfHwgJyd9YCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNzOiBwYXJzZVNwZWNzKHJvd1sn0KXQsNGA0LDQutGC0LXRgNC40YHRgtC40LrQuCddKQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGlmKGNhbGxiYWNrKSBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCLQntGI0LjQsdC60LAg0LfQsNCz0YDRg9C30LrQuCBDU1Y6IiwgZXJyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICBjb25zdCBncmlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhdGFsb2ctZ3JpZCcpOwogICAgICAgIGNvbnN0IHRhYkJ0bnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGFiLWJ0bicpOwogICAgICAgIGNvbnN0IHR5cGVTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsdGVyLXR5cGUnKTsKICAgICAgICBjb25zdCBicmFuZFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWx0ZXItYnJhbmQnKTsKICAgICAgICBjb25zdCBtb2RlbFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWx0ZXItbW9kZWwnKTsKICAgICAgICBjb25zdCBwcmljZU1pbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWx0ZXItcHJpY2UtbWluJyk7CiAgICAgICAgY29uc3QgcHJpY2VNYXggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsdGVyLXByaWNlLW1heCcpOwogICAgICAgIGNvbnN0IHNvcnRTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsdGVyLXNvcnQnKTsKICAgICAgICBjb25zdCBidG5BcHBseSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tYXBwbHknKTsKICAgICAgICBjb25zdCBidG5SZXNldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tcmVzZXQnKTsKICAgICAgICBjb25zdCByZXN1bHRzQ291bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0cy1jb3VudCcpOwogICAgICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2R1Y3QtbW9kYWwnKTsKICAgICAgICBjb25zdCBtb2RhbENsb3NlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLWNsb3NlJyk7CiAgICAgICAgY29uc3QgbW9kYWxCdG5BbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWwtYnRuLWFsbC1tb2RlbHMnKTsKICAgICAgICAKICAgICAgICBsZXQgY3VycmVudENhdGVnb3J5ID0gJ2FsbCc7CgogICAgICAgIGZ1bmN0aW9uIHBvcHVsYXRlQnJhbmRzKGNhdCkgewogICAgICAgICAgICBjb25zdCBicmFuZHNMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JyYW5kcy1saXN0Jyk7CiAgICAgICAgICAgIGJyYW5kc0xpc3QuaW5uZXJIVE1MID0gJyc7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWx0ZXItYnJhbmQnKS52YWx1ZSA9ICcnOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWxzLWxpc3QnKS5pbm5lckhUTUwgPSAnJzsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbHRlci1tb2RlbCcpLnZhbHVlID0gJyc7CiAgICAgICAgICAgIAogICAgICAgICAgICBsZXQgYXZhaWxhYmxlQnJhbmRzID0gbmV3IFNldCgpOwogICAgICAgICAgICBwcm9kdWN0cy5mb3JFYWNoKHAgPT4geyBpZihjYXQgPT09ICdhbGwnIHx8IHAuY2F0ZWdvcnkgPT09IGNhdCkgYXZhaWxhYmxlQnJhbmRzLmFkZChwLmJyYW5kKTsgfSk7CiAgICAgICAgICAgIEFycmF5LmZyb20oYXZhaWxhYmxlQnJhbmRzKS5zb3J0KCkuZm9yRWFjaChicmFuZCA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBvcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsgb3B0LnZhbHVlID0gYnJhbmQ7IGJyYW5kc0xpc3QuYXBwZW5kQ2hpbGQob3B0KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHBvcHVsYXRlTW9kZWxzKGJyYW5kU3RyKSB7CiAgICAgICAgICAgIGNvbnN0IG1vZGVsc0xpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWxzLWxpc3QnKTsKICAgICAgICAgICAgbW9kZWxzTGlzdC5pbm5lckhUTUwgPSAnJzsKICAgICAgICAgICAgCiAgICAgICAgICAgIGxldCBhdmFpbGFibGVNb2RlbHMgPSBuZXcgU2V0KCk7CiAgICAgICAgICAgIGNvbnN0IGxvd2VyQnJhbmRTdHIgPSBicmFuZFN0ci50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBwcm9kdWN0cy5mb3JFYWNoKHAgPT4geyAKICAgICAgICAgICAgICAgIGNvbnN0IGNhdE1hdGNoID0gdHlwZVNlbGVjdC52YWx1ZSA9PT0gJ2FsbCcgfHwgcC5jYXRlZ29yeSA9PT0gdHlwZVNlbGVjdC52YWx1ZTsgCiAgICAgICAgICAgICAgICBjb25zdCBicmFuZE1hdGNoID0gIWxvd2VyQnJhbmRTdHIgfHwgcC5icmFuZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyQnJhbmRTdHIpOwogICAgICAgICAgICAgICAgaWYoY2F0TWF0Y2ggJiYgYnJhbmRNYXRjaCkgYXZhaWxhYmxlTW9kZWxzLmFkZChwLm1vZGVsKTsgCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBBcnJheS5mcm9tKGF2YWlsYWJsZU1vZGVscykuc29ydCgpLmZvckVhY2gobW9kZWwgPT4geyBjb25zdCBvcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsgb3B0LnZhbHVlID0gbW9kZWw7IG1vZGVsc0xpc3QuYXBwZW5kQ2hpbGQob3B0KTsgfSk7CiAgICAgICAgfQogICAgICAgIGxldCBmaWx0ZXJlZFByb2R1Y3RzTGlzdCA9IFtdOwogICAgICAgIGxldCBkaXNwbGF5ZWRDb3VudCA9IDA7CiAgICAgICAgY29uc3QgSVRFTVNfUEVSX1BBR0UgPSA5OwogICAgICAgIGNvbnN0IGxvYWRNb3JlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1sb2FkLW1vcmUnKTsKCiAgICAgICAgZnVuY3Rpb24gcmVuZGVyUHJvZHVjdHMoaXRlbXMpIHsKICAgICAgICAgICAgZmlsdGVyZWRQcm9kdWN0c0xpc3QgPSBpdGVtczsKICAgICAgICAgICAgZGlzcGxheWVkQ291bnQgPSAwOwogICAgICAgICAgICBncmlkLmlubmVySFRNTCA9ICcnOyByZXN1bHRzQ291bnQudGV4dENvbnRlbnQgPSBpdGVtcy5sZW5ndGg7CiAgICAgICAgICAgIGlmKGl0ZW1zLmxlbmd0aCA9PT0gMCkgeyAKICAgICAgICAgICAgICAgIGdyaWQuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9Im5vLXJlc3VsdHMiPtCf0L4g0LLQsNGI0LXQvNGDINC30LDQv9GA0L7RgdGDINC90LjRh9C10LPQviDQvdC1INC90LDQudC00LXQvdC+LjwvZGl2Pic7IAogICAgICAgICAgICAgICAgbG9hZE1vcmVCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgICAgIHJldHVybjsgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgbG9hZE1vcmVQcm9kdWN0cygpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gbG9hZE1vcmVQcm9kdWN0cygpIHsKICAgICAgICAgICAgY29uc3QgbmV4dEl0ZW1zID0gZmlsdGVyZWRQcm9kdWN0c0xpc3Quc2xpY2UoZGlzcGxheWVkQ291bnQsIGRpc3BsYXllZENvdW50ICsgSVRFTVNfUEVSX1BBR0UpOwogICAgICAgICAgICBuZXh0SXRlbXMuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgY2FyZC5jbGFzc05hbWUgPSAncHJvZHVjdC1jYXJkJzsgY2FyZC5kYXRhc2V0LmlkID0gaXRlbS5pZDsKICAgICAgICAgICAgICAgIGNhcmQuaW5uZXJIVE1MID0gYDxpbWcgc3JjPSIke2l0ZW0uaW1nfSIgYWx0PSIke2l0ZW0udGl0bGV9IiBjbGFzcz0iY2FyZC1pbWciIG9uZXJyb3I9InRoaXMuc3JjPScvd3AtY29udGVudC91cGxvYWRzL2Fzc2V0cy9pbWFnZXMvY2FyLmpwZyciPjxkaXYgY2xhc3M9ImNhcmQtYm9keSI+PGRpdiBjbGFzcz0iY2FyZC1icmFuZCI+JHtpdGVtLmJyYW5kfTwvZGl2PjxkaXYgY2xhc3M9ImNhcmQtdGl0bGUiPiR7aXRlbS50aXRsZX08L2Rpdj48ZGl2IGNsYXNzPSJjYXJkLXByaWNlIj4ke2l0ZW0ucHJpY2VTdHJ9PC9kaXY+PGJ1dHRvbiBjbGFzcz0iY2FyZC1idG4iPtCf0L7QtNGA0L7QsdC90LXQtTwvYnV0dG9uPjwvZGl2PmA7CiAgICAgICAgICAgICAgICBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gb3Blbk1vZGFsKGl0ZW0pKTsKICAgICAgICAgICAgICAgIGdyaWQuYXBwZW5kQ2hpbGQoY2FyZCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBkaXNwbGF5ZWRDb3VudCArPSBuZXh0SXRlbXMubGVuZ3RoOwogICAgICAgICAgICBpZiAoZGlzcGxheWVkQ291bnQgPj0gZmlsdGVyZWRQcm9kdWN0c0xpc3QubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBsb2FkTW9yZUJ0bi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbG9hZE1vcmVCdG4uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGxvYWRNb3JlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbG9hZE1vcmVQcm9kdWN0cyk7CiAgICAgICAgZnVuY3Rpb24gZmlsdGVyRGF0YSgpIHsKICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gdHlwZVNlbGVjdC52YWx1ZTsgCiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQnJhbmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsdGVyLWJyYW5kJykudmFsdWUudG9Mb3dlckNhc2UoKTsgCiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTW9kZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsdGVyLW1vZGVsJykudmFsdWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgY29uc3QgcE1pbiA9IHBhcnNlSW50KHByaWNlTWluLnZhbHVlKSB8fCAwOyBjb25zdCBwTWF4ID0gcGFyc2VJbnQocHJpY2VNYXgudmFsdWUpIHx8IEluZmluaXR5OwogICAgICAgICAgICAKICAgICAgICAgICAgbGV0IGZpbHRlcmVkID0gcHJvZHVjdHMuZmlsdGVyKHAgPT4gewogICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hDYXQgPSBzZWxlY3RlZFR5cGUgPT09ICdhbGwnIHx8IHAuY2F0ZWdvcnkgPT09IHNlbGVjdGVkVHlwZTsKICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoQnJhbmQgPSAhc2VsZWN0ZWRCcmFuZCB8fCBwLmJyYW5kLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VsZWN0ZWRCcmFuZCk7CiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaE1vZGVsID0gIXNlbGVjdGVkTW9kZWwgfHwgcC5tb2RlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlbGVjdGVkTW9kZWwpOwogICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hQcmljZSA9IHAucHJpY2UgPj0gcE1pbiAmJiBwLnByaWNlIDw9IHBNYXg7CiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hDYXQgJiYgbWF0Y2hCcmFuZCAmJiBtYXRjaE1vZGVsICYmIG1hdGNoUHJpY2U7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zdCBzb3J0VmFsID0gc29ydFNlbGVjdC52YWx1ZTsKICAgICAgICAgICAgaWYgKHNvcnRWYWwgPT09ICdwcmljZV9hc2MnKSBmaWx0ZXJlZC5zb3J0KChhLCBiKSA9PiBhLnByaWNlIC0gYi5wcmljZSk7CiAgICAgICAgICAgIGVsc2UgaWYgKHNvcnRWYWwgPT09ICdwcmljZV9kZXNjJykgZmlsdGVyZWQuc29ydCgoYSwgYikgPT4gYi5wcmljZSAtIGEucHJpY2UpOwogICAgICAgICAgICByZW5kZXJQcm9kdWN0cyhmaWx0ZXJlZCk7CiAgICAgICAgfQogICAgICAgIHRhYkJ0bnMuZm9yRWFjaChidG4gPT4geyBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGNhdCA9IGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2F0Jyk7IHRhYkJ0bnMuZm9yRWFjaChiID0+IGIuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpOyBidG4uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICAgICAgICAgIHR5cGVTZWxlY3QudmFsdWUgPSBjYXQ7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWx0ZXItYnJhbmQnKS52YWx1ZSA9ICcnOyBwb3B1bGF0ZUJyYW5kcyhjYXQpOyBmaWx0ZXJEYXRhKCk7CiAgICAgICAgfSk7fSk7CiAgICAgICAgdHlwZVNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4gewogICAgICAgICAgICBjb25zdCBjYXQgPSBlLnRhcmdldC52YWx1ZTsgY29uc3QgYWN0aXZlVGFiID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRhYi1idG4uYWN0aXZlJykuZ2V0QXR0cmlidXRlKCdkYXRhLWNhdCcpOwogICAgICAgICAgICBpZiAoYWN0aXZlVGFiID09PSAnYWxsJykgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsdGVyLWJyYW5kJykudmFsdWUgPSAnJzsgcG9wdWxhdGVCcmFuZHMoY2F0KTsgZmlsdGVyRGF0YSgpOyB9IAogICAgICAgICAgICBlbHNlIHsgY29uc3QgdGFyZ2V0VGFiID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLnRhYi1idG5bZGF0YS1jYXQ9IiR7Y2F0fSJdYCk7IGlmICh0YXJnZXRUYWIpIHRhcmdldFRhYi5jbGljaygpOyBlbHNlIHsgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRhYi1idG5bZGF0YS1jYXQ9ImFsbCJdJykuY2xpY2soKTsgdHlwZVNlbGVjdC52YWx1ZSA9IGNhdDsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbHRlci1icmFuZCcpLnZhbHVlID0gJyc7IHBvcHVsYXRlQnJhbmRzKGNhdCk7IGZpbHRlckRhdGEoKTsgfSB9CiAgICAgICAgfSk7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbHRlci1icmFuZCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGUpID0+IHsgcG9wdWxhdGVNb2RlbHMoZS50YXJnZXQudmFsdWUpOyBmaWx0ZXJEYXRhKCk7IH0pOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWx0ZXItbW9kZWwnKS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZpbHRlckRhdGEpOyBzb3J0U2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZpbHRlckRhdGEpOyBidG5BcHBseS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZpbHRlckRhdGEpOwogICAgICAgIGJ0blJlc2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4geyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudGFiLWJ0bltkYXRhLWNhdD0iYWxsIl0nKS5jbGljaygpOyBwcmljZU1pbi52YWx1ZSA9ICcnOyBwcmljZU1heC52YWx1ZSA9ICcnOyBzb3J0U2VsZWN0LnZhbHVlID0gJ2RlZmF1bHQnOyB9KTsKCiAgICAgICAgbGV0IGFjdGl2ZU1vZGFsSXRlbSA9IG51bGw7CiAgICAgICAgZnVuY3Rpb24gb3Blbk1vZGFsKGl0ZW0pIHsKICAgICAgICAgICAgYWN0aXZlTW9kYWxJdGVtID0gaXRlbTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLWltZycpLnNyYyA9IGl0ZW0uaW1nOyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWwtaW1nJykub25lcnJvciA9IGZ1bmN0aW9uKCkgeyB0aGlzLnNyYyA9ICcvd3AtY29udGVudC91cGxvYWRzL2Fzc2V0cy9pbWFnZXMvY2FyLmpwZyc7IH07CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbC1icmFuZCcpLnRleHRDb250ZW50ID0gaXRlbS5icmFuZDsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLXRpdGxlJykudGV4dENvbnRlbnQgPSBpdGVtLnRpdGxlOyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWwtcHJpY2UnKS50ZXh0Q29udGVudCA9IGl0ZW0ucHJpY2VTdHI7CiAgICAgICAgICAgIGNvbnN0IHNwZWNzQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLXNwZWNzJyk7IHNwZWNzQ29udGFpbmVyLmlubmVySFRNTCA9ICcnOwogICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoaXRlbS5zcGVjcykpIHsgc3BlY3NDb250YWluZXIuaW5uZXJIVE1MICs9IGA8ZGl2IGNsYXNzPSJtb2RhbC1zcGVjLXJvdyI+PHNwYW4gY2xhc3M9Im1vZGFsLXNwZWMtbGFiZWwiPiR7a2V5fTwvc3Bhbj48c3BhbiBjbGFzcz0ibW9kYWwtc3BlYy12YWwiPiR7dmFsfTwvc3Bhbj48L2Rpdj5gOyB9CiAgICAgICAgICAgIG1vZGFsLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOyBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ21vZGFsLW9wZW4nKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gY2xvc2VNb2RhbCgpIHsgbW9kYWwuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbW9kYWwtb3BlbicpOyBhY3RpdmVNb2RhbEl0ZW0gPSBudWxsOyB9CiAgICAgICAgbW9kYWxDbG9zZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlTW9kYWwpOyBtb2RhbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7IGlmIChlLnRhcmdldCA9PT0gbW9kYWwpIGNsb3NlTW9kYWwoKTsgfSk7CiAgICAgICAgCiAgICAgICAgbW9kYWxCdG5BbGwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7IAogICAgICAgICAgICBpZiAoYWN0aXZlTW9kYWxJdGVtKSB7IAogICAgICAgICAgICAgICAgbGV0IGJTbHVnID0gYWN0aXZlTW9kYWxJdGVtLmJyYW5kLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvIC9nLCAnLScpLnJlcGxhY2UoL1teYS16MC050LAt0Y/RkS1dL2csICcnKTsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYC9icmFuZC0ke2JTbHVnfS9gOyAKICAgICAgICAgICAgfSAKICAgICAgICB9KTsKICAgICAgICAKICAgICAgICAKICAgICAgICAvLyBGb3JtIExvZ2ljCiAgICAgICAgY29uc3QgbGVhZEZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2F0YWxvZy1sZWFkLWZvcm0nKTsKICAgICAgICBjb25zdCBmb3JtT2JqSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGVhc2luZ19vYmplY3QnKTsKICAgICAgICBjb25zdCBuYW1lSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlcl9uYW1lJyk7CiAgICAgICAgY29uc3QgcGhvbmVJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VyX3Bob25lJyk7CiAgICAgICAgY29uc3QgbmFtZUVycm9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25hbWUtZXJyb3InKTsKICAgICAgICBjb25zdCBwaG9uZUVycm9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bob25lLWVycm9yJyk7CiAgICAgICAgY29uc3QgZm9ybU1zZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtLW1zZycpOwogICAgICAgIGNvbnN0IHN1Ym1pdEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJtaXQtYnRuJyk7CgogICAgICAgIC8vIFZhbGlkYXRpb24gcnVsZXMKICAgICAgICBuYW1lSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUucmVwbGFjZSgvW15BLVphLXrQkC3Qr9CwLdGP0IHRkVxzLV0vZywgJycpOwogICAgICAgIH0pOwogICAgICAgIHBob25lSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUucmVwbGFjZSgvW15cZCtdL2csICcnKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gU2V0dXAgbW9kYWwgcHJpbWFyeSBidXR0b24gdG8gc2Nyb2xsIHRvIGZvcm0KICAgICAgICBjb25zdCBidG5QcmltYXJ5TW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYnRuLXByaW1hcnktbW9kYWwnKTsKICAgICAgICBpZihidG5QcmltYXJ5TW9kYWwpIHsKICAgICAgICAgICAgYnRuUHJpbWFyeU1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gewogICAgICAgICAgICAgICAgaWYoYWN0aXZlTW9kYWxJdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgZm9ybU9iaklucHV0LnZhbHVlID0gYWN0aXZlTW9kYWxJdGVtLnRpdGxlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2xvc2VNb2RhbCgpOwogICAgICAgICAgICAgICAgY29uc3QgZm9ybVNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGVhc2luZy1mb3JtJyk7CiAgICAgICAgICAgICAgICBpZihmb3JtU2VjdGlvbikgZm9ybVNlY3Rpb24uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICBsZWFkRm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIENoZWNrIDMgbWluIGNvb2xkb3duCiAgICAgICAgICAgIGNvbnN0IGxhc3RTdWJtaXQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG1fbGFzdF9zdWJtaXQnKTsKICAgICAgICAgICAgaWYobGFzdFN1Ym1pdCkgewogICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBub3cgLSBwYXJzZUludChsYXN0U3VibWl0KTsKICAgICAgICAgICAgICAgIGlmKGRpZmYgPCAzICogNjAgKiAxMDAwKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FpdFRpbWUgPSBNYXRoLmNlaWwoKDMgKiA2MCAqIDEwMDAgLSBkaWZmKSAvIDEwMDApOwogICAgICAgICAgICAgICAgICAgIGZvcm1Nc2cuc3R5bGUuY29sb3IgPSAnI2RjMjYyNic7CiAgICAgICAgICAgICAgICAgICAgZm9ybU1zZy50ZXh0Q29udGVudCA9IGDQn9C+0LbQsNC70YPQudGB0YLQsCwg0L/QvtC00L7QttC00LjRgtC1INC10YnQtSAke3dhaXRUaW1lfSDRgdC10LouINC/0LXRgNC10LQg0L3QvtCy0L7QuSDQt9Cw0Y/QstC60L7QuS5gOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQmFzaWMgdmFsaWRhdGlvbgogICAgICAgICAgICBpZighbmFtZUlucHV0LnZhbHVlLnRyaW0oKSB8fCAhcGhvbmVJbnB1dC52YWx1ZS50cmltKCkpIHsKICAgICAgICAgICAgICAgIGZvcm1Nc2cuc3R5bGUuY29sb3IgPSAnI2RjMjYyNic7CiAgICAgICAgICAgICAgICBmb3JtTXNnLnRleHRDb250ZW50ID0gJ9Cf0L7QttCw0LvRg9C50YHRgtCwLCDQt9Cw0L/QvtC70L3QuNGC0LUg0LLRgdC1INC/0L7Qu9GPLic7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN1Ym1pdEJ0bi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICAgIHN1Ym1pdEJ0bi50ZXh0Q29udGVudCA9ICfQntGC0L/RgNCw0LLQutCwLi4uJzsKICAgICAgICAgICAgZm9ybU1zZy50ZXh0Q29udGVudCA9ICcnOwoKICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdhY3Rpb24nLCAnc3VibWl0X2xlYXNpbmdfaW5xdWlyeScpOwogICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3VzZXJfbmFtZScsIG5hbWVJbnB1dC52YWx1ZS50cmltKCkpOwogICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3VzZXJfcGhvbmUnLCBwaG9uZUlucHV0LnZhbHVlLnRyaW0oKSk7CiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnbGVhc2luZ19vYmplY3QnLCBmb3JtT2JqSW5wdXQudmFsdWUudHJpbSgpKTsKICAgICAgICAgICAgY29uc3QgY2l0eUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xlYXNpbmdfY2l0eScpOwogICAgICAgICAgICBjb25zdCB2aW5JbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsZWFzaW5nX3ZpbicpOwogICAgICAgICAgICBjb25zdCB0cmltSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGVhc2luZ190cmltJyk7CiAgICAgICAgICAgIGlmKGNpdHlJbnB1dCkgZm9ybURhdGEuYXBwZW5kKCdsZWFzaW5nX2NpdHknLCBjaXR5SW5wdXQudmFsdWUudHJpbSgpKTsKICAgICAgICAgICAgaWYodmluSW5wdXQpIGZvcm1EYXRhLmFwcGVuZCgnbGVhc2luZ192aW4nLCB2aW5JbnB1dC52YWx1ZS50cmltKCkpOwogICAgICAgICAgICBpZih0cmltSW5wdXQpIGZvcm1EYXRhLmFwcGVuZCgnbGVhc2luZ190cmltJywgdHJpbUlucHV0LnZhbHVlLnRyaW0oKSk7CgogICAgICAgICAgICBmZXRjaCgnL3dwLWFkbWluL2FkbWluLWFqYXgucGhwJywgewogICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICBib2R5OiBmb3JtRGF0YQogICAgICAgICAgICB9KQogICAgICAgICAgICAudGhlbihyZXMgPT4gcmVzLmpzb24oKSkKICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7CiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgICAgICBmb3JtTXNnLnN0eWxlLmNvbG9yID0gJyMxMGI5ODEnOwogICAgICAgICAgICAgICAgICAgIGZvcm1Nc2cudGV4dENvbnRlbnQgPSBkYXRhLmRhdGEgfHwgJ9CX0LDRj9Cy0LrQsCDRg9GB0L/QtdGI0L3QviDQv9GA0LjQvdGP0YLQsCEnOwogICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsbV9sYXN0X3N1Ym1pdCcsIERhdGUubm93KCkpOwogICAgICAgICAgICAgICAgICAgIGxlYWRGb3JtLnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgZm9ybU9iaklucHV0LnZhbHVlID0gJ9CS0YvQsdC10YDQuNGC0LUg0YLQtdGF0L3QuNC60YMg0LIg0LrQsNGC0LDQu9C+0LPQtSc7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGZvcm1Nc2cuc3R5bGUuY29sb3IgPSAnI2RjMjYyNic7CiAgICAgICAgICAgICAgICAgICAgZm9ybU1zZy50ZXh0Q29udGVudCA9IGRhdGEuZGF0YSB8fCAn0J7RiNC40LHQutCwINC+0YLQv9GA0LDQstC60Lgg0LfQsNGP0LLQutC4Lic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gewogICAgICAgICAgICAgICAgZm9ybU1zZy5zdHlsZS5jb2xvciA9ICcjZGMyNjI2JzsKICAgICAgICAgICAgICAgIGZvcm1Nc2cudGV4dENvbnRlbnQgPSAn0J/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsCDRgdCy0Y/Qt9C4INGBINGB0LXRgNCy0LXRgNC+0LwuJzsKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gewogICAgICAgICAgICAgICAgc3VibWl0QnRuLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICBzdWJtaXRCdG4udGV4dENvbnRlbnQgPSAn0J/QvtC70YPRh9C40YLRjCDRgNCw0YHRh9C10YIg0LvQuNC30LjQvdCz0LAnOwogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKCiAgICAgICAgZmV0Y2hBbmRJbml0RGF0YSgoKSA9PiB7CiAgICAgICAgICAgIHBvcHVsYXRlQnJhbmRzKCdhbGwnKTsKICAgICAgICAgICAgZmlsdGVyRGF0YSgpOwogICAgICAgIH0pOwogICAg