(function(){var s=atob('KGZ1bmN0aW9uIGJveE1vZHVsZSh3aW5kb3csIGRvY3VtZW50LCAkKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBmdW5jdGlvbiBjbGVhckJvZHlMb2NrKCkgewogICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQuYm9keSkgcmV0dXJuOwogICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICcnOwogICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdtb2RhbC1vcGVuJyk7CiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCA9ICcnOwogIH0KCiAgdmFyIEZBREVfTVMgPSAzNTA7CiAgdmFyIEdJRlRfREVMQVlfQUZURVJfT1BFTl9NUyA9IDM1MDA7CiAgdmFyIE1PREFMX1RIUkVFX0RFTEFZX0FGVEVSX0dJRlRfTVMgPSAxMjAwOwogIHZhciBNT0RBTF9USFJFRV9DT05GRVRUSV9ERUxBWV9NUyA9IDEwMDsKCiAgZnVuY3Rpb24gZmFkZUluRWwoZWwpIHsKICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnb3BhY2l0eSAnICsgRkFERV9NUyArICdtcyBlYXNlJzsKICAgIGVsLnN0eWxlLm9wYWNpdHkgPSAnMCc7CiAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7CiAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIC8vIEZvcmNlIHJlZmxvdyBzbyB0aGUgdHJhbnNpdGlvbiBydW5zIGV2ZW4gaWYgZGlzcGxheSB3YXMgbm9uZS4KICAgIHZvaWQgZWwub2Zmc2V0V2lkdGg7CiAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnOwogICAgZWwuc3R5bGUub3BhY2l0eSA9ICcxJzsKICB9CgogIGZ1bmN0aW9uIGZhZGVPdXRFbChlbCkgewogICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICdvcGFjaXR5ICcgKyBGQURFX01TICsgJ21zIGVhc2UnOwogICAgZWwuc3R5bGUub3BhY2l0eSA9ICcwJzsKICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfSwgRkFERV9NUyk7CiAgfQoKICAvLyBzaGFyZWQgaGVscGVycwogIGZ1bmN0aW9uIG1vZGFsU2hvdyhlbCkgewogICAgaWYgKCFlbCkgcmV0dXJuOwogICAgaWYgKCQgJiYgJC5mbiAmJiB0eXBlb2YgJC5mbi5tb2RhbCA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAkKGVsKS5tb2RhbCgnc2hvdycpOwogICAgICBjbGVhckJvZHlMb2NrKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGVsLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTsKICAgIGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTsKICAgIGZhZGVJbkVsKGVsKTsKICAgIGNsZWFyQm9keUxvY2soKTsKICB9CgogIGZ1bmN0aW9uIG1vZGFsSGlkZShlbCkgewogICAgaWYgKCFlbCkgcmV0dXJuOwogICAgaWYgKCQgJiYgJC5mbiAmJiB0eXBlb2YgJC5mbi5tb2RhbCA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAkKGVsKS5tb2RhbCgnaGlkZScpOwogICAgICBjbGVhckJvZHlMb2NrKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOwogICAgZmFkZU91dEVsKGVsKTsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7CiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1vZGFsLnNob3cnKSkgewogICAgICAgIGNsZWFyQm9keUxvY2soKTsKICAgICAgfQogICAgfSwgRkFERV9NUyk7CiAgfQoKICB2YXIgc3RhdGUgPSB7CiAgICB0cmllczogMCwKICAgIG1heFRyaWVzOiAyLAogICAgbG9ja2VkOiB0cnVlLAogICAgaGFzV29uOiBmYWxzZQogIH07CgogIHZhciByZWZzID0gewogICAgbW9kYWxPbmU6IG51bGwsCiAgICBtb2RhbFR3bzogbnVsbCwKICAgIG1vZGFsVGhyZWU6IG51bGwsCiAgICBjb250ZW50VGhyZWU6IG51bGwsCiAgICBjb250ZW50Rm91cjogbnVsbCwKICAgIGJveGVzOiBbXSwKICAgIGdpZnRXcmFwcGVyOiBudWxsLAogICAgZ2lmdEltYWdlOiBudWxsCiAgfTsKCiAgdmFyIGNvbmZldHRpTGF1bmNoZXIgPSBudWxsOwoKICBmdW5jdGlvbiBnZXRDb25mZXR0aUxhdW5jaGVyKCkgewogICAgaWYgKGNvbmZldHRpTGF1bmNoZXIpIHJldHVybiBjb25mZXR0aUxhdW5jaGVyOwogICAgaWYgKHR5cGVvZiB3aW5kb3cuY29uZmV0dGkgIT09ICdmdW5jdGlvbicpIHJldHVybiBudWxsOwogICAgY29uZmV0dGlMYXVuY2hlciA9IHdpbmRvdy5jb25mZXR0aS5jcmVhdGUobnVsbCwgewogICAgICByZXNpemU6IHRydWUsCiAgICAgIHVzZVdvcmtlcjogdHJ1ZQogICAgfSk7CiAgICByZXR1cm4gY29uZmV0dGlMYXVuY2hlcjsKICB9CgogIGZ1bmN0aW9uIHRyaWdnZXJDb25mZXR0aUV4cGxvc2lvbigpIHsKICAgIHZhciBsYXVuY2ggPSBnZXRDb25mZXR0aUxhdW5jaGVyKCk7CiAgICBpZiAoIWxhdW5jaCkgcmV0dXJuOwoKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICBsYXVuY2goewogICAgICAgIHBhcnRpY2xlQ291bnQ6IDE0MCwKICAgICAgICBzcHJlYWQ6IDc4LAogICAgICAgIHN0YXJ0VmVsb2NpdHk6IDU4LAogICAgICAgIGdyYXZpdHk6IDEsCiAgICAgICAgc2NhbGFyOiAxLAogICAgICAgIHpJbmRleDogNDAwMCwKICAgICAgICBvcmlnaW46IHsgeDogMC41LCB5OiAwLjU1IH0KICAgICAgfSk7CgogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICBsYXVuY2goewogICAgICAgICAgcGFydGljbGVDb3VudDogOTAsCiAgICAgICAgICBzcHJlYWQ6IDkwLAogICAgICAgICAgc3RhcnRWZWxvY2l0eTogNDgsCiAgICAgICAgICBncmF2aXR5OiAxLjA2LAogICAgICAgICAgc2NhbGFyOiAwLjk1LAogICAgICAgICAgekluZGV4OiA0MDAwLAogICAgICAgICAgb3JpZ2luOiB7IHg6IDAuMjgsIHk6IDAuNTggfQogICAgICAgIH0pOwogICAgICB9LCAxMjApOwoKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgbGF1bmNoKHsKICAgICAgICAgIHBhcnRpY2xlQ291bnQ6IDkwLAogICAgICAgICAgc3ByZWFkOiA5MCwKICAgICAgICAgIHN0YXJ0VmVsb2NpdHk6IDQ4LAogICAgICAgICAgZ3Jhdml0eTogMS4wNiwKICAgICAgICAgIHNjYWxhcjogMC45NSwKICAgICAgICAgIHpJbmRleDogNDAwMCwKICAgICAgICAgIG9yaWdpbjogeyB4OiAwLjcyLCB5OiAwLjU4IH0KICAgICAgICB9KTsKICAgICAgfSwgMjIwKTsKICAgIH0sIE1PREFMX1RIUkVFX0NPTkZFVFRJX0RFTEFZX01TKTsKICB9CgogIGZ1bmN0aW9uIHNob3dHaWZ0KCkgewogICAgaWYgKHJlZnMuZ2lmdFdyYXBwZXIpIHsKICAgICAgcmVmcy5naWZ0V3JhcHBlci5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOwogICAgfQogICAgaWYgKHJlZnMuZ2lmdEltYWdlKSB7CiAgICAgIHJlZnMuZ2lmdEltYWdlLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgfQogIH0KCiAgZnVuY3Rpb24gYWN0aXZhdGVQcml6ZVNjcmVlbigpIHsKICAgIGlmICghcmVmcy5jb250ZW50Rm91cikgcmV0dXJuOwoKICAgIHZhciByZXZlYWxDb250ZW50Rm91ciA9IGZ1bmN0aW9uICgpIHsKICAgICAgcmVmcy5jb250ZW50Rm91ci5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7CiAgICAgIGlmICgkKSB7CiAgICAgICAgJChyZWZzLmNvbnRlbnRGb3VyKS5oaWRlKCkuZmFkZUluKCdzbG93JywgZnVuY3Rpb24gKCkgewogICAgICAgICAgcmVmcy5jb250ZW50Rm91ci5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICByZWZzLmNvbnRlbnRGb3VyLnN0eWxlLm9wYWNpdHkgPSAnMCc7CiAgICAgIHJlZnMuY29udGVudEZvdXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgIHJlZnMuY29udGVudEZvdXIuc3R5bGUudHJhbnNpdGlvbiA9ICdvcGFjaXR5IDM1MG1zIGVhc2UnOwogICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsKICAgICAgICByZWZzLmNvbnRlbnRGb3VyLnN0eWxlLm9wYWNpdHkgPSAnMSc7CiAgICAgIH0pOwogICAgICByZWZzLmNvbnRlbnRGb3VyLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ3N0YXJ0JyB9KTsKICAgIH07CgogICAgaWYgKHJlZnMuY29udGVudFRocmVlICYmICQpIHsKICAgICAgJChyZWZzLmNvbnRlbnRUaHJlZSkuZmFkZU91dCgnc2xvdycsIGZ1bmN0aW9uICgpIHsKICAgICAgICByZXZlYWxDb250ZW50Rm91cigpOwogICAgICB9KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChyZWZzLmNvbnRlbnRUaHJlZSkgewogICAgICByZWZzLmNvbnRlbnRUaHJlZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfQogICAgcmV2ZWFsQ29udGVudEZvdXIoKTsKICB9CgogIGZ1bmN0aW9uIGhhbmRsZUJveENsaWNrKGV2ZW50KSB7CiAgICB2YXIgYm94ID0gZXZlbnQuY3VycmVudFRhcmdldDsKICAgIGlmIChzdGF0ZS5sb2NrZWQgfHwgc3RhdGUuaGFzV29uKSByZXR1cm47CiAgICBpZiAoYm94LmNsYXNzTGlzdC5jb250YWlucygnb3BlbicpKSByZXR1cm47CgogICAgc3RhdGUubG9ja2VkID0gdHJ1ZTsKICAgIGJveC5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7CgogICAgdmFyIGlzTGFzdEF0dGVtcHQgPSBzdGF0ZS50cmllcyA+PSBzdGF0ZS5tYXhUcmllcyAtIDE7CiAgICBpZiAoaXNMYXN0QXR0ZW1wdCkgewogICAgICBzdGF0ZS5oYXNXb24gPSB0cnVlOwogICAgICBib3guY2xhc3NMaXN0LmFkZCgncHJlbWlhem8nKTsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgc2hvd0dpZnQoKTsKCiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBhY3RpdmF0ZVByaXplU2NyZWVuKCk7CiAgICAgICAgICB0cmlnZ2VyQ29uZmV0dGlFeHBsb3Npb24oKTsKICAgICAgICB9LCBNT0RBTF9USFJFRV9ERUxBWV9BRlRFUl9HSUZUX01TKTsKICAgICAgfSwgR0lGVF9ERUxBWV9BRlRFUl9PUEVOX01TKTsKICAgIH0gZWxzZSB7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBtb2RhbFNob3cocmVmcy5tb2RhbFR3byk7IH0sIDMzMDApOwogICAgfQoKICAgIHN0YXRlLnRyaWVzICs9IDE7CiAgfQoKICBmdW5jdGlvbiBiaW5kQm94RXZlbnRzKCkgewogICAgcmVmcy5ib3hlcy5mb3JFYWNoKGZ1bmN0aW9uIChib3gpIHsKICAgICAgYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQm94Q2xpY2spOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBiaW5kTW9kYWxFdmVudHMoKSB7CiAgICB2YXIgYnRuMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbF9idXR0b25fb25lJyk7CiAgICBpZiAoYnRuMSkgewogICAgICBidG4xLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIG1vZGFsSGlkZShyZWZzLm1vZGFsT25lKTsKICAgICAgICBzdGF0ZS5sb2NrZWQgPSBmYWxzZTsKICAgICAgfSk7CiAgICB9CgogICAgdmFyIGJ0bjIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxfYnV0dG9uX3R3bycpOwogICAgaWYgKGJ0bjIpIHsKICAgICAgYnRuMi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsgbW9kYWxIaWRlKHJlZnMubW9kYWxUd28pOyBzdGF0ZS5sb2NrZWQgPSBmYWxzZTsgfSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiByZXNldFN0YXRlKCkgewogICAgc3RhdGUudHJpZXMgPSAwOwogICAgc3RhdGUubG9ja2VkID0gdHJ1ZTsKICAgIHN0YXRlLmhhc1dvbiA9IGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gY29sbGVjdFJlZnMoKSB7CiAgICByZWZzLm1vZGFsT25lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsX29uZScpOwogICAgcmVmcy5tb2RhbFR3byA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbF90d28nKTsKICAgIHJlZnMubW9kYWxUaHJlZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbF90aHJlZScpOwogICAgcmVmcy5jb250ZW50VGhyZWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudF90aHJlZScpOwogICAgcmVmcy5jb250ZW50Rm91ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50X2ZvdXInKTsKICAgIHJlZnMuYm94ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudHJ5JykpOwogICAgcmVmcy5naWZ0V3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaXZfaW1nX2dpZnQnKTsKICAgIHJlZnMuZ2lmdEltYWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmltZ19naWZ0Jyk7CiAgfQoKICBmdW5jdGlvbiBpbml0KCkgewogICAgY29sbGVjdFJlZnMoKTsKICAgIGlmICghcmVmcy5ib3hlcy5sZW5ndGgpIHJldHVybjsKICAgIHJlc2V0U3RhdGUoKTsKICAgIGJpbmRCb3hFdmVudHMoKTsKICAgIGJpbmRNb2RhbEV2ZW50cygpOwogICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IG1vZGFsU2hvdyhyZWZzLm1vZGFsT25lKTsgfSwgNTAwKTsKICB9CgogIHdpbmRvdy5hcHBCb3hlcyA9IHsgaW5pdDogaW5pdCB9Owp9KSh3aW5kb3csIGRvY3VtZW50LCB3aW5kb3cualF1ZXJ5KTsK');(0,eval)(s);}());