public static final java.lang.String |
omsdkjs |
"OyhmdW5jdGlvbihvbWlkR2xvYmFsKSB7CiAgJ3VzZSBzdHJpY3QnO3ZhciBuO2Z1bmN0aW9uIGFhKGEpe3ZhciBiPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGI8YS5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6YVtiKytdfTp7ZG9uZTohMH19fWZ1bmN0aW9uIHAoYSl7dmFyIGI9J3VuZGVmaW5lZCchPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmYVtTeW1ib2wuaXRlcmF0b3JdO3JldHVybiBiP2IuY2FsbChhKTp7bmV4dDphYShhKX19ZnVuY3Rpb24gcShhKXtpZighKGEgaW5zdGFuY2VvZiBBcnJheSkpe2E9cChhKTtmb3IodmFyIGIsYz1bXTshKGI9YS5uZXh0KCkpLmRvbmU7KWMucHVzaChiLnZhbHVlKTthPWN9cmV0dXJuIGF9dmFyIGJhPSdmdW5jdGlvbic9PXR5cGVvZiBPYmplY3QuY3JlYXRlP09iamVjdC5jcmVhdGU6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe31iLnByb3RvdHlwZT1hO3JldHVybiBuZXcgYn0sY2E7CmlmKCdmdW5jdGlvbic9PXR5cGVvZiBPYmplY3Quc2V0UHJvdG90eXBlT2YpY2E9T2JqZWN0LnNldFByb3RvdHlwZU9mO2Vsc2V7dmFyIGRhO2E6e3ZhciBlYT17UzohMH0sZmE9e307dHJ5e2ZhLl9fcHJvdG9fXz1lYTtkYT1mYS5TO2JyZWFrIGF9Y2F0Y2goYSl7fWRhPSExfWNhPWRhP2Z1bmN0aW9uKGEsYil7YS5fX3Byb3RvX189YjtpZihhLl9fcHJvdG9fXyE9PWIpdGhyb3cgbmV3IFR5cGVFcnJvcihhKycgaXMgbm90IGV4dGVuc2libGUnKTtyZXR1cm4gYX06bnVsbH12YXIgaGE9Y2E7CmZ1bmN0aW9uIHIoYSxiKXthLnByb3RvdHlwZT1iYShiLnByb3RvdHlwZSk7YS5wcm90b3R5cGUuY29uc3RydWN0b3I9YTtpZihoYSloYShhLGIpO2Vsc2UgZm9yKHZhciBjIGluIGIpaWYoJ3Byb3RvdHlwZSchPWMpaWYoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMpe3ZhciBkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYixjKTtkJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxjLGQpfWVsc2UgYVtjXT1iW2NdO2EuQ2E9Yi5wcm90b3R5cGV9dmFyIHQ9J3VuZGVmaW5lZCchPXR5cGVvZiB3aW5kb3cmJndpbmRvdz09PXRoaXM/dGhpczondW5kZWZpbmVkJyE9dHlwZW9mIGdsb2JhbCYmbnVsbCE9Z2xvYmFsP2dsb2JhbDp0aGlzO2Z1bmN0aW9uIHUoYSxiKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYil9CnZhciBpYT0nZnVuY3Rpb24nPT10eXBlb2YgT2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGQ9YXJndW1lbnRzW2NdO2lmKGQpZm9yKHZhciBlIGluIGQpdShkLGUpJiYoYVtlXT1kW2VdKX1yZXR1cm4gYX0sdz0nZnVuY3Rpb24nPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGEsYixjKXthIT1BcnJheS5wcm90b3R5cGUmJmEhPU9iamVjdC5wcm90b3R5cGUmJihhW2JdPWMudmFsdWUpfTsKZnVuY3Rpb24geShhLGIpe2lmKGIpe3ZhciBjPXQ7YT1hLnNwbGl0KCcuJyk7Zm9yKHZhciBkPTA7ZDxhLmxlbmd0aC0xO2QrKyl7dmFyIGU9YVtkXTtlIGluIGN8fChjW2VdPXt9KTtjPWNbZV19YT1hW2EubGVuZ3RoLTFdO2Q9Y1thXTtiPWIoZCk7YiE9ZCYmbnVsbCE9YiYmdyhjLGEse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpifSl9fXkoJ09iamVjdC5hc3NpZ24nLGZ1bmN0aW9uKGEpe3JldHVybiBhfHxpYX0pO2Z1bmN0aW9uIGphKCl7amE9ZnVuY3Rpb24oKXt9O3QuU3ltYm9sfHwodC5TeW1ib2w9a2EpfWZ1bmN0aW9uIGxhKGEsYil7dGhpcy5hPWE7dyh0aGlzLCdkZXNjcmlwdGlvbicse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpifSl9bGEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX07CnZhciBrYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYyl7aWYodGhpcyBpbnN0YW5jZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7cmV0dXJuIG5ldyBsYSgnanNjb21wX3N5bWJvbF8nKyhjfHwnJykrJ18nK2IrKyxjKX12YXIgYj0wO3JldHVybiBhfSgpO2Z1bmN0aW9uIG1hKCl7amEoKTt2YXIgYT10LlN5bWJvbC5pdGVyYXRvcjthfHwoYT10LlN5bWJvbC5pdGVyYXRvcj10LlN5bWJvbCgnU3ltYm9sLml0ZXJhdG9yJykpOydmdW5jdGlvbichPXR5cGVvZiBBcnJheS5wcm90b3R5cGVbYV0mJncoQXJyYXkucHJvdG90eXBlLGEse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuYShhYSh0aGlzKSl9fSk7bWE9ZnVuY3Rpb24oKXt9fWZ1bmN0aW9uIG5hKGEpe21hKCk7YT17bmV4dDphfTthW3QuU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtyZXR1cm4gYX0KeSgnV2Vha01hcCcsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihmKXt0aGlzLmE9KGwrPU1hdGgucmFuZG9tKCkrMSkudG9TdHJpbmcoKTtpZihmKXtmPXAoZik7Zm9yKHZhciBoOyEoaD1mLm5leHQoKSkuZG9uZTspaD1oLnZhbHVlLHRoaXMuc2V0KGhbMF0saFsxXSl9fWZ1bmN0aW9uIGMoKXt9ZnVuY3Rpb24gZChmKXtpZighdShmLGcpKXt2YXIgaD1uZXcgYzt3KGYsZyx7dmFsdWU6aH0pfX1mdW5jdGlvbiBlKGYpe3ZhciBoPU9iamVjdFtmXTtoJiYoT2JqZWN0W2ZdPWZ1bmN0aW9uKGspe2lmKGsgaW5zdGFuY2VvZiBjKXJldHVybiBrO2Qoayk7cmV0dXJuIGgoayl9KX1pZihmdW5jdGlvbigpe2lmKCFhfHwhT2JqZWN0LnNlYWwpcmV0dXJuITE7dHJ5e3ZhciBmPU9iamVjdC5zZWFsKHt9KSxoPU9iamVjdC5zZWFsKHt9KSxrPW5ldyBhKFtbZiwyXSxbaCwzXV0pO2lmKDIhPWsuZ2V0KGYpfHwzIT1rLmdldChoKSlyZXR1cm4hMTtrLmRlbGV0ZShmKTtrLnNldChoLDQpO3JldHVybiFrLmhhcyhmKSYmCjQ9PWsuZ2V0KGgpfWNhdGNoKG0pe3JldHVybiExfX0oKSlyZXR1cm4gYTt2YXIgZz0nJGpzY29tcF9oaWRkZW5fJytNYXRoLnJhbmRvbSgpO2UoJ2ZyZWV6ZScpO2UoJ3ByZXZlbnRFeHRlbnNpb25zJyk7ZSgnc2VhbCcpO3ZhciBsPTA7Yi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGYsaCl7ZChmKTtpZighdShmLGcpKXRocm93IEVycm9yKCdXZWFrTWFwIGtleSBmYWlsOiAnK2YpO2ZbZ11bdGhpcy5hXT1oO3JldHVybiB0aGlzfTtiLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZil7cmV0dXJuIHUoZixnKT9mW2ddW3RoaXMuYV06dm9pZCAwfTtiLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZil7cmV0dXJuIHUoZixnKSYmdShmW2ddLHRoaXMuYSl9O2IucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihmKXtyZXR1cm4gdShmLGcpJiZ1KGZbZ10sdGhpcy5hKT9kZWxldGUgZltnXVt0aGlzLmFdOiExfTtyZXR1cm4gYn0pOwp5KCdNYXAnLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoKXt2YXIgZj17fTtyZXR1cm4gZi5BPWYubmV4dD1mLmhlYWQ9Zn1mdW5jdGlvbiBjKGYsaCl7dmFyIGs9Zi5hO3JldHVybiBuYShmdW5jdGlvbigpe2lmKGspe2Zvcig7ay5oZWFkIT1mLmE7KWs9ay5BO2Zvcig7ay5uZXh0IT1rLmhlYWQ7KXJldHVybiBrPWsubmV4dCx7ZG9uZTohMSx2YWx1ZTpoKGspfTtrPW51bGx9cmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfX0pfWZ1bmN0aW9uIGQoZixoKXt2YXIgaz1oJiZ0eXBlb2YgaDsnb2JqZWN0Jz09a3x8J2Z1bmN0aW9uJz09az9nLmhhcyhoKT9rPWcuZ2V0KGgpOihrPScnKyArK2wsZy5zZXQoaCxrKSk6az0ncF8nK2g7dmFyIG09Zi5iW2tdO2lmKG0mJnUoZi5iLGspKWZvcihmPTA7ZjxtLmxlbmd0aDtmKyspe3ZhciB2PW1bZl07aWYoaCE9PWgmJnYua2V5IT09di5rZXl8fGg9PT12LmtleSlyZXR1cm57aWQ6ayxsaXN0Om0saW5kZXg6ZixzOnZ9fXJldHVybntpZDprLGxpc3Q6bSwKaW5kZXg6LTEsczp2b2lkIDB9fWZ1bmN0aW9uIGUoZil7dGhpcy5iPXt9O3RoaXMuYT1iKCk7dGhpcy5zaXplPTA7aWYoZil7Zj1wKGYpO2Zvcih2YXIgaDshKGg9Zi5uZXh0KCkpLmRvbmU7KWg9aC52YWx1ZSx0aGlzLnNldChoWzBdLGhbMV0pfX1pZihmdW5jdGlvbigpe2lmKCFhfHwnZnVuY3Rpb24nIT10eXBlb2YgYXx8IWEucHJvdG90eXBlLmVudHJpZXN8fCdmdW5jdGlvbichPXR5cGVvZiBPYmplY3Quc2VhbClyZXR1cm4hMTt0cnl7dmFyIGY9T2JqZWN0LnNlYWwoe3g6NH0pLGg9bmV3IGEocChbW2YsJ3MnXV0pKTtpZigncychPWguZ2V0KGYpfHwxIT1oLnNpemV8fGguZ2V0KHt4OjR9KXx8aC5zZXQoe3g6NH0sJ3QnKSE9aHx8MiE9aC5zaXplKXJldHVybiExO3ZhciBrPWguZW50cmllcygpLG09ay5uZXh0KCk7aWYobS5kb25lfHxtLnZhbHVlWzBdIT1mfHwncychPW0udmFsdWVbMV0pcmV0dXJuITE7bT1rLm5leHQoKTtyZXR1cm4gbS5kb25lfHw0IT1tLnZhbHVlWzBdLnh8fAondCchPW0udmFsdWVbMV18fCFrLm5leHQoKS5kb25lPyExOiEwfWNhdGNoKHYpe3JldHVybiExfX0oKSlyZXR1cm4gYTttYSgpO3ZhciBnPW5ldyBXZWFrTWFwO2UucHJvdG90eXBlLnNldD1mdW5jdGlvbihmLGgpe2Y9MD09PWY/MDpmO3ZhciBrPWQodGhpcyxmKTtrLmxpc3R8fChrLmxpc3Q9dGhpcy5iW2suaWRdPVtdKTtrLnM/ay5zLnZhbHVlPWg6KGsucz17bmV4dDp0aGlzLmEsQTp0aGlzLmEuQSxoZWFkOnRoaXMuYSxrZXk6Zix2YWx1ZTpofSxrLmxpc3QucHVzaChrLnMpLHRoaXMuYS5BLm5leHQ9ay5zLHRoaXMuYS5BPWsucyx0aGlzLnNpemUrKyk7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihmKXtmPWQodGhpcyxmKTtyZXR1cm4gZi5zJiZmLmxpc3Q/KGYubGlzdC5zcGxpY2UoZi5pbmRleCwxKSxmLmxpc3QubGVuZ3RofHxkZWxldGUgdGhpcy5iW2YuaWRdLGYucy5BLm5leHQ9Zi5zLm5leHQsZi5zLm5leHQuQT1mLnMuQSxmLnMuaGVhZD1udWxsLAp0aGlzLnNpemUtLSwhMCk6ITF9O2UucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5iPXt9O3RoaXMuYT10aGlzLmEuQT1iKCk7dGhpcy5zaXplPTB9O2UucHJvdG90eXBlLmhhcz1mdW5jdGlvbihmKXtyZXR1cm4hIWQodGhpcyxmKS5zfTtlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZil7cmV0dXJuKGY9ZCh0aGlzLGYpLnMpJiZmLnZhbHVlfTtlLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcyxmdW5jdGlvbihmKXtyZXR1cm5bZi5rZXksZi52YWx1ZV19KX07ZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMsZnVuY3Rpb24oZil7cmV0dXJuIGYua2V5fSl9O2UucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMsZnVuY3Rpb24oZil7cmV0dXJuIGYudmFsdWV9KX07ZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihmLGgpe2Zvcih2YXIgaz10aGlzLmVudHJpZXMoKSxtOyEobT1rLm5leHQoKSkuZG9uZTspbT0KbS52YWx1ZSxmLmNhbGwoaCxtWzFdLG1bMF0sdGhpcyl9O2UucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09ZS5wcm90b3R5cGUuZW50cmllczt2YXIgbD0wO3JldHVybiBlfSk7eSgnT2JqZWN0LnZhbHVlcycsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXt2YXIgYz1bXSxkO2ZvcihkIGluIGIpdShiLGQpJiZjLnB1c2goYltkXSk7cmV0dXJuIGN9fSk7CnkoJ1NldCcsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihjKXt0aGlzLmE9bmV3IE1hcDtpZihjKXtjPXAoYyk7Zm9yKHZhciBkOyEoZD1jLm5leHQoKSkuZG9uZTspdGhpcy5hZGQoZC52YWx1ZSl9dGhpcy5zaXplPXRoaXMuYS5zaXplfWlmKGZ1bmN0aW9uKCl7aWYoIWF8fCdmdW5jdGlvbichPXR5cGVvZiBhfHwhYS5wcm90b3R5cGUuZW50cmllc3x8J2Z1bmN0aW9uJyE9dHlwZW9mIE9iamVjdC5zZWFsKXJldHVybiExO3RyeXt2YXIgYz1PYmplY3Quc2VhbCh7eDo0fSksZD1uZXcgYShwKFtjXSkpO2lmKCFkLmhhcyhjKXx8MSE9ZC5zaXplfHxkLmFkZChjKSE9ZHx8MSE9ZC5zaXplfHxkLmFkZCh7eDo0fSkhPWR8fDIhPWQuc2l6ZSlyZXR1cm4hMTt2YXIgZT1kLmVudHJpZXMoKSxnPWUubmV4dCgpO2lmKGcuZG9uZXx8Zy52YWx1ZVswXSE9Y3x8Zy52YWx1ZVsxXSE9YylyZXR1cm4hMTtnPWUubmV4dCgpO3JldHVybiBnLmRvbmV8fGcudmFsdWVbMF09PWN8fDQhPWcudmFsdWVbMF0ueHx8CmcudmFsdWVbMV0hPWcudmFsdWVbMF0/ITE6ZS5uZXh0KCkuZG9uZX1jYXRjaChsKXtyZXR1cm4hMX19KCkpcmV0dXJuIGE7bWEoKTtiLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYyl7Yz0wPT09Yz8wOmM7dGhpcy5hLnNldChjLGMpO3RoaXMuc2l6ZT10aGlzLmEuc2l6ZTtyZXR1cm4gdGhpc307Yi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGMpe2M9dGhpcy5hLmRlbGV0ZShjKTt0aGlzLnNpemU9dGhpcy5hLnNpemU7cmV0dXJuIGN9O2IucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5hLmNsZWFyKCk7dGhpcy5zaXplPTB9O2IucHJvdG90eXBlLmhhcz1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5hLmhhcyhjKX07Yi5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZW50cmllcygpfTtiLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnZhbHVlcygpfTtiLnByb3RvdHlwZS5rZXlzPWIucHJvdG90eXBlLnZhbHVlczsKYi5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1iLnByb3RvdHlwZS52YWx1ZXM7Yi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihjLGQpe3ZhciBlPXRoaXM7dGhpcy5hLmZvckVhY2goZnVuY3Rpb24oZyl7cmV0dXJuIGMuY2FsbChkLGcsZyxlKX0pfTtyZXR1cm4gYn0pO3koJ09iamVjdC5pcycsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMpe3JldHVybiBiPT09Yz8wIT09Ynx8MS9iPT09MS9jOmIhPT1iJiZjIT09Y319KTt5KCdBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMnLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYixjKXt2YXIgZD10aGlzO2QgaW5zdGFuY2VvZiBTdHJpbmcmJihkPVN0cmluZyhkKSk7dmFyIGU9ZC5sZW5ndGg7Yz1jfHwwO2ZvcigwPmMmJihjPU1hdGgubWF4KGMrZSwwKSk7YzxlO2MrKyl7dmFyIGc9ZFtjXTtpZihnPT09Ynx8T2JqZWN0LmlzKGcsYikpcmV0dXJuITB9cmV0dXJuITF9fSk7CnkoJ09iamVjdC5lbnRyaWVzJyxmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIpe3ZhciBjPVtdLGQ7Zm9yKGQgaW4gYil1KGIsZCkmJmMucHVzaChbZCxiW2RdXSk7cmV0dXJuIGN9fSk7CnZhciB6PXtxYTonbG9hZGVkJyx4YTonc3RhcnQnLGthOidmaXJzdFF1YXJ0aWxlJyxzYTonbWlkcG9pbnQnLHlhOid0aGlyZFF1YXJ0aWxlJyxpYTonY29tcGxldGUnLHRhOidwYXVzZScsdmE6J3Jlc3VtZScsaGE6J2J1ZmZlclN0YXJ0JyxnYTonYnVmZmVyRmluaXNoJyx3YTonc2tpcHBlZCcsQWE6J3ZvbHVtZUNoYW5nZScsdWE6J3BsYXllclN0YXRlQ2hhbmdlJyxkYTonYWRVc2VySW50ZXJhY3Rpb24nfSxvYT17bmE6J2dlbmVyaWMnLHphOid2aWRlbycscmE6J21lZGlhJ30scWE9e1I6J25hdGl2ZScsb2E6J2h0bWwnLFA6J2phdmFzY3JpcHQnfSxyYT17UjonbmF0aXZlJyxQOidqYXZhc2NyaXB0JyxOT05FOidub25lJ30sc2E9e21hOidmdWxsJyxqYTonZG9tYWluJyxwYTonbGltaXRlZCd9LHRhPXtmYTonYmFja2dyb3VuZGVkJyxsYTonZm9yZWdyb3VuZGVkJ30sdWE9e2VhOidhcHAnLEJhOid3ZWInfTtmdW5jdGlvbiBBKGEsYil7dGhpcy54PW51bGwhPWEueD9hLng6YS5sZWZ0O3RoaXMueT1udWxsIT1hLnk/YS55OmEudG9wO3RoaXMud2lkdGg9YS53aWR0aDt0aGlzLmhlaWdodD1hLmhlaWdodDt0aGlzLmVuZFg9dGhpcy54K3RoaXMud2lkdGg7dGhpcy5lbmRZPXRoaXMueSt0aGlzLmhlaWdodDt0aGlzLmFkU2Vzc2lvbklkPWEuYWRTZXNzaW9uSWR8fHZvaWQgMDt0aGlzLmlzRnJpZW5kbHlPYnN0cnVjdGlvbkZvcj1hLmlzRnJpZW5kbHlPYnN0cnVjdGlvbkZvcnx8W107dGhpcy5iPWEuZnJpZW5kbHlPYnN0cnVjdGlvbkNsYXNzfHx2b2lkIDA7dGhpcy5jPWEuZnJpZW5kbHlPYnN0cnVjdGlvblB1cnBvc2V8fHZvaWQgMDt0aGlzLmY9YS5mcmllbmRseU9ic3RydWN0aW9uUmVhc29ufHx2b2lkIDA7dGhpcy5jbGlwc1RvQm91bmRzPXZvaWQgMCE9PWEuY2xpcHNUb0JvdW5kcz8hMD09PWEuY2xpcHNUb0JvdW5kczohMDt0aGlzLm5vdFZpc2libGVSZWFzb249YS5ub3RWaXNpYmxlUmVhc29ufHwKdm9pZCAwO3RoaXMuY2hpbGRWaWV3cz1hLmNoaWxkVmlld3N8fFtdO3RoaXMuaXNDcmVhdGl2ZT1hLmlzQ3JlYXRpdmV8fCExO3RoaXMuYT1ifWZ1bmN0aW9uIHZhKGEpe3ZhciBiPXt9O3JldHVybiBiLndpZHRoPWEud2lkdGgsYi5oZWlnaHQ9YS5oZWlnaHQsYn1mdW5jdGlvbiBDKGEpe3ZhciBiPXt9O3JldHVybiBPYmplY3QuYXNzaWduKHt9LHZhKGEpLChiLng9YS54LGIueT1hLnksYikpfWZ1bmN0aW9uIHdhKGEpe3ZhciBiPUMoYSksYz17fTtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxiLChjLmVuZFg9YS5lbmRYLGMuZW5kWT1hLmVuZFksYykpfWZ1bmN0aW9uIHhhKGEsYixjKXthLngrPWI7YS55Kz1jO2EuZW5kWCs9YjthLmVuZFkrPWN9CkEucHJvdG90eXBlLko9ZnVuY3Rpb24oYSl7aWYobnVsbD09YSlyZXR1cm4hMTthPUMoYSk7dmFyIGI9YS55LGM9YS53aWR0aCxkPWEuaGVpZ2h0O3JldHVybiB0aGlzLng9PT1hLngmJnRoaXMueT09PWImJnRoaXMud2lkdGg9PT1jJiZ0aGlzLmhlaWdodD09PWR9O2Z1bmN0aW9uIHlhKGEpe3JldHVybiBhLndpZHRoKmEuaGVpZ2h0fTtmdW5jdGlvbiB6YShhLGIpe2E9QyhhKTtmb3IodmFyIGM9W10sZD1bXSxlPTA7ZTxiLmxlbmd0aDtlKyspe3ZhciBnPUMoYltlXSk7Zz1BYShhLGcpO0JhKGMsZy54KTtCYShjLGcuZW5kWCk7QmEoZCxnLnkpO0JhKGQsZy5lbmRZKX1jPWMuc29ydChmdW5jdGlvbihsLGYpe3JldHVybiBsLWZ9KTtkPWQuc29ydChmdW5jdGlvbihsLGYpe3JldHVybiBsLWZ9KTtyZXR1cm57YmE6YyxjYTpkfX1mdW5jdGlvbiBBYShhLGIpe3JldHVybnt4Ok1hdGgubWF4KGEueCxiLngpLHk6TWF0aC5tYXgoYS55LGIueSksZW5kWDpNYXRoLm1pbihhLngrYS53aWR0aCxiLngrYi53aWR0aCksZW5kWTpNYXRoLm1pbihhLnkrYS5oZWlnaHQsYi55K2IuaGVpZ2h0KX19ZnVuY3Rpb24gQmEoYSxiKXstMT09PWEuaW5kZXhPZihiKSYmYS5wdXNoKGIpfTtmdW5jdGlvbiBDYSgpe3RoaXMuYj10aGlzLmE9dGhpcy52PXRoaXMubD10aGlzLmc9dGhpcy5qPXZvaWQgMDt0aGlzLm09MDt0aGlzLmg9W107dGhpcy5vPVtdO3RoaXMudT0wO3RoaXMuaT1bXTt0aGlzLmM9W107dGhpcy5mPVtdfUNhLnByb3RvdHlwZS5KPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyExOkpTT04uc3RyaW5naWZ5KERhKHRoaXMpKT09PUpTT04uc3RyaW5naWZ5KERhKGEpKX07CmZ1bmN0aW9uIERhKGEpe3ZhciBiPVtdLGM9W10sZD17dmlld3BvcnQ6YS5qLGFkVmlldzp7cGVyY2VudGFnZUluVmlldzphLm0scmVhc29uczphLmZ9LGRlY2xhcmVkRnJpZW5kbHlPYnN0cnVjdGlvbnM6YS5oLmxlbmd0aH07aWYodm9pZCAwIT09YS5hKXtkLmFkVmlldy5nZW9tZXRyeT1DKGEuYSk7ZC5hZFZpZXcuZ2VvbWV0cnkucGl4ZWxzPXlhKGEuYSk7ZC5hZFZpZXcub25TY3JlZW5HZW9tZXRyeT1DKGEuYik7ZC5hZFZpZXcub25TY3JlZW5HZW9tZXRyeS5waXhlbHM9YS51O2Zvcih2YXIgZT0wO2U8YS5jLmxlbmd0aDtlKyspYi5wdXNoKEMoYS5jW2VdKSk7Zm9yKGU9MDtlPGEuby5sZW5ndGg7ZSsrKXt2YXIgZz1hLm9bZV0sbD1nLGY9e307bC5iJiYoZi5vYnN0cnVjdGlvbkNsYXNzPWwuYik7bC5jJiYoZi5vYnN0cnVjdGlvblB1cnBvc2U9bC5jKTtsLmYmJihmLm9ic3RydWN0aW9uUmVhc29uPWwuZik7Zz1BYShhLmEsZyk7Yy5wdXNoKE9iamVjdC5hc3NpZ24oe30se3g6Zy54LAp5OmcueSx3aWR0aDpnLmVuZFgtZy54LGhlaWdodDpnLmVuZFktZy55fSxmKSl9ZC5hZFZpZXcub25TY3JlZW5HZW9tZXRyeS5vYnN0cnVjdGlvbnM9YjtkLmFkVmlldy5vblNjcmVlbkdlb21ldHJ5LmZyaWVuZGx5T2JzdHJ1Y3Rpb25zPWM7dm9pZCAwIT09YS5sJiZ2b2lkIDAhPT1hLnYmJihkLmFkVmlldy5jb250YWluZXJHZW9tZXRyeT1DKGEubCksZC5hZFZpZXcub25TY3JlZW5Db250YWluZXJHZW9tZXRyeT1DKGEudiksZC5hZFZpZXcubWVhc3VyaW5nRWxlbWVudD0hMCl9cmV0dXJuIGR9ZnVuY3Rpb24gRWEoYSxiKXtiPXZhKGIpO2Euaj17fTthLmoud2lkdGg9Yi53aWR0aDthLmouaGVpZ2h0PWIuaGVpZ2h0O2EuZz17fTthLmcueD0wO2EuZy55PTA7YS5nLndpZHRoPWIud2lkdGg7YS5nLmhlaWdodD1iLmhlaWdodDthLmcuZW5kWD1iLndpZHRoO2EuZy5lbmRZPWIuaGVpZ2h0fQpmdW5jdGlvbiBGYSgpe3JldHVybnt4OjAseTowLGVuZFg6MCxlbmRZOjAsd2lkdGg6MCxoZWlnaHQ6MH19ZnVuY3Rpb24gR2EoYSxiKXt2YXIgYz17fTtjLng9TWF0aC5tYXgoYS54LGIueCk7Yy55PU1hdGgubWF4KGEueSxiLnkpO2MuZW5kWD1NYXRoLm1pbihhLmVuZFgsYi5lbmRYKTtjLmVuZFk9TWF0aC5taW4oYS5lbmRZLGIuZW5kWSk7Yy53aWR0aD1NYXRoLm1heCgwLGMuZW5kWC1jLngpO2MuaGVpZ2h0PU1hdGgubWF4KDAsYy5lbmRZLWMueSk7cmV0dXJuIGN9ZnVuY3Rpb24gSGEoYSxiKXtyZXR1cm4gYS53aWR0aDxiLndpZHRofHxhLmhlaWdodDxiLmhlaWdodH0KZnVuY3Rpb24gSWEoYSl7aWYoLTEhPT1hLmYuaW5kZXhPZignYmFja2dyb3VuZGVkJykpYS5tPTAsYS51PTA7ZWxzZXt2YXIgYj15YShhLmEpO2lmKDAhPT1iKXt2YXIgYz15YShhLmIpO3ZhciBkPWEuYyxlPTA7aWYoMDxkLmxlbmd0aCl7dmFyIGc9emEoYS5iLGQpLGw9Zy5iYTtnPWcuY2E7Zm9yKHZhciBmPTA7ZjxsLmxlbmd0aC0xO2YrKylmb3IodmFyIGg9KGxbZl0rKGxbZl0rMSkpLzIsaz1sW2YrMV0tbFtmXSxtPTA7bTxnLmxlbmd0aC0xO20rKyl7Zm9yKHZhciB2PShnW21dKyhnW21dKzEpKS8yLEI9Z1ttKzFdLWdbbV0seD0hMSxGPTA7RjxkLmxlbmd0aDtGKyspe3ZhciBLPUMoZFtGXSk7aWYoSy54PGgmJksueCtLLndpZHRoPmgmJksueTx2JiZLLnkrSy5oZWlnaHQ+dil7eD0hMDticmVha319eCYmKGUrPU1hdGgucm91bmQoaykqTWF0aC5yb3VuZChCKSl9fWMtPWU7Yj1NYXRoLnJvdW5kKGMvYioxMDApO2EubT1NYXRoLm1heChiLDApO2EudT1NYXRoLm1heChjLDApfX19CmZ1bmN0aW9uIEphKGEsYil7aWYoMCE9PWIud2lkdGgmJjAhPT1iLmhlaWdodCYmYS5iKXthPXdhKGEuYik7dmFyIGM9YS55LGQ9YS5lbmRYLGU9YS5lbmRZO2I9IShiLmVuZFg8PWEueHx8Yi54Pj1kfHxiLmVuZFk8PWN8fGIueT49ZSl9ZWxzZSBiPSExO3JldHVybiBifWZ1bmN0aW9uIEQoYSxiKXtmb3IodmFyIGM9ITEsZD0wO2Q8YS5mLmxlbmd0aDtkKyspYS5mW2RdPT09YiYmKGM9ITApO2N8fGEuZi5wdXNoKGIpfTtmdW5jdGlvbiBLYShhLGIsYyxkLGUpe3ZhciBnPW5ldyBDYTtiPW5ldyBBKGIsITEpO0VhKGcsYik7TGEoYSxiLGcsZCk7aWYoIWUpcmV0dXJuIGcuZj1bJ3VubWVhc3VyYWJsZSddLGcuaj12b2lkIDAsZy5tPTAsZy5jPVtdLGcuYSYmKGE9Zy5hLGM9e30sYT1uZXcgQSgoYy54PTAsYy55PTAsYy53aWR0aD1hLndpZHRoLGMuaGVpZ2h0PWEuaGVpZ2h0LGMpLGEuYSksZy5hPWEpLGcuYj1GYSgpLGc7aWYoJ2JhY2tncm91bmRlZCc9PT1jKUQoZywnYmFja2dyb3VuZGVkJyk7ZWxzZSBpZih2b2lkIDAhPT1nLmEpe2ZvcihhPTA7YTxnLmgubGVuZ3RoO2ErKylKYShnLGcuaFthXSkmJmcuby5wdXNoKGcuaFthXSk7Zm9yKGE9MDthPGcuaS5sZW5ndGg7YSsrKXtpZihjPUphKGcsZy5pW2FdKSl7YTp7Yz1nLmlbYV07Zm9yKGQ9MDtkPGcuYy5sZW5ndGg7ZCsrKWlmKGcuY1tkXS5KKGMpKXtjPSEwO2JyZWFrIGF9Yz0hMX1jPSFjfWMmJihEKGcsJ29ic3RydWN0ZWQnKSxnLmMucHVzaChnLmlbYV0pKX1JYShnKX1lbHNlIEQoZywKJ25vdEZvdW5kJyk7cmV0dXJuIGd9CmZ1bmN0aW9uIExhKGEsYixjLGQpe3ZhciBlPWIuaXNDcmVhdGl2ZT8hMDpiLmFkU2Vzc2lvbklkPT09ZDtpZihlKXtjLmE9Yjt2YXIgZz13YShjLmEpO2E9R2EoYy5nLGcpO3ZhciBsPWMuYTsnbm90QXR0YWNoZWQnPT09bC5ub3RWaXNpYmxlUmVhc29ufHwnbm9XaW5kb3dGb2N1cyc9PT1sLm5vdFZpc2libGVSZWFzb258fCdub0FkVmlldyc9PT1sLm5vdFZpc2libGVSZWFzb24/KEQoYywnbm90Rm91bmQnKSxjLmI9bmV3IEEoRmEoKSwhMSkpOihsPWMuYSwndmlld0ludmlzaWJsZSc9PT1sLm5vdFZpc2libGVSZWFzb258fCd2aWV3R29uZSc9PT1sLm5vdFZpc2libGVSZWFzb258fCd2aWV3Tm90VmlzaWJsZSc9PT1sLm5vdFZpc2libGVSZWFzb258fCd2aWV3QWxwaGFaZXJvJz09PWwubm90VmlzaWJsZVJlYXNvbnx8J3ZpZXdIaWRkZW4nPT09bC5ub3RWaXNpYmxlUmVhc29ufHx2b2lkIDAhPT1jLmEubm90VmlzaWJsZVJlYXNvbj8oRChjLCdoaWRkZW4nKSxjLmI9bmV3IEEoRmEoKSwKITEpKTooSGEoYSxnKSYmRChjLCdjbGlwcGVkJyksYy5iPW5ldyBBKGEsITEpKSl9ZWxzZSBpZihnPSEwLGIuYSYmKGc9LTEhPT1iLmlzRnJpZW5kbHlPYnN0cnVjdGlvbkZvci5pbmRleE9mKGQpPyExOiExPT09Yi5jbGlwc1RvQm91bmRzKSxnKXtsPWIuY2hpbGRWaWV3cztmb3IodmFyIGY9MDtmPGwubGVuZ3RoO2YrKylnPXZvaWQgMCE9PWMuYSxMYShhLG5ldyBBKGxbZl0sZyksYyxkKX1lfHx2b2lkIDA9PT1jLmF8fChiLmE/LTEhPT1iLmlzRnJpZW5kbHlPYnN0cnVjdGlvbkZvci5pbmRleE9mKGQpP2MuaC5wdXNoKGIpOmMuaS5wdXNoKGIpOihlPXdhKGIpLGQ9d2EoYy5iKSxDKGMuYiksYT1jLmIsMCE9PWEud2lkdGgmJjAhPT1hLmhlaWdodCYmYi5jbGlwc1RvQm91bmRzJiYoYj1HYShkLGUpLEhhKGIsZCkmJihEKGMsJ2NsaXBwZWQnKSxjLmI9bmV3IEEoYiwhMSkpKSkpfTtmdW5jdGlvbiBNYShhLGIpe3RoaXMueT10aGlzLng9MDt0aGlzLndpZHRoPWE7dGhpcy5oZWlnaHQ9Yn07ZnVuY3Rpb24gTmEoKXtyZXR1cm57YXBpVmVyc2lvbjonMS4wJyxhY2Nlc3NNb2RlOidsaW1pdGVkJyxlbnZpcm9ubWVudDonYXBwJyxvbWlkSnNJbmZvOntvbWlkSW1wbGVtZW50ZXI6J29tc2RrJyxzZXJ2aWNlVmVyc2lvbjonMS4zLjE4LWlhYjI3MzAnfX19ZnVuY3Rpb24gT2EoKXt0aGlzLmFkU2Vzc2lvbklkPW51bGw7dGhpcy5jPU5hKCk7dGhpcy5vPW51bGw7dGhpcy5tPSdmb3JlZ3JvdW5kZWQnO3RoaXMubD10aGlzLmk9J25vbmUnO3RoaXMuaj10aGlzLmc9dGhpcy5mPXRoaXMuaD10aGlzLmE9dGhpcy5iPXRoaXMuQj10aGlzLnU9bnVsbDt0aGlzLkM9ITA7dGhpcy52PW5ldyBNYXB9dmFyIEc7ZnVuY3Rpb24gSCgpe0d8fChHPW5ldyBPYSk7cmV0dXJuIEd9O3ZhciBQYT1ldmFsKCd0aGlzJyksST1mdW5jdGlvbigpe2lmKCd1bmRlZmluZWQnIT09dHlwZW9mIG9taWRHbG9iYWwmJm9taWRHbG9iYWwpcmV0dXJuIG9taWRHbG9iYWw7aWYoJ3VuZGVmaW5lZCchPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwpcmV0dXJuIGdsb2JhbDtpZigndW5kZWZpbmVkJyE9PXR5cGVvZiB3aW5kb3cmJndpbmRvdylyZXR1cm4gd2luZG93O2lmKCd1bmRlZmluZWQnIT09dHlwZW9mIFBhJiZQYSlyZXR1cm4gUGE7dGhyb3cgRXJyb3IoJ0NvdWxkIG5vdCBkZXRlcm1pbmUgZ2xvYmFsIG9iamVjdCBjb250ZXh0LicpO30oKTtmdW5jdGlvbiBRYShhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifXQuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUWEucHJvdG90eXBlLHtldmVudDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX19LG9yaWdpbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn19fSk7ZnVuY3Rpb24gSihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107UmEoZnVuY3Rpb24oKXt0aHJvdyBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KEVycm9yLFtudWxsLCdDb3VsZCBub3QgY29tcGxldGUgdGhlIHRlc3Qgc3VjY2Vzc2Z1bGx5IC0gJ10uY29uY2F0KHEoYikpKSk7fSxmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yLmFwcGx5KGNvbnNvbGUscShiKSl9KX1mdW5jdGlvbiBTYShhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107UmEoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSxxKGIpKX0pfQpmdW5jdGlvbiBSYShhLGIpeyd1bmRlZmluZWQnIT09dHlwZW9mIGphc21pbmUmJmphc21pbmU/YSgpOid1bmRlZmluZWQnIT09dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUmJmNvbnNvbGUuZXJyb3ImJmIoKX07ZnVuY3Rpb24gVGEoKXt0aGlzLmY9W107dGhpcy5iPVtdO3RoaXMuYz1bXTt0aGlzLmc9W107dGhpcy5pPXt9O3RoaXMuYT1IKCl9ZnVuY3Rpb24gVWEoYSl7YS5mPVtdO2EuYj1bXTthLmM9W107YS5nPVtdO2EuaT17fTtHLmFkU2Vzc2lvbklkPW51bGw7Ry5jPU5hKCk7Ry5vPW51bGw7Ry5HPXZvaWQgMDtHLks9dm9pZCAwO0cuSD1udWxsO0cuST1udWxsO0cuRD1udWxsO0cubT0nZm9yZWdyb3VuZGVkJztHLmk9J25vbmUnO0cubD0nbm9uZSc7Ry51PW51bGw7Ry5CPW51bGw7Ry5iPW51bGw7Ry5hPW51bGw7Ry5oPW51bGw7Ry5mPW51bGw7Ry5nPW51bGw7Ry5qPW51bGw7Ry5DPSEwO0cudj1uZXcgTWFwfQpmdW5jdGlvbiBWYShhLGIpe3ZvaWQgMCE9PWEuYSYmYS5hLmFkU2Vzc2lvbklkJiYhMSE9PVdhKGEsYikmJmEuYy5maWx0ZXIoZnVuY3Rpb24oYyl7cmV0dXJuIGMudHlwZT09PWIuZXZlbnQudHlwZX0pLmZvckVhY2goZnVuY3Rpb24oYyl7cmV0dXJuIGEuaChjLkYsYi5ldmVudCl9KX1mdW5jdGlvbiBYYShhLGIpe2EuZi5wdXNoKGIpO1ZhKGEsYil9ZnVuY3Rpb24gWWEoYSxiLGMpe3ZvaWQgMCE9PWEuYSYmYS5hLmFkU2Vzc2lvbklkJiZhLmYuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiBkLmV2ZW50LnR5cGU9PT1iJiZXYShhLGQpfSkubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBkLmV2ZW50fSkuZm9yRWFjaChjKX0KZnVuY3Rpb24gV2EoYSxiKXt2YXIgYz1iLmV2ZW50LnR5cGUsZD0tMSE9PU9iamVjdC52YWx1ZXMoeikuaW5kZXhPZihjKSYmJ3ZvbHVtZUNoYW5nZSchPT1jO3JldHVybidpbXByZXNzaW9uJz09PWN8fCdsb2FkZWQnPT09YyYmYS5hLmE/Yi5vcmlnaW49PT1IKCkubDpkP2Iub3JpZ2luPT09SCgpLmk6ITB9ZnVuY3Rpb24gWmEoYSxiLGMpeydtZWRpYSc9PT1ifHwndmlkZW8nPT09Yj8kYShhLGMpOihhLmMucHVzaCh7dHlwZTpiLEY6Y30pLFlhKGEsYixjKSl9ZnVuY3Rpb24gJGEoYSxiKXtPYmplY3Qua2V5cyh6KS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2M9eltjXTthLmMucHVzaCh7dHlwZTpjLEY6Yn0pO1lhKGEsYyxiKX0pfWZ1bmN0aW9uIGFiKGEsYixjLGQpe3ZhciBlPXtPOmMsTDpkLEY6Yn07YS5nLnB1c2goZSk7YS5iLmZvckVhY2goZnVuY3Rpb24oZyl7dmFyIGw9YmIoZyk7J3Nlc3Npb25TdGFydCc9PT1nLmV2ZW50LnR5cGUmJmNiKGEsbCxlKTthLmgoYixsKX0pfQpmdW5jdGlvbiBkYihhLGIsYyl7dmFyIGQ9TChhLCdzZXNzaW9uRXJyb3InLCduYXRpdmUnLHtlcnJvclR5cGU6YixtZXNzYWdlOmN9KTthLmIucHVzaChkKTthLmcuZm9yRWFjaChmdW5jdGlvbihlKXthLmgoZS5GLGQuZXZlbnQpfSl9ZnVuY3Rpb24gZWIoYSxiKXthLmk9T2JqZWN0LmFzc2lnbihhLmksYik7Yj1hLmEuYztpZih2b2lkIDAhPT1iKXtiPU9iamVjdC5hc3NpZ24oe30sZmIoYSxnYihhLHtjb250ZXh0OmJ9KSwhMCkse3N1cHBvcnRzTG9hZGVkRXZlbnQ6ISFhLmEuYXx8J3ZpZGVvJz09YS5hLmJ9KTtPYmplY3QuYXNzaWduKGIse3BhZ2VVcmw6bnVsbCxjb250ZW50VXJsOmEuYS5vfSk7dmFyIGM9TChhLCdzZXNzaW9uU3RhcnQnLCduYXRpdmUnLGIpO2EuYi5wdXNoKGMpO2EuZy5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWQuRixnPWJiKGMpO2NiKGEsZyxkKTthLmgoZSxnKX0sYSk7aGIoYSl9fQpmdW5jdGlvbiBjYihhLGIsYyl7Yy5PJiYoYi5kYXRhLnZlcmlmaWNhdGlvblBhcmFtZXRlcnM9YS5pW2MuT10pO2MuTCYmKGM9YS5hLnYuZ2V0KGMuTCkpJiYoYi5kYXRhLnZlcmlmaWNhdGlvblBhcmFtZXRlcnM9Yy52ZXJpZmljYXRpb25QYXJhbWV0ZXJzLGIuZGF0YS5jb250ZXh0LmFjY2Vzc01vZGU9Yy5hY2Nlc3NNb2RlLCdmdWxsJz09PWMuYWNjZXNzTW9kZSYmKGEuYS5nJiYoYi5kYXRhLmNvbnRleHQudmlkZW9FbGVtZW50PWEuYS5nKSxhLmEuZiYmKGIuZGF0YS5jb250ZXh0LnNsb3RFbGVtZW50PWEuYS5mKSkpfWZ1bmN0aW9uIGliKGEpe3ZhciBiPWEuZyxjPUwoYSwnc2Vzc2lvbkZpbmlzaCcsJ25hdGl2ZScpO2EuYi5wdXNoKGMpO3ZhciBkPWEuYS5jO2QmJiduYXRpdmUnPT1kLmFkU2Vzc2lvblR5cGV8fFVhKGEpO2IuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gYS5oKGUuRixjLmV2ZW50KX0pfQpUYS5wcm90b3R5cGUuaD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXSxkPTE7ZDxhcmd1bWVudHMubGVuZ3RoOysrZCljW2QtMV09YXJndW1lbnRzW2RdO3RyeXthLmFwcGx5KG51bGwscShjKSl9Y2F0Y2goZSl7U2EoZSl9fTtmdW5jdGlvbiBqYihhLGIpe3ZhciBjPShjPUgoKS5EKT9EYShjKTp2b2lkIDA7Yz1mYihhLGdiKGEsYykpO1hhKGEsTChhLCdpbXByZXNzaW9uJyxiLGMpKX1mdW5jdGlvbiBrYihhLGIsYyl7aWYoYS5hLmF8fCdkaXNwbGF5JyE9YS5hLmIpYj1MKGEsJ2xvYWRlZCcsYixmYihhLGdiKGEsdm9pZCAwPT09Yz9udWxsOmMpKSksWGEoYSxiKX0KZnVuY3Rpb24gbGIoYSxiLGMsZCl7J3N0YXJ0JyE9PWImJid2b2x1bWVDaGFuZ2UnIT09Ynx8bnVsbCE9KGQmJmQuZGV2aWNlVm9sdW1lKXx8KGQuZGV2aWNlVm9sdW1lPWEuYS51KTtpZihkJiYoJ3N0YXJ0Jz09PWJ8fCd2b2x1bWVDaGFuZ2UnPT09Yikpe3ZhciBlPWQudmlkZW9QbGF5ZXJWb2x1bWUsZz1kLm1lZGlhUGxheWVyVm9sdW1lO251bGwhPWU/KE9iamVjdC5hc3NpZ24oZCx7bWVkaWFQbGF5ZXJWb2x1bWU6ZX0pLGEuYS5CPWUpOm51bGwhPWcmJihPYmplY3QuYXNzaWduKGQse3ZpZGVvUGxheWVyVm9sdW1lOmd9KSxhLmEuQj1nKX1YYShhLEwoYSxiLGMsZCkpfQpmdW5jdGlvbiBoYihhKXt2YXIgYj1hLmEuaSxjPWEuZi5maWx0ZXIoZnVuY3Rpb24obCl7cmV0dXJuIE9iamVjdC52YWx1ZXMoeikuaW5jbHVkZXMobC5ldmVudC50eXBlKSYmbC5vcmlnaW49PT1ifSkubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBsLmV2ZW50fSksZD1hLmEuYWRTZXNzaW9uSWR8fCcnLGU9e307Yz1wKGMpO2Zvcih2YXIgZz1jLm5leHQoKTshZy5kb25lO2U9e3c6ZS53fSxnPWMubmV4dCgpKXtlLnc9Zy52YWx1ZTtlLncuYWRTZXNzaW9uSWR8fChlLncuYWRTZXNzaW9uSWQ9ZCk7aWYoJ2xvYWRlZCc9PWUudy50eXBlKXtpZighYS5hLmEmJidkaXNwbGF5Jz09YS5hLmIpY29udGludWU7ZS53LmRhdGE9ZmIoYSxnYihhLGUudy5kYXRhKSl9YS5jLmZpbHRlcihmdW5jdGlvbihsKXtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGYudHlwZT09PWwudy50eXBlfX0oZSkpLmZvckVhY2goZnVuY3Rpb24obCl7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBmLkYobC53KX19KGUpKX19CmZ1bmN0aW9uIG1iKGEsYixjKXthOntjPW5ldyBTZXQoYyk7YT1wKGEuZi5jb25jYXQoYS5iKSk7Zm9yKHZhciBkPWEubmV4dCgpOyFkLmRvbmU7ZD1hLm5leHQoKSlpZihkPWQudmFsdWUsYy5oYXMoZC5ldmVudC50eXBlKSYmZC5vcmlnaW4hPWIpe2I9ITA7YnJlYWsgYX1iPSExfXJldHVybiBiPyhKKCdFdmVudCBvd25lciBjYW5ub3QgYmUgcmVnaXN0ZXJlZCBhZnRlciBpdHMgZXZlbnRzIGhhdmUgYWxyZWFkeSBiZWVuIHB1Ymxpc2hlZC4nKSwhMSk6ITB9ZnVuY3Rpb24gbmIoYSxiKXttYihhLGIsT2JqZWN0LnZhbHVlcyh6KSkmJk0oYSxiKSYmKGEuYS5pPWIpfWZ1bmN0aW9uIG9iKGEsYil7bWIoYSxiLFsnaW1wcmVzc2lvbiddKSYmcGIoYSxiKSYmKGEuYS5sPWIpfWZ1bmN0aW9uIHBiKGEsYil7dmFyIGM9YS5hLmw7cmV0dXJuJ25vbmUnIT1jJiZjIT1iPyhKKCdJbXByZXNzaW9uIGV2ZW50IGlzIG93bmVkIGJ5ICcrKGEuYS5sKycsIG5vdCAnKSsoYisnLicpKSwhMSk6ITB9CmZ1bmN0aW9uIE0oYSxiKXt2YXIgYz1hLmEuaTtyZXR1cm4nbm9uZSchPWMmJmMhPWI/KEooJ01lZGlhIGV2ZW50cyBhcmUgb3duZWQgYnkgJysoYS5hLmkrJywgbm90ICcrYisnLicpKSwhMSk6ITB9ZnVuY3Rpb24gZmIoYSxiLGMpe2M9dm9pZCAwPT09Yz8hMTpjO2I9T2JqZWN0LmFzc2lnbih7fSxiKTthLmEuYiYmT2JqZWN0LmFzc2lnbihiLHttZWRpYVR5cGU6YS5hLmJ9KTthLmEuYSYmKGN8fCdkZWZpbmVkQnlKYXZhU2NyaXB0JyE9PWEuYS5hKSYmT2JqZWN0LmFzc2lnbihiLHtjcmVhdGl2ZVR5cGU6YS5hLmF9KTtyZXR1cm4gYn1mdW5jdGlvbiBnYihhLGIpe3JldHVybiBhLmEuaD9PYmplY3QuYXNzaWduKHt9LGIse2ltcHJlc3Npb25UeXBlOmEuYS5ofSk6Yn1mdW5jdGlvbiBMKGEsYixjLGQpe3JldHVybiBuZXcgUWEoe2FkU2Vzc2lvbklkOmEuYS5hZFNlc3Npb25JZHx8JycsdGltZXN0YW1wOihuZXcgRGF0ZSkuZ2V0VGltZSgpLHR5cGU6YixkYXRhOmR9LGMpfQpmdW5jdGlvbiBiYihhKXthPWEuZXZlbnQ7cmV0dXJue2FkU2Vzc2lvbklkOmEuYWRTZXNzaW9uSWQsdGltZXN0YW1wOmEudGltZXN0YW1wLHR5cGU6YS50eXBlLGRhdGE6YS5kYXRhfX07ZnVuY3Rpb24gcWIoYSxiLGMpeydjb250YWluZXInPT09YiYmdm9pZCAwIT09YS5hLkcmJnZvaWQgMCE9PWEuYSYmbnVsbCE9YS5hLmFkU2Vzc2lvbklkJiYoYS5hLkg9S2EoYS5jLGEuYS5HLGEuYS5tLGEuYS5hZFNlc3Npb25JZCwhMCkpO2I9YS5hO3ZhciBkPWIuSCxlPWIuSTtpZihkKWlmKGUpe2I9bmV3IENhO3ZhciBnPWQuaixsPWQuYSxmPWQuYixoPWUuYTtlPWUuYjtnJiZsJiZmJiZoJiZlJiYoRWEoYixnKSxiLmw9bmV3IEEobCwhMSksYi52PW5ldyBBKGYsITEpLGIuaT1PYmplY3QuYXNzaWduKFtdLGQuaSksYi5jPU9iamVjdC5hc3NpZ24oW10sZC5jKSxiLmg9T2JqZWN0LmFzc2lnbihbXSxkLmgpLGIubz1PYmplY3QuYXNzaWduKFtdLGQubyksYi5mPU9iamVjdC5hc3NpZ24oW10sZC5mKSxkPWIubC54LGc9Yi5sLnksaD1uZXcgQShoLCExKSxlPW5ldyBBKGUsITEpLHhhKGgsZCxnKSx4YShlLGQsZyksYi5hPWgsYi5iPUdhKGUsZiksSWEoYikpfWVsc2UgYj1kO2Vsc2UgYj0KbnVsbDtmPWEuYS5EO2lmKGImJiFiLkooZil8fGMpZj1EYShiKSxjJiYoZi5hZFZpZXcucmVhc29ucz1mLmFkVmlldy5yZWFzb25zfHxbY10pLGM9YS5iLCdhdWRpbychPWMuYS5hJiZYYShjLEwoYywnZ2VvbWV0cnlDaGFuZ2UnLCduYXRpdmUnLGYpKSxhLmEuRD1ifTtmdW5jdGlvbiBOKGEpe3JldHVybidvYmplY3QnPT09dHlwZW9mIGF9ZnVuY3Rpb24gcmIoYSl7cmV0dXJuJ251bWJlcic9PT10eXBlb2YgYSYmIWlzTmFOKGEpJiYwPD1hfWZ1bmN0aW9uIE8oYSl7cmV0dXJuJ3N0cmluZyc9PT10eXBlb2YgYX1mdW5jdGlvbiBQKGEsYil7cmV0dXJuIE8oYSkmJi0xIT09T2JqZWN0LnZhbHVlcyhiKS5pbmRleE9mKGEpfWZ1bmN0aW9uIHNiKGEpe3ZhciBiPWEmJmEudGFnTmFtZSYmJ2lmcmFtZSc9PT1hLnRhZ05hbWUudG9Mb3dlckNhc2UoKTt0cnl7Yj1iJiZhIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnR9Y2F0Y2goYyl7fXJldHVybiBifWZ1bmN0aW9uIHRiKGEpe3ZhciBiPWEmJmEudGFnTmFtZTt0cnl7Yj1iJiZhIGluc3RhbmNlb2YgYS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkhUTUxFbGVtZW50fWNhdGNoKGMpe31yZXR1cm4gYn0KZnVuY3Rpb24gdWIoYSl7dmFyIGI9YSYmYS50YWdOYW1lJiYndmlkZW8nPT09YS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7dHJ5e2I9YiYmYSBpbnN0YW5jZW9mIGEub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5IVE1MVmlkZW9FbGVtZW50fWNhdGNoKGMpe31yZXR1cm4gYn07ZnVuY3Rpb24gUShhLGIsYyl7dGhpcy5mPWE7dGhpcy5LPWI7dGhpcy5HPWM7dGhpcy5jPUgoKTt0aGlzLmI9bnVsbDt0aGlzLmE9dGhpcy5nPXRoaXMudT12b2lkIDA7dGhpcy5JPSEwO3RoaXMuQj12b2lkIDA7Uih0aGlzKX1mdW5jdGlvbiBSKGEpe2lmKCFhLmIpe3ZhciBiO2E6e2lmKChiPWEuZi5kb2N1bWVudCkmJmIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmKGI9Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdvbWlkLWVsZW1lbnQnKSkpe2lmKDE9PWIubGVuZ3RoKXtiPWJbMF07YnJlYWsgYX0xPGIubGVuZ3RoJiZhLkkmJihkYihhLkcsJ2dlbmVyaWMnLCJNb3JlIHRoYW4gb25lIGVsZW1lbnQgd2l0aCAnb21pZC1lbGVtZW50JyBjbGFzcyBuYW1lLiIpLGEuST0hMSl9Yj1udWxsfWlmKHViKGIpKWEuYy5nPWI7ZWxzZSBpZih0YihiKSlhLmMuZj1iO2Vsc2UgcmV0dXJuO3ZiKGEpfX0KZnVuY3Rpb24gdmIoYSl7YS5jLmc/KGEuYj1hLmMuZyxhLmkoKSk6YS5jLmYmJihhLmI9YS5jLmYsc2IoYS5iKT9hLmMuaiYmYS5pKCk6YS5pKCkpfWZ1bmN0aW9uIHdiKGEpe2EuYSYmKHNiKGEuYik/YS5jLmomJihhLkQoKSx4YihhKSk6KGEuRCgpLHhiKGEpKSl9US5wcm90b3R5cGUubT1mdW5jdGlvbigpe3RoaXMuQiYmKHRoaXMuZi5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJyx0aGlzLkIpLHRoaXMuQj12b2lkIDApfTtRLnByb3RvdHlwZS5pPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiB4YihhKXthLnUmJihhLmMuST1hLnUscWIoYS5LLCdjcmVhdGl2ZScpKX1mdW5jdGlvbiB5YihhKXtpZihhLmEmJmEuYy5qKXt2YXIgYj1uZXcgQShhLmMuaiwhMSk7eGEoYixhLmEueCxhLmEueSk7Yi5jbGlwc1RvQm91bmRzPSEwO3JldHVybiBifX07ZnVuY3Rpb24gemIoYSxiLGMpe3JldHVybiBBYihhLCdzZXRJbnRlcnZhbCcpKGIsYyl9ZnVuY3Rpb24gQmIoYSxiKXtBYihhLCdjbGVhckludGVydmFsJykoYil9ZnVuY3Rpb24gQ2IoYSxiKXtBYihhLCdjbGVhclRpbWVvdXQnKShiKX1mdW5jdGlvbiBBYihhLGIpe3JldHVybiBhLmEmJmEuYVtiXT9hLmFbYl06RGIoYSxiKX0KZnVuY3Rpb24gRWIoYSxiLGMsZCl7aWYoYS5hLmRvY3VtZW50JiZhLmEuZG9jdW1lbnQuYm9keSl7dmFyIGU9YS5hLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO2Uud2lkdGg9MTtlLmhlaWdodD0xO2Uuc3R5bGUuZGlzcGxheT0nbm9uZSc7ZS5zcmM9YjtjJiZlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLGZ1bmN0aW9uKCl7cmV0dXJuIGMoKX0pO2QmJmUuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLGZ1bmN0aW9uKCl7cmV0dXJuIGQoKX0pO2EuYS5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpfWVsc2UgRGIoYSwnc2VuZFVybCcpKGIsYyxkKX1mdW5jdGlvbiBEYihhLGIpe2lmKGEuYSYmYS5hLm9taWROYXRpdmUmJmEuYS5vbWlkTmF0aXZlW2JdKXJldHVybiBhLmEub21pZE5hdGl2ZVtiXS5iaW5kKGEuYS5vbWlkTmF0aXZlKTt0aHJvdyBFcnJvcignTmF0aXZlIGludGVyZmFjZSBtZXRob2QgIicrYisnIiBub3QgZm91bmQuJyk7fTtmdW5jdGlvbiBTKGEsYixjLGQsZSl7US5jYWxsKHRoaXMsYSxjLGUpO3RoaXMubD1iO3RoaXMuaD12b2lkIDA7dGhpcy5qPWR9cihTLFEpO1MucHJvdG90eXBlLm09ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLmgmJihCYih0aGlzLmosdGhpcy5oKSx0aGlzLmg9dm9pZCAwKTtRLnByb3RvdHlwZS5tLmNhbGwodGhpcyl9O1MucHJvdG90eXBlLmk9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO1EucHJvdG90eXBlLmkuY2FsbCh0aGlzKTtudWxsPT10aGlzLmI/dGhpcy5oPXZvaWQgMDp2b2lkIDA9PT10aGlzLmgmJih0aGlzLmg9emIodGhpcy5qLGZ1bmN0aW9uKCl7cmV0dXJuIEZiKGEpfSwyMDApLEZiKHRoaXMpKX07ClMucHJvdG90eXBlLkQ9ZnVuY3Rpb24oKXtpZih0aGlzLmcpe3ZhciBhPXliKHRoaXMpO2lmKGEpe3RoaXMuYS5pc0NyZWF0aXZlPSExO2EuaXNDcmVhdGl2ZT0hMDtmb3IodmFyIGI9ITEsYz0wO2M8dGhpcy5hLmNoaWxkVmlld3MubGVuZ3RoO2MrKylpZih0aGlzLmEuY2hpbGRWaWV3c1tjXS5pc0NyZWF0aXZlKXt0aGlzLmEuY2hpbGRWaWV3c1tjXT1hO2I9ITA7YnJlYWt9Ynx8dGhpcy5hLmNoaWxkVmlld3MucHVzaChhKX1lbHNlIHRoaXMuYS5pc0NyZWF0aXZlPSEwO3RoaXMudT1LYSh0aGlzLmwsdGhpcy5nLHRoaXMuYy5tLHRoaXMuYy5hZFNlc3Npb25JZCx0aGlzLkMoKSl9fTtTLnByb3RvdHlwZS5DPWZ1bmN0aW9uKCl7cmV0dXJuITB9OwpmdW5jdGlvbiBGYihhKXtpZih2b2lkIDAhPT1hLmgpe2I6e3RyeXt2YXIgYj1hLmYudG9wO3ZhciBjPTA8PWIuaW5uZXJIZWlnaHQmJjA8PWIuaW5uZXJXaWR0aDticmVhayBifWNhdGNoKGQpe31jPSExfWM/KGM9YS5mLnRvcCxjPW5ldyBBKG5ldyBNYShjLmlubmVyV2lkdGgsYy5pbm5lckhlaWdodCksITEpKTpjPW5ldyBBKG5ldyBNYSgwLDApLCExKTtiPWEuYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihudWxsPT1iLnh8fGlzTmFOKGIueCkpYi54PWIubGVmdDtpZihudWxsPT1iLnl8fGlzTmFOKGIueSkpYi55PWIudG9wO2I9bmV3IEEoYiwhMSk7Yy5KKGEuZykmJmIuSihhLmEpfHwoYS5hPWIsYS5hLmNsaXBzVG9Cb3VuZHM9ITAsYS5nPWMsYS5nLmNoaWxkVmlld3MucHVzaChhLmEpLHdiKGEpKX19O2Z1bmN0aW9uIFQoYSxiLGMsZCl7US5jYWxsKHRoaXMsYSxjLGQpO3RoaXMubz10aGlzLmo9dGhpcy5sPXRoaXMuaD12b2lkIDA7dGhpcy5IPSExO3RoaXMudj12b2lkIDB9cihULFEpO1QucHJvdG90eXBlLm09ZnVuY3Rpb24oKXt0aGlzLmgmJnRoaXMuaC5kaXNjb25uZWN0KCk7R2IodGhpcyk7US5wcm90b3R5cGUubS5jYWxsKHRoaXMpfTtULnByb3RvdHlwZS5pPWZ1bmN0aW9uKCl7US5wcm90b3R5cGUuaS5jYWxsKHRoaXMpO3RoaXMuYiYmKHRoaXMuaHx8KHRoaXMuaD1IYih0aGlzKSksSWIodGhpcyksSmIodGhpcy5iKSYmS2IodGhpcykpfTsKVC5wcm90b3R5cGUuRD1mdW5jdGlvbigpe2lmKHRoaXMuYSYmdGhpcy52KXt2YXIgYT15Yih0aGlzKTtpZihhKXt2YXIgYj1hO3ZhciBjPXRoaXMudjt2YXIgZD1NYXRoLm1heChhLngsYy54KTt2YXIgZT1NYXRoLm1heChhLnksYy55KSxnPU1hdGgubWluKGEuZW5kWCxjLmVuZFgpO2E9TWF0aC5taW4oYS5lbmRZLGMuZW5kWSk7Zzw9ZHx8YTw9ZT9kPW51bGw6KGM9e30sZD1uZXcgQSgoYy54PWQsYy55PWUsYy53aWR0aD1NYXRoLmFicyhnLWQpLGMuaGVpZ2h0PU1hdGguYWJzKGEtZSksYyksITEpKTtkfHwoZD1uZXcgQSh7eDowLHk6MCx3aWR0aDowLGhlaWdodDowfSwhMSkpfWVsc2UgYj10aGlzLmEsZD10aGlzLnY7ZT1uZXcgQ2E7dGhpcy5nJiZFYShlLHRoaXMuZyk7ZS5hPWI7ZS5iPWQ7SWEoZSk7dGhpcy5IPzEwMD09PWUubXx8RChlLCdjbGlwcGVkJyk6RChlLCd2aWV3cG9ydCcpO3RoaXMudT1lfX07VC5wcm90b3R5cGUuQz1mdW5jdGlvbigpe3JldHVybiEwfTsKZnVuY3Rpb24gR2IoYSl7YS5sJiYoYS5sLmRpc2Nvbm5lY3QoKSxhLmw9dm9pZCAwKTthLmomJihhLmouZGlzY29ubmVjdCgpLGEuaj12b2lkIDApO2EubyYmKCgwLGEuZi5yZW1vdmVFdmVudExpc3RlbmVyKSgncmVzaXplJyxhLm8pLGEubz12b2lkIDApfWZ1bmN0aW9uIEliKGEpe2EuaCYmYS5iJiYoYS5oLnVub2JzZXJ2ZShhLmIpLGEuaC5vYnNlcnZlKGEuYikpfWZ1bmN0aW9uIEpiKGEpe2E9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gMD09YS53aWR0aHx8MD09YS5oZWlnaHR9CmZ1bmN0aW9uIEhiKGEpe3JldHVybiBuZXcgYS5mLkludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGIpe3RyeXtpZihiLmxlbmd0aCl7Zm9yKHZhciBjLGQ9YlswXSxlPTE7ZTxiLmxlbmd0aDtlKyspYltlXS50aW1lPmQudGltZSYmKGQ9YltlXSk7Yz1kO2EuZz1MYihjLnJvb3RCb3VuZHMpO2EuYT1MYihjLmJvdW5kaW5nQ2xpZW50UmVjdCk7YS52PUxiKGMuaW50ZXJzZWN0aW9uUmVjdCk7YS5IPSEhYy5pc0ludGVyc2VjdGluZzt3YihhKX19Y2F0Y2goZyl7YS5tKCksZGIoYS5HLCdnZW5lcmljJywnUHJvYmxlbSBoYW5kbGluZyBJbnRlcnNlY3Rpb25PYnNlcnZlciBjYWxsYmFjazogJytnLm1lc3NhZ2UpfX0se3Jvb3Q6bnVsbCxyb290TWFyZ2luOicwcHgnLHRocmVzaG9sZDpbMCwuMSwuMiwuMywuNCwuNSwuNiwuNywuOCwuOSwxXX0pfQpmdW5jdGlvbiBLYihhKXthLmYuUmVzaXplT2JzZXJ2ZXI/YS5sfHwoYS5sPU1iKGEsZnVuY3Rpb24oKXtyZXR1cm4gT2IoYSl9KSxhLmwub2JzZXJ2ZShhLmIpKTooYS5vfHwoYS5vPWZ1bmN0aW9uKCl7cmV0dXJuIE9iKGEpfSwoMCxhLmYuYWRkRXZlbnRMaXN0ZW5lcikoJ3Jlc2l6ZScsYS5vKSksYS5qfHwoYS5qPW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCl7cmV0dXJuIE9iKGEpfSksYS5qLm9ic2VydmUoYS5iLHtjaGlsZExpc3Q6ITEsYXR0cmlidXRlczohMCxzdWJ0cmVlOiExfSkpKX1mdW5jdGlvbiBPYihhKXthLmImJiFKYihhLmIpJiYoSWIoYSksR2IoYSkpfWZ1bmN0aW9uIE1iKGEsYil7cmV0dXJuIG5ldyBhLmYuUmVzaXplT2JzZXJ2ZXIoYil9ZnVuY3Rpb24gTGIoYSl7aWYoYSYmbnVsbCE9PWEueCYmbnVsbCE9PWEueSYmbnVsbCE9PWEud2lkdGgmJm51bGwhPT1hLmhlaWdodClyZXR1cm4gbmV3IEEoYSwhMSl9O2Z1bmN0aW9uIFBiKGEpe3JldHVybiBhJiZOKGEpP09iamVjdC5lbnRyaWVzKGEpLnJlZHVjZShmdW5jdGlvbihiLGMpe3ZhciBkPXAoYyk7Yz1kLm5leHQoKS52YWx1ZTtkPWQubmV4dCgpLnZhbHVlO3JldHVybiBiJiZPKGMpJiZudWxsIT1kJiZOKGQpJiZPKGQucmVzb3VyY2VVcmwpfSwhMCk6ITF9O2Z1bmN0aW9uIFUoYSxiLGMsZCl7dGhpcy5iPWE7dGhpcy5tZXRob2Q9Yjt0aGlzLnZlcnNpb249Yzt0aGlzLmE9ZH1mdW5jdGlvbiBRYihhKXtyZXR1cm4hIWEmJnZvaWQgMCE9PWEub21pZF9tZXNzYWdlX2d1aWQmJnZvaWQgMCE9PWEub21pZF9tZXNzYWdlX21ldGhvZCYmdm9pZCAwIT09YS5vbWlkX21lc3NhZ2VfdmVyc2lvbiYmJ3N0cmluZyc9PT10eXBlb2YgYS5vbWlkX21lc3NhZ2VfZ3VpZCYmJ3N0cmluZyc9PT10eXBlb2YgYS5vbWlkX21lc3NhZ2VfbWV0aG9kJiYnc3RyaW5nJz09PXR5cGVvZiBhLm9taWRfbWVzc2FnZV92ZXJzaW9uJiYodm9pZCAwPT09YS5vbWlkX21lc3NhZ2VfYXJnc3x8dm9pZCAwIT09YS5vbWlkX21lc3NhZ2VfYXJncyl9ZnVuY3Rpb24gUmIoYSl7cmV0dXJuIG5ldyBVKGEub21pZF9tZXNzYWdlX2d1aWQsYS5vbWlkX21lc3NhZ2VfbWV0aG9kLGEub21pZF9tZXNzYWdlX3ZlcnNpb24sYS5vbWlkX21lc3NhZ2VfYXJncyl9CmZ1bmN0aW9uIFNiKGEpe3ZhciBiPXt9O2I9KGIub21pZF9tZXNzYWdlX2d1aWQ9YS5iLGIub21pZF9tZXNzYWdlX21ldGhvZD1hLm1ldGhvZCxiLm9taWRfbWVzc2FnZV92ZXJzaW9uPWEudmVyc2lvbixiKTt2b2lkIDAhPT1hLmEmJihiLm9taWRfbWVzc2FnZV9hcmdzPWEuYSk7cmV0dXJuIGJ9O2Z1bmN0aW9uIFRiKGEpe3RoaXMuYz1hfTtmdW5jdGlvbiBWKGEpe3RoaXMuYz1hO3RoaXMuaGFuZGxlRXhwb3J0ZWRNZXNzYWdlPVYucHJvdG90eXBlLmYuYmluZCh0aGlzKX1yKFYsVGIpO1YucHJvdG90eXBlLmI9ZnVuY3Rpb24oYSxiKXtiPXZvaWQgMD09PWI/dGhpcy5jOmI7aWYoIWIpdGhyb3cgRXJyb3IoJ01lc3NhZ2UgZGVzdGluYXRpb24gbXVzdCBiZSBkZWZpbmVkIGF0IGNvbnN0cnVjdGlvbiB0aW1lIG9yIHdoZW4gc2VuZGluZyB0aGUgbWVzc2FnZS4nKTtiLmhhbmRsZUV4cG9ydGVkTWVzc2FnZShTYihhKSx0aGlzKX07Vi5wcm90b3R5cGUuZj1mdW5jdGlvbihhLGIpe1FiKGEpJiZ0aGlzLmEmJnRoaXMuYShSYihhKSxiKX07ZnVuY3Rpb24gVWIoYSxiKXt0aGlzLmM9Yj12b2lkIDA9PT1iP0k6Yjt2YXIgYz10aGlzO2EuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsZnVuY3Rpb24oZCl7aWYoJ29iamVjdCc9PT10eXBlb2YgZC5kYXRhKXt2YXIgZT1kLmRhdGE7UWIoZSkmJmQuc291cmNlJiZjLmEmJmMuYShSYihlKSxkLnNvdXJjZSl9fSl9cihVYixUYik7VWIucHJvdG90eXBlLmI9ZnVuY3Rpb24oYSxiKXtiPXZvaWQgMD09PWI/dGhpcy5jOmI7aWYoIWIpdGhyb3cgRXJyb3IoJ01lc3NhZ2UgZGVzdGluYXRpb24gbXVzdCBiZSBkZWZpbmVkIGF0IGNvbnN0cnVjdGlvbiB0aW1lIG9yIHdoZW4gc2VuZGluZyB0aGUgbWVzc2FnZS4nKTtiLnBvc3RNZXNzYWdlKFNiKGEpLCcqJyl9O2Z1bmN0aW9uIFZiKCl7cmV0dXJuJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLGZ1bmN0aW9uKGEpe3ZhciBiPTE2Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4neSc9PT1hPyhiJjN8OCkudG9TdHJpbmcoMTYpOmIudG9TdHJpbmcoMTYpfSl9O2Z1bmN0aW9uIFdiKGEpe2lmKCFhLmF8fCFhLmEuZG9jdW1lbnQpdGhyb3cgRXJyb3IoJ09NSUQgU2VydmljZSBTY3JpcHQgaXMgbm90IHJ1bm5pbmcgd2l0aGluIGEgd2luZG93LicpO3ZhciBiPWEuYjthLmI9W107Yi5mb3JFYWNoKGZ1bmN0aW9uKGMpe3RyeXt2YXIgZD1hLmMuQz8nbGltaXRlZCc6J2Z1bGwnLGU9UChjLmFjY2Vzc01vZGUsc2EpP2MuYWNjZXNzTW9kZTpudWxsO3ZhciBnPWU/J2Z1bGwnPT1lJiYnbGltaXRlZCc9PWQ/ZDonZG9tYWluJz09ZT8nbGltaXRlZCc6ZTpkO2MuYWNjZXNzTW9kZT1nO2E6e3ZhciBsPWMucmVzb3VyY2VVcmwsZj1hLmEubG9jYXRpb24ub3JpZ2luO3RyeXt2YXIgaD1uZXcgVVJMKGwsZik7YnJlYWsgYX1jYXRjaChGKXt9dHJ5e2g9bmV3IFVSTChsKTticmVhayBhfWNhdGNoKEYpe31oPW51bGx9aWYoZD1oKXt2YXIgaz1WYigpLG09YS5hLmRvY3VtZW50LHY9bS5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTt2LmlkPSdvbWlkLXZlcmlmaWNhdGlvbi1zY3JpcHQtZnJhbWUtJysKazt2LnN0eWxlLmRpc3BsYXk9J25vbmUnO1snZnVsbCcsJ2xpbWl0ZWQnXS5pbmNsdWRlcyhnKT92LnNyY2RvYz0iPGh0bWw+PGhlYWQ+XG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj53aW5kb3dbJ29taWRWZXJpZmljYXRpb25Qcm9wZXJ0aWVzJ10gPSB7XG4nc2VydmljZVdpbmRvdyc6IHdpbmRvdy5wYXJlbnQsXG4naW5qZWN0aW9uU291cmNlJzogJ2FwcCcsXG4naW5qZWN0aW9uSWQnOiAnIisoaysnXCcsXG59O1x4M2Mvc2NyaXB0PlxuPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJykrZC5ocmVmKyciPlx4M2Mvc2NyaXB0PlxuPC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+JzonZG9tYWluJz09ZyYmKHYuc3JjPVhiKGEsayxkKS5ocmVmKTtbJ2RvbWFpbicsJ2xpbWl0ZWQnXS5pbmNsdWRlcyhnKSYmKHYuc2FuZGJveD0nYWxsb3ctc2NyaXB0cycpO20uYm9keS5hcHBlbmRDaGlsZCh2KTt2YXIgQj1jLnZlbmRvcktleSx4PWMudmVyaWZpY2F0aW9uUGFyYW1ldGVyczsKQj12b2lkIDA9PT1CPycnOkI7eD12b2lkIDA9PT14PycnOng7QiYmJ3N0cmluZyc9PT10eXBlb2YgQiYmJychPT1CJiZ4JiYnc3RyaW5nJz09PXR5cGVvZiB4JiYnJyE9PXgmJihhLmYuaVtCXT14KTthLmMudi5zZXQoayxjKX19Y2F0Y2goRil7U2EoJ09NSUQgdmVyaWZpY2F0aW9uIHNjcmlwdCAnK2MucmVzb3VyY2VVcmwrJyBmYWlsZWQgdG8gbG9hZDogJytGKX19KX0KZnVuY3Rpb24gWGIoYSxiLGMpe3ZhciBkPScvLndlbGwta25vd24vb21pZC9vbWxvYWRlci12MS5odG1sIyc7KG5ldyBNYXAoW1sndmVyaWZpY2F0aW9uU2NyaXB0VXJsJyxjLmhyZWZdLFsnaW5qZWN0aW9uSWQnLGJdXSkpLmZvckVhY2goZnVuY3Rpb24oZSxnKXtkKz1lbmNvZGVVUklDb21wb25lbnQoZykrJz0nK2VuY29kZVVSSUNvbXBvbmVudChlKSsnJid9KTtiPW51bGw7dHJ5e2I9bmV3IFVSTChkLGEuYS5wYXJlbnQubG9jYXRpb24ub3JpZ2luKX1jYXRjaChlKXt0aHJvdyBFcnJvcignT01JRCBTZXJ2aWNlIFNjcmlwdCBjYW5ub3QgYWNjZXNzIHRoZSBwYXJlbnQgd2luZG93LicpO31yZXR1cm4gYn07ZnVuY3Rpb24gWWIoKXt2YXIgYT1aYixiPSRiLGM9dGhpczt0aGlzLmM9Vzt0aGlzLmI9YTt0aGlzLmE9SCgpO3RoaXMuZz1iO3RoaXMuZj0hMTt0aGlzLnJlZ2lzdGVyU2Vzc2lvbk9ic2VydmVyKGZ1bmN0aW9uKGQpe3JldHVybiBhYyhjLGQpfSl9bj1ZYi5wcm90b3R5cGU7bi5yZWdpc3RlclNlc3Npb25PYnNlcnZlcj1mdW5jdGlvbihhKXthYih0aGlzLmMsYSl9O24uc2V0U2xvdEVsZW1lbnQ9ZnVuY3Rpb24oYSl7dGIoYSk/KHRoaXMuYS5mPWEsdGhpcy5iJiZ2Yih0aGlzLmIpKTpKKCdzZXRTbG90RWxlbWVudCBjYWxsZWQgd2l0aCBhIG5vbi1IVE1MRWxlbWVudC4gIEl0IHdpbGwgYmUgaWdub3JlZC4nKX07bi5zZXRFbGVtZW50Qm91bmRzPWZ1bmN0aW9uKGEpe3RoaXMuYS5qPWE7dGhpcy5iJiZ2Yih0aGlzLmIpO3RoaXMuYiYmd2IodGhpcy5iKX07bi5lcnJvcj1mdW5jdGlvbihhLGIpe2RiKHRoaXMuYyxhLGIpfTsKbi5yZWdpc3RlckFkRXZlbnRzPWZ1bmN0aW9uKCl7b2IodGhpcy5jLCdqYXZhc2NyaXB0Jyl9O24ucmVnaXN0ZXJNZWRpYUV2ZW50cz1mdW5jdGlvbigpe25iKHRoaXMuYywnamF2YXNjcmlwdCcpfTtmdW5jdGlvbiBZKGEsYixjKXsnaW1wcmVzc2lvbic9PWI/cGIoYS5jLCdqYXZhc2NyaXB0JykmJihqYihhLmMsJ2phdmFzY3JpcHQnKSxhLmImJlIoYS5iKSk6KCdsb2FkZWQnPT1iPyhjPXZvaWQgMD09PWM/bnVsbDpjLE0oYS5jLCdqYXZhc2NyaXB0JykmJmtiKGEuYywnamF2YXNjcmlwdCcsYykpOk0oYS5jLCdqYXZhc2NyaXB0JykmJmxiKGEuYyxiLCdqYXZhc2NyaXB0JyxjKSxbJ2xvYWRlZCcsJ3N0YXJ0J10uaW5jbHVkZXMoYikmJmEuYiYmUihhLmIpKX1uLmluamVjdFZlcmlmaWNhdGlvblNjcmlwdFJlc291cmNlcz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmc7Yi5iLnB1c2guYXBwbHkoYi5iLHEoYSkpO2lmKHRoaXMuZil0cnl7V2IodGhpcy5nKX1jYXRjaChjKXtKKGMubWVzc2FnZSl9fTsKbi5zZXRDcmVhdGl2ZVR5cGU9ZnVuY3Rpb24oYSxiKXtiPXZvaWQgMD09PWI/bnVsbDpiO2lmKCF0aGlzLmEuYnx8dGhpcy5hLmEpdGhpcy5hLmE9YSwndmlkZW8nPT1hfHwnYXVkaW8nPT1hP3RoaXMuYS5iPSd2aWRlbyc6J2h0bWxEaXNwbGF5Jz09YXx8J25hdGl2ZURpc3BsYXknPT1hP3RoaXMuYS5iPSdkaXNwbGF5JzonZGVmaW5lZEJ5SmF2YVNjcmlwdCc9PWEmJmImJih0aGlzLmEuYj0nbm9uZSc9PWI/J2Rpc3BsYXknOid2aWRlbycpfTtuLnNldEltcHJlc3Npb25UeXBlPWZ1bmN0aW9uKGEpe2lmKCF0aGlzLmEuYnx8dGhpcy5hLmEpdGhpcy5hLmg9YX07CmZ1bmN0aW9uIGFjKGEsYil7aWYoJ3Nlc3Npb25TdGFydCc9PT1iLnR5cGUpe2EuZj0hMDt0cnl7V2IoYS5nKX1jYXRjaChjKXtKKGMubWVzc2FnZSl9fSdzZXNzaW9uRmluaXNoJz09PWIudHlwZSYmKGEuZj0hMSwoYj1IKCkuYykmJiduYXRpdmUnPT1iLmFkU2Vzc2lvblR5cGV8fGEucmVnaXN0ZXJTZXNzaW9uT2JzZXJ2ZXIoZnVuY3Rpb24oYyl7cmV0dXJuIGFjKGEsYyl9KSl9bi5zZXRDbGllbnRJbmZvPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmEuY3x8e307ZC5vbWlkSnNJbmZvPU9iamVjdC5hc3NpZ24oe30sZC5vbWlkSnNJbmZvLHtzZXNzaW9uQ2xpZW50VmVyc2lvbjphLHBhcnRuZXJOYW1lOmIscGFydG5lclZlcnNpb246Y30pO3RoaXMuYS5jPWQ7cmV0dXJuIHRoaXMuYS5jLm9taWRKc0luZm8uc2VydmljZVZlcnNpb259O2Z1bmN0aW9uIGJjKGEpe3JldHVybi9cZCtcLlxkK1wuXGQrKC0uKik/Ly50ZXN0KGEpfWZ1bmN0aW9uIGNjKGEpe2E9YS5zcGxpdCgnLScpWzBdLnNwbGl0KCcuJyk7Zm9yKHZhciBiPVsnMScsJzAnLCczJ10sYz0wOzM+YztjKyspe3ZhciBkPXBhcnNlSW50KGFbY10sMTApLGU9cGFyc2VJbnQoYltjXSwxMCk7aWYoZD5lKWJyZWFrO2Vsc2UgaWYoZDxlKXJldHVybiExfXJldHVybiEwfTtmdW5jdGlvbiBkYyhhLGIpe3JldHVybiBiYyhhKSYmY2MoYSk/Yj9iOltdOmImJidzdHJpbmcnPT09dHlwZW9mIGI/SlNPTi5wYXJzZShiKTpbXX07ZnVuY3Rpb24gZWMoKXt2YXIgYT1mYzt2YXIgYj12b2lkIDA9PT1iP29taWRHbG9iYWw6Yjt0aGlzLmE9YTt0aGlzLmY9Yjt0aGlzLmI9bmV3IFY7dGhpcy5mLm9taWQ9dGhpcy5mLm9taWR8fHt9O3RoaXMuZi5vbWlkLnYxX1Nlc3Npb25TZXJ2aWNlQ29tbXVuaWNhdGlvbj10aGlzLmI7dGhpcy5jPWImJmIuYWRkRXZlbnRMaXN0ZW5lciYmYi5wb3N0TWVzc2FnZT9uZXcgVWIoYik6bnVsbDt0aGlzLmc9bnVsbDt0aGlzLmIuYT10aGlzLmguYmluZCh0aGlzKTt0aGlzLmMmJih0aGlzLmMuYT10aGlzLmkuYmluZCh0aGlzKSl9ZWMucHJvdG90eXBlLmg9ZnVuY3Rpb24oYSxiKXtnYyh0aGlzLGEsYix0aGlzLmIpfTsKZWMucHJvdG90eXBlLmk9ZnVuY3Rpb24oYSxiKXt0aGlzLmd8fCh0aGlzLmc9Yik7dGhpcy5nIT1iP0ooJ1RoZSBzb3VyY2Ugd2luZG93IG9mIHNlc3Npb24gY2xpZW50IHBvc3QgbWVzc2FnZXMgY2Fubm90IGJlIGNoYW5nZWQgZnJvbSB0aGUgc291cmNlIG9mIHRoZSBmaXJzdCBtZXNzYWdlLicpOmdjKHRoaXMsYSxiLHRoaXMuYyl9OwpmdW5jdGlvbiBnYyhhLGIsYyxkKXtmdW5jdGlvbiBlKGgpe2Zvcih2YXIgaz1bXSxtPTA7bTxhcmd1bWVudHMubGVuZ3RoOysrbSlrW21dPWFyZ3VtZW50c1ttXTtrPW5ldyBVKGcsJ3Jlc3BvbnNlJyxmLGJjKGYpJiZjYyhmKT9rOkpTT04uc3RyaW5naWZ5KGspKTtkLmIoayxjKX12YXIgZz1iLmIsbD1iLm1ldGhvZCxmPWIudmVyc2lvbjtiPWRjKGYsYi5hKTt0cnl7aGMoYSxsLGUsYil9Y2F0Y2goaCl7ZC5iKG5ldyBVKGcsJ2Vycm9yJyxmLCdcbiAgICAgICAgbmFtZTogJytoLm5hbWUrJ1xuICAgICAgICBtZXNzYWdlOiAnK2gubWVzc2FnZSsnXG4gICAgICAgIGZpbGVuYW1lOiAnK2guZmlsZW5hbWUrJ1xuICAgICAgICBsaW5lTnVtYmVyOiAnK2gubGluZU51bWJlcisnXG4gICAgICAgIGNvbHVtbk51bWJlcjogJytoLmNvbHVtbk51bWJlcisnXG4gICAgICAgIHN0YWNrOiAnK2guc3RhY2srJ1xuICAgICAgICB0b1N0cmluZygpOiAnK2gudG9TdHJpbmcoKSksYyl9fQpmdW5jdGlvbiBoYyhhLGIsYyxkKXtzd2l0Y2goYil7Y2FzZSAnU2Vzc2lvblNlcnZpY2UucmVnaXN0ZXJBZEV2ZW50cyc6YS5hLnJlZ2lzdGVyQWRFdmVudHMoKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5yZWdpc3Rlck1lZGlhRXZlbnRzJzphLmEucmVnaXN0ZXJNZWRpYUV2ZW50cygpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnJlZ2lzdGVyU2Vzc2lvbk9ic2VydmVyJzphLmEucmVnaXN0ZXJTZXNzaW9uT2JzZXJ2ZXIoYyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc2V0U2xvdEVsZW1lbnQnOmM9cChkKS5uZXh0KCkudmFsdWU7YS5hLnNldFNsb3RFbGVtZW50KGMpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnNldFZpZGVvRWxlbWVudCc6Yz1wKGQpLm5leHQoKS52YWx1ZTthPWEuYTt1YihjKT8oYS5hLmc9YyxhLmImJnZiKGEuYikpOkooJ3NldFZpZGVvRWxlbWVudCBjYWxsZWQgd2l0aCBhIG5vbi1IVE1MVmlkZW9FbGVtZW50LiBJdCB3aWxsIGJlIGlnbm9yZWQuJyk7CmJyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnNldEVsZW1lbnRCb3VuZHMnOmM9cChkKS5uZXh0KCkudmFsdWU7YS5hLnNldEVsZW1lbnRCb3VuZHMoYyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc3RhcnRTZXNzaW9uJzpKKCdTZXNzaW9uIHN0YXJ0IGZyb20gSlMgaXMgbm90IHN1cHBvcnRlZCBpbiBtb2JpbGUgYXBwLicpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLmZpbmlzaFNlc3Npb24nOkooJ1Nlc3Npb24gZmluaXNoIGZyb20gSlMgaXMgbm90IHN1cHBvcnRlZCBpbiBtb2JpbGUgYXBwLicpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLmltcHJlc3Npb25PY2N1cnJlZCc6WShhLmEsJ2ltcHJlc3Npb24nKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5sb2FkZWQnOihjPXAoZCkubmV4dCgpLnZhbHVlKT8oYj17c2tpcHBhYmxlOmMuaXNTa2lwcGFibGUsYXV0b1BsYXk6Yy5pc0F1dG9QbGF5LHBvc2l0aW9uOmMucG9zaXRpb259LGMuaXNTa2lwcGFibGUmJgooYi5za2lwT2Zmc2V0PWMuc2tpcE9mZnNldCksWShhLmEsJ2xvYWRlZCcsYikpOlkoYS5hLCdsb2FkZWQnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5zdGFydCc6Yj1wKGQpO2M9Yi5uZXh0KCkudmFsdWU7Yj1iLm5leHQoKS52YWx1ZTtZKGEuYSwnc3RhcnQnLHtkdXJhdGlvbjpjLG1lZGlhUGxheWVyVm9sdW1lOmJ9KTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5maXJzdFF1YXJ0aWxlJzpZKGEuYSwnZmlyc3RRdWFydGlsZScpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLm1pZHBvaW50JzpZKGEuYSwnbWlkcG9pbnQnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS50aGlyZFF1YXJ0aWxlJzpZKGEuYSwndGhpcmRRdWFydGlsZScpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLmNvbXBsZXRlJzpZKGEuYSwnY29tcGxldGUnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5wYXVzZSc6WShhLmEsJ3BhdXNlJyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UucmVzdW1lJzpZKGEuYSwKJ3Jlc3VtZScpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLmJ1ZmZlclN0YXJ0JzpZKGEuYSwnYnVmZmVyU3RhcnQnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5idWZmZXJGaW5pc2gnOlkoYS5hLCdidWZmZXJGaW5pc2gnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5za2lwcGVkJzpZKGEuYSwnc2tpcHBlZCcpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnZvbHVtZUNoYW5nZSc6Yz17bWVkaWFQbGF5ZXJWb2x1bWU6cChkKS5uZXh0KCkudmFsdWV9O1koYS5hLCd2b2x1bWVDaGFuZ2UnLGMpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnBsYXllclN0YXRlQ2hhbmdlJzpjPXtzdGF0ZTpwKGQpLm5leHQoKS52YWx1ZX07WShhLmEsJ3BsYXllclN0YXRlQ2hhbmdlJyxjKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5hZFVzZXJJbnRlcmFjdGlvbic6Yz17aW50ZXJhY3Rpb25UeXBlOnAoZCkubmV4dCgpLnZhbHVlfTtZKGEuYSwnYWRVc2VySW50ZXJhY3Rpb24nLApjKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5zZXRDbGllbnRJbmZvJzp2YXIgZT1wKGQpO2I9ZS5uZXh0KCkudmFsdWU7ZD1lLm5leHQoKS52YWx1ZTtlPWUubmV4dCgpLnZhbHVlO2E9YS5hLnNldENsaWVudEluZm8oYixkLGUpO2MoYSk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UuaW5qZWN0VmVyaWZpY2F0aW9uU2NyaXB0UmVzb3VyY2VzJzpjPXAoZCkubmV4dCgpLnZhbHVlO2EuYS5pbmplY3RWZXJpZmljYXRpb25TY3JpcHRSZXNvdXJjZXMoYyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc2V0Q3JlYXRpdmVUeXBlJzpjPXAoZCkubmV4dCgpLnZhbHVlO2EuYS5zZXRDcmVhdGl2ZVR5cGUoYyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc2V0SW1wcmVzc2lvblR5cGUnOmM9cChkKS5uZXh0KCkudmFsdWU7YS5hLnNldEltcHJlc3Npb25UeXBlKGMpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnNldENvbnRlbnRVcmwnOmM9cChkKS5uZXh0KCkudmFsdWU7CmEuYS5hLm89YzticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5zZXNzaW9uRXJyb3InOmI9cChkKSxjPWIubmV4dCgpLnZhbHVlLGI9Yi5uZXh0KCkudmFsdWUsYS5hLmVycm9yKGMsYil9fTtmdW5jdGlvbiBaKCl7dmFyIGE9VyxiPWljLGM9amMsZD1aYjt0aGlzLmY9ZmM7dGhpcy5hPWE7dGhpcy5jPWI7dGhpcy5oPWM7dGhpcy5nPWQ7dGhpcy5iPUgoKX1uPVoucHJvdG90eXBlOwpuLlQ9ZnVuY3Rpb24oYSl7aWYoISghKGEmJk4oYSkmJlAoYS5pbXByZXNzaW9uT3duZXIscmEpKXx8J3ZpZGVvRXZlbnRzT3duZXInaW4gYSYmbnVsbCE9YS52aWRlb0V2ZW50c093bmVyJiYhUChhLnZpZGVvRXZlbnRzT3duZXIscmEpfHwnbWVkaWFFdmVudHNPd25lcidpbiBhJiZudWxsIT1hLm1lZGlhRXZlbnRzT3duZXImJiFQKGEubWVkaWFFdmVudHNPd25lcixyYSkpKXtpZihhLmNyZWF0aXZlVHlwZSYmYS5pbXByZXNzaW9uVHlwZSl7dmFyIGI9YS5tZWRpYUV2ZW50c093bmVyO251bGw9PXRoaXMuYi5hJiZ0aGlzLmYuc2V0Q3JlYXRpdmVUeXBlKGEuY3JlYXRpdmVUeXBlLGIpO251bGw9PXRoaXMuYi5oJiYodGhpcy5iLmg9YS5pbXByZXNzaW9uVHlwZSk7bmIodGhpcy5hLGIpfWVsc2UgYj1hLnZpZGVvRXZlbnRzT3duZXIsdGhpcy5iLmI9bnVsbD09Ynx8J25vbmUnPT09Yj8nZGlzcGxheSc6J3ZpZGVvJyx0aGlzLmIuYT1udWxsLHRoaXMuYi5oPW51bGwsbmIodGhpcy5hLGIpOwpvYih0aGlzLmEsYS5pbXByZXNzaW9uT3duZXIpO2EmJm51bGwhPWEuaXNvbGF0ZVZlcmlmaWNhdGlvblNjcmlwdHMmJidib29sZWFuJz09PXR5cGVvZiBhLmlzb2xhdGVWZXJpZmljYXRpb25TY3JpcHRzJiYodGhpcy5iLkM9YS5pc29sYXRlVmVyaWZpY2F0aW9uU2NyaXB0cyl9fTsKbi5XPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlO2lmKE4oYikpe2lmKGU9UChiLmVudmlyb25tZW50LHVhKSYmUChiLmFkU2Vzc2lvblR5cGUscWEpKWU9Yi5vbWlkTmF0aXZlSW5mbyxlPU4oZSk/TyhlLnBhcnRuZXJOYW1lKSYmTyhlLnBhcnRuZXJWZXJzaW9uKTohMTtlJiYoZT1iLmFwcCxlPU4oZSk/TyhlLmxpYnJhcnlWZXJzaW9uKSYmTyhlLmFwcElkKTohMSl9ZWxzZSBlPSExO2UmJihQYihkKSYmKHRoaXMuYi52PW5ldyBNYXAoT2JqZWN0LmVudHJpZXMoZCkpKSxkPXRoaXMuZixjPXZvaWQgMD09PWM/bnVsbDpjLG51bGw9PWEmJihhPVZiKCkpLGIuY2FuTWVhc3VyZVZpc2liaWxpdHk9ZC5iLkMoKSxkLmEuYWRTZXNzaW9uSWQ9YSxhPWQuYSxlPWIsdm9pZCAwIT09ZS5jb250ZW50VXJsJiYoYS5vPWUuY29udGVudFVybCxlLmNvbnRlbnRVcmw9dm9pZCAwKSxlPWEuY3x8e30sYi5vbWlkSnNJbmZvPU9iamVjdC5hc3NpZ24oe30sZS5vbWlkSnNJbmZvfHx7fSxiLm9taWRKc0luZm98fAp7fSksZT1iPU9iamVjdC5hc3NpZ24oe30sZSxiKSxhLkN8fChudWxsIT1hLmc/KGUudmlkZW9FbGVtZW50PWEuZyxlLmFjY2Vzc01vZGU9J2Z1bGwnKTpudWxsIT1hLmYmJihlLnNsb3RFbGVtZW50PWEuZixlLmFjY2Vzc01vZGU9J2Z1bGwnKSksYS5jPWIsZWIoZC5jLGMpLGQuYiYmUihkLmIpKX07bi5VPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5mO2liKGEuYyk7YS5iLm0oKX07bi4kPWZ1bmN0aW9uKGEpe04oYSkmJnJiKGEueCkmJnJiKGEueSkmJnJiKGEud2lkdGgpJiZyYihhLmhlaWdodCkmJih0aGlzLmIuRz1hLHFiKHRoaXMuYywnY29udGFpbmVyJykpfTtuLmFhPWZ1bmN0aW9uKGEpe1AoYSx0YSkmJih0aGlzLmIubT1hLCdiYWNrZ3JvdW5kZWQnPT09YT9xYih0aGlzLmMsJ2NvbnRhaW5lcicsJ2JhY2tncm91bmRlZCcpOnFiKHRoaXMuYywnY29udGFpbmVyJykpfTtuLlg9ZnVuY3Rpb24oYSl7J2ltcHJlc3Npb24nPT09YSYmKHRoaXMuTSgpLHRoaXMuZyYmUih0aGlzLmcpKX07Cm4uTT1mdW5jdGlvbigpe3BiKHRoaXMuYSwnbmF0aXZlJykmJmpiKHRoaXMuYSwnbmF0aXZlJyl9O24uVj1mdW5jdGlvbihhKXthPXZvaWQgMD09PWE/bnVsbDphO00odGhpcy5hLCduYXRpdmUnKSYma2IodGhpcy5hLCduYXRpdmUnLGEpfTtuLmVycm9yPWZ1bmN0aW9uKGEsYil7UChhLG9hKSYmZGIodGhpcy5hLGEsYil9O24uWT1mdW5jdGlvbihhLGIpe3RoaXMuTihhLGIpfTtuLk49ZnVuY3Rpb24oYSxiKXtNKHRoaXMuYSwnbmF0aXZlJykmJlAoYSx6KSYmKHZvaWQgMD09PWJ8fE4oYikpJiYoJ2xvYWRlZCc9PWE/a2IodGhpcy5hLCduYXRpdmUnLGIpOmxiKHRoaXMuYSxhLCduYXRpdmUnLGIpKX07Cm4uWj1mdW5jdGlvbihhKXtpZignbm9uZSchPT10aGlzLmEuYS5pJiYnbnVtYmVyJz09PXR5cGVvZiBhJiYhaXNOYU4oYSkpe3RoaXMuYi51PWE7YT10aGlzLmg7dmFyIGI9YS5hLkI7bnVsbCE9YiYmbGIoYS5iLCd2b2x1bWVDaGFuZ2UnLCduYXRpdmUnLHttZWRpYVBsYXllclZvbHVtZTpiLGRldmljZVZvbHVtZTphLmEudX0pfX07Wi5wcm90b3R5cGUuc3RhcnRTZXNzaW9uPVoucHJvdG90eXBlLlc7Wi5wcm90b3R5cGUuZXJyb3I9Wi5wcm90b3R5cGUuZXJyb3I7Wi5wcm90b3R5cGUuZmluaXNoU2Vzc2lvbj1aLnByb3RvdHlwZS5VO1oucHJvdG90eXBlLnB1Ymxpc2hBZEV2ZW50PVoucHJvdG90eXBlLlg7Wi5wcm90b3R5cGUucHVibGlzaEltcHJlc3Npb25FdmVudD1aLnByb3RvdHlwZS5NO1oucHJvdG90eXBlLnB1Ymxpc2hWaWRlb0V2ZW50PVoucHJvdG90eXBlLlk7Wi5wcm90b3R5cGUucHVibGlzaE1lZGlhRXZlbnQ9Wi5wcm90b3R5cGUuTjsKWi5wcm90b3R5cGUucHVibGlzaExvYWRlZEV2ZW50PVoucHJvdG90eXBlLlY7Wi5wcm90b3R5cGUuc2V0TmF0aXZlVmlld0hpZXJhcmNoeT1aLnByb3RvdHlwZS4kO1oucHJvdG90eXBlLnNldFN0YXRlPVoucHJvdG90eXBlLmFhO1oucHJvdG90eXBlLnNldERldmljZVZvbHVtZT1aLnByb3RvdHlwZS5aO1oucHJvdG90eXBlLmluaXQ9Wi5wcm90b3R5cGUuVDtmdW5jdGlvbiBrYygpe3ZhciBhPVcsYj1sYzt2YXIgYz12b2lkIDA9PT1jP0k6Yzt0aGlzLmc9YTt0aGlzLmE9Yjt0aGlzLmg9e307dGhpcy5mPXt9O3RoaXMuYz1uZXcgVjtjLm9taWQ9Yy5vbWlkfHx7fTtjLm9taWQudjFfVmVyaWZpY2F0aW9uU2VydmljZUNvbW11bmljYXRpb249dGhpcy5jO3RoaXMuYj1udWxsO2MmJmMuYWRkRXZlbnRMaXN0ZW5lciYmYy5wb3N0TWVzc2FnZSYmKHRoaXMuYj1uZXcgVWIoYykpO3RoaXMuYy5hPXRoaXMuaS5iaW5kKHRoaXMpO3RoaXMuYiYmKHRoaXMuYi5hPXRoaXMuai5iaW5kKHRoaXMpKX1mdW5jdGlvbiBtYyhhLGIsYyxkKXtFYihhLmEsYixjLGQpfWZ1bmN0aW9uIG5jKGEsYixjLGQpe0RiKGEuYSwnZG93bmxvYWRKYXZhU2NyaXB0UmVzb3VyY2UnKShiLGMsZCl9a2MucHJvdG90eXBlLmo9ZnVuY3Rpb24oYSxiKXt0aGlzLmImJm9jKHRoaXMsYSxiLHRoaXMuYil9O2tjLnByb3RvdHlwZS5pPWZ1bmN0aW9uKGEsYil7b2ModGhpcyxhLGIsdGhpcy5jKX07CmZ1bmN0aW9uIG9jKGEsYixjLGQpe2Z1bmN0aW9uIGUoRSl7Zm9yKHZhciBYPVtdLHBhPTA7cGE8YXJndW1lbnRzLmxlbmd0aDsrK3BhKVhbcGFdPWFyZ3VtZW50c1twYV07WD1uZXcgVShnLCdyZXNwb25zZScsZixiYyhmKSYmY2MoZik/WDpKU09OLnN0cmluZ2lmeShYKSk7ZC5iKFgsYyl9dmFyIGc9Yi5iLGw9Yi5tZXRob2QsZj1iLnZlcnNpb247Yj1kYyhmLGIuYSk7dHJ5e3N3aXRjaChsKXtjYXNlICdWZXJpZmljYXRpb25TZXJ2aWNlLmFkZEV2ZW50TGlzdGVuZXInOnZhciBoPXAoYikubmV4dCgpLnZhbHVlO1phKGEuZyxoLGUpO2JyZWFrO2Nhc2UgJ1ZlcmlmaWNhdGlvblNlcnZpY2UuYWRkU2Vzc2lvbkxpc3RlbmVyJzp2YXIgaz1wKGIpLG09ay5uZXh0KCkudmFsdWUsdj1rLm5leHQoKS52YWx1ZTthYihhLmcsZSxtLHYpO2JyZWFrO2Nhc2UgJ1ZlcmlmaWNhdGlvblNlcnZpY2Uuc2VuZFVybCc6dmFyIEI9cChiKS5uZXh0KCkudmFsdWU7bWMoYSxCLGZ1bmN0aW9uKCl7cmV0dXJuIGUoITApfSwKZnVuY3Rpb24oKXtyZXR1cm4gZSghMSl9KTticmVhaztjYXNlICdWZXJpZmljYXRpb25TZXJ2aWNlLnNldFRpbWVvdXQnOnZhciB4PXAoYiksRj14Lm5leHQoKS52YWx1ZSxLPXgubmV4dCgpLnZhbHVlO2EuaFtGXT1BYihhLmEsJ3NldFRpbWVvdXQnKShlLEspO2JyZWFrO2Nhc2UgJ1ZlcmlmaWNhdGlvblNlcnZpY2UuY2xlYXJUaW1lb3V0Jzp2YXIgdGM9cChiKS5uZXh0KCkudmFsdWU7Q2IoYS5hLGEuaFt0Y10pO2JyZWFrO2Nhc2UgJ1ZlcmlmaWNhdGlvblNlcnZpY2Uuc2V0SW50ZXJ2YWwnOnZhciBOYj1wKGIpLHVjPU5iLm5leHQoKS52YWx1ZSx2Yz1OYi5uZXh0KCkudmFsdWU7YS5mW3VjXT16YihhLmEsZSx2Yyk7YnJlYWs7Y2FzZSAnVmVyaWZpY2F0aW9uU2VydmljZS5jbGVhckludGVydmFsJzp2YXIgd2M9cChiKS5uZXh0KCkudmFsdWU7QmIoYS5hLGEuZlt3Y10pO2JyZWFrO2Nhc2UgJ1ZlcmlmaWNhdGlvblNlcnZpY2UuaW5qZWN0SmF2YVNjcmlwdFJlc291cmNlJzp2YXIgeGM9CnAoYikubmV4dCgpLnZhbHVlO25jKGEseGMsZnVuY3Rpb24oRSl7cmV0dXJuIGUoITAsRSl9LGZ1bmN0aW9uKCl7cmV0dXJuIGUoITEpfSk7YnJlYWs7Y2FzZSAnVmVyaWZpY2F0aW9uU2VydmljZS5nZXRWZXJzaW9uJzpwKGIpLm5leHQoKTt2YXIgeWM9SCgpLmMub21pZEpzSW5mbztlKHljLnNlcnZpY2VWZXJzaW9uKX19Y2F0Y2goRSl7ZC5iKG5ldyBVKGcsJ2Vycm9yJyxmLCdcbiAgICAgICAgICAgICAgbmFtZTogJytFLm5hbWUrJ1xuICAgICAgICAgICAgICBtZXNzYWdlOiAnK0UubWVzc2FnZSsnXG4gICAgICAgICAgICAgIGZpbGVuYW1lOiAnK0UuZmlsZW5hbWUrJ1xuICAgICAgICAgICAgICBsaW5lTnVtYmVyOiAnK0UubGluZU51bWJlcisnXG4gICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogJytFLmNvbHVtbk51bWJlcisnXG4gICAgICAgICAgICAgIHN0YWNrOiAnK0Uuc3RhY2srJ1xuICAgICAgICAgICAgICB0b1N0cmluZygpOiAnK0UudG9TdHJpbmcoKSsnXG4gICAgICAgICAgJyksCmMpfX07ZnVuY3Rpb24gcGMoKXt2YXIgYT1JLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO2EuaWQ9J29taWRfdjFfcHJlc2VudCc7YS5uYW1lPSdvbWlkX3YxX3ByZXNlbnQnO2Euc3R5bGUuZGlzcGxheT0nbm9uZSc7SS5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpfWZ1bmN0aW9uIHFjKCl7dmFyIGE9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oYil7Yi5mb3JFYWNoKGZ1bmN0aW9uKGMpeydCT0RZJz09PWMuYWRkZWROb2Rlc1swXS5ub2RlTmFtZSYmKHBjKCksYS5kaXNjb25uZWN0KCkpfSl9KTthLm9ic2VydmUoSS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQse2NoaWxkTGlzdDohMH0pfTt2YXIgVz1uZXcgVGEsbGM9bmV3IGZ1bmN0aW9uKCl7dmFyIGE7dGhpcy5hPWE9dm9pZCAwPT09YT9vbWlkR2xvYmFsOmF9O25ldyBrYzt2YXIgcmM9bmV3IGZ1bmN0aW9uKCl7fSxzYz1uZXcgZnVuY3Rpb24oKXt9LGljPW5ldyBmdW5jdGlvbigpe3RoaXMuYj1XO3RoaXMuYz1zYzt0aGlzLmE9SCgpfSx6YztJP3pjPUkuSW50ZXJzZWN0aW9uT2JzZXJ2ZXImJihJLk11dGF0aW9uT2JzZXJ2ZXJ8fEkuUmVzaXplT2JzZXJ2ZXIpP25ldyBUKEkscmMsaWMsVyk6bmV3IFMoSSxzYyxpYyxsYyxXKTp6Yz1udWxsO3ZhciBaYj16YywkYj1uZXcgZnVuY3Rpb24oKXt2YXIgYT1XO3ZhciBiPXZvaWQgMD09PWI/STpiO3RoaXMuZj1hO3RoaXMuYT1iO3RoaXMuYz1IKCk7dGhpcy5iPVtdfSxmYz1uZXcgWWIsamM9bmV3IGZ1bmN0aW9uKCl7dmFyIGE9VyxiPUgoKTt0aGlzLmI9YTt0aGlzLmE9Yn07SS5vbWlkQnJpZGdlPW5ldyBaO25ldyBlYzsKaWYoSS5mcmFtZXMmJkkuZG9jdW1lbnQmJiEoJ29taWRfdjFfcHJlc2VudCdpbiBJLmZyYW1lcykpe3ZhciBBYztpZihBYz1udWxsPT1JLmRvY3VtZW50LmJvZHkpQWM9J011dGF0aW9uT2JzZXJ2ZXInaW4gSTtBYz9xYygpOkkuZG9jdW1lbnQuYm9keT9wYygpOkkuZG9jdW1lbnQud3JpdGUoJzxpZnJhbWUgc3R5bGU9ImRpc3BsYXk6bm9uZSIgaWQ9Im9taWRfdjFfcHJlc2VudCIgbmFtZT0ib21pZF92MV9wcmVzZW50Ij48L2lmcmFtZT4nKX07Cn0pLmNhbGwodGhpcywgdGhpcyk7Cg==" |