public static final java.lang.String |
omsdkjs |
"OyhmdW5jdGlvbihvbWlkR2xvYmFsKSB7CiAgJ3VzZSBzdHJpY3QnO3ZhciBuO2Z1bmN0aW9uIGFhKGEpe3ZhciBiPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGI8YS5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6YVtiKytdfTp7ZG9uZTohMH19fWZ1bmN0aW9uIHAoYSl7dmFyIGI9J3VuZGVmaW5lZCchPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmYVtTeW1ib2wuaXRlcmF0b3JdO3JldHVybiBiP2IuY2FsbChhKTp7bmV4dDphYShhKX19ZnVuY3Rpb24gcShhKXtpZighKGEgaW5zdGFuY2VvZiBBcnJheSkpe2E9cChhKTtmb3IodmFyIGIsYz1bXTshKGI9YS5uZXh0KCkpLmRvbmU7KWMucHVzaChiLnZhbHVlKTthPWN9cmV0dXJuIGF9dmFyIGJhPSdmdW5jdGlvbic9PXR5cGVvZiBPYmplY3QuY3JlYXRlP09iamVjdC5jcmVhdGU6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe31iLnByb3RvdHlwZT1hO3JldHVybiBuZXcgYn0sY2E7CmlmKCdmdW5jdGlvbic9PXR5cGVvZiBPYmplY3Quc2V0UHJvdG90eXBlT2YpY2E9T2JqZWN0LnNldFByb3RvdHlwZU9mO2Vsc2V7dmFyIGRhO2E6e3ZhciBlYT17UzohMH0sZmE9e307dHJ5e2ZhLl9fcHJvdG9fXz1lYTtkYT1mYS5TO2JyZWFrIGF9Y2F0Y2goYSl7fWRhPSExfWNhPWRhP2Z1bmN0aW9uKGEsYil7YS5fX3Byb3RvX189YjtpZihhLl9fcHJvdG9fXyE9PWIpdGhyb3cgbmV3IFR5cGVFcnJvcihhKycgaXMgbm90IGV4dGVuc2libGUnKTtyZXR1cm4gYX06bnVsbH12YXIgaGE9Y2E7CmZ1bmN0aW9uIHIoYSxiKXthLnByb3RvdHlwZT1iYShiLnByb3RvdHlwZSk7YS5wcm90b3R5cGUuY29uc3RydWN0b3I9YTtpZihoYSloYShhLGIpO2Vsc2UgZm9yKHZhciBjIGluIGIpaWYoJ3Byb3RvdHlwZSchPWMpaWYoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMpe3ZhciBkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYixjKTtkJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxjLGQpfWVsc2UgYVtjXT1iW2NdO2EuQ2E9Yi5wcm90b3R5cGV9dmFyIHQ9J3VuZGVmaW5lZCchPXR5cGVvZiB3aW5kb3cmJndpbmRvdz09PXRoaXM/dGhpczondW5kZWZpbmVkJyE9dHlwZW9mIGdsb2JhbCYmbnVsbCE9Z2xvYmFsP2dsb2JhbDp0aGlzO2Z1bmN0aW9uIHUoYSxiKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYil9CnZhciBpYT0nZnVuY3Rpb24nPT10eXBlb2YgT2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGQ9YXJndW1lbnRzW2NdO2lmKGQpZm9yKHZhciBlIGluIGQpdShkLGUpJiYoYVtlXT1kW2VdKX1yZXR1cm4gYX0sdz0nZnVuY3Rpb24nPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGEsYixjKXthIT1BcnJheS5wcm90b3R5cGUmJmEhPU9iamVjdC5wcm90b3R5cGUmJihhW2JdPWMudmFsdWUpfTsKZnVuY3Rpb24geShhLGIpe2lmKGIpe3ZhciBjPXQ7YT1hLnNwbGl0KCcuJyk7Zm9yKHZhciBkPTA7ZDxhLmxlbmd0aC0xO2QrKyl7dmFyIGU9YVtkXTtlIGluIGN8fChjW2VdPXt9KTtjPWNbZV19YT1hW2EubGVuZ3RoLTFdO2Q9Y1thXTtiPWIoZCk7YiE9ZCYmbnVsbCE9YiYmdyhjLGEse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpifSl9fXkoJ09iamVjdC5hc3NpZ24nLGZ1bmN0aW9uKGEpe3JldHVybiBhfHxpYX0pO2Z1bmN0aW9uIGphKCl7amE9ZnVuY3Rpb24oKXt9O3QuU3ltYm9sfHwodC5TeW1ib2w9a2EpfWZ1bmN0aW9uIGxhKGEsYil7dGhpcy5hPWE7dyh0aGlzLCdkZXNjcmlwdGlvbicse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpifSl9bGEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX07CnZhciBrYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYyl7aWYodGhpcyBpbnN0YW5jZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7cmV0dXJuIG5ldyBsYSgnanNjb21wX3N5bWJvbF8nKyhjfHwnJykrJ18nK2IrKyxjKX12YXIgYj0wO3JldHVybiBhfSgpO2Z1bmN0aW9uIG1hKCl7amEoKTt2YXIgYT10LlN5bWJvbC5pdGVyYXRvcjthfHwoYT10LlN5bWJvbC5pdGVyYXRvcj10LlN5bWJvbCgnU3ltYm9sLml0ZXJhdG9yJykpOydmdW5jdGlvbichPXR5cGVvZiBBcnJheS5wcm90b3R5cGVbYV0mJncoQXJyYXkucHJvdG90eXBlLGEse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuYShhYSh0aGlzKSl9fSk7bWE9ZnVuY3Rpb24oKXt9fWZ1bmN0aW9uIG5hKGEpe21hKCk7YT17bmV4dDphfTthW3QuU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtyZXR1cm4gYX0KeSgnV2Vha01hcCcsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihnKXt0aGlzLmE9KGwrPU1hdGgucmFuZG9tKCkrMSkudG9TdHJpbmcoKTtpZihnKXtnPXAoZyk7Zm9yKHZhciBoOyEoaD1nLm5leHQoKSkuZG9uZTspaD1oLnZhbHVlLHRoaXMuc2V0KGhbMF0saFsxXSl9fWZ1bmN0aW9uIGMoKXt9ZnVuY3Rpb24gZChnKXtpZighdShnLGYpKXt2YXIgaD1uZXcgYzt3KGcsZix7dmFsdWU6aH0pfX1mdW5jdGlvbiBlKGcpe3ZhciBoPU9iamVjdFtnXTtoJiYoT2JqZWN0W2ddPWZ1bmN0aW9uKGspe2lmKGsgaW5zdGFuY2VvZiBjKXJldHVybiBrO2Qoayk7cmV0dXJuIGgoayl9KX1pZihmdW5jdGlvbigpe2lmKCFhfHwhT2JqZWN0LnNlYWwpcmV0dXJuITE7dHJ5e3ZhciBnPU9iamVjdC5zZWFsKHt9KSxoPU9iamVjdC5zZWFsKHt9KSxrPW5ldyBhKFtbZywyXSxbaCwzXV0pO2lmKDIhPWsuZ2V0KGcpfHwzIT1rLmdldChoKSlyZXR1cm4hMTtrLmRlbGV0ZShnKTtrLnNldChoLDQpO3JldHVybiFrLmhhcyhnKSYmCjQ9PWsuZ2V0KGgpfWNhdGNoKG0pe3JldHVybiExfX0oKSlyZXR1cm4gYTt2YXIgZj0nJGpzY29tcF9oaWRkZW5fJytNYXRoLnJhbmRvbSgpO2UoJ2ZyZWV6ZScpO2UoJ3ByZXZlbnRFeHRlbnNpb25zJyk7ZSgnc2VhbCcpO3ZhciBsPTA7Yi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGcsaCl7ZChnKTtpZighdShnLGYpKXRocm93IEVycm9yKCdXZWFrTWFwIGtleSBmYWlsOiAnK2cpO2dbZl1bdGhpcy5hXT1oO3JldHVybiB0aGlzfTtiLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHUoZyxmKT9nW2ZdW3RoaXMuYV06dm9pZCAwfTtiLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZyl7cmV0dXJuIHUoZyxmKSYmdShnW2ZdLHRoaXMuYSl9O2IucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdShnLGYpJiZ1KGdbZl0sdGhpcy5hKT9kZWxldGUgZ1tmXVt0aGlzLmFdOiExfTtyZXR1cm4gYn0pOwp5KCdNYXAnLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoKXt2YXIgZz17fTtyZXR1cm4gZy5BPWcubmV4dD1nLmhlYWQ9Z31mdW5jdGlvbiBjKGcsaCl7dmFyIGs9Zy5hO3JldHVybiBuYShmdW5jdGlvbigpe2lmKGspe2Zvcig7ay5oZWFkIT1nLmE7KWs9ay5BO2Zvcig7ay5uZXh0IT1rLmhlYWQ7KXJldHVybiBrPWsubmV4dCx7ZG9uZTohMSx2YWx1ZTpoKGspfTtrPW51bGx9cmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfX0pfWZ1bmN0aW9uIGQoZyxoKXt2YXIgaz1oJiZ0eXBlb2YgaDsnb2JqZWN0Jz09a3x8J2Z1bmN0aW9uJz09az9mLmhhcyhoKT9rPWYuZ2V0KGgpOihrPScnKyArK2wsZi5zZXQoaCxrKSk6az0ncF8nK2g7dmFyIG09Zy5iW2tdO2lmKG0mJnUoZy5iLGspKWZvcihnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB2PW1bZ107aWYoaCE9PWgmJnYua2V5IT09di5rZXl8fGg9PT12LmtleSlyZXR1cm57aWQ6ayxsaXN0Om0saW5kZXg6ZyxzOnZ9fXJldHVybntpZDprLGxpc3Q6bSwKaW5kZXg6LTEsczp2b2lkIDB9fWZ1bmN0aW9uIGUoZyl7dGhpcy5iPXt9O3RoaXMuYT1iKCk7dGhpcy5zaXplPTA7aWYoZyl7Zz1wKGcpO2Zvcih2YXIgaDshKGg9Zy5uZXh0KCkpLmRvbmU7KWg9aC52YWx1ZSx0aGlzLnNldChoWzBdLGhbMV0pfX1pZihmdW5jdGlvbigpe2lmKCFhfHwnZnVuY3Rpb24nIT10eXBlb2YgYXx8IWEucHJvdG90eXBlLmVudHJpZXN8fCdmdW5jdGlvbichPXR5cGVvZiBPYmplY3Quc2VhbClyZXR1cm4hMTt0cnl7dmFyIGc9T2JqZWN0LnNlYWwoe3g6NH0pLGg9bmV3IGEocChbW2csJ3MnXV0pKTtpZigncychPWguZ2V0KGcpfHwxIT1oLnNpemV8fGguZ2V0KHt4OjR9KXx8aC5zZXQoe3g6NH0sJ3QnKSE9aHx8MiE9aC5zaXplKXJldHVybiExO3ZhciBrPWguZW50cmllcygpLG09ay5uZXh0KCk7aWYobS5kb25lfHxtLnZhbHVlWzBdIT1nfHwncychPW0udmFsdWVbMV0pcmV0dXJuITE7bT1rLm5leHQoKTtyZXR1cm4gbS5kb25lfHw0IT1tLnZhbHVlWzBdLnh8fAondCchPW0udmFsdWVbMV18fCFrLm5leHQoKS5kb25lPyExOiEwfWNhdGNoKHYpe3JldHVybiExfX0oKSlyZXR1cm4gYTttYSgpO3ZhciBmPW5ldyBXZWFrTWFwO2UucHJvdG90eXBlLnNldD1mdW5jdGlvbihnLGgpe2c9MD09PWc/MDpnO3ZhciBrPWQodGhpcyxnKTtrLmxpc3R8fChrLmxpc3Q9dGhpcy5iW2suaWRdPVtdKTtrLnM/ay5zLnZhbHVlPWg6KGsucz17bmV4dDp0aGlzLmEsQTp0aGlzLmEuQSxoZWFkOnRoaXMuYSxrZXk6Zyx2YWx1ZTpofSxrLmxpc3QucHVzaChrLnMpLHRoaXMuYS5BLm5leHQ9ay5zLHRoaXMuYS5BPWsucyx0aGlzLnNpemUrKyk7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihnKXtnPWQodGhpcyxnKTtyZXR1cm4gZy5zJiZnLmxpc3Q/KGcubGlzdC5zcGxpY2UoZy5pbmRleCwxKSxnLmxpc3QubGVuZ3RofHxkZWxldGUgdGhpcy5iW2cuaWRdLGcucy5BLm5leHQ9Zy5zLm5leHQsZy5zLm5leHQuQT1nLnMuQSxnLnMuaGVhZD1udWxsLAp0aGlzLnNpemUtLSwhMCk6ITF9O2UucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5iPXt9O3RoaXMuYT10aGlzLmEuQT1iKCk7dGhpcy5zaXplPTB9O2UucHJvdG90eXBlLmhhcz1mdW5jdGlvbihnKXtyZXR1cm4hIWQodGhpcyxnKS5zfTtlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZyl7cmV0dXJuKGc9ZCh0aGlzLGcpLnMpJiZnLnZhbHVlfTtlLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcyxmdW5jdGlvbihnKXtyZXR1cm5bZy5rZXksZy52YWx1ZV19KX07ZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMsZnVuY3Rpb24oZyl7cmV0dXJuIGcua2V5fSl9O2UucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMsZnVuY3Rpb24oZyl7cmV0dXJuIGcudmFsdWV9KX07ZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihnLGgpe2Zvcih2YXIgaz10aGlzLmVudHJpZXMoKSxtOyEobT1rLm5leHQoKSkuZG9uZTspbT0KbS52YWx1ZSxnLmNhbGwoaCxtWzFdLG1bMF0sdGhpcyl9O2UucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09ZS5wcm90b3R5cGUuZW50cmllczt2YXIgbD0wO3JldHVybiBlfSk7eSgnT2JqZWN0LnZhbHVlcycsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXt2YXIgYz1bXSxkO2ZvcihkIGluIGIpdShiLGQpJiZjLnB1c2goYltkXSk7cmV0dXJuIGN9fSk7CnkoJ1NldCcsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihjKXt0aGlzLmE9bmV3IE1hcDtpZihjKXtjPXAoYyk7Zm9yKHZhciBkOyEoZD1jLm5leHQoKSkuZG9uZTspdGhpcy5hZGQoZC52YWx1ZSl9dGhpcy5zaXplPXRoaXMuYS5zaXplfWlmKGZ1bmN0aW9uKCl7aWYoIWF8fCdmdW5jdGlvbichPXR5cGVvZiBhfHwhYS5wcm90b3R5cGUuZW50cmllc3x8J2Z1bmN0aW9uJyE9dHlwZW9mIE9iamVjdC5zZWFsKXJldHVybiExO3RyeXt2YXIgYz1PYmplY3Quc2VhbCh7eDo0fSksZD1uZXcgYShwKFtjXSkpO2lmKCFkLmhhcyhjKXx8MSE9ZC5zaXplfHxkLmFkZChjKSE9ZHx8MSE9ZC5zaXplfHxkLmFkZCh7eDo0fSkhPWR8fDIhPWQuc2l6ZSlyZXR1cm4hMTt2YXIgZT1kLmVudHJpZXMoKSxmPWUubmV4dCgpO2lmKGYuZG9uZXx8Zi52YWx1ZVswXSE9Y3x8Zi52YWx1ZVsxXSE9YylyZXR1cm4hMTtmPWUubmV4dCgpO3JldHVybiBmLmRvbmV8fGYudmFsdWVbMF09PWN8fDQhPWYudmFsdWVbMF0ueHx8CmYudmFsdWVbMV0hPWYudmFsdWVbMF0/ITE6ZS5uZXh0KCkuZG9uZX1jYXRjaChsKXtyZXR1cm4hMX19KCkpcmV0dXJuIGE7bWEoKTtiLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYyl7Yz0wPT09Yz8wOmM7dGhpcy5hLnNldChjLGMpO3RoaXMuc2l6ZT10aGlzLmEuc2l6ZTtyZXR1cm4gdGhpc307Yi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGMpe2M9dGhpcy5hLmRlbGV0ZShjKTt0aGlzLnNpemU9dGhpcy5hLnNpemU7cmV0dXJuIGN9O2IucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5hLmNsZWFyKCk7dGhpcy5zaXplPTB9O2IucHJvdG90eXBlLmhhcz1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5hLmhhcyhjKX07Yi5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZW50cmllcygpfTtiLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnZhbHVlcygpfTtiLnByb3RvdHlwZS5rZXlzPWIucHJvdG90eXBlLnZhbHVlczsKYi5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1iLnByb3RvdHlwZS52YWx1ZXM7Yi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihjLGQpe3ZhciBlPXRoaXM7dGhpcy5hLmZvckVhY2goZnVuY3Rpb24oZil7cmV0dXJuIGMuY2FsbChkLGYsZixlKX0pfTtyZXR1cm4gYn0pO3koJ09iamVjdC5pcycsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMpe3JldHVybiBiPT09Yz8wIT09Ynx8MS9iPT09MS9jOmIhPT1iJiZjIT09Y319KTt5KCdBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMnLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYixjKXt2YXIgZD10aGlzO2QgaW5zdGFuY2VvZiBTdHJpbmcmJihkPVN0cmluZyhkKSk7dmFyIGU9ZC5sZW5ndGg7Yz1jfHwwO2ZvcigwPmMmJihjPU1hdGgubWF4KGMrZSwwKSk7YzxlO2MrKyl7dmFyIGY9ZFtjXTtpZihmPT09Ynx8T2JqZWN0LmlzKGYsYikpcmV0dXJuITB9cmV0dXJuITF9fSk7CnkoJ09iamVjdC5lbnRyaWVzJyxmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIpe3ZhciBjPVtdLGQ7Zm9yKGQgaW4gYil1KGIsZCkmJmMucHVzaChbZCxiW2RdXSk7cmV0dXJuIGN9fSk7CnZhciB6PXtxYTonbG9hZGVkJyx4YTonc3RhcnQnLGthOidmaXJzdFF1YXJ0aWxlJyxzYTonbWlkcG9pbnQnLHlhOid0aGlyZFF1YXJ0aWxlJyxpYTonY29tcGxldGUnLHRhOidwYXVzZScsdmE6J3Jlc3VtZScsaGE6J2J1ZmZlclN0YXJ0JyxnYTonYnVmZmVyRmluaXNoJyx3YTonc2tpcHBlZCcsQWE6J3ZvbHVtZUNoYW5nZScsdWE6J3BsYXllclN0YXRlQ2hhbmdlJyxkYTonYWRVc2VySW50ZXJhY3Rpb24nfSxvYT17bmE6J2dlbmVyaWMnLHphOid2aWRlbycscmE6J21lZGlhJ30scWE9e1I6J25hdGl2ZScsb2E6J2h0bWwnLFA6J2phdmFzY3JpcHQnfSxyYT17UjonbmF0aXZlJyxQOidqYXZhc2NyaXB0JyxOT05FOidub25lJ30sc2E9e21hOidmdWxsJyxqYTonZG9tYWluJyxwYTonbGltaXRlZCd9LHRhPXtmYTonYmFja2dyb3VuZGVkJyxsYTonZm9yZWdyb3VuZGVkJ30sdWE9e2VhOidhcHAnLEJhOid3ZWInfTtmdW5jdGlvbiBBKGEsYil7dGhpcy54PW51bGwhPWEueD9hLng6YS5sZWZ0O3RoaXMueT1udWxsIT1hLnk/YS55OmEudG9wO3RoaXMud2lkdGg9YS53aWR0aDt0aGlzLmhlaWdodD1hLmhlaWdodDt0aGlzLmVuZFg9dGhpcy54K3RoaXMud2lkdGg7dGhpcy5lbmRZPXRoaXMueSt0aGlzLmhlaWdodDt0aGlzLmFkU2Vzc2lvbklkPWEuYWRTZXNzaW9uSWR8fHZvaWQgMDt0aGlzLmlzRnJpZW5kbHlPYnN0cnVjdGlvbkZvcj1hLmlzRnJpZW5kbHlPYnN0cnVjdGlvbkZvcnx8W107dGhpcy5iPWEuZnJpZW5kbHlPYnN0cnVjdGlvbkNsYXNzfHx2b2lkIDA7dGhpcy5jPWEuZnJpZW5kbHlPYnN0cnVjdGlvblB1cnBvc2V8fHZvaWQgMDt0aGlzLmY9YS5mcmllbmRseU9ic3RydWN0aW9uUmVhc29ufHx2b2lkIDA7dGhpcy5jbGlwc1RvQm91bmRzPXZvaWQgMCE9PWEuY2xpcHNUb0JvdW5kcz8hMD09PWEuY2xpcHNUb0JvdW5kczohMDt0aGlzLm5vdFZpc2libGVSZWFzb249YS5ub3RWaXNpYmxlUmVhc29ufHwKdm9pZCAwO3RoaXMuY2hpbGRWaWV3cz1hLmNoaWxkVmlld3N8fFtdO3RoaXMuaXNDcmVhdGl2ZT1hLmlzQ3JlYXRpdmV8fCExO3RoaXMuYT1ifWZ1bmN0aW9uIHZhKGEpe3ZhciBiPXt9O3JldHVybiBiLndpZHRoPWEud2lkdGgsYi5oZWlnaHQ9YS5oZWlnaHQsYn1mdW5jdGlvbiBDKGEpe3ZhciBiPXt9O3JldHVybiBPYmplY3QuYXNzaWduKHt9LHZhKGEpLChiLng9YS54LGIueT1hLnksYikpfWZ1bmN0aW9uIHdhKGEpe3ZhciBiPUMoYSksYz17fTtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxiLChjLmVuZFg9YS5lbmRYLGMuZW5kWT1hLmVuZFksYykpfWZ1bmN0aW9uIHhhKGEsYixjKXthLngrPWI7YS55Kz1jO2EuZW5kWCs9YjthLmVuZFkrPWN9CkEucHJvdG90eXBlLko9ZnVuY3Rpb24oYSl7aWYobnVsbD09YSlyZXR1cm4hMTthPUMoYSk7dmFyIGI9YS55LGM9YS53aWR0aCxkPWEuaGVpZ2h0O3JldHVybiB0aGlzLng9PT1hLngmJnRoaXMueT09PWImJnRoaXMud2lkdGg9PT1jJiZ0aGlzLmhlaWdodD09PWR9O2Z1bmN0aW9uIHlhKGEpe3JldHVybiBhLndpZHRoKmEuaGVpZ2h0fTtmdW5jdGlvbiB6YShhLGIpe2E9QyhhKTtmb3IodmFyIGM9W10sZD1bXSxlPTA7ZTxiLmxlbmd0aDtlKyspe3ZhciBmPUMoYltlXSk7Zj1BYShhLGYpO0JhKGMsZi54KTtCYShjLGYuZW5kWCk7QmEoZCxmLnkpO0JhKGQsZi5lbmRZKX1jPWMuc29ydChmdW5jdGlvbihsLGcpe3JldHVybiBsLWd9KTtkPWQuc29ydChmdW5jdGlvbihsLGcpe3JldHVybiBsLWd9KTtyZXR1cm57YmE6YyxjYTpkfX1mdW5jdGlvbiBBYShhLGIpe3JldHVybnt4Ok1hdGgubWF4KGEueCxiLngpLHk6TWF0aC5tYXgoYS55LGIueSksZW5kWDpNYXRoLm1pbihhLngrYS53aWR0aCxiLngrYi53aWR0aCksZW5kWTpNYXRoLm1pbihhLnkrYS5oZWlnaHQsYi55K2IuaGVpZ2h0KX19ZnVuY3Rpb24gQmEoYSxiKXstMT09PWEuaW5kZXhPZihiKSYmYS5wdXNoKGIpfTtmdW5jdGlvbiBDYSgpe3RoaXMuYj10aGlzLmE9dGhpcy52PXRoaXMubD10aGlzLmc9dGhpcy5qPXZvaWQgMDt0aGlzLm09MDt0aGlzLmg9W107dGhpcy5vPVtdO3RoaXMudT0wO3RoaXMuaT1bXTt0aGlzLmM9W107dGhpcy5mPVtdfUNhLnByb3RvdHlwZS5KPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyExOkpTT04uc3RyaW5naWZ5KERhKHRoaXMpKT09PUpTT04uc3RyaW5naWZ5KERhKGEpKX07CmZ1bmN0aW9uIERhKGEpe3ZhciBiPVtdLGM9W10sZD17dmlld3BvcnQ6YS5qLGFkVmlldzp7cGVyY2VudGFnZUluVmlldzphLm0scmVhc29uczphLmZ9LGRlY2xhcmVkRnJpZW5kbHlPYnN0cnVjdGlvbnM6YS5oLmxlbmd0aH07aWYodm9pZCAwIT09YS5hKXtkLmFkVmlldy5nZW9tZXRyeT1DKGEuYSk7ZC5hZFZpZXcuZ2VvbWV0cnkucGl4ZWxzPXlhKGEuYSk7ZC5hZFZpZXcub25TY3JlZW5HZW9tZXRyeT1DKGEuYik7ZC5hZFZpZXcub25TY3JlZW5HZW9tZXRyeS5waXhlbHM9YS51O2Zvcih2YXIgZT0wO2U8YS5jLmxlbmd0aDtlKyspYi5wdXNoKEMoYS5jW2VdKSk7Zm9yKGU9MDtlPGEuby5sZW5ndGg7ZSsrKXt2YXIgZj1hLm9bZV0sbD1mLGc9e307bC5iJiYoZy5vYnN0cnVjdGlvbkNsYXNzPWwuYik7bC5jJiYoZy5vYnN0cnVjdGlvblB1cnBvc2U9bC5jKTtsLmYmJihnLm9ic3RydWN0aW9uUmVhc29uPWwuZik7Zj1BYShhLmEsZik7Yy5wdXNoKE9iamVjdC5hc3NpZ24oe30se3g6Zi54LAp5OmYueSx3aWR0aDpmLmVuZFgtZi54LGhlaWdodDpmLmVuZFktZi55fSxnKSl9ZC5hZFZpZXcub25TY3JlZW5HZW9tZXRyeS5vYnN0cnVjdGlvbnM9YjtkLmFkVmlldy5vblNjcmVlbkdlb21ldHJ5LmZyaWVuZGx5T2JzdHJ1Y3Rpb25zPWM7dm9pZCAwIT09YS5sJiZ2b2lkIDAhPT1hLnYmJihkLmFkVmlldy5jb250YWluZXJHZW9tZXRyeT1DKGEubCksZC5hZFZpZXcub25TY3JlZW5Db250YWluZXJHZW9tZXRyeT1DKGEudiksZC5hZFZpZXcubWVhc3VyaW5nRWxlbWVudD0hMCl9cmV0dXJuIGR9ZnVuY3Rpb24gRWEoYSxiKXtiPXZhKGIpO2Euaj17fTthLmoud2lkdGg9Yi53aWR0aDthLmouaGVpZ2h0PWIuaGVpZ2h0O2EuZz17fTthLmcueD0wO2EuZy55PTA7YS5nLndpZHRoPWIud2lkdGg7YS5nLmhlaWdodD1iLmhlaWdodDthLmcuZW5kWD1iLndpZHRoO2EuZy5lbmRZPWIuaGVpZ2h0fQpmdW5jdGlvbiBGYSgpe3JldHVybnt4OjAseTowLGVuZFg6MCxlbmRZOjAsd2lkdGg6MCxoZWlnaHQ6MH19ZnVuY3Rpb24gR2EoYSxiKXt2YXIgYz17fTtjLng9TWF0aC5tYXgoYS54LGIueCk7Yy55PU1hdGgubWF4KGEueSxiLnkpO2MuZW5kWD1NYXRoLm1pbihhLmVuZFgsYi5lbmRYKTtjLmVuZFk9TWF0aC5taW4oYS5lbmRZLGIuZW5kWSk7Yy53aWR0aD1NYXRoLm1heCgwLGMuZW5kWC1jLngpO2MuaGVpZ2h0PU1hdGgubWF4KDAsYy5lbmRZLWMueSk7cmV0dXJuIGN9ZnVuY3Rpb24gSGEoYSxiKXtyZXR1cm4uMDE8Yi53aWR0aC1hLndpZHRofHwuMDE8Yi5oZWlnaHQtYS5oZWlnaHR9CmZ1bmN0aW9uIElhKGEpe2lmKC0xIT09YS5mLmluZGV4T2YoJ2JhY2tncm91bmRlZCcpKWEubT0wLGEudT0wO2Vsc2V7dmFyIGI9eWEoYS5hKTtpZigwIT09Yil7dmFyIGM9eWEoYS5iKTt2YXIgZD1hLmMsZT0wO2lmKDA8ZC5sZW5ndGgpe3ZhciBmPXphKGEuYixkKSxsPWYuYmE7Zj1mLmNhO2Zvcih2YXIgZz0wO2c8bC5sZW5ndGgtMTtnKyspZm9yKHZhciBoPShsW2ddKyhsW2ddKzEpKS8yLGs9bFtnKzFdLWxbZ10sbT0wO208Zi5sZW5ndGgtMTttKyspe2Zvcih2YXIgdj0oZlttXSsoZlttXSsxKSkvMixCPWZbbSsxXS1mW21dLHg9ITEsRj0wO0Y8ZC5sZW5ndGg7RisrKXt2YXIgSz1DKGRbRl0pO2lmKEsueDxoJiZLLngrSy53aWR0aD5oJiZLLnk8diYmSy55K0suaGVpZ2h0PnYpe3g9ITA7YnJlYWt9fXgmJihlKz1NYXRoLnJvdW5kKGspKk1hdGgucm91bmQoQikpfX1jLT1lO2I9TWF0aC5yb3VuZChjL2IqMTAwKTthLm09TWF0aC5tYXgoYiwwKTthLnU9TWF0aC5tYXgoYywwKX19fQpmdW5jdGlvbiBKYShhLGIpe2lmKDAhPT1iLndpZHRoJiYwIT09Yi5oZWlnaHQmJmEuYil7dmFyIGM9d2EoYS5iKSxkPWMueSxlPWMuZW5kWDthPWMuZW5kWTt2YXIgZj1iLmVuZFg7Yz1jLng7KGY9ZjxjfHwuMDE+TWF0aC5hYnMoZi1jKSl8fChmPWIueCxmPWY+ZXx8LjAxPk1hdGguYWJzKGYtZSkpOyhlPWYpfHwoZT1iLmVuZFksZT1lPGR8fC4wMT5NYXRoLmFicyhlLWQpKTsoZD1lKXx8KGI9Yi55LGQ9Yj5hfHwuMDE+TWF0aC5hYnMoYi1hKSk7Yj0hZH1lbHNlIGI9ITE7cmV0dXJuIGJ9ZnVuY3Rpb24gRChhLGIpe2Zvcih2YXIgYz0hMSxkPTA7ZDxhLmYubGVuZ3RoO2QrKylhLmZbZF09PT1iJiYoYz0hMCk7Y3x8YS5mLnB1c2goYil9O2Z1bmN0aW9uIEthKGEsYixjLGQsZSl7dmFyIGY9bmV3IENhO2I9bmV3IEEoYiwhMSk7RWEoZixiKTtMYShhLGIsZixkKTtpZighZSlyZXR1cm4gZi5mPVsndW5tZWFzdXJhYmxlJ10sZi5qPXZvaWQgMCxmLm09MCxmLmM9W10sZi5hJiYoYT1mLmEsYz17fSxhPW5ldyBBKChjLng9MCxjLnk9MCxjLndpZHRoPWEud2lkdGgsYy5oZWlnaHQ9YS5oZWlnaHQsYyksYS5hKSxmLmE9YSksZi5iPUZhKCksZjtpZignYmFja2dyb3VuZGVkJz09PWMpRChmLCdiYWNrZ3JvdW5kZWQnKTtlbHNlIGlmKHZvaWQgMCE9PWYuYSl7Zm9yKGE9MDthPGYuaC5sZW5ndGg7YSsrKUphKGYsZi5oW2FdKSYmZi5vLnB1c2goZi5oW2FdKTtmb3IoYT0wO2E8Zi5pLmxlbmd0aDthKyspe2lmKGM9SmEoZixmLmlbYV0pKXthOntjPWYuaVthXTtmb3IoZD0wO2Q8Zi5jLmxlbmd0aDtkKyspaWYoZi5jW2RdLkooYykpe2M9ITA7YnJlYWsgYX1jPSExfWM9IWN9YyYmKEQoZiwnb2JzdHJ1Y3RlZCcpLGYuYy5wdXNoKGYuaVthXSkpfUlhKGYpfWVsc2UgRChmLAonbm90Rm91bmQnKTtyZXR1cm4gZn0KZnVuY3Rpb24gTGEoYSxiLGMsZCl7dmFyIGU9Yi5pc0NyZWF0aXZlPyEwOmIuYWRTZXNzaW9uSWQ9PT1kO2lmKGUpe2MuYT1iO3ZhciBmPXdhKGMuYSk7YT1HYShjLmcsZik7dmFyIGw9Yy5hOydub3RBdHRhY2hlZCc9PT1sLm5vdFZpc2libGVSZWFzb258fCdub1dpbmRvd0ZvY3VzJz09PWwubm90VmlzaWJsZVJlYXNvbnx8J25vQWRWaWV3Jz09PWwubm90VmlzaWJsZVJlYXNvbj8oRChjLCdub3RGb3VuZCcpLGMuYj1uZXcgQShGYSgpLCExKSk6KGw9Yy5hLCd2aWV3SW52aXNpYmxlJz09PWwubm90VmlzaWJsZVJlYXNvbnx8J3ZpZXdHb25lJz09PWwubm90VmlzaWJsZVJlYXNvbnx8J3ZpZXdOb3RWaXNpYmxlJz09PWwubm90VmlzaWJsZVJlYXNvbnx8J3ZpZXdBbHBoYVplcm8nPT09bC5ub3RWaXNpYmxlUmVhc29ufHwndmlld0hpZGRlbic9PT1sLm5vdFZpc2libGVSZWFzb258fHZvaWQgMCE9PWMuYS5ub3RWaXNpYmxlUmVhc29uPyhEKGMsJ2hpZGRlbicpLGMuYj1uZXcgQShGYSgpLAohMSkpOihIYShhLGYpJiZEKGMsJ2NsaXBwZWQnKSxjLmI9bmV3IEEoYSwhMSkpKX1lbHNlIGlmKGY9ITAsYi5hJiYoZj0tMSE9PWIuaXNGcmllbmRseU9ic3RydWN0aW9uRm9yLmluZGV4T2YoZCk/ITE6ITE9PT1iLmNsaXBzVG9Cb3VuZHMpLGYpe2w9Yi5jaGlsZFZpZXdzO2Zvcih2YXIgZz0wO2c8bC5sZW5ndGg7ZysrKWY9dm9pZCAwIT09Yy5hLExhKGEsbmV3IEEobFtnXSxmKSxjLGQpfWV8fHZvaWQgMD09PWMuYXx8KGIuYT8tMSE9PWIuaXNGcmllbmRseU9ic3RydWN0aW9uRm9yLmluZGV4T2YoZCk/Yy5oLnB1c2goYik6Yy5pLnB1c2goYik6KGU9d2EoYiksZD13YShjLmIpLEMoYy5iKSxhPWMuYiwwIT09YS53aWR0aCYmMCE9PWEuaGVpZ2h0JiZiLmNsaXBzVG9Cb3VuZHMmJihiPUdhKGQsZSksSGEoYixkKSYmKEQoYywnY2xpcHBlZCcpLGMuYj1uZXcgQShiLCExKSkpKSl9O2Z1bmN0aW9uIE1hKGEsYil7dGhpcy55PXRoaXMueD0wO3RoaXMud2lkdGg9YTt0aGlzLmhlaWdodD1ifTtmdW5jdGlvbiBOYSgpe3JldHVybnthcGlWZXJzaW9uOicxLjAnLGFjY2Vzc01vZGU6J2xpbWl0ZWQnLGVudmlyb25tZW50OidhcHAnLG9taWRKc0luZm86e29taWRJbXBsZW1lbnRlcjonb21zZGsnLHNlcnZpY2VWZXJzaW9uOicxLjMuMjItaWFiMjk4Mid9fX1mdW5jdGlvbiBPYSgpe3RoaXMuYWRTZXNzaW9uSWQ9bnVsbDt0aGlzLmM9TmEoKTt0aGlzLm89bnVsbDt0aGlzLm09J2ZvcmVncm91bmRlZCc7dGhpcy5sPXRoaXMuaT0nbm9uZSc7dGhpcy5qPXRoaXMuZz10aGlzLmY9dGhpcy5oPXRoaXMuYT10aGlzLmI9dGhpcy5CPXRoaXMudT1udWxsO3RoaXMuQz0hMDt0aGlzLnY9bmV3IE1hcH12YXIgRztmdW5jdGlvbiBIKCl7R3x8KEc9bmV3IE9hKTtyZXR1cm4gR307dmFyIFBhPWV2YWwoJ3RoaXMnKSxJPWZ1bmN0aW9uKCl7aWYoJ3VuZGVmaW5lZCchPT10eXBlb2Ygb21pZEdsb2JhbCYmb21pZEdsb2JhbClyZXR1cm4gb21pZEdsb2JhbDtpZigndW5kZWZpbmVkJyE9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbClyZXR1cm4gZ2xvYmFsO2lmKCd1bmRlZmluZWQnIT09dHlwZW9mIHdpbmRvdyYmd2luZG93KXJldHVybiB3aW5kb3c7aWYoJ3VuZGVmaW5lZCchPT10eXBlb2YgUGEmJlBhKXJldHVybiBQYTt0aHJvdyBFcnJvcignQ291bGQgbm90IGRldGVybWluZSBnbG9iYWwgb2JqZWN0IGNvbnRleHQuJyk7fSgpO2Z1bmN0aW9uIFFhKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9dC5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhRYS5wcm90b3R5cGUse2V2ZW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfX0sb3JpZ2luOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifX19KTtmdW5jdGlvbiBKKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPWFyZ3VtZW50c1tjXTtSYShmdW5jdGlvbigpe3Rocm93IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoRXJyb3IsW251bGwsJ0NvdWxkIG5vdCBjb21wbGV0ZSB0aGUgdGVzdCBzdWNjZXNzZnVsbHkgLSAnXS5jb25jYXQocShiKSkpKTt9LGZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSxxKGIpKX0pfWZ1bmN0aW9uIFNhKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPWFyZ3VtZW50c1tjXTtSYShmdW5jdGlvbigpe30sZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvci5hcHBseShjb25zb2xlLHEoYikpfSl9CmZ1bmN0aW9uIFJhKGEsYil7J3VuZGVmaW5lZCchPT10eXBlb2YgamFzbWluZSYmamFzbWluZT9hKCk6J3VuZGVmaW5lZCchPT10eXBlb2YgY29uc29sZSYmY29uc29sZSYmY29uc29sZS5lcnJvciYmYigpfTtmdW5jdGlvbiBUYSgpe3RoaXMuZj1bXTt0aGlzLmI9W107dGhpcy5jPVtdO3RoaXMuZz1bXTt0aGlzLmk9e307dGhpcy5hPUgoKX1mdW5jdGlvbiBVYShhKXthLmY9W107YS5iPVtdO2EuYz1bXTthLmc9W107YS5pPXt9O0cuYWRTZXNzaW9uSWQ9bnVsbDtHLmM9TmEoKTtHLm89bnVsbDtHLkc9dm9pZCAwO0cuSz12b2lkIDA7Ry5IPW51bGw7Ry5JPW51bGw7Ry5EPW51bGw7Ry5tPSdmb3JlZ3JvdW5kZWQnO0cuaT0nbm9uZSc7Ry5sPSdub25lJztHLnU9bnVsbDtHLkI9bnVsbDtHLmI9bnVsbDtHLmE9bnVsbDtHLmg9bnVsbDtHLmY9bnVsbDtHLmc9bnVsbDtHLmo9bnVsbDtHLkM9ITA7Ry52PW5ldyBNYXB9CmZ1bmN0aW9uIFZhKGEsYil7dm9pZCAwIT09YS5hJiZhLmEuYWRTZXNzaW9uSWQmJiExIT09V2EoYSxiKSYmYS5jLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gYy50eXBlPT09Yi5ldmVudC50eXBlfSkuZm9yRWFjaChmdW5jdGlvbihjKXtyZXR1cm4gYS5oKGMuRixiLmV2ZW50KX0pfWZ1bmN0aW9uIFhhKGEsYil7YS5mLnB1c2goYik7VmEoYSxiKX1mdW5jdGlvbiBZYShhLGIsYyl7dm9pZCAwIT09YS5hJiZhLmEuYWRTZXNzaW9uSWQmJmEuZi5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIGQuZXZlbnQudHlwZT09PWImJldhKGEsZCl9KS5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIGQuZXZlbnR9KS5mb3JFYWNoKGMpfQpmdW5jdGlvbiBXYShhLGIpe3ZhciBjPWIuZXZlbnQudHlwZSxkPS0xIT09T2JqZWN0LnZhbHVlcyh6KS5pbmRleE9mKGMpJiYndm9sdW1lQ2hhbmdlJyE9PWM7cmV0dXJuJ2ltcHJlc3Npb24nPT09Y3x8J2xvYWRlZCc9PT1jJiZhLmEuYT9iLm9yaWdpbj09PUgoKS5sOmQ/Yi5vcmlnaW49PT1IKCkuaTohMH1mdW5jdGlvbiBaYShhLGIsYyl7J21lZGlhJz09PWJ8fCd2aWRlbyc9PT1iPyRhKGEsYyk6KGEuYy5wdXNoKHt0eXBlOmIsRjpjfSksWWEoYSxiLGMpKX1mdW5jdGlvbiAkYShhLGIpe09iamVjdC5rZXlzKHopLmZvckVhY2goZnVuY3Rpb24oYyl7Yz16W2NdO2EuYy5wdXNoKHt0eXBlOmMsRjpifSk7WWEoYSxjLGIpfSl9ZnVuY3Rpb24gYWIoYSxiLGMsZCl7dmFyIGU9e086YyxMOmQsRjpifTthLmcucHVzaChlKTthLmIuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgbD1iYihmKTsnc2Vzc2lvblN0YXJ0Jz09PWYuZXZlbnQudHlwZSYmY2IoYSxsLGUpO2EuaChiLGwpfSl9CmZ1bmN0aW9uIGRiKGEsYixjKXt2YXIgZD1MKGEsJ3Nlc3Npb25FcnJvcicsJ25hdGl2ZScse2Vycm9yVHlwZTpiLG1lc3NhZ2U6Y30pO2EuYi5wdXNoKGQpO2EuZy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2EuaChlLkYsZC5ldmVudCl9KX1mdW5jdGlvbiBlYihhLGIpe2EuaT1PYmplY3QuYXNzaWduKGEuaSxiKTtiPWEuYS5jO2lmKHZvaWQgMCE9PWIpe2I9T2JqZWN0LmFzc2lnbih7fSxmYihhLGdiKGEse2NvbnRleHQ6Yn0pLCEwKSx7c3VwcG9ydHNMb2FkZWRFdmVudDohIWEuYS5hfHwndmlkZW8nPT1hLmEuYn0pO09iamVjdC5hc3NpZ24oYix7cGFnZVVybDpudWxsLGNvbnRlbnRVcmw6YS5hLm99KTt2YXIgYz1MKGEsJ3Nlc3Npb25TdGFydCcsJ25hdGl2ZScsYik7YS5iLnB1c2goYyk7YS5nLmZvckVhY2goZnVuY3Rpb24oZCl7dmFyIGU9ZC5GLGY9YmIoYyk7Y2IoYSxmLGQpO2EuaChlLGYpfSxhKTtoYihhKX19CmZ1bmN0aW9uIGNiKGEsYixjKXtjLk8mJihiLmRhdGEudmVyaWZpY2F0aW9uUGFyYW1ldGVycz1hLmlbYy5PXSk7Yy5MJiYoYz1hLmEudi5nZXQoYy5MKSkmJihiLmRhdGEudmVyaWZpY2F0aW9uUGFyYW1ldGVycz1jLnZlcmlmaWNhdGlvblBhcmFtZXRlcnMsYi5kYXRhLmNvbnRleHQuYWNjZXNzTW9kZT1jLmFjY2Vzc01vZGUsJ2Z1bGwnPT09Yy5hY2Nlc3NNb2RlJiYoYS5hLmcmJihiLmRhdGEuY29udGV4dC52aWRlb0VsZW1lbnQ9YS5hLmcpLGEuYS5mJiYoYi5kYXRhLmNvbnRleHQuc2xvdEVsZW1lbnQ9YS5hLmYpKSl9ZnVuY3Rpb24gaWIoYSl7dmFyIGI9YS5nLGM9TChhLCdzZXNzaW9uRmluaXNoJywnbmF0aXZlJyk7YS5iLnB1c2goYyk7dmFyIGQ9YS5hLmM7ZCYmJ25hdGl2ZSc9PWQuYWRTZXNzaW9uVHlwZXx8VWEoYSk7Yi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBhLmgoZS5GLGMuZXZlbnQpfSl9ClRhLnByb3RvdHlwZS5oPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdLGQ9MTtkPGFyZ3VtZW50cy5sZW5ndGg7KytkKWNbZC0xXT1hcmd1bWVudHNbZF07dHJ5e2EuYXBwbHkobnVsbCxxKGMpKX1jYXRjaChlKXtTYShlKX19O2Z1bmN0aW9uIGpiKGEsYil7dmFyIGM9KGM9SCgpLkQpP0RhKGMpOnZvaWQgMDtjPWZiKGEsZ2IoYSxjKSk7WGEoYSxMKGEsJ2ltcHJlc3Npb24nLGIsYykpfWZ1bmN0aW9uIGtiKGEsYixjKXtpZihhLmEuYXx8J2Rpc3BsYXknIT1hLmEuYiliPUwoYSwnbG9hZGVkJyxiLGZiKGEsZ2IoYSx2b2lkIDA9PT1jP251bGw6YykpKSxYYShhLGIpfQpmdW5jdGlvbiBsYihhLGIsYyxkKXsnc3RhcnQnIT09YiYmJ3ZvbHVtZUNoYW5nZSchPT1ifHxudWxsIT0oZCYmZC5kZXZpY2VWb2x1bWUpfHwoZC5kZXZpY2VWb2x1bWU9YS5hLnUpO2lmKGQmJignc3RhcnQnPT09Ynx8J3ZvbHVtZUNoYW5nZSc9PT1iKSl7dmFyIGU9ZC52aWRlb1BsYXllclZvbHVtZSxmPWQubWVkaWFQbGF5ZXJWb2x1bWU7bnVsbCE9ZT8oT2JqZWN0LmFzc2lnbihkLHttZWRpYVBsYXllclZvbHVtZTplfSksYS5hLkI9ZSk6bnVsbCE9ZiYmKE9iamVjdC5hc3NpZ24oZCx7dmlkZW9QbGF5ZXJWb2x1bWU6Zn0pLGEuYS5CPWYpfVhhKGEsTChhLGIsYyxkKSl9CmZ1bmN0aW9uIGhiKGEpe3ZhciBiPWEuZi5maWx0ZXIoZnVuY3Rpb24oZil7cmV0dXJuIE9iamVjdC52YWx1ZXMoeikuaW5jbHVkZXMoZi5ldmVudC50eXBlKSYmJ3ZpZGVvJz09YS5hLmImJmYub3JpZ2luPT09YS5hLml8fCdsb2FkZWQnPT1mLmV2ZW50LnR5cGUmJidkaXNwbGF5Jz09YS5hLmImJmYub3JpZ2luPT09YS5hLmw/ITA6ITF9KS5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIGYuZXZlbnR9KSxjPWEuYS5hZFNlc3Npb25JZHx8JycsZD17fTtiPXAoYik7Zm9yKHZhciBlPWIubmV4dCgpOyFlLmRvbmU7ZD17dzpkLnd9LGU9Yi5uZXh0KCkpe2Qudz1lLnZhbHVlO2Qudy5hZFNlc3Npb25JZHx8KGQudy5hZFNlc3Npb25JZD1jKTtpZignbG9hZGVkJz09ZC53LnR5cGUpe2lmKCFhLmEuYSYmJ2Rpc3BsYXknPT1hLmEuYiljb250aW51ZTtkLncuZGF0YT1mYihhLGdiKGEsZC53LmRhdGEpKX1hLmMuZmlsdGVyKGZ1bmN0aW9uKGYpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gbC50eXBlPT09CmYudy50eXBlfX0oZCkpLmZvckVhY2goZnVuY3Rpb24oZil7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBsLkYoZi53KX19KGQpKX19ZnVuY3Rpb24gbWIoYSxiLGMpe2E6e2M9bmV3IFNldChjKTthPXAoYS5mLmNvbmNhdChhLmIpKTtmb3IodmFyIGQ9YS5uZXh0KCk7IWQuZG9uZTtkPWEubmV4dCgpKWlmKGQ9ZC52YWx1ZSxjLmhhcyhkLmV2ZW50LnR5cGUpJiZkLm9yaWdpbiE9Yil7Yj0hMDticmVhayBhfWI9ITF9cmV0dXJuIGI/KEooJ0V2ZW50IG93bmVyIGNhbm5vdCBiZSByZWdpc3RlcmVkIGFmdGVyIGl0cyBldmVudHMgaGF2ZSBhbHJlYWR5IGJlZW4gcHVibGlzaGVkLicpLCExKTohMH1mdW5jdGlvbiBuYihhLGIpe21iKGEsYixPYmplY3QudmFsdWVzKHopKSYmTShhLGIpJiYoYS5hLmk9Yil9ZnVuY3Rpb24gb2IoYSxiKXttYihhLGIsWydpbXByZXNzaW9uJ10pJiZwYihhLGIpJiYoYS5hLmw9Yil9CmZ1bmN0aW9uIHBiKGEsYil7dmFyIGM9YS5hLmw7cmV0dXJuJ25vbmUnIT1jJiZjIT1iPyhKKCdJbXByZXNzaW9uIGV2ZW50IGlzIG93bmVkIGJ5ICcrKGEuYS5sKycsIG5vdCAnKSsoYisnLicpKSwhMSk6ITB9ZnVuY3Rpb24gTShhLGIpe3ZhciBjPWEuYS5pO3JldHVybidub25lJyE9YyYmYyE9Yj8oSignTWVkaWEgZXZlbnRzIGFyZSBvd25lZCBieSAnKyhhLmEuaSsnLCBub3QgJytiKycuJykpLCExKTohMH1mdW5jdGlvbiBmYihhLGIsYyl7Yz12b2lkIDA9PT1jPyExOmM7Yj1PYmplY3QuYXNzaWduKHt9LGIpO2EuYS5iJiZPYmplY3QuYXNzaWduKGIse21lZGlhVHlwZTphLmEuYn0pO2EuYS5hJiYoY3x8J2RlZmluZWRCeUphdmFTY3JpcHQnIT09YS5hLmEpJiZPYmplY3QuYXNzaWduKGIse2NyZWF0aXZlVHlwZTphLmEuYX0pO3JldHVybiBifWZ1bmN0aW9uIGdiKGEsYil7cmV0dXJuIGEuYS5oP09iamVjdC5hc3NpZ24oe30sYix7aW1wcmVzc2lvblR5cGU6YS5hLmh9KTpifQpmdW5jdGlvbiBMKGEsYixjLGQpe3JldHVybiBuZXcgUWEoe2FkU2Vzc2lvbklkOmEuYS5hZFNlc3Npb25JZHx8JycsdGltZXN0YW1wOihuZXcgRGF0ZSkuZ2V0VGltZSgpLHR5cGU6YixkYXRhOmR9LGMpfWZ1bmN0aW9uIGJiKGEpe2E9YS5ldmVudDtyZXR1cm57YWRTZXNzaW9uSWQ6YS5hZFNlc3Npb25JZCx0aW1lc3RhbXA6YS50aW1lc3RhbXAsdHlwZTphLnR5cGUsZGF0YTphLmRhdGF9fTtmdW5jdGlvbiBxYihhLGIsYyl7J2NvbnRhaW5lcic9PT1iJiZ2b2lkIDAhPT1hLmEuRyYmdm9pZCAwIT09YS5hJiZudWxsIT1hLmEuYWRTZXNzaW9uSWQmJihhLmEuSD1LYShhLmMsYS5hLkcsYS5hLm0sYS5hLmFkU2Vzc2lvbklkLCEwKSk7Yj1hLmE7dmFyIGQ9Yi5ILGU9Yi5JO2lmKGQpaWYoZSl7Yj1uZXcgQ2E7dmFyIGY9ZC5qLGw9ZC5hLGc9ZC5iLGg9ZS5hO2U9ZS5iO2YmJmwmJmcmJmgmJmUmJihFYShiLGYpLGIubD1uZXcgQShsLCExKSxiLnY9bmV3IEEoZywhMSksYi5pPU9iamVjdC5hc3NpZ24oW10sZC5pKSxiLmM9T2JqZWN0LmFzc2lnbihbXSxkLmMpLGIuaD1PYmplY3QuYXNzaWduKFtdLGQuaCksYi5vPU9iamVjdC5hc3NpZ24oW10sZC5vKSxiLmY9T2JqZWN0LmFzc2lnbihbXSxkLmYpLGQ9Yi5sLngsZj1iLmwueSxoPW5ldyBBKGgsITEpLGU9bmV3IEEoZSwhMSkseGEoaCxkLGYpLHhhKGUsZCxmKSxiLmE9aCxiLmI9R2EoZSxnKSxJYShiKSl9ZWxzZSBiPWQ7ZWxzZSBiPQpudWxsO2c9YS5hLkQ7aWYoYiYmIWIuSihnKXx8YylnPURhKGIpLGMmJihnLmFkVmlldy5yZWFzb25zPWcuYWRWaWV3LnJlYXNvbnN8fFtjXSksYz1hLmIsJ2F1ZGlvJyE9Yy5hLmEmJlhhKGMsTChjLCdnZW9tZXRyeUNoYW5nZScsJ25hdGl2ZScsZykpLGEuYS5EPWJ9O2Z1bmN0aW9uIE4oYSl7cmV0dXJuJ29iamVjdCc9PT10eXBlb2YgYX1mdW5jdGlvbiByYihhKXtyZXR1cm4nbnVtYmVyJz09PXR5cGVvZiBhJiYhaXNOYU4oYSkmJjA8PWF9ZnVuY3Rpb24gTyhhKXtyZXR1cm4nc3RyaW5nJz09PXR5cGVvZiBhfWZ1bmN0aW9uIFAoYSxiKXtyZXR1cm4gTyhhKSYmLTEhPT1PYmplY3QudmFsdWVzKGIpLmluZGV4T2YoYSl9ZnVuY3Rpb24gc2IoYSl7dmFyIGI9YSYmYS50YWdOYW1lJiYnaWZyYW1lJz09PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpO3RyeXtiPWImJmEgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudH1jYXRjaChjKXt9cmV0dXJuIGJ9ZnVuY3Rpb24gdGIoYSl7dmFyIGI9YSYmYS50YWdOYW1lO3RyeXtiPWImJmEgaW5zdGFuY2VvZiBhLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuSFRNTEVsZW1lbnR9Y2F0Y2goYyl7fXJldHVybiBifQpmdW5jdGlvbiB1YihhKXt2YXIgYj1hJiZhLnRhZ05hbWUmJid2aWRlbyc9PT1hLnRhZ05hbWUudG9Mb3dlckNhc2UoKTt0cnl7Yj1iJiZhIGluc3RhbmNlb2YgYS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkhUTUxWaWRlb0VsZW1lbnR9Y2F0Y2goYyl7fXJldHVybiBifTtmdW5jdGlvbiBRKGEsYixjKXt0aGlzLmY9YTt0aGlzLks9Yjt0aGlzLkc9Yzt0aGlzLmM9SCgpO3RoaXMuYj1udWxsO3RoaXMuYT10aGlzLmc9dGhpcy51PXZvaWQgMDt0aGlzLkk9ITA7dGhpcy5CPXZvaWQgMDtSKHRoaXMpfWZ1bmN0aW9uIFIoYSl7aWYoIWEuYil7dmFyIGI7YTp7aWYoKGI9YS5mLmRvY3VtZW50KSYmYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiYoYj1iLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ29taWQtZWxlbWVudCcpKSl7aWYoMT09Yi5sZW5ndGgpe2I9YlswXTticmVhayBhfTE8Yi5sZW5ndGgmJmEuSSYmKGRiKGEuRywnZ2VuZXJpYycsIk1vcmUgdGhhbiBvbmUgZWxlbWVudCB3aXRoICdvbWlkLWVsZW1lbnQnIGNsYXNzIG5hbWUuIiksYS5JPSExKX1iPW51bGx9aWYodWIoYikpYS5jLmc9YjtlbHNlIGlmKHRiKGIpKWEuYy5mPWI7ZWxzZSByZXR1cm47dmIoYSl9fQpmdW5jdGlvbiB2YihhKXthLmMuZz8oYS5iPWEuYy5nLGEuaSgpKTphLmMuZiYmKGEuYj1hLmMuZixzYihhLmIpP2EuYy5qJiZhLmkoKTphLmkoKSl9ZnVuY3Rpb24gd2IoYSl7YS5hJiYoc2IoYS5iKT9hLmMuaiYmKGEuRCgpLHhiKGEpKTooYS5EKCkseGIoYSkpKX1RLnByb3RvdHlwZS5tPWZ1bmN0aW9uKCl7dGhpcy5CJiYodGhpcy5mLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLHRoaXMuQiksdGhpcy5CPXZvaWQgMCl9O1EucHJvdG90eXBlLmk9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIHhiKGEpe2EudSYmKGEuYy5JPWEudSxxYihhLkssJ2NyZWF0aXZlJykpfWZ1bmN0aW9uIHliKGEpe2lmKGEuYSYmYS5jLmope3ZhciBiPW5ldyBBKGEuYy5qLCExKTt4YShiLGEuYS54LGEuYS55KTtiLmNsaXBzVG9Cb3VuZHM9ITA7cmV0dXJuIGJ9fTtmdW5jdGlvbiB6YihhLGIsYyl7cmV0dXJuIEFiKGEsJ3NldEludGVydmFsJykoYixjKX1mdW5jdGlvbiBCYihhLGIpe0FiKGEsJ2NsZWFySW50ZXJ2YWwnKShiKX1mdW5jdGlvbiBDYihhLGIpe0FiKGEsJ2NsZWFyVGltZW91dCcpKGIpfWZ1bmN0aW9uIEFiKGEsYil7cmV0dXJuIGEuYSYmYS5hW2JdP2EuYVtiXTpEYihhLGIpfQpmdW5jdGlvbiBFYihhLGIsYyxkKXtpZihhLmEuZG9jdW1lbnQmJmEuYS5kb2N1bWVudC5ib2R5KXt2YXIgZT1hLmEuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7ZS53aWR0aD0xO2UuaGVpZ2h0PTE7ZS5zdHlsZS5kaXNwbGF5PSdub25lJztlLnNyYz1iO2MmJmUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsZnVuY3Rpb24oKXtyZXR1cm4gYygpfSk7ZCYmZS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsZnVuY3Rpb24oKXtyZXR1cm4gZCgpfSk7YS5hLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSl9ZWxzZSBEYihhLCdzZW5kVXJsJykoYixjLGQpfWZ1bmN0aW9uIERiKGEsYil7aWYoYS5hJiZhLmEub21pZE5hdGl2ZSYmYS5hLm9taWROYXRpdmVbYl0pcmV0dXJuIGEuYS5vbWlkTmF0aXZlW2JdLmJpbmQoYS5hLm9taWROYXRpdmUpO3Rocm93IEVycm9yKCdOYXRpdmUgaW50ZXJmYWNlIG1ldGhvZCAiJytiKyciIG5vdCBmb3VuZC4nKTt9O2Z1bmN0aW9uIFMoYSxiLGMsZCxlKXtRLmNhbGwodGhpcyxhLGMsZSk7dGhpcy5sPWI7dGhpcy5oPXZvaWQgMDt0aGlzLmo9ZH1yKFMsUSk7Uy5wcm90b3R5cGUubT1mdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuaCYmKEJiKHRoaXMuaix0aGlzLmgpLHRoaXMuaD12b2lkIDApO1EucHJvdG90eXBlLm0uY2FsbCh0aGlzKX07Uy5wcm90b3R5cGUuaT1mdW5jdGlvbigpe3ZhciBhPXRoaXM7US5wcm90b3R5cGUuaS5jYWxsKHRoaXMpO251bGw9PXRoaXMuYj90aGlzLmg9dm9pZCAwOnZvaWQgMD09PXRoaXMuaCYmKHRoaXMuaD16Yih0aGlzLmosZnVuY3Rpb24oKXtyZXR1cm4gRmIoYSl9LDIwMCksRmIodGhpcykpfTsKUy5wcm90b3R5cGUuRD1mdW5jdGlvbigpe2lmKHRoaXMuZyl7dmFyIGE9eWIodGhpcyk7aWYoYSl7dGhpcy5hLmlzQ3JlYXRpdmU9ITE7YS5pc0NyZWF0aXZlPSEwO2Zvcih2YXIgYj0hMSxjPTA7Yzx0aGlzLmEuY2hpbGRWaWV3cy5sZW5ndGg7YysrKWlmKHRoaXMuYS5jaGlsZFZpZXdzW2NdLmlzQ3JlYXRpdmUpe3RoaXMuYS5jaGlsZFZpZXdzW2NdPWE7Yj0hMDticmVha31ifHx0aGlzLmEuY2hpbGRWaWV3cy5wdXNoKGEpfWVsc2UgdGhpcy5hLmlzQ3JlYXRpdmU9ITA7dGhpcy51PUthKHRoaXMubCx0aGlzLmcsdGhpcy5jLm0sdGhpcy5jLmFkU2Vzc2lvbklkLHRoaXMuQygpKX19O1MucHJvdG90eXBlLkM9ZnVuY3Rpb24oKXtyZXR1cm4hMH07CmZ1bmN0aW9uIEZiKGEpe2lmKHZvaWQgMCE9PWEuaCl7Yjp7dHJ5e3ZhciBiPWEuZi50b3A7dmFyIGM9MDw9Yi5pbm5lckhlaWdodCYmMDw9Yi5pbm5lcldpZHRoO2JyZWFrIGJ9Y2F0Y2goZCl7fWM9ITF9Yz8oYz1hLmYudG9wLGM9bmV3IEEobmV3IE1hKGMuaW5uZXJXaWR0aCxjLmlubmVySGVpZ2h0KSwhMSkpOmM9bmV3IEEobmV3IE1hKDAsMCksITEpO2I9YS5iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKG51bGw9PWIueHx8aXNOYU4oYi54KSliLng9Yi5sZWZ0O2lmKG51bGw9PWIueXx8aXNOYU4oYi55KSliLnk9Yi50b3A7Yj1uZXcgQShiLCExKTtjLkooYS5nKSYmYi5KKGEuYSl8fChhLmE9YixhLmEuY2xpcHNUb0JvdW5kcz0hMCxhLmc9YyxhLmcuY2hpbGRWaWV3cy5wdXNoKGEuYSksd2IoYSkpfX07ZnVuY3Rpb24gVChhLGIsYyxkKXtRLmNhbGwodGhpcyxhLGMsZCk7dGhpcy5vPXRoaXMuaj10aGlzLmw9dGhpcy5oPXZvaWQgMDt0aGlzLkg9ITE7dGhpcy52PXZvaWQgMH1yKFQsUSk7VC5wcm90b3R5cGUubT1mdW5jdGlvbigpe3RoaXMuaCYmdGhpcy5oLmRpc2Nvbm5lY3QoKTtHYih0aGlzKTtRLnByb3RvdHlwZS5tLmNhbGwodGhpcyl9O1QucHJvdG90eXBlLmk9ZnVuY3Rpb24oKXtRLnByb3RvdHlwZS5pLmNhbGwodGhpcyk7dGhpcy5iJiYodGhpcy5ofHwodGhpcy5oPUhiKHRoaXMpKSxJYih0aGlzKSxKYih0aGlzLmIpJiZLYih0aGlzKSl9OwpULnByb3RvdHlwZS5EPWZ1bmN0aW9uKCl7aWYodGhpcy5hJiZ0aGlzLnYpe3ZhciBhPXliKHRoaXMpO2lmKGEpe3ZhciBiPWE7dmFyIGM9dGhpcy52O3ZhciBkPU1hdGgubWF4KGEueCxjLngpO3ZhciBlPU1hdGgubWF4KGEueSxjLnkpLGY9TWF0aC5taW4oYS5lbmRYLGMuZW5kWCk7YT1NYXRoLm1pbihhLmVuZFksYy5lbmRZKTtmPD1kfHxhPD1lP2Q9bnVsbDooYz17fSxkPW5ldyBBKChjLng9ZCxjLnk9ZSxjLndpZHRoPU1hdGguYWJzKGYtZCksYy5oZWlnaHQ9TWF0aC5hYnMoYS1lKSxjKSwhMSkpO2R8fChkPW5ldyBBKHt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9LCExKSl9ZWxzZSBiPXRoaXMuYSxkPXRoaXMudjtlPW5ldyBDYTt0aGlzLmcmJkVhKGUsdGhpcy5nKTtlLmE9YjtlLmI9ZDtJYShlKTt0aGlzLkg/MTAwPT09ZS5tfHxEKGUsJ2NsaXBwZWQnKTpEKGUsJ3ZpZXdwb3J0Jyk7dGhpcy51PWV9fTtULnByb3RvdHlwZS5DPWZ1bmN0aW9uKCl7cmV0dXJuITB9OwpmdW5jdGlvbiBHYihhKXthLmwmJihhLmwuZGlzY29ubmVjdCgpLGEubD12b2lkIDApO2EuaiYmKGEuai5kaXNjb25uZWN0KCksYS5qPXZvaWQgMCk7YS5vJiYoKDAsYS5mLnJlbW92ZUV2ZW50TGlzdGVuZXIpKCdyZXNpemUnLGEubyksYS5vPXZvaWQgMCl9ZnVuY3Rpb24gSWIoYSl7YS5oJiZhLmImJihhLmgudW5vYnNlcnZlKGEuYiksYS5oLm9ic2VydmUoYS5iKSl9ZnVuY3Rpb24gSmIoYSl7YT1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiAwPT1hLndpZHRofHwwPT1hLmhlaWdodH0KZnVuY3Rpb24gSGIoYSl7cmV0dXJuIG5ldyBhLmYuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oYil7dHJ5e2lmKGIubGVuZ3RoKXtmb3IodmFyIGMsZD1iWzBdLGU9MTtlPGIubGVuZ3RoO2UrKyliW2VdLnRpbWU+ZC50aW1lJiYoZD1iW2VdKTtjPWQ7YS5nPUxiKGMucm9vdEJvdW5kcyk7YS5hPUxiKGMuYm91bmRpbmdDbGllbnRSZWN0KTthLnY9TGIoYy5pbnRlcnNlY3Rpb25SZWN0KTthLkg9ISFjLmlzSW50ZXJzZWN0aW5nO3diKGEpfX1jYXRjaChmKXthLm0oKSxkYihhLkcsJ2dlbmVyaWMnLCdQcm9ibGVtIGhhbmRsaW5nIEludGVyc2VjdGlvbk9ic2VydmVyIGNhbGxiYWNrOiAnK2YubWVzc2FnZSl9fSx7cm9vdDpudWxsLHJvb3RNYXJnaW46JzBweCcsdGhyZXNob2xkOlswLC4xLC4yLC4zLC40LC41LC42LC43LC44LC45LDFdfSl9CmZ1bmN0aW9uIEtiKGEpe2EuZi5SZXNpemVPYnNlcnZlcj9hLmx8fChhLmw9TWIoYSxmdW5jdGlvbigpe3JldHVybiBPYihhKX0pLGEubC5vYnNlcnZlKGEuYikpOihhLm98fChhLm89ZnVuY3Rpb24oKXtyZXR1cm4gT2IoYSl9LCgwLGEuZi5hZGRFdmVudExpc3RlbmVyKSgncmVzaXplJyxhLm8pKSxhLmp8fChhLmo9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXtyZXR1cm4gT2IoYSl9KSxhLmoub2JzZXJ2ZShhLmIse2NoaWxkTGlzdDohMSxhdHRyaWJ1dGVzOiEwLHN1YnRyZWU6ITF9KSkpfWZ1bmN0aW9uIE9iKGEpe2EuYiYmIUpiKGEuYikmJihJYihhKSxHYihhKSl9ZnVuY3Rpb24gTWIoYSxiKXtyZXR1cm4gbmV3IGEuZi5SZXNpemVPYnNlcnZlcihiKX1mdW5jdGlvbiBMYihhKXtpZihhJiZudWxsIT09YS54JiZudWxsIT09YS55JiZudWxsIT09YS53aWR0aCYmbnVsbCE9PWEuaGVpZ2h0KXJldHVybiBuZXcgQShhLCExKX07ZnVuY3Rpb24gUGIoYSl7cmV0dXJuIGEmJk4oYSk/T2JqZWN0LmVudHJpZXMoYSkucmVkdWNlKGZ1bmN0aW9uKGIsYyl7dmFyIGQ9cChjKTtjPWQubmV4dCgpLnZhbHVlO2Q9ZC5uZXh0KCkudmFsdWU7cmV0dXJuIGImJk8oYykmJm51bGwhPWQmJk4oZCkmJk8oZC5yZXNvdXJjZVVybCl9LCEwKTohMX07ZnVuY3Rpb24gVShhLGIsYyxkKXt0aGlzLmI9YTt0aGlzLm1ldGhvZD1iO3RoaXMudmVyc2lvbj1jO3RoaXMuYT1kfWZ1bmN0aW9uIFFiKGEpe3JldHVybiEhYSYmdm9pZCAwIT09YS5vbWlkX21lc3NhZ2VfZ3VpZCYmdm9pZCAwIT09YS5vbWlkX21lc3NhZ2VfbWV0aG9kJiZ2b2lkIDAhPT1hLm9taWRfbWVzc2FnZV92ZXJzaW9uJiYnc3RyaW5nJz09PXR5cGVvZiBhLm9taWRfbWVzc2FnZV9ndWlkJiYnc3RyaW5nJz09PXR5cGVvZiBhLm9taWRfbWVzc2FnZV9tZXRob2QmJidzdHJpbmcnPT09dHlwZW9mIGEub21pZF9tZXNzYWdlX3ZlcnNpb24mJih2b2lkIDA9PT1hLm9taWRfbWVzc2FnZV9hcmdzfHx2b2lkIDAhPT1hLm9taWRfbWVzc2FnZV9hcmdzKX1mdW5jdGlvbiBSYihhKXtyZXR1cm4gbmV3IFUoYS5vbWlkX21lc3NhZ2VfZ3VpZCxhLm9taWRfbWVzc2FnZV9tZXRob2QsYS5vbWlkX21lc3NhZ2VfdmVyc2lvbixhLm9taWRfbWVzc2FnZV9hcmdzKX0KZnVuY3Rpb24gU2IoYSl7dmFyIGI9e307Yj0oYi5vbWlkX21lc3NhZ2VfZ3VpZD1hLmIsYi5vbWlkX21lc3NhZ2VfbWV0aG9kPWEubWV0aG9kLGIub21pZF9tZXNzYWdlX3ZlcnNpb249YS52ZXJzaW9uLGIpO3ZvaWQgMCE9PWEuYSYmKGIub21pZF9tZXNzYWdlX2FyZ3M9YS5hKTtyZXR1cm4gYn07ZnVuY3Rpb24gVGIoYSl7dGhpcy5jPWF9O2Z1bmN0aW9uIFYoYSl7dGhpcy5jPWE7dGhpcy5oYW5kbGVFeHBvcnRlZE1lc3NhZ2U9Vi5wcm90b3R5cGUuZi5iaW5kKHRoaXMpfXIoVixUYik7Vi5wcm90b3R5cGUuYj1mdW5jdGlvbihhLGIpe2I9dm9pZCAwPT09Yj90aGlzLmM6YjtpZighYil0aHJvdyBFcnJvcignTWVzc2FnZSBkZXN0aW5hdGlvbiBtdXN0IGJlIGRlZmluZWQgYXQgY29uc3RydWN0aW9uIHRpbWUgb3Igd2hlbiBzZW5kaW5nIHRoZSBtZXNzYWdlLicpO2IuaGFuZGxlRXhwb3J0ZWRNZXNzYWdlKFNiKGEpLHRoaXMpfTtWLnByb3RvdHlwZS5mPWZ1bmN0aW9uKGEsYil7UWIoYSkmJnRoaXMuYSYmdGhpcy5hKFJiKGEpLGIpfTtmdW5jdGlvbiBVYihhLGIpe3RoaXMuYz1iPXZvaWQgMD09PWI/STpiO3ZhciBjPXRoaXM7YS5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJyxmdW5jdGlvbihkKXtpZignb2JqZWN0Jz09PXR5cGVvZiBkLmRhdGEpe3ZhciBlPWQuZGF0YTtRYihlKSYmZC5zb3VyY2UmJmMuYSYmYy5hKFJiKGUpLGQuc291cmNlKX19KX1yKFViLFRiKTtVYi5wcm90b3R5cGUuYj1mdW5jdGlvbihhLGIpe2I9dm9pZCAwPT09Yj90aGlzLmM6YjtpZighYil0aHJvdyBFcnJvcignTWVzc2FnZSBkZXN0aW5hdGlvbiBtdXN0IGJlIGRlZmluZWQgYXQgY29uc3RydWN0aW9uIHRpbWUgb3Igd2hlbiBzZW5kaW5nIHRoZSBtZXNzYWdlLicpO2IucG9zdE1lc3NhZ2UoU2IoYSksJyonKX07ZnVuY3Rpb24gVmIoKXtyZXR1cm4neHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csZnVuY3Rpb24oYSl7dmFyIGI9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybid5Jz09PWE/KGImM3w4KS50b1N0cmluZygxNik6Yi50b1N0cmluZygxNil9KX07ZnVuY3Rpb24gV2IoYSl7aWYoIWEuYXx8IWEuYS5kb2N1bWVudCl0aHJvdyBFcnJvcignT01JRCBTZXJ2aWNlIFNjcmlwdCBpcyBub3QgcnVubmluZyB3aXRoaW4gYSB3aW5kb3cuJyk7dmFyIGI9YS5iO2EuYj1bXTtiLmZvckVhY2goZnVuY3Rpb24oYyl7dHJ5e3ZhciBkPWEuYy5DPydsaW1pdGVkJzonZnVsbCcsZT1QKGMuYWNjZXNzTW9kZSxzYSk/Yy5hY2Nlc3NNb2RlOm51bGw7dmFyIGY9ZT8nZnVsbCc9PWUmJidsaW1pdGVkJz09ZD9kOidkb21haW4nPT1lPydsaW1pdGVkJzplOmQ7Yy5hY2Nlc3NNb2RlPWY7YTp7dmFyIGw9Yy5yZXNvdXJjZVVybCxnPWEuYS5sb2NhdGlvbi5vcmlnaW47dHJ5e3ZhciBoPW5ldyBVUkwobCxnKTticmVhayBhfWNhdGNoKEYpe310cnl7aD1uZXcgVVJMKGwpO2JyZWFrIGF9Y2F0Y2goRil7fWg9bnVsbH1pZihkPWgpe3ZhciBrPVZiKCksbT1hLmEuZG9jdW1lbnQsdj1tLmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO3YuaWQ9J29taWQtdmVyaWZpY2F0aW9uLXNjcmlwdC1mcmFtZS0nKwprO3Yuc3R5bGUuZGlzcGxheT0nbm9uZSc7WydmdWxsJywnbGltaXRlZCddLmluY2x1ZGVzKGYpP3Yuc3JjZG9jPSI8aHRtbD48aGVhZD5cbjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPndpbmRvd1snb21pZFZlcmlmaWNhdGlvblByb3BlcnRpZXMnXSA9IHtcbidzZXJ2aWNlV2luZG93Jzogd2luZG93LnBhcmVudCxcbidpbmplY3Rpb25Tb3VyY2UnOiAnYXBwJyxcbidpbmplY3Rpb25JZCc6ICciKyhrKydcJyxcbn07XHgzYy9zY3JpcHQ+XG48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInKStkLmhyZWYrJyI+XHgzYy9zY3JpcHQ+XG48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4nOidkb21haW4nPT1mJiYodi5zcmM9WGIoYSxrLGQpLmhyZWYpO1snZG9tYWluJywnbGltaXRlZCddLmluY2x1ZGVzKGYpJiYodi5zYW5kYm94PSdhbGxvdy1zY3JpcHRzJyk7bS5ib2R5LmFwcGVuZENoaWxkKHYpO3ZhciBCPWMudmVuZG9yS2V5LHg9Yy52ZXJpZmljYXRpb25QYXJhbWV0ZXJzOwpCPXZvaWQgMD09PUI/Jyc6Qjt4PXZvaWQgMD09PXg/Jyc6eDtCJiYnc3RyaW5nJz09PXR5cGVvZiBCJiYnJyE9PUImJngmJidzdHJpbmcnPT09dHlwZW9mIHgmJicnIT09eCYmKGEuZi5pW0JdPXgpO2EuYy52LnNldChrLGMpfX1jYXRjaChGKXtTYSgnT01JRCB2ZXJpZmljYXRpb24gc2NyaXB0ICcrYy5yZXNvdXJjZVVybCsnIGZhaWxlZCB0byBsb2FkOiAnK0YpfX0pfQpmdW5jdGlvbiBYYihhLGIsYyl7dmFyIGQ9Jy8ud2VsbC1rbm93bi9vbWlkL29tbG9hZGVyLXYxLmh0bWwjJzsobmV3IE1hcChbWyd2ZXJpZmljYXRpb25TY3JpcHRVcmwnLGMuaHJlZl0sWydpbmplY3Rpb25JZCcsYl1dKSkuZm9yRWFjaChmdW5jdGlvbihlLGYpe2QrPWVuY29kZVVSSUNvbXBvbmVudChmKSsnPScrZW5jb2RlVVJJQ29tcG9uZW50KGUpKycmJ30pO2I9bnVsbDt0cnl7Yj1uZXcgVVJMKGQsYS5hLnBhcmVudC5sb2NhdGlvbi5vcmlnaW4pfWNhdGNoKGUpe3Rocm93IEVycm9yKCdPTUlEIFNlcnZpY2UgU2NyaXB0IGNhbm5vdCBhY2Nlc3MgdGhlIHBhcmVudCB3aW5kb3cuJyk7fXJldHVybiBifTtmdW5jdGlvbiBZYigpe3ZhciBhPVpiLGI9JGIsYz10aGlzO3RoaXMuYz1XO3RoaXMuYj1hO3RoaXMuYT1IKCk7dGhpcy5nPWI7dGhpcy5mPSExO3RoaXMucmVnaXN0ZXJTZXNzaW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIGFjKGMsZCl9KX1uPVliLnByb3RvdHlwZTtuLnJlZ2lzdGVyU2Vzc2lvbk9ic2VydmVyPWZ1bmN0aW9uKGEpe2FiKHRoaXMuYyxhKX07bi5zZXRTbG90RWxlbWVudD1mdW5jdGlvbihhKXt0YihhKT8odGhpcy5hLmY9YSx0aGlzLmImJnZiKHRoaXMuYikpOkooJ3NldFNsb3RFbGVtZW50IGNhbGxlZCB3aXRoIGEgbm9uLUhUTUxFbGVtZW50LiAgSXQgd2lsbCBiZSBpZ25vcmVkLicpfTtuLnNldEVsZW1lbnRCb3VuZHM9ZnVuY3Rpb24oYSl7dGhpcy5hLmo9YTt0aGlzLmImJnZiKHRoaXMuYik7dGhpcy5iJiZ3Yih0aGlzLmIpfTtuLmVycm9yPWZ1bmN0aW9uKGEsYil7ZGIodGhpcy5jLGEsYil9OwpuLnJlZ2lzdGVyQWRFdmVudHM9ZnVuY3Rpb24oKXtvYih0aGlzLmMsJ2phdmFzY3JpcHQnKX07bi5yZWdpc3Rlck1lZGlhRXZlbnRzPWZ1bmN0aW9uKCl7bmIodGhpcy5jLCdqYXZhc2NyaXB0Jyl9O2Z1bmN0aW9uIFkoYSxiLGMpeydpbXByZXNzaW9uJz09Yj9wYihhLmMsJ2phdmFzY3JpcHQnKSYmKGpiKGEuYywnamF2YXNjcmlwdCcpLGEuYiYmUihhLmIpKTooJ2xvYWRlZCc9PWI/KGM9dm9pZCAwPT09Yz9udWxsOmMsTShhLmMsJ2phdmFzY3JpcHQnKSYma2IoYS5jLCdqYXZhc2NyaXB0JyxjKSk6TShhLmMsJ2phdmFzY3JpcHQnKSYmbGIoYS5jLGIsJ2phdmFzY3JpcHQnLGMpLFsnbG9hZGVkJywnc3RhcnQnXS5pbmNsdWRlcyhiKSYmYS5iJiZSKGEuYikpfW4uaW5qZWN0VmVyaWZpY2F0aW9uU2NyaXB0UmVzb3VyY2VzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZztiLmIucHVzaC5hcHBseShiLmIscShhKSk7aWYodGhpcy5mKXRyeXtXYih0aGlzLmcpfWNhdGNoKGMpe0ooYy5tZXNzYWdlKX19OwpuLnNldENyZWF0aXZlVHlwZT1mdW5jdGlvbihhLGIpe2I9dm9pZCAwPT09Yj9udWxsOmI7aWYoIXRoaXMuYS5ifHx0aGlzLmEuYSl0aGlzLmEuYT1hLCd2aWRlbyc9PWF8fCdhdWRpbyc9PWE/dGhpcy5hLmI9J3ZpZGVvJzonaHRtbERpc3BsYXknPT1hfHwnbmF0aXZlRGlzcGxheSc9PWE/dGhpcy5hLmI9J2Rpc3BsYXknOidkZWZpbmVkQnlKYXZhU2NyaXB0Jz09YSYmYiYmKHRoaXMuYS5iPSdub25lJz09Yj8nZGlzcGxheSc6J3ZpZGVvJyl9O24uc2V0SW1wcmVzc2lvblR5cGU9ZnVuY3Rpb24oYSl7aWYoIXRoaXMuYS5ifHx0aGlzLmEuYSl0aGlzLmEuaD1hfTsKZnVuY3Rpb24gYWMoYSxiKXtpZignc2Vzc2lvblN0YXJ0Jz09PWIudHlwZSl7YS5mPSEwO3RyeXtXYihhLmcpfWNhdGNoKGMpe0ooYy5tZXNzYWdlKX19J3Nlc3Npb25GaW5pc2gnPT09Yi50eXBlJiYoYS5mPSExLChiPUgoKS5jKSYmJ25hdGl2ZSc9PWIuYWRTZXNzaW9uVHlwZXx8YS5yZWdpc3RlclNlc3Npb25PYnNlcnZlcihmdW5jdGlvbihjKXtyZXR1cm4gYWMoYSxjKX0pKX1uLnNldENsaWVudEluZm89ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuYS5jfHx7fTtkLm9taWRKc0luZm89T2JqZWN0LmFzc2lnbih7fSxkLm9taWRKc0luZm8se3Nlc3Npb25DbGllbnRWZXJzaW9uOmEscGFydG5lck5hbWU6YixwYXJ0bmVyVmVyc2lvbjpjfSk7dGhpcy5hLmM9ZDtyZXR1cm4gdGhpcy5hLmMub21pZEpzSW5mby5zZXJ2aWNlVmVyc2lvbn07ZnVuY3Rpb24gYmMoYSl7cmV0dXJuL1xkK1wuXGQrXC5cZCsoLS4qKT8vLnRlc3QoYSl9ZnVuY3Rpb24gY2MoYSl7YT1hLnNwbGl0KCctJylbMF0uc3BsaXQoJy4nKTtmb3IodmFyIGI9WycxJywnMCcsJzMnXSxjPTA7Mz5jO2MrKyl7dmFyIGQ9cGFyc2VJbnQoYVtjXSwxMCksZT1wYXJzZUludChiW2NdLDEwKTtpZihkPmUpYnJlYWs7ZWxzZSBpZihkPGUpcmV0dXJuITF9cmV0dXJuITB9O2Z1bmN0aW9uIGRjKGEsYil7cmV0dXJuIGJjKGEpJiZjYyhhKT9iP2I6W106YiYmJ3N0cmluZyc9PT10eXBlb2YgYj9KU09OLnBhcnNlKGIpOltdfTtmdW5jdGlvbiBlYygpe3ZhciBhPWZjO3ZhciBiPXZvaWQgMD09PWI/b21pZEdsb2JhbDpiO3RoaXMuYT1hO3RoaXMuZj1iO3RoaXMuYj1uZXcgVjt0aGlzLmYub21pZD10aGlzLmYub21pZHx8e307dGhpcy5mLm9taWQudjFfU2Vzc2lvblNlcnZpY2VDb21tdW5pY2F0aW9uPXRoaXMuYjt0aGlzLmM9YiYmYi5hZGRFdmVudExpc3RlbmVyJiZiLnBvc3RNZXNzYWdlP25ldyBVYihiKTpudWxsO3RoaXMuZz1udWxsO3RoaXMuYi5hPXRoaXMuaC5iaW5kKHRoaXMpO3RoaXMuYyYmKHRoaXMuYy5hPXRoaXMuaS5iaW5kKHRoaXMpKX1lYy5wcm90b3R5cGUuaD1mdW5jdGlvbihhLGIpe2djKHRoaXMsYSxiLHRoaXMuYil9OwplYy5wcm90b3R5cGUuaT1mdW5jdGlvbihhLGIpe3RoaXMuZ3x8KHRoaXMuZz1iKTt0aGlzLmchPWI/SignVGhlIHNvdXJjZSB3aW5kb3cgb2Ygc2Vzc2lvbiBjbGllbnQgcG9zdCBtZXNzYWdlcyBjYW5ub3QgYmUgY2hhbmdlZCBmcm9tIHRoZSBzb3VyY2Ugb2YgdGhlIGZpcnN0IG1lc3NhZ2UuJyk6Z2ModGhpcyxhLGIsdGhpcy5jKX07CmZ1bmN0aW9uIGdjKGEsYixjLGQpe2Z1bmN0aW9uIGUoaCl7Zm9yKHZhciBrPVtdLG09MDttPGFyZ3VtZW50cy5sZW5ndGg7KyttKWtbbV09YXJndW1lbnRzW21dO2s9bmV3IFUoZiwncmVzcG9uc2UnLGcsYmMoZykmJmNjKGcpP2s6SlNPTi5zdHJpbmdpZnkoaykpO2QuYihrLGMpfXZhciBmPWIuYixsPWIubWV0aG9kLGc9Yi52ZXJzaW9uO2I9ZGMoZyxiLmEpO3RyeXtoYyhhLGwsZSxiKX1jYXRjaChoKXtkLmIobmV3IFUoZiwnZXJyb3InLGcsJ1xuICAgICAgICBuYW1lOiAnK2gubmFtZSsnXG4gICAgICAgIG1lc3NhZ2U6ICcraC5tZXNzYWdlKydcbiAgICAgICAgZmlsZW5hbWU6ICcraC5maWxlbmFtZSsnXG4gICAgICAgIGxpbmVOdW1iZXI6ICcraC5saW5lTnVtYmVyKydcbiAgICAgICAgY29sdW1uTnVtYmVyOiAnK2guY29sdW1uTnVtYmVyKydcbiAgICAgICAgc3RhY2s6ICcraC5zdGFjaysnXG4gICAgICAgIHRvU3RyaW5nKCk6ICcraC50b1N0cmluZygpKSxjKX19CmZ1bmN0aW9uIGhjKGEsYixjLGQpe3N3aXRjaChiKXtjYXNlICdTZXNzaW9uU2VydmljZS5yZWdpc3RlckFkRXZlbnRzJzphLmEucmVnaXN0ZXJBZEV2ZW50cygpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnJlZ2lzdGVyTWVkaWFFdmVudHMnOmEuYS5yZWdpc3Rlck1lZGlhRXZlbnRzKCk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UucmVnaXN0ZXJTZXNzaW9uT2JzZXJ2ZXInOmEuYS5yZWdpc3RlclNlc3Npb25PYnNlcnZlcihjKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5zZXRTbG90RWxlbWVudCc6Yz1wKGQpLm5leHQoKS52YWx1ZTthLmEuc2V0U2xvdEVsZW1lbnQoYyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc2V0VmlkZW9FbGVtZW50JzpjPXAoZCkubmV4dCgpLnZhbHVlO2E9YS5hO3ViKGMpPyhhLmEuZz1jLGEuYiYmdmIoYS5iKSk6Signc2V0VmlkZW9FbGVtZW50IGNhbGxlZCB3aXRoIGEgbm9uLUhUTUxWaWRlb0VsZW1lbnQuIEl0IHdpbGwgYmUgaWdub3JlZC4nKTsKYnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc2V0RWxlbWVudEJvdW5kcyc6Yz1wKGQpLm5leHQoKS52YWx1ZTthLmEuc2V0RWxlbWVudEJvdW5kcyhjKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5zdGFydFNlc3Npb24nOkooJ1Nlc3Npb24gc3RhcnQgZnJvbSBKUyBpcyBub3Qgc3VwcG9ydGVkIGluIG1vYmlsZSBhcHAuJyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UuZmluaXNoU2Vzc2lvbic6SignU2Vzc2lvbiBmaW5pc2ggZnJvbSBKUyBpcyBub3Qgc3VwcG9ydGVkIGluIG1vYmlsZSBhcHAuJyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UuaW1wcmVzc2lvbk9jY3VycmVkJzpZKGEuYSwnaW1wcmVzc2lvbicpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLmxvYWRlZCc6KGM9cChkKS5uZXh0KCkudmFsdWUpPyhiPXtza2lwcGFibGU6Yy5pc1NraXBwYWJsZSxhdXRvUGxheTpjLmlzQXV0b1BsYXkscG9zaXRpb246Yy5wb3NpdGlvbn0sYy5pc1NraXBwYWJsZSYmCihiLnNraXBPZmZzZXQ9Yy5za2lwT2Zmc2V0KSxZKGEuYSwnbG9hZGVkJyxiKSk6WShhLmEsJ2xvYWRlZCcpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnN0YXJ0JzpiPXAoZCk7Yz1iLm5leHQoKS52YWx1ZTtiPWIubmV4dCgpLnZhbHVlO1koYS5hLCdzdGFydCcse2R1cmF0aW9uOmMsbWVkaWFQbGF5ZXJWb2x1bWU6Yn0pO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLmZpcnN0UXVhcnRpbGUnOlkoYS5hLCdmaXJzdFF1YXJ0aWxlJyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UubWlkcG9pbnQnOlkoYS5hLCdtaWRwb2ludCcpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnRoaXJkUXVhcnRpbGUnOlkoYS5hLCd0aGlyZFF1YXJ0aWxlJyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UuY29tcGxldGUnOlkoYS5hLCdjb21wbGV0ZScpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnBhdXNlJzpZKGEuYSwncGF1c2UnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5yZXN1bWUnOlkoYS5hLAoncmVzdW1lJyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UuYnVmZmVyU3RhcnQnOlkoYS5hLCdidWZmZXJTdGFydCcpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLmJ1ZmZlckZpbmlzaCc6WShhLmEsJ2J1ZmZlckZpbmlzaCcpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnNraXBwZWQnOlkoYS5hLCdza2lwcGVkJyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uudm9sdW1lQ2hhbmdlJzpjPXttZWRpYVBsYXllclZvbHVtZTpwKGQpLm5leHQoKS52YWx1ZX07WShhLmEsJ3ZvbHVtZUNoYW5nZScsYyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UucGxheWVyU3RhdGVDaGFuZ2UnOmM9e3N0YXRlOnAoZCkubmV4dCgpLnZhbHVlfTtZKGEuYSwncGxheWVyU3RhdGVDaGFuZ2UnLGMpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLmFkVXNlckludGVyYWN0aW9uJzpjPXtpbnRlcmFjdGlvblR5cGU6cChkKS5uZXh0KCkudmFsdWV9O1koYS5hLCdhZFVzZXJJbnRlcmFjdGlvbicsCmMpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnNldENsaWVudEluZm8nOnZhciBlPXAoZCk7Yj1lLm5leHQoKS52YWx1ZTtkPWUubmV4dCgpLnZhbHVlO2U9ZS5uZXh0KCkudmFsdWU7YT1hLmEuc2V0Q2xpZW50SW5mbyhiLGQsZSk7YyhhKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5pbmplY3RWZXJpZmljYXRpb25TY3JpcHRSZXNvdXJjZXMnOmM9cChkKS5uZXh0KCkudmFsdWU7YS5hLmluamVjdFZlcmlmaWNhdGlvblNjcmlwdFJlc291cmNlcyhjKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5zZXRDcmVhdGl2ZVR5cGUnOmM9cChkKS5uZXh0KCkudmFsdWU7YS5hLnNldENyZWF0aXZlVHlwZShjKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5zZXRJbXByZXNzaW9uVHlwZSc6Yz1wKGQpLm5leHQoKS52YWx1ZTthLmEuc2V0SW1wcmVzc2lvblR5cGUoYyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc2V0Q29udGVudFVybCc6Yz1wKGQpLm5leHQoKS52YWx1ZTsKYS5hLmEubz1jO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnNlc3Npb25FcnJvcic6Yj1wKGQpLGM9Yi5uZXh0KCkudmFsdWUsYj1iLm5leHQoKS52YWx1ZSxhLmEuZXJyb3IoYyxiKX19O2Z1bmN0aW9uIFooKXt2YXIgYT1XLGI9aWMsYz1qYyxkPVpiO3RoaXMuZj1mYzt0aGlzLmE9YTt0aGlzLmM9Yjt0aGlzLmg9Yzt0aGlzLmc9ZDt0aGlzLmI9SCgpfW49Wi5wcm90b3R5cGU7Cm4uVD1mdW5jdGlvbihhKXtpZighKCEoYSYmTihhKSYmUChhLmltcHJlc3Npb25Pd25lcixyYSkpfHwndmlkZW9FdmVudHNPd25lcidpbiBhJiZudWxsIT1hLnZpZGVvRXZlbnRzT3duZXImJiFQKGEudmlkZW9FdmVudHNPd25lcixyYSl8fCdtZWRpYUV2ZW50c093bmVyJ2luIGEmJm51bGwhPWEubWVkaWFFdmVudHNPd25lciYmIVAoYS5tZWRpYUV2ZW50c093bmVyLHJhKSkpe2lmKGEuY3JlYXRpdmVUeXBlJiZhLmltcHJlc3Npb25UeXBlKXt2YXIgYj1hLm1lZGlhRXZlbnRzT3duZXI7bnVsbD09dGhpcy5iLmEmJnRoaXMuZi5zZXRDcmVhdGl2ZVR5cGUoYS5jcmVhdGl2ZVR5cGUsYik7bnVsbD09dGhpcy5iLmgmJih0aGlzLmIuaD1hLmltcHJlc3Npb25UeXBlKTtuYih0aGlzLmEsYil9ZWxzZSBiPWEudmlkZW9FdmVudHNPd25lcix0aGlzLmIuYj1udWxsPT1ifHwnbm9uZSc9PT1iPydkaXNwbGF5JzondmlkZW8nLHRoaXMuYi5hPW51bGwsdGhpcy5iLmg9bnVsbCxuYih0aGlzLmEsYik7Cm9iKHRoaXMuYSxhLmltcHJlc3Npb25Pd25lcik7YSYmbnVsbCE9YS5pc29sYXRlVmVyaWZpY2F0aW9uU2NyaXB0cyYmJ2Jvb2xlYW4nPT09dHlwZW9mIGEuaXNvbGF0ZVZlcmlmaWNhdGlvblNjcmlwdHMmJih0aGlzLmIuQz1hLmlzb2xhdGVWZXJpZmljYXRpb25TY3JpcHRzKX19OwpuLlc9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU7aWYoTihiKSl7aWYoZT1QKGIuZW52aXJvbm1lbnQsdWEpJiZQKGIuYWRTZXNzaW9uVHlwZSxxYSkpZT1iLm9taWROYXRpdmVJbmZvLGU9TihlKT9PKGUucGFydG5lck5hbWUpJiZPKGUucGFydG5lclZlcnNpb24pOiExO2UmJihlPWIuYXBwLGU9TihlKT9PKGUubGlicmFyeVZlcnNpb24pJiZPKGUuYXBwSWQpOiExKX1lbHNlIGU9ITE7ZSYmKFBiKGQpJiYodGhpcy5iLnY9bmV3IE1hcChPYmplY3QuZW50cmllcyhkKSkpLGQ9dGhpcy5mLGM9dm9pZCAwPT09Yz9udWxsOmMsbnVsbD09YSYmKGE9VmIoKSksYi5jYW5NZWFzdXJlVmlzaWJpbGl0eT1kLmIuQygpLGQuYS5hZFNlc3Npb25JZD1hLGE9ZC5hLGU9Yix2b2lkIDAhPT1lLmNvbnRlbnRVcmwmJihhLm89ZS5jb250ZW50VXJsLGUuY29udGVudFVybD12b2lkIDApLGU9YS5jfHx7fSxiLm9taWRKc0luZm89T2JqZWN0LmFzc2lnbih7fSxlLm9taWRKc0luZm98fHt9LGIub21pZEpzSW5mb3x8Cnt9KSxlPWI9T2JqZWN0LmFzc2lnbih7fSxlLGIpLGEuQ3x8KG51bGwhPWEuZz8oZS52aWRlb0VsZW1lbnQ9YS5nLGUuYWNjZXNzTW9kZT0nZnVsbCcpOm51bGwhPWEuZiYmKGUuc2xvdEVsZW1lbnQ9YS5mLGUuYWNjZXNzTW9kZT0nZnVsbCcpKSxhLmM9YixlYihkLmMsYyksZC5iJiZSKGQuYikpfTtuLlU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmY7aWIoYS5jKTthLmIubSgpfTtuLiQ9ZnVuY3Rpb24oYSl7TihhKSYmcmIoYS54KSYmcmIoYS55KSYmcmIoYS53aWR0aCkmJnJiKGEuaGVpZ2h0KSYmKHRoaXMuYi5HPWEscWIodGhpcy5jLCdjb250YWluZXInKSl9O24uYWE9ZnVuY3Rpb24oYSl7UChhLHRhKSYmKHRoaXMuYi5tPWEsJ2JhY2tncm91bmRlZCc9PT1hP3FiKHRoaXMuYywnY29udGFpbmVyJywnYmFja2dyb3VuZGVkJyk6cWIodGhpcy5jLCdjb250YWluZXInKSl9O24uWD1mdW5jdGlvbihhKXsnaW1wcmVzc2lvbic9PT1hJiYodGhpcy5NKCksdGhpcy5nJiZSKHRoaXMuZykpfTsKbi5NPWZ1bmN0aW9uKCl7cGIodGhpcy5hLCduYXRpdmUnKSYmamIodGhpcy5hLCduYXRpdmUnKX07bi5WPWZ1bmN0aW9uKGEpe2E9dm9pZCAwPT09YT9udWxsOmE7TSh0aGlzLmEsJ25hdGl2ZScpJiZrYih0aGlzLmEsJ25hdGl2ZScsYSl9O24uZXJyb3I9ZnVuY3Rpb24oYSxiKXtQKGEsb2EpJiZkYih0aGlzLmEsYSxiKX07bi5ZPWZ1bmN0aW9uKGEsYil7dGhpcy5OKGEsYil9O24uTj1mdW5jdGlvbihhLGIpe00odGhpcy5hLCduYXRpdmUnKSYmUChhLHopJiYodm9pZCAwPT09Ynx8TihiKSkmJignbG9hZGVkJz09YT9rYih0aGlzLmEsJ25hdGl2ZScsYik6bGIodGhpcy5hLGEsJ25hdGl2ZScsYikpfTsKbi5aPWZ1bmN0aW9uKGEpe2lmKCdub25lJyE9PXRoaXMuYS5hLmkmJidudW1iZXInPT09dHlwZW9mIGEmJiFpc05hTihhKSl7dGhpcy5iLnU9YTthPXRoaXMuaDt2YXIgYj1hLmEuQjtudWxsIT1iJiZsYihhLmIsJ3ZvbHVtZUNoYW5nZScsJ25hdGl2ZScse21lZGlhUGxheWVyVm9sdW1lOmIsZGV2aWNlVm9sdW1lOmEuYS51fSl9fTtaLnByb3RvdHlwZS5zdGFydFNlc3Npb249Wi5wcm90b3R5cGUuVztaLnByb3RvdHlwZS5lcnJvcj1aLnByb3RvdHlwZS5lcnJvcjtaLnByb3RvdHlwZS5maW5pc2hTZXNzaW9uPVoucHJvdG90eXBlLlU7Wi5wcm90b3R5cGUucHVibGlzaEFkRXZlbnQ9Wi5wcm90b3R5cGUuWDtaLnByb3RvdHlwZS5wdWJsaXNoSW1wcmVzc2lvbkV2ZW50PVoucHJvdG90eXBlLk07Wi5wcm90b3R5cGUucHVibGlzaFZpZGVvRXZlbnQ9Wi5wcm90b3R5cGUuWTtaLnByb3RvdHlwZS5wdWJsaXNoTWVkaWFFdmVudD1aLnByb3RvdHlwZS5OOwpaLnByb3RvdHlwZS5wdWJsaXNoTG9hZGVkRXZlbnQ9Wi5wcm90b3R5cGUuVjtaLnByb3RvdHlwZS5zZXROYXRpdmVWaWV3SGllcmFyY2h5PVoucHJvdG90eXBlLiQ7Wi5wcm90b3R5cGUuc2V0U3RhdGU9Wi5wcm90b3R5cGUuYWE7Wi5wcm90b3R5cGUuc2V0RGV2aWNlVm9sdW1lPVoucHJvdG90eXBlLlo7Wi5wcm90b3R5cGUuaW5pdD1aLnByb3RvdHlwZS5UO2Z1bmN0aW9uIGtjKCl7dmFyIGE9VyxiPWxjO3ZhciBjPXZvaWQgMD09PWM/STpjO3RoaXMuZz1hO3RoaXMuYT1iO3RoaXMuaD17fTt0aGlzLmY9e307dGhpcy5jPW5ldyBWO2Mub21pZD1jLm9taWR8fHt9O2Mub21pZC52MV9WZXJpZmljYXRpb25TZXJ2aWNlQ29tbXVuaWNhdGlvbj10aGlzLmM7dGhpcy5iPW51bGw7YyYmYy5hZGRFdmVudExpc3RlbmVyJiZjLnBvc3RNZXNzYWdlJiYodGhpcy5iPW5ldyBVYihjKSk7dGhpcy5jLmE9dGhpcy5pLmJpbmQodGhpcyk7dGhpcy5iJiYodGhpcy5iLmE9dGhpcy5qLmJpbmQodGhpcykpfWZ1bmN0aW9uIG1jKGEsYixjLGQpe0ViKGEuYSxiLGMsZCl9ZnVuY3Rpb24gbmMoYSxiLGMsZCl7RGIoYS5hLCdkb3dubG9hZEphdmFTY3JpcHRSZXNvdXJjZScpKGIsYyxkKX1rYy5wcm90b3R5cGUuaj1mdW5jdGlvbihhLGIpe3RoaXMuYiYmb2ModGhpcyxhLGIsdGhpcy5iKX07a2MucHJvdG90eXBlLmk9ZnVuY3Rpb24oYSxiKXtvYyh0aGlzLGEsYix0aGlzLmMpfTsKZnVuY3Rpb24gb2MoYSxiLGMsZCl7ZnVuY3Rpb24gZShFKXtmb3IodmFyIFg9W10scGE9MDtwYTxhcmd1bWVudHMubGVuZ3RoOysrcGEpWFtwYV09YXJndW1lbnRzW3BhXTtYPW5ldyBVKGYsJ3Jlc3BvbnNlJyxnLGJjKGcpJiZjYyhnKT9YOkpTT04uc3RyaW5naWZ5KFgpKTtkLmIoWCxjKX12YXIgZj1iLmIsbD1iLm1ldGhvZCxnPWIudmVyc2lvbjtiPWRjKGcsYi5hKTt0cnl7c3dpdGNoKGwpe2Nhc2UgJ1ZlcmlmaWNhdGlvblNlcnZpY2UuYWRkRXZlbnRMaXN0ZW5lcic6dmFyIGg9cChiKS5uZXh0KCkudmFsdWU7WmEoYS5nLGgsZSk7YnJlYWs7Y2FzZSAnVmVyaWZpY2F0aW9uU2VydmljZS5hZGRTZXNzaW9uTGlzdGVuZXInOnZhciBrPXAoYiksbT1rLm5leHQoKS52YWx1ZSx2PWsubmV4dCgpLnZhbHVlO2FiKGEuZyxlLG0sdik7YnJlYWs7Y2FzZSAnVmVyaWZpY2F0aW9uU2VydmljZS5zZW5kVXJsJzp2YXIgQj1wKGIpLm5leHQoKS52YWx1ZTttYyhhLEIsZnVuY3Rpb24oKXtyZXR1cm4gZSghMCl9LApmdW5jdGlvbigpe3JldHVybiBlKCExKX0pO2JyZWFrO2Nhc2UgJ1ZlcmlmaWNhdGlvblNlcnZpY2Uuc2V0VGltZW91dCc6dmFyIHg9cChiKSxGPXgubmV4dCgpLnZhbHVlLEs9eC5uZXh0KCkudmFsdWU7YS5oW0ZdPUFiKGEuYSwnc2V0VGltZW91dCcpKGUsSyk7YnJlYWs7Y2FzZSAnVmVyaWZpY2F0aW9uU2VydmljZS5jbGVhclRpbWVvdXQnOnZhciB0Yz1wKGIpLm5leHQoKS52YWx1ZTtDYihhLmEsYS5oW3RjXSk7YnJlYWs7Y2FzZSAnVmVyaWZpY2F0aW9uU2VydmljZS5zZXRJbnRlcnZhbCc6dmFyIE5iPXAoYiksdWM9TmIubmV4dCgpLnZhbHVlLHZjPU5iLm5leHQoKS52YWx1ZTthLmZbdWNdPXpiKGEuYSxlLHZjKTticmVhaztjYXNlICdWZXJpZmljYXRpb25TZXJ2aWNlLmNsZWFySW50ZXJ2YWwnOnZhciB3Yz1wKGIpLm5leHQoKS52YWx1ZTtCYihhLmEsYS5mW3djXSk7YnJlYWs7Y2FzZSAnVmVyaWZpY2F0aW9uU2VydmljZS5pbmplY3RKYXZhU2NyaXB0UmVzb3VyY2UnOnZhciB4Yz0KcChiKS5uZXh0KCkudmFsdWU7bmMoYSx4YyxmdW5jdGlvbihFKXtyZXR1cm4gZSghMCxFKX0sZnVuY3Rpb24oKXtyZXR1cm4gZSghMSl9KTticmVhaztjYXNlICdWZXJpZmljYXRpb25TZXJ2aWNlLmdldFZlcnNpb24nOnAoYikubmV4dCgpO3ZhciB5Yz1IKCkuYy5vbWlkSnNJbmZvO2UoeWMuc2VydmljZVZlcnNpb24pfX1jYXRjaChFKXtkLmIobmV3IFUoZiwnZXJyb3InLGcsJ1xuICAgICAgICAgICAgICBuYW1lOiAnK0UubmFtZSsnXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICcrRS5tZXNzYWdlKydcbiAgICAgICAgICAgICAgZmlsZW5hbWU6ICcrRS5maWxlbmFtZSsnXG4gICAgICAgICAgICAgIGxpbmVOdW1iZXI6ICcrRS5saW5lTnVtYmVyKydcbiAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiAnK0UuY29sdW1uTnVtYmVyKydcbiAgICAgICAgICAgICAgc3RhY2s6ICcrRS5zdGFjaysnXG4gICAgICAgICAgICAgIHRvU3RyaW5nKCk6ICcrRS50b1N0cmluZygpKydcbiAgICAgICAgICAnKSwKYyl9fTtmdW5jdGlvbiBwYygpe3ZhciBhPUkuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7YS5pZD0nb21pZF92MV9wcmVzZW50JzthLm5hbWU9J29taWRfdjFfcHJlc2VudCc7YS5zdHlsZS5kaXNwbGF5PSdub25lJztJLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSl9ZnVuY3Rpb24gcWMoKXt2YXIgYT1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihiKXtiLmZvckVhY2goZnVuY3Rpb24oYyl7J0JPRFknPT09Yy5hZGRlZE5vZGVzWzBdLm5vZGVOYW1lJiYocGMoKSxhLmRpc2Nvbm5lY3QoKSl9KX0pO2Eub2JzZXJ2ZShJLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx7Y2hpbGRMaXN0OiEwfSl9O3ZhciBXPW5ldyBUYSxsYz1uZXcgZnVuY3Rpb24oKXt2YXIgYTt0aGlzLmE9YT12b2lkIDA9PT1hP29taWRHbG9iYWw6YX07bmV3IGtjO3ZhciByYz1uZXcgZnVuY3Rpb24oKXt9LHNjPW5ldyBmdW5jdGlvbigpe30saWM9bmV3IGZ1bmN0aW9uKCl7dGhpcy5iPVc7dGhpcy5jPXNjO3RoaXMuYT1IKCl9LHpjO0k/emM9SS5JbnRlcnNlY3Rpb25PYnNlcnZlciYmKEkuTXV0YXRpb25PYnNlcnZlcnx8SS5SZXNpemVPYnNlcnZlcik/bmV3IFQoSSxyYyxpYyxXKTpuZXcgUyhJLHNjLGljLGxjLFcpOnpjPW51bGw7dmFyIFpiPXpjLCRiPW5ldyBmdW5jdGlvbigpe3ZhciBhPVc7dmFyIGI9dm9pZCAwPT09Yj9JOmI7dGhpcy5mPWE7dGhpcy5hPWI7dGhpcy5jPUgoKTt0aGlzLmI9W119LGZjPW5ldyBZYixqYz1uZXcgZnVuY3Rpb24oKXt2YXIgYT1XLGI9SCgpO3RoaXMuYj1hO3RoaXMuYT1ifTtJLm9taWRCcmlkZ2U9bmV3IFo7bmV3IGVjOwppZihJLmZyYW1lcyYmSS5kb2N1bWVudCYmISgnb21pZF92MV9wcmVzZW50J2luIEkuZnJhbWVzKSl7dmFyIEFjO2lmKEFjPW51bGw9PUkuZG9jdW1lbnQuYm9keSlBYz0nTXV0YXRpb25PYnNlcnZlcidpbiBJO0FjP3FjKCk6SS5kb2N1bWVudC5ib2R5P3BjKCk6SS5kb2N1bWVudC53cml0ZSgnPGlmcmFtZSBzdHlsZT0iZGlzcGxheTpub25lIiBpZD0ib21pZF92MV9wcmVzZW50IiBuYW1lPSJvbWlkX3YxX3ByZXNlbnQiPjwvaWZyYW1lPicpfTsKfSkuY2FsbCh0aGlzLCB0aGlzKTs=" |