{"css":"*#dm *.dmBody a.span.textonly\n{\n\tcolor:rgb(255,255,255) !important;\n}\n*#dm *.dmBody div.u_1694205906\n{\n\tbackground-color:rgba(0,0,0,0) !important;\n}\n*#dm *.dmBody div.dmPopupInner\n{\n\tbackground-color:rgb(255,255,255) !important;\n\tborder-style:solid !important;\n\tborder-width:0 !important;\n\t-webkit-box-shadow:0 0 10px rgba(0,0,0,0.30) !important;\n\tbox-shadow:0 0 10px rgba(0,0,0,0.30) !important;\n\t-moz-box-shadow:0 0 10px rgba(0,0,0,0.30) !important;\n\tborder-radius:10px !important;\n\t-moz-border-radius:10px !important;\n\t-webkit-border-radius:10px !important;\n\tbackground-image:none !important;\n\tbackground-repeat:no-repeat !important;\n\tbackground-size:cover !important;\n\tbackground-position:top right !important;\n}\n*#dm *.dmBody div.u_dm_content\n{\n\tbackground-image:none !important;\n}\n*#dm *.dmBody *.allWrapper *.dmPopupInner\n{\n\tborder-style:solid !important;\n\tborder-width:4px !important;\n\tbackground-repeat:no-repeat !important;\n\tbackground-image:url('https://le-cdn.hibuwebsites.com/fbf472d2c5db459dbc5dc912ba34b708/dms3rep/multi/opt/Copy+of+Add+a+heading-2880w.png') !important;\n\tbackground-size:cover !important;\n}\n","additionalWidgetCss":"/**/.graphicWidget{width:200px;height:200px;margin:10px auto;text-align:center}.graphicWidget svg.svg{width:100%;height:100%;color:#000;fill:#000}.graphicWidgetV2{width:60px;height:60px}.graphicWidgetV3{font-size:0}/**/.imageWidget{position:relative}.imageWidget a,.imageWidget span.image-caption{font-style:italic;text-align:center}.imageWidget a[data-caption]::after,.imageWidget span[data-caption]::after{content:attr(data-caption);display:block;line-height:100%}\n.imageWidget.with-caption a::after,.imageWidget.with-caption span.image-caption::after{margin-top:12px}.imageWidget img[width][height]{height:auto}[data-flex-site] #fcontainer .imageWidget:after,[data-flex-site] #flex-footer .imageWidget:after,[data-flex-site] #flex-header .imageWidget:after{content:none}\n[data-flex-site] #fcontainer .imageWidget:before,[data-flex-site] #flex-footer .imageWidget:before,[data-flex-site] #flex-header .imageWidget:before{font-size:80px;transform:none}.imageWidget.hover img.hover-image,.imageWidget:hover img.hover-image{display:initial}\n.imageWidget.hover.hasHover img:not(.hover-image),.imageWidget:hover.hasHover img:not(.hover-image){display:none!important}.imageWidget img.hover-image,.imageWidget img.logo-on-scroll{display:none}/**/@media(max-width:767px){body.dmRoot div[dmtemplateid]:not([dmtemplateid=SlideRightTopFloatM]) .dmHeader .multilingualWidget{position:absolute;top:14px;left:13px;margin-top:0}body.dmRoot div[dmtemplateid][dmtemplateid=SlideRightTopFloatM] .dmHeader .multilingualWidget{position:absolute;top:5px;right:17px}\n}@media(min-width:768px) and (max-width:1024px){body:not(.responsiveTablet) #dm div[dmtemplateid=StandardLayoutMultiT] .dmHeader .multilingualWidget{position:absolute!important;top:5px!important;right:17px!important;left:initial!important}\n}@media(max-width:767px){body.dmRoot .dmHeader .displayHidden-inner .multilingualWidget{top:0!important}}#dm_content div.dmRespCol div.multilingualWidget,#hcontainer div.dmRespCol div.multilingualWidget{width:auto!important;display:table!important}\n.multilingualWidget.displayNone{display:none!important}.multilingualWidget>div{position:relative}.multilingualWidget{clear:both;margin:0;vertical-align:top;display:table!important;font-size:0;font-family:sans-serif}\n.multilingualWidget .language{color:#888;display:inline-block}.multilingualWidget .language a{text-align:center;display:inline-block;color:inherit;border:#dadada 1px solid;background-color:#fff}.multilingualWidget .language a img{width:24px;height:26px;min-width:24px;min-height:26px}\n.multilingualWidget .language a span{display:none;line-height:initial}.multilingualWidget .language a span.name{margin-top:5px;margin-left:7px;font-size:12px;font-weight:400;text-transform:capitalize}\n.multilingualWidget .language a span.short-label{font-size:12px}.multilingualWidget .language a:after{line-height:initial}.multilingualWidget.open .current-language a:after{transform:rotate(-180deg)}.multilingualWidget .current-language a:after{transition:transform .2s}\n.multilingualWidget.dropdown .language{width:100%}.multilingualWidget.dropdown .language a{display:block;padding:1px 5px}.multilingualWidget.dropdown .language.other-languages{position:absolute;z-index:800;max-height:0;overflow:hidden;transition:max-height .1s ease-in-out}\n.multilingualWidget.dropdown .language.other-languages a{border-top:0!important}.multilingualWidget.dropdown .current-language{position:relative}.multilingualWidget.dropdown .current-language span.name{padding-right:25px}\n.multilingualWidget.dropdown .dm-icon{font-size:9px;display:inline-block;position:absolute;top:46%;transform:translateY(-50%);transition:transform .2s;right:8px}.multilingualWidget.dropdown.open .dm-icon{transform:rotate(-180deg) translateY(50%)}\n.multilingualWidget.dropdown.open .other-languages{display:block;max-height:300px}.multilingualWidget.dropdown .other-languages,.multilingualWidget.dropdown.flag-only .dm-icon,.multilingualWidget.inline span,.multilingualWidget.no-flag a img{display:none}\n.multilingualWidget.dropdown.flag-only a{border:transparent 1px solid;background-color:transparent}.multilingualWidget.dropdown.flag-only.open .language a{background-color:rgba(0,0,0,.3);border:#dadada 1px solid}\n.multilingualWidget.dropdown.long-label a{text-align:left;padding:2px 0 2px 5px;position:relative;box-sizing:border-box}.multilingualWidget.dropdown.long-label a span.name,.multilingualWidget.inline.flag-only .language,.multilingualWidget.inline.short-label.no-flag span.short-label{display:inline-block}\n.multilingualWidget.dropdown.long-label.no-flag a{padding:7px 10px 9px}.multilingualWidget.dropdown.long-label.no-flag a span.name,.multilingualWidget.dropdown.short-label.no-flag a span.short-label{margin:0;display:inline-block}\n.multilingualWidget.dropdown.short-label.no-flag a{padding:8px 22px 9px 10px;font-size:12px;min-height:32px;height:auto;box-sizing:border-box}.multilingualWidget.dropdown.short-label.no-flag .current-language a:after{top:12px}\n.multilingualWidget.short-label span.short-label{text-transform:uppercase}.multilingualWidget.inline.flag-only a{padding:2px 5px;height:32px;box-sizing:border-box}.multilingualWidget.inline.flag-only .current-language a{box-shadow:inset 0 0 8px 0 rgba(0,0,0,.6);border-right:0;border-right-width:0!important;border-right-color:transparent!important;border-right-style:none!important}\n.multilingualWidget.inline.flag-only .other-languages a:not(:last-child){border-right-width:0!important;border-right-color:transparent!important;border-right-style:none!important}.multilingualWidget.inline.flag-only .dm-icon,.multilingualWidget.inline.short-label.no-flag .dm-icon{display:none}\n.multilingualWidget.inline.short-label.no-flag .current-language a{padding-right:0;border-right-width:0!important;border-right-color:transparent!important;border-right-style:none!important}.multilingualWidget.inline.short-label.no-flag .current-language a span.short-label{font-weight:700}\n.multilingualWidget.inline.short-label.no-flag .other-languages a{border-left-color:transparent!important;border-left-width:0!important;border-left-style:none!important}.multilingualWidget.inline.short-label.no-flag .other-languages a:not(:last-child){padding-right:0;border-right-color:transparent!important;border-right-width:0!important;border-right-style:none!important}\n.multilingualWidget.inline.short-label.no-flag a{position:relative;padding:8px 10px;font-size:12px;min-height:32px;height:auto;text-decoration:none}.multilingualWidget.inline.short-label.no-flag a:after{content:\"/\";position:absolute;top:8px;right:-7px;z-index:1;pointer-events:none}\n.multilingualWidget.inline.short-label.no-flag a:hover .short-label{text-decoration:underline}.multilingualWidget.inline.short-label.no-flag .other-languages a:last-child:after{content:\"\"}","isHomePage":false,"customwidgetsdata":[{"widgetId":"d1ee5d5bf037471ea1770683731e577a","version":23,"js":"JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICAgICQuZ2V0U2NyaXB0KCdodHRwczovL3dpZGdldC5oaWJ1LnVzL3N0YXRpYy9qcy9pbmRleC5qcycpCiAgICAuZG9uZShmdW5jdGlvbigpewogICAgICAgIGRtQVBJLnJ1bk9uUmVhZHkoJ2hpYnVfaGVhZGVyX3Jldmlld3MnLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHdpbmRvdy5yZW5kZXJBcHAoKTsKICAgICAgICB9KTsKICAgICAgICAKICAgIH0pCiAgICAuZmFpbChmdW5jdGlvbigpewogICAgICAgIGNvbnNvbGUubG9nKCJmYWlsZWQgdG8gbG9hZGVkIGhlYWRlciByZXZpZXdzIGpzIGZpbGUiKQogICAgfSk7Cn0pCgo=","css":".headerWidget {\n min-height:22px;\n}\n\n.headerWidget .reviews-header .link {\n margin-top:4px;\n}\n","strings":{}},{"widgetId":"d1ee5d5bf037471ea1770683731e577a","version":22,"js":"JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICAgICQuZ2V0U2NyaXB0KCdodHRwczovL3dpZGdldC5oaWJ1LnVzL3N0YXRpYy9qcy9pbmRleC5qcycpCiAgICAuZG9uZShmdW5jdGlvbigpewogICAgICAgIGRtQVBJLnJ1bk9uUmVhZHkoJ2hpYnVfaGVhZGVyX3Jldmlld3MnLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHdpbmRvdy5yZW5kZXJBcHAoKTsKICAgICAgICB9KTsKICAgICAgICAKICAgIH0pCiAgICAuZmFpbChmdW5jdGlvbigpewogICAgICAgIGNvbnNvbGUubG9nKCJmYWlsZWQgdG8gbG9hZGVkIGhlYWRlciByZXZpZXdzIGpzIGZpbGUiKQogICAgfSk7Cn0pCgo=","css":".headerWidget {\n min-height:22px;\n}\n","strings":{}},{"widgetId":"7b6cfbac88324cffbaaf57354cd7a334","version":227,"js":"dmFyIGVtcHR5TGlzdFBsYWNlSG9sZGVyPSI8c3BhbiBzdHlsZT0nbWluLWhlaWdodDoyMHB4JyBjbGFzcz0nZWRpdG9yT25seUluZm8gaW5FZGl0b3InIGRhdGEtbm9zbmlwcGV0PlRoaXMgbGlzdCBoYXMgbm8gZGF0YSBpbiBZZXh0LiBUaGlzIG1lc3NhZ2Ugb25seSBhcHBlYXJzIGluIHRoZSBlZGl0b3IuPC9zcGFuPiIKCi8qIGZpbmQgeWV4dCBzcmMgKi8KdmFyIGZpbmRZZXh0U3JjID0gZnVuY3Rpb24oKXsKICAgIHZhciAga2V5RXhwID0gbmV3IFJlZ0V4cCgvc3JjPSIoLio/KSIvKTsKICAgIGlmIChkYXRhLmNvbmZpZy5zY3JpcHQuaW5jbHVkZXMoJ2xvY2F0aW9uX2lkJykpIHsKICAgICAgICBkYXRhLmNvbmZpZy5zY3JpcHQgPSBkYXRhLmNvbmZpZy5zY3JpcHQucmVwbGFjZSgnbG9jYXRpb25faWQnLCAnZW50aXR5X2lkJyk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0ga2V5RXhwLmV4ZWMoZGF0YS5jb25maWcuc2NyaXB0KTsKICAgIGlmKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID09IDIpewogICAgICAgIHdpbmRvdy55ZXh0U2NyaXB0U3JjPXJlc3VsdFsxXTsKICAgICAgICByZXR1cm4gcmVzdWx0WzFdOwogICAgfWVsc2V7CiAgICAgICAgcmV0dXJuIHdpbmRvdy55ZXh0U2NyaXB0U3JjOwogICAgfQp9Cgp3aW5kb3cueWV4dExvYWRlZENhbGxiYWNrID0gZnVuY3Rpb24oeWV4dERhdGEpIHsKICAgICQoJy53cm9uZ1NjcmlwdEVycm9yJykucmVtb3ZlQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICB3aW5kb3cueWV4dEluaXRpYWxpemVkID0gdHJ1ZTsKICAgIAogICAgaWYoeWV4dERhdGEpIHsKICAgICAgICB3aW5kb3cuX3lleHREYXRhID0geWV4dERhdGE7ICAgIAogICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyAiWWV4dCBsb2FkZWQgYnV0IG5vIGRhdGEgd2FzIHBhc3NlZCI7CiAgICB9Cn0KCmZ1bmN0aW9uIGxvYWRZZXh0U2NyaXB0KHNyYyl7CiAgICAkKGVsZW1lbnQpLmZpbmQoJy53cm9uZ1NjcmlwdEVycm9yJykucmVtb3ZlQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICB2YXIgeWV4dFNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkLXlleHQtc2NyaXB0Jyk7CiAgICBpZiAoeWV4dFNjcmlwdCkgewogICAgICAgIHlleHRTY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh5ZXh0U2NyaXB0KTsKICAgIH0KICAgIHlleHRTY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgIHlleHRTY3JpcHQuY2hhcnNldCA9ICd1dGYtOCc7CiAgICB5ZXh0U2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgIAogICAgc3JjICs9ICImY2FsbGJhY2s9eWV4dExvYWRlZENhbGxiYWNrIgogICAgCiAgICB5ZXh0U2NyaXB0LnNyYyA9IHNyYzsKICAgIHlleHRTY3JpcHQuaWQgPSAnZC15ZXh0LXNjcmlwdCc7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHlleHRTY3JpcHQpOwp9CgovKiBsb2FkIHlleHQgc2NyaXB0ICovCnZhciBsb2FkWWV4dCA9IGZ1bmN0aW9uKGZvcmNlUmVmcmVzaCkgewogICAgLy8gTWFrZSBzdXJlIHdlIGNhbGwgWWV4dCBvbmx5IG9uY2UKICAgIGlmKHdpbmRvdy55ZXh0SW5pdGlhbGl6ZWQgJiYgIWZvcmNlUmVmcmVzaCl7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICBzdGFydEludGVydmFsVG9XYWl0QW5kTG9hZFdpZGdldHMoZGF0YS5jb25maWcudHlwZSk7CiAgICAKICAgIC8vIFdlIGV4dHJhY3QgdGhlICJzcmMiIGF0dHJpYnV0ZSBmcm9tIHRoZSBzdHJpbmcgcHJvdmlkZWQgaW5hICBzYWZlIHdheQogICAgLy8gVGhlIGZvcm1hdCB3ZSBleHBlY3QgaXMgdGhlIGZvbGxvd2luZzoKICAgCiAgICB0cnl7CiAgICAgICAgdmFyIHNyYyA9IGZpbmRZZXh0U3JjKCk7CiAgICAgICAgaWYoc3JjKXsKCiAgICAgICAgICAgIGxvYWRZZXh0U2NyaXB0KHNyYyk7CiAgICAgICAgICAgIAogICAgICAgIH0gZWxzZSBpZihkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgICAgIC8vICQoZG9jdW1lbnQpLmxvYWQoZnVuY3Rpb24oKXsKICAgICAgICAgICAgLy8gICAgIGlmKCF3aW5kb3cuX3lleHREYXRhKSB7CiAgICAgICAgICAgIC8vICAgICAgICAgJChlbGVtZW50KS5maW5kKCcud3JvbmdTY3JpcHRFcnJvcicpLmFkZENsYXNzKCdoYXNFcnJvcicpOyAgICAKICAgICAgICAgICAgLy8gICAgIH0KICAgICAgICAgICAgLy8gfSkKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vICQoZWxlbWVudCkuZmluZCgnLndyb25nU2NyaXB0RXJyb3InKS5hZGRDbGFzcygnaGFzRXJyb3InKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICB9IGNhdGNoKGV4cCkgewogICAgICAgIC8vICQoZWxlbWVudCkuZmluZCgnLndyb25nU2NyaXB0JykuYWRkQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICAgICAgY29uc29sZS5sb2coZXhwKQogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICBpZigkKCcubXVsdGlwbGVZZXh0RXJyb3InKS5sZW5ndGggPiAxKXsKICAgICAgICAgICAgICQoZWxlbWVudCkuZmluZCgnLm11bHRpcGxlWWV4dEVycm9yJykuYWRkQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfWVsc2UgaWYoZGF0YS5jb25maWcudHlwZSA9PT0gJ25vbmUnKXsKICAgICAgICAgICAgJChlbGVtZW50KS5maW5kKCcuZWRpdG9yT25seUluZm8nKS5hZGRDbGFzcygnaW5FZGl0b3InKTsgCiAgICAgICAgfQogICAgfQp9CgovKiByZWZyZXNoIHlleHQgc2NyaXB0ICovCndpbmRvdy5yZWZyZXNoWWV4dCA9IGZ1bmN0aW9uKCl7CiAgICBsb2FkWWV4dCh0cnVlKTsKfQoKLy9mdW5jdGlvbiBmb3IgT21uaXR1cmUgdHJhY2tpbmcKd2luZG93Ll90cmFja0NvbnZXaWRnZXRDbGlja0V2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lKSB7CiAgICBpZih0eXBlb2YoSEFGKT09PSJvYmplY3QiKXsKICAgICAgICBIQUYuT21UcmFja2luZy5vbkNNQ2xpY2soZXZlbnROYW1lKSAKICAgIH0KICAgIHJldHVybjsKfQoKLyogZHJhdyB5ZXh0IG1hcCAqLwp2YXIgZHJhd01hcCA9IGZ1bmN0aW9uKHlleHREYXRhKXsKICAgIHZhciB6b29tID0gZGF0YS5jb25maWcubWFwWm9vbTsKICAgIHZhciB5RGF0YSA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXM7CiAgICB2YXIgYWRkcmVzc1F1ZXJ5ID0geURhdGFbJ2FkZHJlc3MxJ10gKyAiICIgKyB5RGF0YVsnYWRkcmVzczInXSArICIgIiArIHlEYXRhWydjaXR5J10gKyAiICIgKyB5RGF0YVsnc3RhdGUnXSArICIgIiArIHlEYXRhWyd6aXAnXTsKICAgIGRtQVBJLmRyYXdNYXAoe2FkZHJlc3NRdWVyeTogYWRkcmVzc1F1ZXJ5LCB6b29tOiB6b29tLCBjb250YWluZXI6ICQoZWxlbWVudCkuZmluZCgnLnlleHRNYXAnKX0pOwp9CgoKCnZhciBmb3JtYXRQaG9uZUJlZm9yZVJlbmRlciA9IGZ1bmN0aW9uKG51bSxjYikgewogICAgaWYgKCFjYikKICAgICAgICBjYiA9IGZ1bmN0aW9uKCl7cmV0dXJufQogICAgaWYoZGF0YS5jb25maWcuZm9ybWF0UGhvbmUpeyAKICAgICAgICB2YXIgczIgPSAoIiIrbnVtKS5yZXBsYWNlKC9cRC9nLCAnJyk7CiAgICAgICAgdmFyIG0gPSBzMi5tYXRjaCgvXihcZHszfSkoXGR7M30pKFxkezR9KSQvKTsKICAgICAgICB2YXIgZm9ybWF0dGVkID0gICghbSkgPyBudWxsIDogIigiICsgbVsxXSArICIpICIgKyBtWzJdICsgIi0iICsgbVszXTsKICAgICAgICBjYihmb3JtYXR0ZWQpOwogICAgICAgIHJldHVybiBmb3JtYXR0ZWQ7CiAgICB9IGVsc2UgewogICAgICAgIGNiKG51bSk7CiAgICAgICAgcmV0dXJuIG51bTsKICAgIH0KfQoKdmFyIGRpc3BsYXlUZXh0ZExpc3QgPSBmdW5jdGlvbih0eXBlLHlleHREYXRhLGZpcnN0T25seSkgewogICAgdmFyIGxpc3QgPSAiIjsKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbdHlwZV0pIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbdHlwZV0KICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSBmYWxzZQogICAgfQogICAgCiAgICBpZih5ZXh0QXR0ICYmIEFycmF5LmlzQXJyYXkoeWV4dEF0dCkpIHsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8IHlleHRBdHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKHlleHRBdHRbaV0gPT09ICdBbmRyb2lkIFBheScpIHsKICAgICAgICAgICAgICAgIGxpc3QgKz0gJzxsaT5Hb29nbGUgUGF5PC9saT4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbGlzdCArPSAnPGxpPicgKyB5ZXh0QXR0W2ldICsgJzwvbGk+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyMnICsgdHlwZSArICdMaXN0JykuaHRtbChsaXN0KTsKICAgIH0gZWxzZSBpZiAoeWV4dEF0dCkgewogICAgICAgIHZhciB5ZXh0QXR0ID0geWV4dEF0dC5zcGxpdCgiLCAiKTsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8IHlleHRBdHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgbGlzdCArPSAnPGxpPicgKyB5ZXh0QXR0W2ldICsgJzwvbGk+JzsKICAgICAgICB9CiAgICAgICAgJChlbGVtZW50KS5maW5kKCcjJyArIHR5cGUgKyAnTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAkKGVsZW1lbnQpLmh0bWwoZW1wdHlMaXN0UGxhY2VIb2xkZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICAgIH0KICAgIAogICAgCn0KCnZhciAgZGlzcGxheVNwZWNpYWx0aWVzID0gZnVuY3Rpb24oeWV4dERhdGEpewogICAgdmFyIGxpc3QgPSAiIjsKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbInNwZWNpYWx0aWVzIl0pIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbInNwZWNpYWx0aWVzIl0KICAgIH0gZWxzZSBpZiAoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1sic3BlY2lhbGl0aWVzIl0pIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbInNwZWNpYWxpdGllcyJdCiAgICB9IGVsc2UgewogICAgICAgIHZhciB5ZXh0QXR0ID0gZmFsc2UKICAgIH0KICAgIAogICAgaWYoeWV4dEF0dCAmJiBBcnJheS5pc0FycmF5KHlleHRBdHQpKSB7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnI3NwZWNpYWx0aWVzTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKHlleHRBdHQpIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHRBdHQuc3BsaXQoIiwgIik7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnI3NwZWNpYWx0aWVzTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAkKGVsZW1lbnQpLmh0bWwoZW1wdHlMaXN0UGxhY2VIb2xkZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICAgIH0KfQoKdmFyIGRpc3BsYXlIb3VycyA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGVdKSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGVdCiAgICB9IGVsc2UgewogICAgICAgIHZhciB5ZXh0QXR0ID0gZmFsc2UKICAgIH0KICAgIAogICAgaWYoeWV4dEF0dCAmJiBBcnJheS5pc0FycmF5KHlleHRBdHQpKSB7CiAgICAgICAgZm9yKHZhciBpPTA7aSA8IHlleHRBdHQubGVuZ3RoO2krKykgewogICAgICAgICAgICB2YXIgaW5kZXhFbmREYXkgPSB5ZXh0QXR0W2ldLmxhc3RJbmRleE9mKCdkYXkgJykgKyAzOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGxlZnRTaWRlID0geWV4dEF0dFtpXS5zdWJzdHIoMCxpbmRleEVuZERheSkucmVwbGFjZSgiTW9uZGF5IiwiTW9uIikucmVwbGFjZSgiVHVlc2RheSIsIlR1ZSIpLnJlcGxhY2UoIldlZG5lc2RheSIsIldlZCIpLnJlcGxhY2UoIlRodXJzZGF5IiwiVGh1IikucmVwbGFjZSgiRnJpZGF5IiwiRnJpIikucmVwbGFjZSgiU2F0dXJkYXkiLCJTYXQiKS5yZXBsYWNlKCJTdW5kYXkiLCJTdW4iKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByaWdodFNpZGUgPSB5ZXh0QXR0W2ldLnN1YnN0cihpbmRleEVuZERheSArIDEpCiAgICAgICAgICAgIAogICAgICAgICAgICBsaXN0ICs9ICc8ZGl2IGNsYXNzPSJyb3ciPjxkaXYgY2xhc3M9ImxlZnQiPicgKyBsZWZ0U2lkZSArICc8L2Rpdj48ZGl2IGNsYXNzPSJyaWdodCI+JyArIHJpZ2h0U2lkZSArICc8L2Rpdj48L2Rpdj4nOwogICAgICAgIH0KICAgICAgICAKICAgICQoZWxlbWVudCkuZmluZCgnI2hvdXJzU21hbGwnKS5odG1sKGxpc3QpOwogICAgCiAgICB9IGVsc2UgaWYoeWV4dEF0dCkgeyAKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHRBdHQuc3BsaXQoIiwgIik7CiAgICAgICAgZm9yKHZhciBpPTA7aSA8IHlleHRBdHQubGVuZ3RoO2krKykgewogICAgICAgICAgICBpZigoL1xzLy50ZXN0KHlleHRBdHRbaV0pKSA9PT0gZmFsc2UpewogICAgICAgICAgICAgICAgeWV4dEF0dFtpXSA9IHlleHRBdHRbaV0gKyAnIC0gJyArIHlleHRBdHRbaSsxXQogICAgICAgICAgICAgICAgeWV4dEF0dC5zcGxpY2UoaSsxLCAxKQogICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoeWV4dEF0dFtpXS5pbmNsdWRlcygnZGF5JykgPT09IGZhbHNlICl7CiAgICAgICAgICAgICAgICB2YXIgbGVmdFNpZGUgPSAnICc7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciByaWdodFNpZGUgPSB5ZXh0QXR0W2ldCiAgICAgICAgICAgIH1lbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbmRleEVuZERheSA9IHlleHRBdHRbaV0ubGFzdEluZGV4T2YoJ2RheSAnKSArIDM7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGxlZnRTaWRlID0geWV4dEF0dFtpXS5zdWJzdHIoMCxpbmRleEVuZERheSkucmVwbGFjZSgiTW9uZGF5IiwiTW9uIikucmVwbGFjZSgiVHVlc2RheSIsIlR1ZSIpLnJlcGxhY2UoIldlZG5lc2RheSIsIldlZCIpLnJlcGxhY2UoIlRodXJzZGF5IiwiVGh1IikucmVwbGFjZSgiRnJpZGF5IiwiRnJpIikucmVwbGFjZSgiU2F0dXJkYXkiLCJTYXQiKS5yZXBsYWNlKCJTdW5kYXkiLCJTdW4iKTsKICAgICAgICAKICAgICAgICAgICAgICAgIHZhciByaWdodFNpZGUgPSB5ZXh0QXR0W2ldLnN1YnN0cihpbmRleEVuZERheSArIDEpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGxpc3QgKz0gJzxkaXYgY2xhc3M9InJvdyI+PGRpdiBjbGFzcz0ibGVmdCI+JyArIGxlZnRTaWRlICsgJzwvZGl2PjxkaXYgY2xhc3M9InJpZ2h0Ij4nICsgcmlnaHRTaWRlICsgJzwvZGl2PjwvZGl2Pic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnI2hvdXJzU21hbGwnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmIChkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJChlbGVtZW50KS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICB9Cgp9Cgp2YXIgZGlzcGxheU9wZW5Ib3VycyA9IGZ1bmN0aW9uKHR5cGUsIHlleHREYXRhKXsKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbJ3RpbWV6b25lJ10pewogICAgICAgIHZhciB6b25lID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1sndGltZXpvbmUnXQogICAgfSBlbHNlIHsKICAgICAgICB2YXIgem9uZSA9IGZhbHNlCiAgICB9CiAgICAKICAgIGlmKHpvbmUpewogICAgICAgIHZhciB0aW1lID0gbmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygiZW4tVVMiLCB7dGltZVpvbmU6IHpvbmV9KTsKICAgICAgICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSh0aW1lICk7CiAgICAgICAgCiAgICAgICAgdmFyIHRoaXJ0eU1pbnMgPSAzMCAqIDYwICogMTAwMAoKICAgICAgICB2YXIgZGF5cyA9IFsnc3VuZGF5JywnbW9uZGF5JywndHVlc2RheScsJ3dlZG5lc2RheScsJ3RodXJzZGF5JywnZnJpZGF5Jywnc2F0dXJkYXknXTsKICAgICAgICB2YXIgZGF5c1Nob3J0ID0gWydTdW4nLCdNb24nLCdUdWVzJywnV2VkJywnVGh1cnMnLCdGcmknLCdTYXQnXTsKCiAgICAgICAgdmFyIGRheSA9IGRheXNbdG9kYXkuZ2V0RGF5KCldOwogICAgICAgIHZhciBob3VyID0gdG9kYXkuZ2V0SG91cnMoKTsKICAgICAgICB2YXIgbWluID0gdG9kYXkuZ2V0TWludXRlcygpOwogICAgICAgIHZhciBkZCA9ICgiMCIgKyB0b2RheS5nZXREYXRlKCkpLnNsaWNlKC0yKTsKICAgICAgICB2YXIgbW0gPSAoIjAiICsgKHRvZGF5LmdldE1vbnRoKCkgKyAxKSkuc2xpY2UoLTIpCiAgICAgICAgdmFyIHl5eXkgPSB0b2RheS5nZXRGdWxsWWVhcigpOwogICAgICAgIHZhciB0b2RheURhdGUgPSB5eXl5ICsgJy0nICsgbW0gKyAnLScgKyBkZAogICAgICAgIHZhciBtbSA9IG1tIC0gMSAKICAgICAgICAKICAgICAgICBjb25zdCB0b21vcnJvdyA9IG5ldyBEYXRlKHRvZGF5KQogICAgICAgIHRvbW9ycm93LnNldERhdGUodG9tb3Jyb3cuZ2V0RGF0ZSgpICsgMSkKICAgICAgICB2YXIgbW1UbXcgID0gKCIwIiArICh0b21vcnJvdy5nZXRNb250aCgpICsgMSkpLnNsaWNlKC0yKQogICAgICAgIHZhciBkZFRtdyA9ICgiMCIgKyB0b21vcnJvdy5nZXREYXRlKCkpLnNsaWNlKC0yKQogICAgICAgIHZhciB5eXl5VG13ID0gdG9tb3Jyb3cuZ2V0RnVsbFllYXIoKTsKICAgICAgICB2YXIgbmV4dERheSA9IGRheXNbdG9tb3Jyb3cuZ2V0RGF5KCldCiAgICAgICAgdmFyIHRvbW1vcnJvdyA9IHl5eXlUbXcgKyAnLScgKyBtbVRtdyArICctJyArIGRkVG13CiAgICAgICAgdmFyIG1tVG13ID0gbW1UbXcgLSAxCiAgICB9CgogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgZGF5XSkgewogICAgICAgIHZhciB5ZXh0QXR0ID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgZGF5XQogICAgICAgIGlmICh5ZXh0QXR0ID09PSAiQ2xvc2VkIil7CiAgICAgICAgICAgIHlleHRBdHQgPSBmYWxzZQogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSBmYWxzZQogICAgfQogICAgCiAgICAvL2NoZWNrIGlmIGRheSBpcyBjbG9zZWQKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbdHlwZSArICcuJyArIGRheSArICcuaXNDbG9zZWQnXSA9PT0gdHJ1ZSkgeyAKICAgICAgICB2YXIgY2xvc2VkID0gdHJ1ZQogICAgfQogICAgCiAgICAvL2NvbGxlY3RzIGJ1c2luZXNzIGhvbGlkYXkgaG91cnMgCiAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLmhvbGlkYXlIb3VycyddKXsKICAgICAgICB2YXIgaG9saWRheUhvdXJzID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy5ob2xpZGF5SG91cnMnXQogICAgfSBlbHNlewogICAgICAgICB2YXIgaG9saWRheUhvdXJzID0gZmFsc2UKICAgIH0KICAgIAogICAgLy9nZXRzIG5leHQgZGF5cyBzdGFydCB0aW1lCiAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLicgKyBuZXh0RGF5ICsgJy5pc0Nsb3NlZCddID09PSB0cnVlKXsKICAgICAgICB2YXIgdG9tb3Jyb3dPcGVuID0gZmFsc2UKICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHRvbW9ycm93T3BlbiA9IHRydWUKICAgICAgICB2YXIgdG1yd1N0YXJ0ID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgbmV4dERheV0uc3BsaXQoIiAtICIpWzBdCiAgICB9CiAgICAKICAgICAvL2NoZWNrcyBpZiBob2xpZGF5IGhvdXJzIGNoYW5nZSAKICAgIGlmKGhvbGlkYXlIb3VycykgewogICAgICAgIGZvcih2YXIgaT0wO2kgPCBob2xpZGF5SG91cnMubGVuZ3RoO2krKyl7CiAgICAgICAgICAgIGlmKGhvbGlkYXlIb3Vyc1tpXS5kYXRlID09PSB0b2RheURhdGUgJiYgaG9saWRheUhvdXJzW2ldLm9wZW5JbnRlcnZhbHMpewogICAgICAgICAgICAgICAgeWV4dEF0dCA9IGhvbGlkYXlIb3Vyc1tpXS5ob3Vyc0Zvcm1hdHRlZAogICAgICAgICAgICB9IAogICAgICAgIH0KICAgIH0KICAgIAogICAgLy9zcGxpdCBob3VycwogICAgaWYoeWV4dEF0dCAmJiB5ZXh0QXR0LmluY2x1ZGVzKCIsIikpewogICAgICAgIHlleHRBdHQgPSB5ZXh0QXR0LnNwbGl0KCIsICIpCiAgICAgICAgZm9yKHZhciBpPTA7aSA8IHlleHRBdHQubGVuZ3RoO2krKyl7CiAgICAgICAgICAgIHZhciBlbmQgPSB5ZXh0QXR0W2ldLnNwbGl0KCcgLSAnKVsxXQogICAgICAgICAgICB2YXIgc3RhcnQgPSB5ZXh0QXR0W2ldLnNwbGl0KCcgLSAnKVswXQogICAgICAgICAgICBpZiAoaSsxICE9IHlleHRBdHQubGVuZ3RoKXsKICAgICAgICAgICAgICAgIHZhciBuZXh0U3RhcnQgPSB5ZXh0QXR0W2kgKyAxXS5zcGxpdCgnIC0gJylbMF0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZihzdGFydC5pbmNsdWRlcygicG0iKSAmJiBzdGFydC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgICAgIHZhciBzdGFydERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzBdKSArIDEyLCBwYXJzZUludChzdGFydC5zcGxpdCgvXHMrfDovKVsxXSkpCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgc3RhcnREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChzdGFydC5zcGxpdCgvXHMrfDovKVswXSksIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYobmV4dFN0YXJ0LmluY2x1ZGVzKCJwbSIpICYmIG5leHRTdGFydC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgICAgIHZhciBuZXh0U3RhcnREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChuZXh0U3RhcnQuc3BsaXQoL1xzK3w6LylbMF0pICsgMTIsIHBhcnNlSW50KG5leHRTdGFydC5zcGxpdCgvXHMrfDovKVsxXSkpCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgbmV4dFN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHl5eXksIG1tLCBkZCwgcGFyc2VJbnQobmV4dFN0YXJ0KSwgcGFyc2VJbnQobmV4dFN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICBpZihlbmQuaW5jbHVkZXMoInBtIikgJiYgZW5kLnNwbGl0KC9ccyt8Oi8pWzBdICE9ICIxMiIpewogICAgICAgICAgICAgICAgdmFyIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSkgKyAxMiwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBlbmREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMF0pLCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMV0pKQogICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgIGlmIChlbmQuaW5jbHVkZXMoImFtIikgJiYgKGVuZERhdGUgPCBzdGFydERhdGUpKXsKICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5VG13LCBtbVRtdywgZGRUbXcsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSksIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVsxXSkpCiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgaWYodG9kYXkgPCBzdGFydERhdGUpewogICAgICAgICAgICAgICAgdmFyIGNsb3NlZCA9IHRydWUgCiAgICAgICAgICAgICAgICB0bXJ3U3RhcnQgPSBzdGFydAogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgfWVsc2UgaWYodG9kYXkgPiBzdGFydERhdGUgJiYgdG9kYXkgPCBlbmREYXRlKXsKICAgICAgICAgICAgICAgIHlleHRBdHQgPSBzdGFydCArICcgLSAnICsgZW5kCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICB9ZWxzZSBpZih0b2RheSA+IGVuZERhdGUgJiYgIChpKzEgIT0geWV4dEF0dC5sZW5ndGgpICYmIHRvZGF5IDwgbmV4dFN0YXJ0RGF0ZSl7CiAgICAgICAgICAgICAgICB2YXIgY2xvc2VkID0gdHJ1ZQogICAgICAgICAgICAgICAgdG1yd1N0YXJ0ID0gbmV4dFN0YXJ0CiAgICAgICAgICAgICAgICB0b21vcnJvd09wZW4gPSB0cnVlCiAgICAgICAgICAgIH1lbHNlIGlmKHRvZGF5ID4gZW5kRGF0ZSAmJiBpKzEgPT09IHlleHRBdHQubGVuZ3RoKXsKICAgICAgICAgICAgICAgIHZhciBjbG9zZWQgPSB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9ICAKICAgIAogICAgCiAgICBpZih5ZXh0QXR0IHx8IGNsb3NlZCkgewogICAgICAgIGlmKHR5cGVvZiB5ZXh0QXR0ID09PSAic3RyaW5nIil7CiAgICAgICAgdmFyIHN0YXJ0ID0geWV4dEF0dC5zcGxpdCgiIC0gIilbMF0KICAgICAgICB2YXIgZW5kID0geWV4dEF0dC5zcGxpdCgiIC0gIilbMV0KICAgICAgICBpZihzdGFydC5pbmNsdWRlcygicG0iKSAmJiBzdGFydC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHl5eXksIG1tLCBkZCwgcGFyc2VJbnQoc3RhcnQuc3BsaXQoL1xzK3w6LylbMF0pICsgMTIsIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgc3RhcnREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChzdGFydC5zcGxpdCgvXHMrfDovKVswXSksIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoZW5kLmluY2x1ZGVzKCJwbSIpICYmIGVuZC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgdmFyIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSkgKyAxMiwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9IGVsc2UgaWYgKGVuZC5pbmNsdWRlcygiYW0iKSAmJiBlbmQuc3BsaXQoL1xzK3w6LylbMF0gPT09ICIxMiIpIHsKICAgICAgICAgICAgdmFyIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSkgLSAxMiwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgZW5kRGF0ZSA9IG5ldyBEYXRlKHl5eXksIG1tLCBkZCwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzBdKSwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGVuZC5pbmNsdWRlcygiYW0iKSAmJiAoZW5kRGF0ZSA8IHN0YXJ0RGF0ZSkpewogICAgICAgICAgICBlbmREYXRlID0gbmV3IERhdGUoeXl5eVRtdywgbW1UbXcsIGRkVG13LCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMF0pLCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMV0pKQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvL2NoZWNrIGlmIGNsb3NlZAogICAgICAgIGlmKHRvZGF5ID4gZW5kRGF0ZSl7CiAgICAgICAgICAgIHZhciBjbG9zZWQgPSB0cnVlCiAgICAgICAgLy9vcGVuZWQgMjQgaG91cnMgCiAgICAgICAgfSBlbHNlIGlmKHN0YXJ0ID09PSAnMTI6MDAgYW0nICYmIGVuZCA9PT0gJzExOjU5IHBtJyl7CiAgICAgICAgICAgIHZhciBzdGF0dXMgPSAiT3BlbiAiCiAgICAgICAgICAgIHZhciBjc3NDbGFzcyA9ICJhbGxEYXlTdGF0dXMiCiAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICcgMjQgaG91cnMgJwogICAgICAgIC8vb3BlbmVkCiAgICAgICAgfSBlbHNlIGlmKHRvZGF5IDwgc3RhcnREYXRlKXsKICAgICAgICAgICAgdmFyIGNsb3NlZCA9IHRydWUKICAgICAgICAvL2NoZWNrIGlmIGNsb3Npbmcgc29vbgogICAgICAgIH0gZWxzZSBpZiAoZW5kRGF0ZSAtIHRvZGF5IDwgdGhpcnR5TWlucyAmJiBlbmREYXRlIC0gdG9kYXkgPCAwID09PSBmYWxzZSApewogICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zaW5nIFNvb24gIgogICAgICAgICAgICAgICAgdmFyIGNzc0NsYXNzID0gInNvb25TdGF0dXMiCiAgICAgICAgICAgICAgICB2YXIgYnVzSG91cnMgPSAnIOKAoiAnICsgZW5kIAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBzdGF0dXMgPSAiT3BlbiAiCiAgICAgICAgICAgIHZhciBjc3NDbGFzcyA9ICJvcGVuZWRTdGF0dXMiCiAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICfigKIgQ2xvc2VzICcgKyBlbmQgCiAgICAgICAgfQogCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmKGNsb3NlZCl7CiAgICAgICAgCiAgICAgICAgLy8gY2xvc2VkICYgb3BlbmluZyB0b2RheSAKICAgICAgICBpZigodG9kYXkgPCBzdGFydERhdGUpKXsKICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zZWQgIgogICAgICAgICAgICB2YXIgY3NzQ2xhc3MgPSAiY2xvc2VkU3RhdHVzIgogICAgICAgICAgICB2YXIgYnVzSG91cnMgPSAnIE9wZW5zICcgKyBzdGFydCAKICAgICAgICAvL2Nsb3NlZCAmIG9wZW4gdG9tb3Jyb3cgCiAgICAgICAgfSBlbHNlIGlmKGNsb3NlZCAmJiB0b21vcnJvd09wZW4gPT09IHRydWUpewogICAgICAgICAgICB2YXIgc3RhdHVzID0gIkNsb3NlZCAiCiAgICAgICAgICAgIHZhciBjc3NDbGFzcyA9ICJjbG9zZWRTdGF0dXMiCiAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICcg4oCiIE9wZW5zICcgKyB0bXJ3U3RhcnQgCiAgICAgICAgLy9jbG9zZWQgYW5kIG5vdCBvcGVuIHRvbW9ycm93IAogICAgICAgIH0gZWxzZSBpZihjbG9zZWQgJiYgdG9tb3Jyb3dPcGVuICE9IHRydWUpewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gZGF5cy5pbmRleE9mKGRheSkgKyAxCiAgICAgICAgICAgIGZvciggdmFyIGk9MDsgaSA8IGRheXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBkYXlJbmRleCA9IChpICsgb2Zmc2V0KSAlIGRheXMubGVuZ3RoOwogICAgICAgICAgICAgICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy4nICsgZGF5c1tkYXlJbmRleF0gKyAnLm9wZW5JbnRlcnZhbHMnXSl7CiAgICAgICAgICAgICAgICAgICAgdG1yd1N0YXJ0ID0gIGRheXNTaG9ydFtkYXlJbmRleF0gKyAiICIgKyB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLScgKyBkYXlzW2RheUluZGV4XV0uc3BsaXQoIiAtICIpWzBdIAogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zZWQgIgogICAgICAgICAgICB2YXIgY3NzQ2xhc3MgPSAiY2xvc2VkU3RhdHVzIgogICAgICAgICAgICB2YXIgYnVzSG91cnMgPSAnIOKAoiBPcGVucyAnICsgdG1yd1N0YXJ0CgogICAgICAgIH0KICAgICAgICB9CiAgICB9CiAKICAgIC8vIGNoZWNrcyBpZiBob2xpZGF5CiAgICBpZihob2xpZGF5SG91cnMpIHsKICAgICAgICBmb3IodmFyIGk9MDtpIDwgaG9saWRheUhvdXJzLmxlbmd0aDtpKyspewogICAgICAgICAgICBpZihob2xpZGF5SG91cnNbaV0uZGF0ZSA9PT0gdG9kYXlEYXRlICYmIGhvbGlkYXlIb3Vyc1tpXS5pc0Nsb3NlZCA9PT0gdHJ1ZSAmJiB0b21vcnJvd09wZW4gPT09IGZhbHNlKXsKICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBkYXlzLmluZGV4T2YoZGF5KSArIDEKICAgICAgICAgICAgICAgIGZvciggdmFyIGk9MDsgaSA8IGRheXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGF5SW5kZXggPSAoaSArIG9mZnNldCkgJSBkYXlzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLicgKyBkYXlzW2RheUluZGV4XSArICcub3BlbkludGVydmFscyddKXsKICAgICAgICAgICAgICAgICAgICB0bXJ3U3RhcnQgPSBkYXlzU2hvcnRbZGF5SW5kZXhdICsgIiAiICsgeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgZGF5c1tkYXlJbmRleF1dLnNwbGl0KCIgLSAiKVswXQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gIkNsb3NlZCAiCiAgICAgICAgICAgICAgICB2YXIgY3NzQ2xhc3MgPSAiY2xvc2VkU3RhdHVzIgogICAgICAgICAgICAgICAgdmFyIGJ1c0hvdXJzID0gJyDigKIgT3BlbnMgJyArIHRtcndTdGFydCAgCiAgICAgICAgICAgIH0gZWxzZSBpZihob2xpZGF5SG91cnNbaV0uZGF0ZSA9PT0gdG9kYXlEYXRlICYmIGhvbGlkYXlIb3Vyc1tpXS5pc0Nsb3NlZCA9PT0gdHJ1ZSAmJiB0b21vcnJvd09wZW4gPT09IHRydWUpewogICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zZWQgIgogICAgICAgICAgICAgICAgdmFyIGNzc0NsYXNzID0gImNsb3NlZFN0YXR1cyIKICAgICAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICcg4oCiIE9wZW5zICcgKyB0bXJ3U3RhcnQgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gCiAgICBpZihjc3NDbGFzcyl7CiAgICAgICAgdmFyIGhvdXJzV2lkZ2V0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3N0YXR1cycpCiAgICAgICAgZm9yKCB2YXIgaT0wOyBpIDwgaG91cnNXaWRnZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGhvdXJzV2lkZ2V0c1tpXS5jbGFzc0xpc3QuYWRkKGNzc0NsYXNzKTsKICAgICAgICB9CiAgICB9CiAgICBpZihzdGF0dXMpewogICAgICAgIHZhciBob3Vyc1dpZGdldHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzdGF0dXMnKQogICAgICAgIGZvciggdmFyIGk9MDsgaSA8IGhvdXJzV2lkZ2V0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBob3Vyc1dpZGdldHNbaV0uaW5uZXJUZXh0ID0gc3RhdHVzOwogICAgICAgIH0KICAgIH0KICAgIGlmKGNzc0NsYXNzID09PSAnYWxsRGF5U3RhdHVzJyl7CiAgICAgICAgdmFyIGhvdXJzV2lkZ2V0cyA9ICQoZWxlbWVudCkuZmluZCgnLm9wZW5Ib3VycycpCiAgICAgICAgZm9yKCB2YXIgaT0wOyBpIDwgaG91cnNXaWRnZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGhvdXJzV2lkZ2V0c1tpXS5jaGlsZHJlblswXS50ZXh0Q29udGVudCA9ICIiCiAgICAgICAgfQogICAgfQogICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3BlbkhvdXJzJylbMF0uY2hpbGRFbGVtZW50Q291bnQgPiAxKXsKICAgICAgICB2YXIgaG91cnNXaWRnZXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3BlbkhvdXJzJykKICAgICAgICBmb3IoIHZhciBpPTA7IGkgPCBob3Vyc1dpZGdldHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG9wZW5Ib3Vyc0xlbmd0aCA9IGhvdXJzV2lkZ2V0c1tpXS5jaGlsZE5vZGVzLmxlbmd0aAogICAgICAgICAgICB2YXIgb2xkSG91cnMgPSBob3Vyc1dpZGdldHNbaV0KICAgICAgICAgICAgb2xkSG91cnMucmVtb3ZlQ2hpbGQob2xkSG91cnMuY2hpbGROb2Rlc1tvcGVuSG91cnNMZW5ndGggLSAxXSkKICAgICAgICB9CiAgICB9CiAgICB2YXIgaG91cnNXaWRnZXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3BlbkhvdXJzJykKICAgIGZvciggdmFyIGk9MDsgaSA8IGhvdXJzV2lkZ2V0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBob3Vyc1dpZGdldHNbaV0uYXBwZW5kKGJ1c0hvdXJzKQogICAgICAgIH0KfQoKCnZhciBkaXNwbGF5SG9saWRheUhvdXJzTGlzdCA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICAKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbImhvdXJzLmhvbGlkYXlIb3VycyJdKSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzWyJob3Vycy5ob2xpZGF5SG91cnMiXQogICAgfSBlbHNlIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbImhvbGlkYXlIb3VycyJdKSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzWyJob2xpZGF5SG91cnMiXQogICAgfSBlbHNlIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IGZhbHNlCiAgICB9CiAgICAKICAgIAogICAgCiAgICBpZih5ZXh0QXR0KSB7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgZGF0ZUhvbCA9IG5ldyBEYXRlKERhdGUucGFyc2UoeWV4dEF0dFtpXS5kYXRlKSk7IAoKICAgICAgICAgICAgdmFyIGRhdGVOb3cgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgICB2YXIgbnVtRGF5c0JldHdlZW4gPSBnZXROdW1EYXlzQmV0d2VlbihkYXRlSG9sLGRhdGVOb3cpOwogICAgICAgIAogICAgICAgICAgICBpZiAobnVtRGF5c0JldHdlZW4gPiAtMSkgewogICAgICAgICAgICAgICAgLy8gd3JpdGUgdG8gZG9tCiAgICAgICAgICAgICAgICBsaXN0ICs9ICc8bGk+JyArIHlleHRBdHRbaV0uZGF0ZUZvcm1hdHRlZCArICcgLSAgPHNwYW4gY2xhc3M9ImhvbGlkYXlIb3Vyc1N0YXR1cyI+JyArIHlleHRBdHRbaV0uaG91cnNGb3JtYXR0ZWQgKyAnPC9zcGFuPjwvbGk+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgJChlbGVtZW50KS5maW5kKCcjJyArIHR5cGUgKyAnTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAvLyBpZiBpbiBlZGl0b3IgZGlzcGxheSBwbGFjZSBob2xkZXIKICAgICAgICAkKGVsZW1lbnQpLmh0bWwoZW1wdHlMaXN0UGxhY2VIb2xkZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBpZiBlbXB0eSwgaGlkZSBlbGVtZW50IG9uIHJ1bnRpbWUKICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICAgIH0KfQoKdmFyIGRpc3BsYXlTZXJ2aWNlQXJlYSA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEsZmlyc3RPbmx5KSB7CiAgICB2YXIgbGlzdCA9ICIiOwogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXSkgewogICAgICAgIHZhciB5ZXh0QXR0ID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXQogICAgfSBlbHNlIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IGZhbHNlCiAgICB9CgogICAgaWYgKGZpcnN0T25seSkgewogICAgICAgIGxpc3QgPSAnPGxpPicgKyB5ZXh0QXR0WzBdICsgJzwvbGk+JzsKICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyMnICsgdHlwZSArICdMaXN0JykuaHRtbChsaXN0KTsKICAgIH0gZWxzZSBpZiAoeWV4dEF0dCAmJiBBcnJheS5pc0FycmF5KHlleHRBdHQpKSB7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnIycgKyB0eXBlICsgJ0xpc3QnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmICh5ZXh0QXR0KSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAiLnBsYWNlcyJdCiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnIycgKyB0eXBlICsgJ0xpc3QnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmIChkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJChlbGVtZW50KS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICB9Cgp9Cgp2YXIgZGlzcGxheVBob25lTGlzdCA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICAKICAgIHZhciBsb2NEYXRhID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlczsKICAgIAogICAgaWYobG9jRGF0YS5waG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+TWFpbjo8L3NwYW4+PHNwYW4gY2xhc3M9InBob25lTnVtIj4gJyArIGZvcm1hdFBob25lQmVmb3JlUmVuZGVyKGxvY0RhdGEucGhvbmUpICsgJzwvc3Bhbj48L2xpPic7CiAgICB9CiAgICBpZihsb2NEYXRhLmxvY2FsUGhvbmUpIHsKICAgICAgICBsaXN0ICs9ICc8bGk+PHNwYW4gY2xhc3M9InBob25lTGFiZWwiPkxvY2FsOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5sb2NhbFBob25lKSArICc8L3NwYW4+PC9saT4nOwogICAgfQogICAgaWYobG9jRGF0YS5hbHRlcm5hdGVQaG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+QWx0ZXJuYXRlOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5hbHRlcm5hdGVQaG9uZSkgKyAnPC9zcGFuPjwvbGk+JzsKICAgIH0KICAgIGlmKGxvY0RhdGEudG9sbEZyZWVQaG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+VG9sbCBGcmVlOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS50b2xsRnJlZVBob25lKSArICc8L3NwYW4+PC9saT4nOwogICAgfQogICAgaWYobG9jRGF0YS5tb2JpbGVQaG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+TW9iaWxlOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5tb2JpbGVQaG9uZSkgKyAnPC9zcGFuPjwvbGk+JzsKICAgIH0KICAgIGlmKGxvY0RhdGEuZmF4UGhvbmUpIHsKICAgICAgICBsaXN0ICs9ICc8bGk+PHNwYW4gY2xhc3M9InBob25lTGFiZWwiPkZheDo8L3NwYW4+PHNwYW4gY2xhc3M9InBob25lTnVtIj4gJyArIGZvcm1hdFBob25lQmVmb3JlUmVuZGVyKGxvY0RhdGEuZmF4UGhvbmUpICsgJzwvc3Bhbj48L2xpPic7CiAgICB9CiAgICBpZihsb2NEYXRhLnR0eVBob25lKSB7CiAgICAgICAgbGlzdCArPSAnPGxpPjxzcGFuIGNsYXNzPSJwaG9uZUxhYmVsIj5UVFk6PC9zcGFuPjxzcGFuIGNsYXNzPSJwaG9uZU51bSI+ICcgKyBmb3JtYXRQaG9uZUJlZm9yZVJlbmRlcihsb2NEYXRhLnR0eVBob25lKSArICc8L3NwYW4+PC9saT4nOwogICAgfQogICAgCiAgICBpZihsaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyMnICsgdHlwZSArICdMaXN0JykuaHRtbChsaXN0KTsKICAgIH0gZWxzZSBpZiAoZGF0YS5pbkVkaXRvcikgewogICAgICAgICQoZWxlbWVudCkuaHRtbChlbXB0eUxpc3RQbGFjZUhvbGRlcik7CiAgICB9IGVsc2UgewogICAgICAgICQoZWxlbWVudCkuY3NzKCdkaXNwbGF5Jywnbm9uZScpOwogICAgfQogICAgCiAgICBlbWl0WWV4dFBob25lUmVuZGVyRXZlbnQoZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5waG9uZSkpOwogICAgCn0KCnZhciBnZXROdW1EYXlzQmV0d2VlbiA9IGZ1bmN0aW9uKGQxLCBkMikgewogIHZhciBkaWZmID0gZDEuZ2V0VGltZSgpIC0gZDIuZ2V0VGltZSgpOwogIHJldHVybiBkaWZmIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpOwp9OwoKdmFyIG9yZGVyUGF5bWVudHNMaXN0ID0gZnVuY3Rpb24obGlzdERhdGEpIHsKICAgIAogICAgaWYobGlzdERhdGEuaW5kZXhPZignRGlzY292ZXInKSA+PSAwKSB7CiAgICAgICAgbGlzdERhdGEuc3BsaWNlKGxpc3REYXRhLmluZGV4T2YoIkRpc2NvdmVyIiksIDEpOwogICAgICAgIGxpc3REYXRhLnVuc2hpZnQoJ0Rpc2NvdmVyJyk7CiAgICB9CiAgICAKICAgIGlmKGxpc3REYXRhLmluZGV4T2YoJ0FtZXJpY2FuIEV4cHJlc3MnKSA+PSAwKSB7CiAgICAgICAgbGlzdERhdGEuc3BsaWNlKGxpc3REYXRhLmluZGV4T2YoIkFtZXJpY2FuIEV4cHJlc3MiKSwgMSk7CiAgICAgICAgbGlzdERhdGEudW5zaGlmdCgnQW1lcmljYW4gRXhwcmVzcycpOwogICAgfQogICAgCiAgICBpZihsaXN0RGF0YS5pbmRleE9mKCdNYXN0ZXJDYXJkJykgPj0gMCkgewogICAgICAgIGxpc3REYXRhLnNwbGljZShsaXN0RGF0YS5pbmRleE9mKCJNYXN0ZXJDYXJkIiksIDEpOwogICAgICAgIGxpc3REYXRhLnVuc2hpZnQoJ01hc3RlckNhcmQnKTsKICAgIH0KICAgIAogICAgaWYobGlzdERhdGEuaW5kZXhPZignVmlzYScpID49IDApIHsKICAgICAgICBsaXN0RGF0YS5zcGxpY2UobGlzdERhdGEuaW5kZXhPZigiVmlzYSIpLCAxKTsKICAgICAgICBsaXN0RGF0YS51bnNoaWZ0KCdWaXNhJyk7CiAgICB9CiAgICAKICAgIHJldHVybiBsaXN0RGF0YQp9Cgp2YXIgZGlzcGxheUltYWdlTGlzdCA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICB2YXIgbGlzdERhdGEgPSBvcmRlclBheW1lbnRzTGlzdChfeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXSk7CiAgICAKICAgIAogICAgZm9yICh2YXIgaT0wOyBpPCBsaXN0RGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgIAogICAgICAgIGxpc3QgKz0gJzxpbWcgc3JjPSInICsgZ2V0SW1hZ2VVcmwobGlzdERhdGFbaV0sZGF0YS5jb25maWcuY2FyZFN0eWxlRGFya09yTGlnaHQpICsgJyIgYWx0PSInICsgbGlzdERhdGFbaV0gKyAnIi8+JwogICAgfQogICAgCiAgICBpZihsaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyNwYXltZW50T3B0aW9uc0ltYWdlcycpLmh0bWwobGlzdCkKICAgIH0gZWxzZSBpZiAoZGF0YS5pbkVkaXRvcikgewogICAgICAgICQoZWxlbWVudCkuaHRtbChlbXB0eUxpc3RQbGFjZUhvbGRlcik7CiAgICB9IGVsc2UgewogICAgICAgICQoZWxlbWVudCkuY3NzKCdkaXNwbGF5Jywnbm9uZScpOwogICAgfQogICAgCiAgICAKICAgIAp9Cgp2YXIgZGlzcGxheVNvY2lhbEljb25zID0gZnVuY3Rpb24odHlwZSx5ZXh0RGF0YSkgewogICAgdmFyIGxpc3QgPSAiIjsKICAgIAogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlcy5mYWNlYm9va1BhZ2VVcmwpIHsKICAgICAgICBsaXN0ICs9ICc8YSBocmVmPSInICsgeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlcy5mYWNlYm9va1BhZ2VVcmwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+IDxpbWcgc3JjPSJodHRwczovL2Nkbi53ZWJzaXRlcy5oaWJ1LmNvbS8tcmVzZWxsZXJzLXByZXZpZXcvX3NvY2lhbF9pY29ucy9oaWJ1X2ZhY2Vib29rLnN2ZyIgLz48L2E+JwogICAgfQogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlcy50d2l0dGVySGFuZGxlKSB7CiAgICAgICAgbGlzdCArPSAnPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS8nICsgIHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXMudHdpdHRlckhhbmRsZSArICciIHRhcmdldD0iX2JsYW5rIj4gPGltZyBzcmM9Imh0dHBzOi8vY2RuLndlYnNpdGVzLmhpYnUuY29tLy1yZXNlbGxlcnMtcHJldmlldy9fc29jaWFsX2ljb25zL2hpYnVfdHdpdHRlci5zdmciIC8+PC9hPicKICAgIH0KICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXMuaW5zdGFncmFtSGFuZGxlKSB7CiAgICAgICAgbGlzdCArPSAnPGEgaHJlZj0iaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS8nKyB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzLmluc3RhZ3JhbUhhbmRsZSsnIiB0YXJnZXQ9Il9ibGFuayI+IDxpbWcgc3JjPSJodHRwczovL2Nkbi53ZWJzaXRlcy5oaWJ1LmNvbS8tcmVzZWxsZXJzLXByZXZpZXcvX3NvY2lhbF9pY29ucy9oaWJ1X2luc3RhZ3JhbS5zdmciIC8+PC9hPicKICAgIH0KICAgIAogICAgaWYobGlzdC5sZW5ndGggPiAwKSB7CiAgICAgICAgJChlbGVtZW50KS5maW5kKCcjc29jaWFsSWNvbnMnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmIChkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJChlbGVtZW50KS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICB9CiAgICAKICAgIAp9Cgp2YXIgZ2V0SW1hZ2VVcmwgPSBmdW5jdGlvbihuYW1lLHN0eWxlKSB7CiAgICB2YXIgY2RuUGF0aCA9ICdodHRwczovL2Nkbi53ZWJzaXRlcy5oaWJ1LmNvbS8tcmVzZWxsZXJzLXByZXZpZXcvX2NjX2ljb25zLyc7CiAgICBpZighc3R5bGUpIHsKICAgICAgICBzdHlsZSA9ICdfZC5zdmcnCiAgICB9CiAgICBpZiAobmFtZSA9PT0gIlpFTExFIil7CiAgICAgICAgbmFtZSA9ICJaZWxsZSIKICAgIH0KICAgIGlmIChuYW1lID09PSAiR29vZ2xlIFBheSIpewogICAgICAgIG5hbWUgPSAiQW5kcm9pZCBQYXkiCiAgICB9CiAgICBpZiAobmFtZSA9PT0gIktMQVJOQSIpewogICAgICAgIG5hbWUgPSAiS2xhcm5hIgogICAgfQogICAgdmFyIGltYWdlVXJsPScnOwogICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgY2FzZSAnVmlzYSc6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ01hc3RlckNhcmQnOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdEaXNjb3Zlcic6CiAgICAgICAgICAgIGltYWdlVXJsID0gY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnQW1lcmljYW4gRXhwcmVzcyc6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0FuZHJvaWQgUGF5JzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnQXBwbGUgUGF5JzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnQml0Y29pbic6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0Nhc2gnOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdDaGVjayc6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0RpbmVycyBDbHViJzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnRGlzY292ZXInOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdGaW5hbmNpbmcnOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdJbnZvaWNlJzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnUGF5UGFsJzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnU2Ftc3VuZyBQYXknOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJUcmF2ZWxlcidzIENoZWNrIjoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiWmVsbGUiOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhawogICAgICAgIGNhc2UgIktsYXJuYSI6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrCiAgICB9CiAgICByZXR1cm4gaW1hZ2VVcmwKfQoKZnVuY3Rpb24gZW1pdFlleHRQaG9uZVJlbmRlckV2ZW50KHBob25lKSB7CiAgICB2YXIgeWV4dFBob25lUmVuZGVyRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ1lleHRQaG9uZUNoYW5nZUV2ZW50JywgCiAgICAgICAgeyAKICAgICAgICAgICAgZGV0YWlsOiBwaG9uZSwgCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsIAogICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlIAogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoeWV4dFBob25lUmVuZGVyRXZlbnQpOwp9Cgp2YXIgaW5pdFlleHRFbGVtZW50cyA9IGZ1bmN0aW9uKHlleHREYXRhLHdpZGdldFR5cGUpewogICAgaWYgKHdpZGdldFR5cGUgPT09ICdhZGRyZXNzJyAmJiBkYXRhLmNvbmZpZy5kcmF3TWFwKSB7CiAgICAgICAgZHJhd01hcCh5ZXh0RGF0YSk7CiAgICB9IGVsc2UgaWYgKHdpZGdldFR5cGUgPT09ICdwYXltZW50T3B0aW9ucycgJiYgZGF0YS5jb25maWcuc2hvd1BheW1lbnRzQXMgPT09ICdwYXltZW50SWNvbnMnKSB7CiAgICAgICAgZGlzcGxheUltYWdlTGlzdCh3aWRnZXRUeXBlLHlleHREYXRhKTsKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0gJ3Bob25lJyAmJiBkYXRhLmNvbmZpZy5waG9uZVNob3dBcyA9PT0gJ2xpc3QnKSB7CiAgICAgICAgZGlzcGxheVBob25lTGlzdCh3aWRnZXRUeXBlLHlleHREYXRhKTsKICAgIC8vIGNoZWNrIGZvciBhbnkgbGlzdCB0eXBlCiAgICB9IGVsc2UgaWYod2lkZ2V0VHlwZSA9PT0gJ3Bob25lJyAmJiBkYXRhLmNvbmZpZy5waG9uZVNob3dBcyA9PT0gJ2J1dHRvbicpIHsKICAgICAgICB2YXIgcGhGb3JtYXR0ZWQgPSBmb3JtYXRQaG9uZUJlZm9yZVJlbmRlcih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW2RhdGEuY29uZmlnLnBob25lVHlwZV0sZnVuY3Rpb24ocGhvbmUpIHsKICAgICAgICAgICAgJChlbGVtZW50KS5maW5kKCIuZG1CdXR0b25MaW5rIikuaHRtbCgnPHNwYW4gY2xhc3M9InRleHQiPicgKyBwaG9uZSArICc8L3NwYW4+Jyk7ICAgCiAgICAgICAgICAgIAogICAgICAgICAgICBlbWl0WWV4dFBob25lUmVuZGVyRXZlbnQocGhvbmUpOwogICAgICAgICAgICAKICAgICAgICB9KTsKICAgIH0gZWxzZSBpZih3aWRnZXRUeXBlID09PSAncGhvbmUnICYmIGRhdGEuY29uZmlnLnBob25lU2hvd0FzID09PSAndGV4dCcpIHsKICAgICAgICB2YXIgcGhGb3JtYXR0ZWQgPSBmb3JtYXRQaG9uZUJlZm9yZVJlbmRlcih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW2RhdGEuY29uZmlnLnBob25lVHlwZV0sZnVuY3Rpb24ocGhvbmUpIHsKICAgICAgICAgICAgJChlbGVtZW50KS5maW5kKCcueWV4dFBob25lVGV4dCcpLmh0bWwoJzxzcGFuIGNsYXNzPSJ0ZXh0Ij4nICsgcGhvbmUgKyAnPC9zcGFuPicpOyAgIAogICAgICAgICAgICAKICAgICAgICAgICAgZW1pdFlleHRQaG9uZVJlbmRlckV2ZW50KHBob25lKTsKICAgICAgICAgICAgCiAgICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKHdpZGdldFR5cGUgPT09ICdzZXJ2aWNlcycgfHwgd2lkZ2V0VHlwZSA9PT0gJ2dvb2dsZUF0dHJpYnV0ZXNGb3JtYXR0ZWQnIHx8IHdpZGdldFR5cGUgPT09ICdsYW5ndWFnZXMnIHx8IHdpZGdldFR5cGUgPT09ICdwYXltZW50T3B0aW9ucycgfHwgd2lkZ2V0VHlwZSA9PT0gJ2tleXdvcmRzJyB8fCB3aWRnZXRUeXBlID09PSAncHJvZHVjdHMnIHx8IHdpZGdldFR5cGUgPT09ICdhc3NvY2lhdGlvbnMnIHx8IHdpZGdldFR5cGUgPT09ICdicmFuZHMnKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgCiAgICAgICAgICAgIGRpc3BsYXlUZXh0ZExpc3Qod2lkZ2V0VHlwZSx5ZXh0RGF0YSkKICAgICAgICB9LDEpOwogICAgfSBlbHNlIGlmKHdpZGdldFR5cGUgPT09ICdzcGVjaWFsdGllcycpIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICBkaXNwbGF5U3BlY2lhbHRpZXMoeWV4dERhdGEpCiAgICAgICAgfSwxKQogICAgfWVsc2UgaWYgKHdpZGdldFR5cGUgPT09J3NlcnZpY2VBcmVhJykgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGRpc3BsYXlTZXJ2aWNlQXJlYSh3aWRnZXRUeXBlLHlleHREYXRhLGRhdGEuY29uZmlnLnNob3dTZXJ2aWNlQXJlYUZpcnN0KQogICAgICAgIH0sMSkKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0naG91cnMnICYmIGRhdGEuY29uZmlnLmhvdXJzU2hvd0FzID09PSAnbGlzdCcgJiYgZGF0YS5jb25maWcuaXNMaXN0ID09IGZhbHNlKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgZGlzcGxheUhvdXJzKHdpZGdldFR5cGUseWV4dERhdGEpCiAgICAgICAgfSwxKQogICAgfSBlbHNlIGlmICh3aWRnZXRUeXBlID09PSdob3VycycgJiYgZGF0YS5jb25maWcuaG91cnNTaG93QXMgPT09ICdvcGVuSG91cnMnKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgZGlzcGxheU9wZW5Ib3Vycyh3aWRnZXRUeXBlLHlleHREYXRhKQogICAgICAgIH0sMSkKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0gJ3NvY2lhbCcpIHsKICAgICAgICBkaXNwbGF5U29jaWFsSWNvbnMod2lkZ2V0VHlwZSx5ZXh0RGF0YSk7CiAgICB9IGVsc2UgaWYgKHdpZGdldFR5cGUgPT09ICdob2xpZGF5SG91cnMnKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgCiAgICAgICAgICAgIGRpc3BsYXlIb2xpZGF5SG91cnNMaXN0KHdpZGdldFR5cGUseWV4dERhdGEpCiAgICAgICAgfSwxKTsKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0gJ2hvdXJzJykgewogICAgICAgIC8vaGlkZSBob3VycyBsaXN0IGlmIHRvZ2dsZSBlbmFibGVkCiAgICAgICAgaWYoZGF0YS5jb25maWcuaGlkZUhvdXJzTGlzdCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJy55ZXh0SG91cnMnKS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICAgICAgfQogICAgfSBlbHNlIGlmICh3aWRnZXRUeXBlID09PSAnZGVzY3JpcHRpb24nIHx8IHdpZGdldFR5cGUgPT09ICd5ZWFyRXN0YWJsaXNoZWQnIHx8IHdpZGdldFR5cGUgPT09ICdlbWFpbCcgfHwgd2lkZ2V0VHlwZSA9PT0gJ25hbWUnKSB7CiAgICAgICAgLy8gY2hlY2sKICAgICAgICBoaWRlSWZFbXB0eSh3aWRnZXRUeXBlLHlleHREYXRhKQogICAgfQogICAgLy9yZW1vdmUgZXJyb3IgaWYgc2NyaXB0IG5vdCBlbnRlcmVkIGNvcnJlY3RseS4KICAgICQoZWxlbWVudCkuZmluZCgnLndyb25nU2NyaXB0RXJyb3InKS5yZW1vdmVDbGFzcygnaGFzRXJyb3InKTsKICAgIAp9CgpmdW5jdGlvbiBoaWRlSWZFbXB0eSh0eXBlLHlleHREYXRhKSB7CiAgICBpZigheWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXSkgewogICAgICAgIGlmKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsgICAgCiAgICAgICAgfQogICAgICAgIAogICAgfQp9CgovLyBUT0RPIENIQU5HRSBUTyBFVkVOVCBDQUxMIEJBQ0sKdmFyIHN0YXJ0SW50ZXJ2YWxUb1dhaXRBbmRMb2FkV2lkZ2V0cyA9IGZ1bmN0aW9uKHdpZGdldFR5cGUpIHsKICAgIC8vc3RhcnQgaW50ZXJ2YWwgZm9yIHRoaXMgc3BlY2lmaWMgd2lkZ2V0CiAgICB2YXIgaW50ZXJ2YWxDaGVja1lleHRMb2FkZWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgICAgIGlmICh3aW5kb3cuX3lleHREYXRhKSB7CiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxDaGVja1lleHRMb2FkZWQpOwogICAgICAgICAgICBpbml0WWV4dEVsZW1lbnRzKHdpbmRvdy5feWV4dERhdGEsd2lkZ2V0VHlwZSk7CiAgICAgICAgfSAKICAgIH0sNTApCn0KCgovKiBpbml0aWFsaXphdGlvbiAqLwppZihkYXRhLmluRWRpdG9yKXsKICAgIHdpbmRvdy5yZWZyZXNoWWV4dCAmJiB3aW5kb3cucmVmcmVzaFlleHQoKTsKICAgIAogICAgCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICAgICAgIGlmKCF3aW5kb3cueWV4dEluaXRpYWxpemVkKXsKICAgICAgICAgICAgJChlbGVtZW50KS5maW5kKCcubWlzc2luZ1lleHRXaWRnZXQnKS5hZGRDbGFzcygnc2hvdycpOyAKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJy5taXNzaW5nWWV4dFdpZGdldCcpLnJlbW92ZUNsYXNzKCdzaG93Jyk7IAogICAgICAgIH0KICAgIH0pOwogICAgCn0gZWxzZSB7CiAgICBkbUFQSS5ydW5PblJlYWR5KCd5ZXh0JyAsIGZ1bmN0aW9uKCl7CiAgICAgICAgbG9hZFlleHQoKTsKICAgfSk7CiAgICAvLyBCZWZvcmUgbmF2aWdhdGluZyB3aXRoIEFqYXgsIHdlIHNldCB0aGUgeWV4dCBpbml0aWFsaXplZCB0byBiZSBmYWxzZSBzbyBpdCB3aWxsIGJlIGluaXRpYWxpemVkIGFnYWluIGFmdGVyIHRoZSBhamF4IG5hdmlnYXRpb24KICAgIGRtQVBJLnJ1bkJlZm9yZUFqYXhOYXZpZ2F0aW9uKCd5ZXh0JywgZnVuY3Rpb24oKXsKICAgICAgICB3aW5kb3cueWV4dEluaXRpYWxpemVkID0gZmFsc2U7CiAgICB9KTsKfQ==","css":".editorOnlyInfo, .multipleYextError, .wrongScriptError {\n display: none;\n max-width: 350px;\n background: #fff;\n text-align: left;\n padding: 10px;\n line-height: normal;\n font-size: 14px;\n}\n\n.editorOnlyInfo.inEditor {\n display: block;\n color: #3ac280;\n}\n\n.multipleYextError.hasError, .wrongScriptError.hasError {\n display: block;\n color: red;\n}\n\n.widget-7b6cfb .dmWidget.yextButton {\n width: 100%;\n}\n\n#dm .widget-7b6cfb {\n line-height: normal !important;\n}\n\na.getDirections {\n display: block;\n}\n\n.yextButton.show {\n display: inline-block;\n}\n\n.yextButton .text {\n display: table-cell;\n vertical-align: middle;\n}\n\n.yextMap {\n height: 100%;\n width: 100%;\n overflow: hidden;\n z-index: 0;\n text-align: left;\n margin: 0 auto;\n}\n\n.yextHours {\n text-align: left;\n width: 300px;\n}\n\n.yextHours .row {\n display: flex;\n}\n\n.yextHours .row .left, .yextHours .row .right {\n flex: 1;\n align-self: center;\n}\n\n.yextAdditionalHoursText {\n display: inline-block;\n}\n\n.yextAddress {\n text-align: left;\n}\n\n#paymentOptionsImages img {\n display: inline-block;\n width: 60px;\n margin-right: 5px;\n margin-bottom: 5px;\n}\n\n#socialIcons a {\n display: inline-block;\n width: 50px;\n margin-right: 5px;\n margin-bottom: 5px;\n}\n\n.bullet {\n list-style-type: disc;\n}\n\n.no-list {\n list-style-type: none;\n}\n\n.circle {\n list-style-type: circle;\n}\n\n.square {\n list-style-type: square;\n}\n\n.decimal {\n list-style-type: decimal;\n}\n\n.bold {\n font-weight: bold;\n}\n\n#socialIcons {\n display: flex;\n}\n\n#socialIcons.left {\n justify-content: flex-start;\n}\n\n#socialIcons.right {\n justify-content: flex-end;\n}\n\n#socialIcons.center {\n justify-content: center;\n}\n\nul[id*=List] {\n margin: 0;\n}\n\nh3[class*=Header] {\n margin: 10px 0;\n}\n\n.yextEmail {\n display: block;\n}\n\n.picons-left {\n text-align: left;\n}\n\n.picons-right {\n text-align: right;\n}\n\n.picons-center {\n text-align: center;\n}\n\n.openedStatus {\n color: #3ac280;\n}\n\n.allDayStatus {\n color: #3ac280;\n}\n\n.closedStatus {\n color: #FF0000;\n}\n\n.soonStatus {\n color: #FF7322;\n}\n","strings":{}},{"widgetId":"afd4bc7f907140298e111130d715031d","version":100,"js":"bGV0IEhhc09wZW5lZE1lbnUgPSBmYWxzZTsNCg0KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQogICBkaXNwbGF5VHlwZSgpOw0KfSk7DQoNCmZ1bmN0aW9uIGRpc3BsYXlUeXBlKCkgew0KICAgIGlmKGlzTW9iaWxlKCkpIHsNCiAgICAgICAgZGlzcGxheU1vYmlsZSgpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGRpc3BsYXlEZXNrdG9wKCk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBkaXNwbGF5TW9iaWxlKCkgew0KICAgIHZhciBtYXN0ZXJGYWJFbGUgPSAkKGVsZW1lbnQpLmZpbmQoJyNtYXN0ZXJmYWInKTsNCiAgICAkKCcjbWFpbi1jb250YWluZXInKS5lbXB0eSgpLmFwcGVuZChnZXRTdmcoZGF0YS5jb25maWcuTW9iaWxlTWFpbikpOw0KICAgIA0KICAgICQobWFzdGVyRmFiRWxlKS5hdHRyKCdjbGFzcycsICdmYWIgbWFzdGVyLW1vYmlsZScpOy8vIGFkZCBtb2JpbGUgY2xhc3MgZm9yIGN1c3RvbSBzdHlsZQ0KICAgIA0KICAgICQobWFzdGVyRmFiRWxlKS5jc3MoJ2Rpc3BsYXknLCAnZmxleCcpOyAvL3NpbmNlIGVsZW1lbnQgaXMgaGlkZGVuIGJ5IGRlZmF1bHQsIHNob3cgaW5zdGVhZA0KICAgIA0KICAgIC8vIHNldCB0aGUgdGV4dCBhbGlnbm1lbnQgdmFyIGhlcmUgZm9yIHVzZSBiZWxvdyAodXBkYXRlIEJTUjoyMDIwMDQyMSkNCiAgICB2YXIgbW9UZXh0ID0gKGRhdGEuY29uZmlnLk1vYmlsZU9yaWVudGF0aW9uID09PSAnbGVmdCcpID8gJ2JzclJpZ2h0VGV4dCcgOiAnbGVmdFRleHQnOw0KICAgIA0KICAgIC8vIGFkZCBpdGVtcyB3aXRoIG9yIHdpdGhvdXQgb3ZlcmxheSBhbmQgbGFiZWwgdGV4dA0KICAgIGlmKGRhdGEuY29uZmlnLk1vYmlsZUxheW91dCA9PT0gJ0Z1bGwnKSB7DQogICAgICAgICQoJy5tb2JpbGUtYmcnKS5hZnRlcihnZXRJdGVtcyhtb1RleHQpKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgICQoJy5tb2JpbGUtYmcnKS5hZnRlcihnZXRJdGVtcygpKTsNCiAgICB9DQogICAgDQogICAgbW9iaWxlVGhlbWUoKTsgIC8vIGFkZCBsaWdodCBvciBkYXJrIHRoZW1lDQogICAgYnNySWNvblJlc2l6ZSgpOyAvLyBtYWtlcyBhIGN1c3RvbSBpY29uIHJlc2l6YWJsZSAodXBkYXRlIEJTUjoyMDIwMDUyOSkNCiAgICBic3JNb2JpbGVPcmllbnRhdGlvbigpOyAvLyBwb3NpdGlvbnMgbWVudSBsZWZ0IG9yIHJpZ2h0ICh1cGRhdGUgQlNSOjIwMjAwNDIxKQ0KICAgIGFkZExpc3RlbmVyKCk7DQogICAgDQogICAgaWYgKHR5cGVvZiBmYnEgPT09ICJmdW5jdGlvbiIpIHsgLy8gdGhpcyBtYWtlcyBzdXJlIHRoYXQgZmJxIGlzIG9uIHRoZSBwYWdlDQogICAgICAgIGFkZFBpeGVsTGlzdGVuZXIoKTsgLy8gRmFjZWJvb2sgUGl4ZWwgY29udmVyc2lvbiB0cmFja2luZyAodXBkYXRlIEJTUjoyMDIwMDQyMikNCiAgICB9DQogICAgYWRkQ2hhdExpc3RlbmVyKCk7IC8vIEFkZCBjaGF0IHNjcmlwdCBpbmplY3Rpb24gKHVwZGF0ZSBCU1I6MjAyMDA1MjYpDQogICAgDQogICAgLy8gYWRkIGZvY3VzIGFuaW1hdGlvbg0KICAgIGlmKGRhdGEuY29uZmlnLkZvY3VzQW5pKSBhbmltYXRlRm9jdXMoKTsNCn0NCmZ1bmN0aW9uIGRpc3BsYXlEZXNrdG9wKCkgew0KICAgIHZhciBtYXN0ZXJGYWJFbGUgPSAkKGVsZW1lbnQpLmZpbmQoJyNtYXN0ZXJmYWInKTsNCiAgICAkKG1hc3RlckZhYkVsZSkuY3NzKCdkaXNwbGF5JywgJ2ZsZXgnKTsgLy9zaW5jZSBlbGVtZW50IGlzIGhpZGRlbiBieSBkZWZhdWx0LCBzaG93IGluc3RlYWQNCiAgICBpZihkYXRhLmNvbmZpZy5EZXNrdG9wTGF5b3V0ID09PSAnQmFyJykgew0KICAgICAgICAkKCcjbWFpbi1jb250YWluZXInKS5lbXB0eSgpLmFwcGVuZChnZXRTdmcoZGF0YS5jb25maWcuRGVza01haW4pKTsNCiAgICAgICAgJChtYXN0ZXJGYWJFbGUpLmFwcGVuZChnZXRJdGVtcygncmlnaHRUZXh0JykpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgJCgnI2Zsb2F0LWNvbnRhaW5lcicpLmVtcHR5KCkuYXBwZW5kKGdldEl0ZW1zKCdyaWdodFRleHQnLCB0cnVlKSk7DQogICAgfQ0KICAgIGRlc2t0b3BUeXBlKCk7DQogICAgYnNySWNvblJlc2l6ZSgpOyAvLyBtYWtlcyBhIGN1c3RvbSBpY29uIHJlc2l6YWJsZSAodXBkYXRlIEJTUjoyMDIwMDUyOSkNCiAgICBhZGRMaXN0ZW5lcigpOw0KICAgIA0KICAgIGlmICh0eXBlb2YgZmJxID09PSAiZnVuY3Rpb24iKSB7IC8vIHRoaXMgbWFrZXMgc3VyZSB0aGF0IGZicSBpcyBvbiB0aGUgcGFnZQ0KICAgICAgICBhZGRQaXhlbExpc3RlbmVyKCk7IC8vIEZhY2Vib29rIFBpeGVsIGNvbnZlcnNpb24gdHJhY2tpbmcgKHVwZGF0ZSBCU1I6MjAyMDA0MjIpDQogICAgfQ0KICAgIGFkZENoYXRMaXN0ZW5lcigpOyAvLyBBZGQgY2hhdCBzY3JpcHQgaW5qZWN0aW9uICh1cGRhdGUgQlNSOjIwMjAwNTI2KQ0KICAgIA0KICAgIC8vIGFkZCBmb2N1cyBhbmltYXRpb24NCiAgICBpZihkYXRhLmNvbmZpZy5Gb2N1c0FuaSkgYW5pbWF0ZUZvY3VzKCk7DQp9DQovLyBoYW5kbGVzIHN0eWxlIGNoYW5nZXMgZm9yIGRlc2t0b3AgdHlwZXMNCmZ1bmN0aW9uIGRlc2t0b3BUeXBlKCkgew0KICAgICQoJyNtYXN0ZXJmYWInKS5hdHRyKCdjbGFzcycsICdmYWIgbWFzdGVyLWRlc2t0b3AnKTsgLy8gYWRkIGRlc2t0b3AgY2xhc3MgZm9yIHN0eWxpbmcNCiAgICAkKCcuaWNvbi1jb250YWluZXInKS5hZGRDbGFzcygnZGVza3RvcCcpOw0KICAgIGlmKGRhdGEuY29uZmlnLkRlc2t0b3BMYXlvdXQgPT09ICdCYXInKSB7DQogICAgICAgICQoJy5tZW51LWxpbmsnKS5hZGRDbGFzcygnZGVzay1iYXInKTsgICAgICAgLy8gYWRkIGNsYXNzIGZvciBmaXhlZCBiYXIgdGV4dA0KICAgICAgICAkKCcuY2hpbGQnKS5hdHRyKCdjbGFzcycsICdmYWIgY2hpbGQgY2hpbGQtZGVza3RvcC1iYXInKTsNCiAgICAgICAgDQogICAgICAgIGNvbnN0IG1hc3RlckxhYmVsID0gJzxzcGFuIGlkPSJtYXN0ZXItbGFiZWwiPicrZGF0YS5jb25maWcuTWFpbkxhYmVsKyc8L3NwYW4+JzsNCiAgICAgICAgJCgnI21hc3Rlci1sYWJlbCcpLnJlbW92ZSgpOw0KICAgICAgICAkKCcjbWFzdGVyZmFiJykuYXBwZW5kKG1hc3RlckxhYmVsKTsNCiAgICAgICAgDQogICAgICAgICQoJyNtYXN0ZXJmYWInKS5hZGRDbGFzcygnbWFzdGVyLWJhcicpOw0KICAgIH0gZWxzZSBpZihkYXRhLmNvbmZpZy5EZXNrdG9wTGF5b3V0ID09PSAnRmxvYXQnKSB7DQogICAgICAgICQoJyNtYXN0ZXJmYWInKS5oaWRlKCk7DQogICAgfQ0KfQ0KLy8gc3R5bGVzIGxpZ2h0IGFuZCBkYXJrIG1vYmlsZSB0aGVtZXMNCmZ1bmN0aW9uIG1vYmlsZVRoZW1lKCkgew0KICAgICQoJy5jaGlsZCcpLmF0dHIoJ2NsYXNzJywgJ2ZhYiBjaGlsZCBjaGlsZC1tb2JpbGUnKTsNCiAgICBpZihkYXRhLmNvbmZpZy5Nb2JpbGVUaGVtZSA9PT0gJ0xpZ2h0Jykgew0KICAgICAgICAkKCcub3ZlcmxheSwgLmNoaWxkLCAuc29jaWFsLWljb24sIC5pY29uLWNvbnRhaW5lciwgLm1vYmlsZS1iZywgc29jaWFsLWJnLCAubWVudS1saW5rJykuYWRkQ2xhc3MoJ21vYmlsZSBsaWdodCcpOw0KICAgIH0NCiAgICBlbHNlIGlmKGRhdGEuY29uZmlnLk1vYmlsZVRoZW1lID09PSAnRGFyaycpIHsNCiAgICAgICAgJCgnLm92ZXJsYXksIC5jaGlsZCwgLnNvY2lhbC1pY29uLCAuaWNvbi1jb250YWluZXIsIC5tb2JpbGUtYmcsIHNvY2lhbC1iZywgLm1lbnUtbGluaycpLmFkZENsYXNzKCdtb2JpbGUgZGFyaycpOw0KICAgIH0NCn0NCi8vIGFkZHMgdGhlIG1lbnUgdG8gdGhlIGxlZnQgb3IgcmlnaHQgb2YgdGhlIG1vYmlsZSBzY3JlZW4gKHVwZGF0ZSBCU1I6MjAyMDA0MjEpDQpmdW5jdGlvbiBic3JNb2JpbGVPcmllbnRhdGlvbigpIHsNCiAgICBpZihkYXRhLmNvbmZpZy5Nb2JpbGVPcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7DQogICAgICAgICQoJy5mYWIubWFzdGVyLW1vYmlsZSwgLmNoaWxkLm1vYmlsZScpLmFkZENsYXNzKCdic3ItbGVmdCcpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgJCgnLmZhYi5tYXN0ZXItbW9iaWxlLCAuY2hpbGQubW9iaWxlJykucmVtb3ZlQ2xhc3MoJ2Jzci1sZWZ0Jyk7DQogICAgfQ0KfQ0KDQovKiAgDQogICAgUHJldmlvdXMgaW1wbGVtZW50YXRpb24gcGxhY2VzIGN1c3RvbSBpY29ucyBpbiBhIG5ldyA8ZGl2Pg0KICAgIEkgZm91bmQgdGhpcyB0byBiZSBpbmNvbnNpc3RlbnQgaW4gcmVzaXppbmcgc28gdGhlIGZ1bmN0aW9uDQogICAgYWRkcyB0aGUgYXBwcm9wcmlhdGUgY2xhc3MgZGlyZWN0bHkgdG8gdGhlIHN2ZyBlbGVtZW50DQogICAgKHVwZGF0ZSBCU1I6MjAyMDA1MjkpDQoqLw0KZnVuY3Rpb24gYnNySWNvblJlc2l6ZSgpIHsNCiAgICBjdXN0b21JY29ucyA9ICQoZWxlbWVudCkuZmluZCgnLmN1c3RvbS11c2VyLWljb24nKTsNCiAgICBpZihjdXN0b21JY29ucy5sZW5ndGggPiAwKSB7DQogICAgICAgICQuZWFjaChjdXN0b21JY29ucywgZnVuY3Rpb24oaSwgY2ljb24pIHsNCiAgICAgICAgICAgIHZhciBjbGFzc0xpc3QgPSAkKGNpY29uKS5hdHRyKCdjbGFzcycpLnNwbGl0KC9ccysvKTsNCiAgICAgICAgICAgICQuZWFjaChjbGFzc0xpc3QsIGZ1bmN0aW9uKGluZGV4LCBpdGVtKSB7DQogICAgICAgICAgICAgICAgaWYoaXRlbSAhPSAnY3VzdG9tLXVzZXItaWNvbicpIHsNCiAgICAgICAgICAgICAgICAgICAkKCAiLiIgKyBpdGVtICsgIiA+IHN2ZyIgKS5hZGRDbGFzcyhpdGVtKTsgLy8gYWRkIHRoZSBjYWxsaW5nIGNsYXNzIHRvIHRoZSBjaGlsZCBzdmcgZWxlbWVudCBkaXJlY3RseQ0KICAgICAgICAgICAgICAgICAgICQoICIuIiArIGl0ZW0gKyAiID4gc3ZnIiApLnVud3JhcCgpOyAvLyByZW1vdmUgdGhlIHBhcmVudCBkaXYNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQoNCi8vIGFkZHMgY2xpY2sgb3IgaG92ZXIgbGlzdGVuZXJzDQpmdW5jdGlvbiBhZGRMaXN0ZW5lcigpIHsNCiAgICAvLyBhZGQgbGlzdGVuZXIgYW5kIGFuaW1hdGlvbiBmb3IgZmxvYXRpbmcgaWNvbnMgaG92ZXIgYW5pbWF0aW9uDQogICAgaWYoIWlzTW9iaWxlKCkgJiYgZGF0YS5jb25maWcuRGVza3RvcExheW91dCA9PT0gJ0Zsb2F0JykgYW5pbWF0ZUZsb2F0KCcuZmxvYXQtY29udGFpbmVyJywgMzAwKTsNCiAgICAvLyBjbGljayBoYW5kbGVycyBmb3IgZGVza3RvcCBiYXIgYW5kIG1vYmlsZSBvcHRpb25zDQogICAgZWxzZSB7DQogICAgICAgICQoIiNjb252ZXJzaW9uLW1lbnUtY29udGFpbmVyIikub2ZmKCdjbGljaycsICcuZmFiLC5vdmVybGF5Jyk7DQogICAgICAgICQoIiNjb252ZXJzaW9uLW1lbnUtY29udGFpbmVyIikub24oJ2NsaWNrJywgJy5mYWIsLm92ZXJsYXknLCBmdW5jdGlvbigpew0KICAgICAgICAgICAgSGFzT3BlbmVkTWVudSA9IHRydWU7DQogICAgICAgICAgICAkKCcuYW5pbWF0aW9uJykucmVtb3ZlKCk7ICAgLy8gcmVtb3ZlIGFueSBhbmltYXRpb25zIHdlIGhhdmUNCiAgICAgICAgICAgIGlmKGlzTW9iaWxlKCkpIHsNCiAgICAgICAgICAgICAgICBhbmltYXRlSWNvbnMoJ292ZXJsYXknKTsNCiAgICAgICAgICAgICAgICBkYXRhLmNvbmZpZy5Nb2JpbGVMYXlvdXQgPT09ICdGdWxsJz8gYW5pbWF0ZUJnKCcubW9iaWxlLWJnJykgOiAnJzsNCiAgICAgICAgICAgIH0gZWxzZSB7ICAgIC8vIGJhciBkZXNrdG9wDQogICAgICAgICAgICAgICAgYW5pbWF0ZUljb25zKCdoZWxwVGV4dCcpOw0KICAgICAgICAgICAgICAgIGFuaW1hdGVCZygnLmRlc2t0b3AtYmcnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQovLyBsaXN0ZW5zIGZvciBzaGFyZSBidXR0b24gY2xpY2sgYW5kIHRyaWdnZXJzIHJlc3BvbnNlDQpmdW5jdGlvbiBhZGRTaGFyZUxpc3RlbmVyKCkgew0KICAgICQoIiNjb252ZXJzaW9uLW1lbnUtY29udGFpbmVyIikub2ZmKCdjbGljaycsICcuc2hhcmUnKTsNCiAgICAkKCIuc2hhcmUiKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICAgICAgLy8gY29uc29sZS5sb2coJ3NoYXJlIGNsaWNrZWQgbW9kYWwgc2hvdWxkIG9wZW4nKTsNCiAgICAgICAgTWljcm9Nb2RhbC5zaG93KCdzb2NpYWwtbW9kYWwtbWVudScpOyANCiAgICB9KTsNCn0NCmZ1bmN0aW9uIGFkZFBpeGVsTGlzdGVuZXIoKSB7DQogICAgJCgnLmJzci1tZW51bGluaycpLmNsaWNrKGZ1bmN0aW9uKCkgew0KICAgICAgICB2YXIgZXZlbnROYW1lID0gJCh0aGlzKS5kYXRhKCdldmVudG5hbWUnKTsNCiAgICAgICAgaWYoIWV2ZW50TmFtZSkgew0KICAgICAgICAgICAgZmJxKCd0cmFjaycsICdDb250YWN0Jyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBmYnEoJ3RyYWNrQ3VzdG9tJywgZXZlbnROYW1lKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KZnVuY3Rpb24gYWRkQ2hhdExpc3RlbmVyKCkgew0KICAgICQoIi5ic3ItY2hhdCIpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgICAgICAkKCIjY2hhdC1zY3JpcHQiKS5yZW1vdmUoKTsgLy8gR2V0IHJpZCBvZiBhbnkgY2hhdC1zY3JpcHQgb24gdGhlIHBhZ2UNCiAgICAgICAgJC5lYWNoKGRhdGEuY29uZmlnLkljb25MaXN0LCBmdW5jdGlvbihpbmRleCx2YWx1ZSl7DQogICAgICAgICAgICBpZih2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnQ2hhdFNjcmlwdCcpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBjc2NyaXB0ID0gdmFsdWUuQ2hhdFNjcmlwdDsNCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2NyaXB0IGlzIGEgc3JjIG9yIHJhdyBzY3JpcHQNCiAgICAgICAgICAgICAgICAvLyBDaGFuZ2VkIG1pbmQgYW5kIHdhbnRlZCB0byBpbnB1dCA8c2NyaXB0PiB0YWdzIHNvIHRoaXMgaXMgc2F2ZWQgZm9yIHBvc3Rlcml0eQ0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgnXig/OlthLXpdKzopPy8vJywgJ2knKTsgLy8gbm9uIGNhc2Utc2Vuc2l0aXZlLCBwcm90b2NvbC1hZ25vc3RpYyANCiAgICAgICAgICAgICAgICBpZiAocmUudGVzdChjc2NyaXB0KSkgew0KICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKCc8c2NyaXB0IGFzeW5jPSJhc3luYyIgc3JjPSInICsgY3NjcmlwdCArICciIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImNoYXQtc2NyaXB0Ij48XC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYnJlYWsgb3V0IG9mIHRoZSAkLmVhY2goKSBvbiBmaXJzdCBvY2N1cmVuY2UNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKCc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImNoYXQtc2NyaXB0Ij4nICsgY3NjcmlwdCArICc8XC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYnJlYWsgb3V0IG9mIHRoZSAkLmVhY2goKSBvbiBmaXJzdCBvY2N1cmVuY2UNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKGNzY3JpcHQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9KTsNCn0NCi8vDQovLyBBTklNQVRJT05TDQovLw0KZnVuY3Rpb24gYW5pbWF0ZUZvY3VzKCkgew0KICAgICQoJy5hbmltYXRpb24nKS5yZW1vdmUoKTsgICAvL2luIGNhc2UgYWxyZWFkeSBpbiBET00NCiAgICBpZighSGFzT3BlbmVkTWVudSkgew0KICAgICAgICBpZihpc01vYmlsZSgpKSB7DQogICAgICAgICAgICBjb25zdCBwdWxzZSA9ICc8ZGl2IGNsYXNzPSJwdWxzZTIgYW5pbWF0aW9uIi8+PGRpdiBjbGFzcz0icHVsc2UgYW5pbWF0aW9uIi8+JzsNCiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgJCgnI21hc3RlcmZhYicpLmFwcGVuZChwdWxzZSk7DQogICAgICAgICAgICB9LCArZGF0YS5jb25maWcuRm9jdXNEZWxheSk7DQogICAgICAgIH0NCiAgICAgICAgLy8gZGVza3RvcA0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIGRhdGEuY29uZmlnLkRlc2t0b3BMYXlvdXQgPT09ICdGbG9hdCc/DQogICAgICAgICAgICAgICAgYW5pbWF0ZUZsb2F0Rm9jdXMoKSA6IGFuaW1hdGVCYXJGb2N1cygpOw0KICAgICAgICB9DQogICAgfQ0KfQ0KZnVuY3Rpb24gYW5pbWF0ZUZsb2F0Rm9jdXMoKSB7DQogICAgaWYoJCgnLmZvY3VzJylbMF0pIHsNCiAgICAgICAgY29uc3QgaWQgPSAkKCcuZm9jdXMnKVswXS5pZDsNCiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICQoJyMnK2lkKS5jc3MoJ21heC13aWR0aCcsICcnKTsNCiAgICAgICAgICAgICQoJyMnK2lkKS5hZGRDbGFzcygnc2xpZGUtcHVsc2UnKTsNCiAgICAgICAgfSwgK2RhdGEuY29uZmlnLkZvY3VzRGVsYXkpOw0KICAgIH0NCn0NCi8vIG9wZW5zIGZpeGVkIGJhciBvbiBkZXNrdG9wIGFmdGVyIHNldCBpbnRlcnZhbA0KZnVuY3Rpb24gYW5pbWF0ZUJhckZvY3VzKCkgew0KICAgIGlmKCEkKCIuZGVza3RvcC1iZyIpLmlzKCI6dmlzaWJsZSIpKSB7DQogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICBhbmltYXRlSWNvbnMoJ2hlbHBUZXh0Jyk7DQogICAgICAgICAgICBhbmltYXRlQmcoJy5kZXNrdG9wLWJnJyk7DQogICAgICAgIH0sICtkYXRhLmNvbmZpZy5Gb2N1c0RlbGF5KTsNCiAgICB9DQp9DQovLyBhZGRzIGhvdmVyIGxpc3RlbmVycyBhbmQgYW5pbWF0ZXMgZmxvYXRpbmcgaWNvbnMgb24gZGVza3RvcA0KZnVuY3Rpb24gYW5pbWF0ZUZsb2F0KHNlbGVjdG9yLCBkdXIpIHsNCiAgICAkKCIjZmxvYXQtY29udGFpbmVyIikub2ZmKCJtb3VzZWVudGVyIiwgc2VsZWN0b3IpOw0KICAgICQoIiNmbG9hdC1jb250YWluZXIiKS5vbigibW91c2VlbnRlciIsIHNlbGVjdG9yLCBmdW5jdGlvbihldmVudCkgew0KICAgICAgICAvLyBjb25zb2xlLmxvZygnZmxvYXQgbW91c2UgZW50ZXInKTsNCiAgICAgICAgSGFzT3BlbmVkTWVudSA9IHRydWU7DQogICAgICAgIHZhciBpZCA9ICQodGhpcylbMF0uaWQ7DQogICAgICAgIC8vIGNhbmNlbCBhbmltYXRpb24gb24gaG92ZXINCiAgICAgICAgZGF0YS5jb25maWcuRm9jdXNBbmk/ICQoJyMnK2lkKS5yZW1vdmVDbGFzcygnc2xpZGUtcHVsc2UnKSA6IDA7DQogICAgICAgIA0KICAgICAgICAkKCcjdGV4dC0nK2lkKS5mYWRlSW4oKTsNCiAgICAgICAgJCgnI2Zsb2F0LXRleHQtJytpZCkuZmFkZUluKGR1cikuY3NzKCJkaXNwbGF5IiwiaW5saW5lLWZsZXgiKTsNCiAgICAgICAgJCgnIycraWQpLnN0b3AoKS5hbmltYXRlKHsNCiAgICAgICAgICAgICJtYXgtd2lkdGgiOiAiMjAwcHgiLA0KICAgICAgICB9LCBkdXIpOw0KICAgIH0pOw0KICAgIA0KICAgICQoIiNmbG9hdC1jb250YWluZXIiKS5vZmYoIm1vdXNlbGVhdmUiLCBzZWxlY3Rvcik7DQogICAgJCgiI2Zsb2F0LWNvbnRhaW5lciIpLm9uKCJtb3VzZWxlYXZlIiwgc2VsZWN0b3IsIGZ1bmN0aW9uKGV2ZW50KSB7DQogICAgICAgIC8vIGNvbnNvbGUubG9nKCdmbG9hdCBtb3VzZSBsZWF2ZScpOw0KICAgICAgICB2YXIgaWQgPSAkKHRoaXMpWzBdLmlkOw0KICAgICAgICAkKCcjdGV4dC0nK2lkKS5mYWRlT3V0KGR1cik7DQogICAgICAgICQoJyMnK2lkKS5zdG9wKCkuYW5pbWF0ZSh7DQogICAgICAgICAgICAibWF4LXdpZHRoIjogIjQyLjY2NnB4IiwNCiAgICAgICAgfSwgZHVyKTsNCiAgICB9KTsNCn0NCi8vIGFuaW1hdGVzIGljb25zIHNsaWRlIHVwIGFuZCB0cmFuc3BhcmVudCBvdmVybGF5KGRlcGVuZGluZyBvbiBzaG93VHlwZSkNCmZ1bmN0aW9uIGFuaW1hdGVJY29ucyhzaG93VHlwZSkgew0KICAgIGlmKCQoIi5vdmVybGF5IikuaXMoIjp2aXNpYmxlIikgfHwgJCgiLmRlc2t0b3AtYmciKS5pcygiOnZpc2libGUiKSkgew0KICAgICAgICBpZihzaG93VHlwZSA9PT0gJ292ZXJsYXknKSAgICAgICAgICAkKCcub3ZlcmxheScpLmZhZGVPdXQoMTI1KTsNCiAgICAgICAgZWxzZSBpZihzaG93VHlwZSA9PT0gJ2hlbHBUZXh0JykgICAgJCgnI2hlbHAtdGV4dCcpLmZhZGVPdXQoMTI1KTsNCiAgICAgICAgDQogICAgICAgIC8vIGFkZCBwbHVzIGljb24gYmFjaw0KICAgICAgICAkKCcjbWFpbi1jb250YWluZXInKS5lbXB0eSgpLmFwcGVuZChnZXRTdmcoZGF0YS5jb25maWcuTW9iaWxlTWFpbikpOw0KDQogICAgICAgICQoJy5mYWIuY2hpbGQnKS5zdG9wKCkuYW5pbWF0ZSh7DQogICAgICAgICAgICBib3R0b20gIDogJCgnI21hc3RlcmZhYicpLmNzcygnYm90dG9tJyksDQogICAgICAgICAgICBvcGFjaXR5IDogMA0KICAgICAgICB9LCAxMjUsIGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgJCh0aGlzKS5oaWRlKCk7DQogICAgICAgIH0pOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGlmKHNob3dUeXBlID09PSAnb3ZlcmxheScpICAgICAgICAgICQoJy5vdmVybGF5JykuZmFkZUluKDEyNSk7DQogICAgICAgIGVsc2UgaWYoc2hvd1R5cGUgPT09ICdoZWxwVGV4dCcpICAgICQoJyNoZWxwLXRleHQnKS5mYWRlSW4oMTI1KTsNCiAgICAgICAgDQogICAgICAgIC8vIGFkZCBjbG9zZSBpY29uIG9uIG1vYmlsZSBvbmx5DQogICAgICAgIGlmKGlzTW9iaWxlKCkpICQoJyNtYWluLWNvbnRhaW5lcicpLmVtcHR5KCkuYXBwZW5kKGdldFN2ZygnY2xvc2UnKSk7DQogICAgICAgICQoIi5mYWIuY2hpbGQiKS5lYWNoKGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAkKHRoaXMpLnN0b3AoKS5zaG93KCkuYW5pbWF0ZSh7DQogICAgICAgICAgICAgICAgYm90dG9tICA6IChwYXJzZUludCgkKCIjbWFzdGVyZmFiIikuY3NzKCJib3R0b20iKSkgKyBwYXJzZUludCgkKCIjbWFzdGVyZmFiIikub3V0ZXJIZWlnaHQoKSArIDIwKSArIDU2ICogJCh0aGlzKS5kYXRhKCJzdWJpdGVtIikgLSAkKCIuZmFiLmNoaWxkIikub3V0ZXJIZWlnaHQoKSkgKyAicHgiLA0KICAgICAgICAgICAgICAgIG9wYWNpdHkgOiAxDQogICAgICAgICAgICB9LCAxMjUpOw0KICAgICAgICB9KTsNCiAgICB9DQp9DQovLyBhZGRzIG92ZXJsYXkgdGhhdCBzbGlkZXMgdXANCmZ1bmN0aW9uIGFuaW1hdGVCZyhzZWxlY3Rvcikgew0KICAgIGlmKCQoc2VsZWN0b3IpLmlzKCI6dmlzaWJsZSIpKSB7DQogICAgICAgICQoJyNtYWluLWNvbnRhaW5lcicpLnJlbW92ZUNsYXNzKCdvcGVuJyk7DQogICAgICAgICQoIiNtYXN0ZXJmYWIuZmFiLm1hc3Rlci1tb2JpbGUiKS5yZW1vdmVDbGFzcygnbW9iaWxlLW9wZW4nKQ0KICAgICAgICB2YXIgbWFpbkljb24gPSBkYXRhLmNvbmZpZy5EZXNrTWFpbg0KICAgICAgICAvLyByZXZlcnQgdG8gZGVmYXVsdCBtYWluIGljb24gc3R5bGUNCiAgICAgICAgaWYoaXNNb2JpbGUoKSkgew0KICAgICAgICAgICAgbWFpbkljb24gPSBkYXRhLmNvbmZpZy5Nb2JpbGVNYWluOw0KICAgICAgICAgICAgJCgnI21hc3RlcmZhYicpLmNzcyh7J2JhY2tncm91bmQnOiAnJywgJ2JveC1zaGFkb3cnOiAnJ30pOyAgLy8gcmVzdG9yZSBkZWZhdWx0DQogICAgICAgIH0NCiAgICAgICAgJCgnI21haW4tY29udGFpbmVyJykuZW1wdHkoKS5hcHBlbmQoZ2V0U3ZnKG1haW5JY29uKSk7DQogICAgICAgIA0KICAgICAgICAkKCcubWVudS1saW5rLCAuY2hpbGQnKS5oaWRlKCk7DQogICAgICAgIC8vIHNsaWRlIGRvd24gdG8gY2xvZXMNCiAgICAgICAgJChzZWxlY3Rvcikuc3RvcCgpLmFuaW1hdGUoew0KICAgICAgICAgICAgaGVpZ2h0ICA6IDAsDQogICAgICAgICAgICBvcGFjaXR5IDogMA0KICAgICAgICB9LCAxMjUsIGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAkKHRoaXMpLmhpZGUoKTsNCiAgICAgICAgfSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgJCgnI21haW4tY29udGFpbmVyJykuYWRkQ2xhc3MoJ29wZW4nKTsNCiAgICAgICAgJCgiI21hc3RlcmZhYi5mYWIubWFzdGVyLW1vYmlsZSIpLmFkZENsYXNzKCdtb2JpbGUtb3BlbicpDQogICAgICAgIHZhciB0b3BBcmVhID0gMTAwOw0KICAgICAgICBpZihpc01vYmlsZSgpKSB7DQogICAgICAgICAgICAkKCcjbWFzdGVyZmFiJykuY3NzKHsnYmFja2dyb3VuZCc6ICdub25lJywgJ2JveC1zaGFkb3cnOiAnbm9uZSd9KTsgIC8vIG1ha2UgaWNvbiBmbGF0DQogICAgICAgICAgICAkKCcjbWFpbi1jb250YWluZXInKS5lbXB0eSgpLmFwcGVuZChnZXRTdmcoJ2Nsb3NlJykpOyAgIC8vIGFkZCB4IGljb24NCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKGRhdGEuY29uZmlnLkRlc2t0b3BMYXlvdXQgPT09ICdCYXInKSB7DQogICAgICAgICAgICAvLyBoYWNrIHRvIGdldCBoZWlnaHQgb2YgYmFyIGhlbHAgdGV4dCBiZWZvcmUgaXQncyB2aXNpYmxlDQogICAgICAgICAgICAkKHNlbGVjdG9yKS5jc3Moeydwb3NpdGlvbic6J2Fic29sdXRlJywndmlzaWJpbGl0eSc6J2hpZGRlbicsICdkaXNwbGF5JzonYmxvY2snfSk7DQogICAgICAgICAgICB0b3BBcmVhID0gJCgiI2hlbHAtdGV4dCIpLmhlaWdodCgpPyAkKCIjaGVscC10ZXh0IikuaGVpZ2h0KCkgKyA2MCA6IDQwOw0KICAgICAgICAgICAgJChzZWxlY3RvcikucmVtb3ZlQXR0cignc3R5bGUnKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gc2xpZGUgdXAgdG8gb3Blbg0KICAgICAgICAkKHNlbGVjdG9yKS5zdG9wKCkuc2hvdygpLmFuaW1hdGUoew0KICAgICAgICAgICAgaGVpZ2h0ICA6ICgoKGRhdGEuY29uZmlnLkljb25MaXN0Lmxlbmd0aCsxKSAqIDU2KSArIHRvcEFyZWEpICsgInB4IiwNCiAgICAgICAgICAgIG9wYWNpdHkgOiAxDQogICAgICAgIH0sMTI1LCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICQoJy5tZW51LWxpbmsnKS5mYWRlSW4oMTI1KTsNCiAgICAgICAgICAgICQoc2VsZWN0b3IpLmNzcygiZGlzcGxheSIsImZsZXgiKQ0KICAgICAgICB9KTsNCiAgICB9DQp9DQpmdW5jdGlvbiBnZXRJdGVtcyh0eXBlLCBmbG9hdCkgew0KICAgICQoJy5jaGlsZCcpLnJlbW92ZSgpOyAgIC8vIHJlbW92ZSBhbnkgaXRlbXMgYWxyZWFkeSBpbiBET00NCiAgICB2YXIgaHRtbCA9ICcnLCBsYWJlbCA9ICcnLCBpY29uID0gJycsIHRleHQgPSAnJzsNCiAgICB2YXIgaXRlbXMgPSBmbG9hdD8gZGF0YS5jb25maWcuSWNvbkxpc3QgOiBkYXRhLmNvbmZpZy5JY29uTGlzdC5yZXZlcnNlKCk7DQogICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbihpdGVtLCBpbmRleCkgew0KICAgICAgICANCiAgICAgICAgaWYoaXRlbS5zaG93b25tb2JpbGU9PXRydWUgJiYgZGF0YS5kZXZpY2UgPT09ICdtb2JpbGUnKXsNCiAgICAgICAgICAgIGluZGV4ID0gaW5kZXgrMTsNCiAgICAgICAgICAgaWYodHlwZSA9PT0gJ3JpZ2h0VGV4dCcpeyANCiAgICAgICAgICAgICAgIGxhYmVsID0gJzxzcGFuIGNsYXNzPSJyaWdodC10ZXh0Ij4nICsgaXRlbS5MYWJlbCArICc8L3NwYW4+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmKHR5cGUgPT09ICdsZWZ0VGV4dCcpIHsNCiAgICAgICAgICAgICAgICBsYWJlbCA9ICc8c3BhbiBjbGFzcz0ibGVmdC10ZXh0Ij4nICsgaXRlbS5MYWJlbCArICc8L3NwYW4+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmKHR5cGUgPT09ICdic3JSaWdodFRleHQnKSB7DQogICAgICAgICAgICAgICAgbGFiZWwgPSAnPHNwYW4gY2xhc3M9ImJzci1yaWdodC10ZXh0Ij4nICsgaXRlbS5MYWJlbCArICc8L3NwYW4+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGljb24gPSAnPHNwYW4gY2xhc3M9Imljb24tY29udGFpbmVyIj4nK2dldEl0ZW1JY29uKGl0ZW0pKyc8L3NwYW4+JzsNCiAgICAgICAgICAgICAgICBodG1sICs9IA0KICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iZmFiIGNoaWxkIiBpZD0iY2hpbGQtJytpbmRleCsnIiBkYXRhLXN1Yml0ZW09IicraW5kZXgrJyI+IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICcrZ2V0SXRlbUFjdGlvbihpdGVtLCBpY29uK2xhYmVsKSsnIFwNCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+JzsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoaXRlbS5BY3Rpb24gPT09ICdTaGFyZScpIHsNCiAgICAgICAgICAgICAgICAkLmdldFNjcmlwdCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9taWNyb21vZGFsL2Rpc3QvbWljcm9tb2RhbC5taW4uanMnLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICAgICAgTWljcm9Nb2RhbC5pbml0KCk7DQogICAgICAgICAgICAgICAgICAgICQoJy5zaGFyZS1jb250YWluZXInKS5odG1sKGdldFNvY2lhbEl0ZW1zKGl0ZW0pKTsgICAvLyBhZGQgc29jaWFsIGljb25zIHRvIG1vZGFsDQogICAgICAgICAgICAgICAgICAgIGFkZFNoYXJlTGlzdGVuZXIoKTsgICAvLyBpZiBzb2NpYWwgc2hhcmluZyBlbmFibGVkIGFkZCBjbGljayBoYW5kbGVyDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGVsc2UgaWYoaXRlbS5zaG93b25kZXNrdG9wPT10cnVlICYmIChkYXRhLmRldmljZSA9PT0gJ2Rlc2t0b3AnIHx8IGRhdGEuZGV2aWNlID09PSAndGFibGV0JykgKXsNCiAgICAgICAgICAgIA0KICAgICAgICAgICBpZih0eXBlID09PSAncmlnaHRUZXh0Jyl7IA0KICAgICAgICAgICBsYWJlbCA9ICc8c3BhbiBjbGFzcz0icmlnaHQtdGV4dCI+JyArIGl0ZW0uTGFiZWwgKyAnPC9zcGFuPic7DQogICAgICAgIH0NCiAgICAgICAgaWYodHlwZSA9PT0gJ2xlZnRUZXh0Jykgew0KICAgICAgICAgICAgbGFiZWwgPSAnPHNwYW4gY2xhc3M9ImxlZnQtdGV4dCI+JyArIGl0ZW0uTGFiZWwgKyAnPC9zcGFuPic7DQogICAgICAgIH0NCiAgICAgICAgaWYoIWZsb2F0KSB7DQogICAgICAgICAgICBpY29uID0gJzxzcGFuIGNsYXNzPSJpY29uLWNvbnRhaW5lciI+JytnZXRJdGVtSWNvbihpdGVtKSsnPC9zcGFuPic7DQogICAgICAgICAgICBodG1sICs9IA0KICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJmYWIgY2hpbGQiIGlkPSJjaGlsZC0nK2luZGV4KyciIGRhdGEtc3ViaXRlbT0iJytpbmRleCsnIj4gXA0KICAgICAgICAgICAgICAgICAgICAnK2dldEl0ZW1BY3Rpb24oaXRlbSwgaWNvbitsYWJlbCkrJyBcDQogICAgICAgICAgICAgICAgPC9kaXY+JzsNCiAgICAgICAgfQ0KICAgICAgICAvLyBmbG9hdGluZyBpY29ucyBvbiBkZXNrdG9wIG9ubHkNCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIGFkZCBmb2N1cyBjbGFzcyBmb3IgZm9jdXMgYW5pbWF0aW9uDQogICAgICAgICAgICBsYWJlbCA9IGl0ZW0uTGFiZWw7DQogICAgICAgICAgICB2YXIgZm9jdXNDbGFzcyA9IGl0ZW0uQW5pbWF0ZT8gJ2ZvY3VzJyA6ICcnOw0KICAgICAgICAgICAgaWNvbiA9ICc8c3BhbiBjbGFzcz0iaWNvbi1jb250YWluZXIiPicrZ2V0SXRlbUljb24oaXRlbSkrJzwvc3Bhbj4nOw0KICAgICAgICAgICAgdGV4dCA9ICc8c3BhbiBjbGFzcz0iZmxvYXQtdGV4dCIgaWQ9InRleHQtJytpbmRleCsnIj4nK2xhYmVsKyc8L3NwYW4+JzsNCiAgICAgICAgICAgIGh0bWwgKz0gDQogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImZsb2F0LWNvbnRhaW5lciAnK2ZvY3VzQ2xhc3MrJyIgaWQ9IicraW5kZXgrJyI+IFwNCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZhYiBjaGlsZCBmbG9hdCIgaWQ9ImNoaWxkLScraW5kZXgrJyIgZGF0YS1zdWJpdGVtPSInK2luZGV4KyciIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtZmxleDsiPiBcDQogICAgICAgICAgICAgICAgICAgICAgICAnK2dldEl0ZW1BY3Rpb24oaXRlbSwgaWNvbikrJyBcDQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4gXA0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmxvYXQtdGV4dC1jb250YWluZXIiIGlkPSJmbG9hdC10ZXh0LScraW5kZXgrJyI+IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICcrZ2V0SXRlbUFjdGlvbihpdGVtLCB0ZXh0KSsnIFwNCiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPiBcDQogICAgICAgICAgICAgICAgPC9kaXY+JzsNCiAgICAgICAgfQ0KICAgICAgICAvLyBpZiBhY3Rpb24gaXMgc2hhcmUgYWRkIHNoYXJlIGl0ZW1zIHRvIG1vZGFsDQogICAgICAgIGlmKGl0ZW0uQWN0aW9uID09PSAnU2hhcmUnKSB7DQogICAgICAgICAgICAkLmdldFNjcmlwdCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9taWNyb21vZGFsL2Rpc3QvbWljcm9tb2RhbC5taW4uanMnLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICBNaWNyb01vZGFsLmluaXQoKTsNCiAgICAgICAgICAgICAgICAkKCcuc2hhcmUtY29udGFpbmVyJykuaHRtbChnZXRTb2NpYWxJdGVtcyhpdGVtKSk7ICAgLy8gYWRkIHNvY2lhbCBpY29ucyB0byBtb2RhbA0KICAgICAgICAgICAgICAgIGFkZFNoYXJlTGlzdGVuZXIoKTsgICAvLyBpZiBzb2NpYWwgc2hhcmluZyBlbmFibGVkIGFkZCBjbGljayBoYW5kbGVyDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICB9DQogICAgfSk7DQogICAgcmV0dXJuIGh0bWw7DQp9DQpmdW5jdGlvbiBnZXRTb2NpYWxJdGVtcyhpdGVtKSB7DQogICAgbGV0IGh0bWwgPSAnJzsNCiAgICBjb25zdCBjb250ZW50ID0gZ2V0U2hhcmVDb250ZW50KGl0ZW0pOw0KICAgIGlmKGl0ZW0uRW1haWwpICAgICAgaHRtbCArPSBnZXRTaGFyZUh0bWwoJ0VtYWlsJywgY29udGVudC5saW5rLCBjb250ZW50LnRpdGxlLCAnVGFiJywgJ3NvY2lhbCcpOw0KICAgIGlmKGl0ZW0uRmFjZWJvb2spICAgaHRtbCArPSBnZXRTaGFyZUh0bWwoJ0ZhY2Vib29rJywgY29udGVudC5saW5rLCBjb250ZW50LnRpdGxlLCAnVGFiJywgJ3NvY2lhbCcpOw0KICAgIGlmKGl0ZW0uVHVtYmxyKSAgICAgaHRtbCArPSBnZXRTaGFyZUh0bWwoJ1R1bWJscicsIGNvbnRlbnQubGluaywgY29udGVudC50aXRsZSwgJ1RhYicsICdzb2NpYWwnKTsNCiAgICBpZihpdGVtLkxpbmtlZEluKSAgIGh0bWwgKz0gZ2V0U2hhcmVIdG1sKCdMaW5rZWRJbicsIGNvbnRlbnQubGluaywgY29udGVudC50aXRsZSwgJ1RhYicsICdzb2NpYWwnKTsNCiAgICBpZihpdGVtLlR3aXR0ZXIpICAgIGh0bWwgKz0gZ2V0U2hhcmVIdG1sKCdUd2l0dGVyJywgY29udGVudC5saW5rLCBjb250ZW50LnRpdGxlLCAnVGFiJywgJ3NvY2lhbCcpOw0KICAgIGlmKGl0ZW0uUmVkZGl0KSAgICAgaHRtbCArPSBnZXRTaGFyZUh0bWwoJ1JlZGRpdCcsIGNvbnRlbnQubGluaywgY29udGVudC50aXRsZSwgJ1RhYicsICdzb2NpYWwnKTsNCiAgICAvL2lmKGl0ZW0uR29vZ2xlUGx1cykgaHRtbCArPSBnZXRTaGFyZUh0bWwoJ0dvb2dsZVBsdXMnLCBjb250ZW50LmxpbmssIGNvbnRlbnQudGl0bGUsICdUYWInLCAnc29jaWFsJyk7DQogICAgaWYoaXRlbS5QaW50ZXJlc3QpICBodG1sICs9IGdldFNoYXJlSHRtbCgnUGludGVyZXN0JywgY29udGVudC5saW5rLCBjb250ZW50LnRpdGxlLCAnVGFiJywgJ3NvY2lhbCcpOw0KICAgIHJldHVybiBodG1sOw0KfQ0KDQovLw0KLy8gU29jaWFsIFNoYXJlIEZ1bmN0aW9ucw0KLy8NCmZ1bmN0aW9uIGdldFNoYXJlQ29udGVudChpdGVtKSB7DQogICAgLy8gc2V0IGxpbmsgdG8gdGhlIGN1cnJlbnQgcGFnZSB1cmwNCiAgICBsZXQgbGluayA9IGl0ZW0uU2hhcmVMaW5rPyBpdGVtLkxpbmsuaHJlZiA6IHdpbmRvdy50b3AubG9jYXRpb24uaHJlZjsNCiAgICBsaW5rID0gZW5jb2RlVVJJKGxpbmspOw0KICAgIA0KICAgIC8vIGdldCBkZWZhdWx0IHBhZ2UgdGl0bGUgZnJvbSB0aGUgYWN0dWFsIHBhZ2UgdGl0bGUNCiAgICBjb25zdCBwYWdlVGl0bGUgPSBpdGVtLlNoYXJlVGl0bGU/IGl0ZW0uU2hhcmVUaXRsZSA6IGRvY3VtZW50LnRpdGxlOw0KICAgIGNvbnN0IGVuY29kZWRUaXRsZSA9IGVuY29kZVVSSShwYWdlVGl0bGUpOw0KICAgIA0KICAgIHJldHVybiB7bGluazogbGluaywgdGl0bGU6IGVuY29kZWRUaXRsZX07DQp9DQpmdW5jdGlvbiBnZXRTaGFyZUh0bWwoc2l0ZSwgbGluaywgZW5jb2RlZFRpdGxlLCBhY3Rpb24sIGxpbmtDbGFzcykgew0KICAgIGxldCBocmVmID0gJyc7DQogICAgc3dpdGNoKHNpdGUpIHsNCiAgICAgICAgY2FzZSAnRW1haWwnOg0KICAgICAgICAgICAgaHJlZiA9ICJtYWlsdG86P1N1YmplY3Q9IitlbmNvZGVkVGl0bGUrIiZib2R5PUNoZWNrIG91dCB0aGlzIHNpdGU6ICIrd2luZG93LmxvY2F0aW9uLmhyZWY7DQogICAgICAgICAgICANCiAgICAgICAgICAgIHN0YXRzRXZlbnROYW1lID0gJ0NNX1NIQVJFX0VNQUlMJzsNCiAgICAgICAgICAgIHJldHVybiAoDQogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InNvY2lhbC1pY29uIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogZ3JleTsiPiBcDQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IicraHJlZisnIiBjbGFzcz0iJytsaW5rQ2xhc3MrJyIgb25jbGljaz0iX3RyYWNrQ29udldpZGdldENsaWNrRXZlbnQoXCcnK3N0YXRzRXZlbnROYW1lKydcJyk7OyI+IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICcrZ2V0U3ZnKCdzaGFyZWVudmVsb3BlJykrJyBcDQogICAgICAgICAgICAgICAgICAgIDwvYT4gXA0KICAgICAgICAgICAgICAgIDwvZGl2PicpOw0KICAgICAgICBjYXNlICdGYWNlYm9vayc6DQogICAgICAgICAgICBocmVmID0gJ2h0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9zaGFyZXIvc2hhcmVyLnBocD91PScrbGluazsNCiAgICAgICAgICAgIHN0YXRzRXZlbnROYW1lID0gJ0NNX1NIQVJFX0ZCJzsNCiAgICAgICAgICAgIHJldHVybiAoDQogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InNvY2lhbC1pY29uIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogIzNiNTk5ODsiPiBcDQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IicraHJlZisnIiBjbGFzcz0iJytsaW5rQ2xhc3MrJyIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9Il90cmFja0NvbnZXaWRnZXRDbGlja0V2ZW50KFwnJytzdGF0c0V2ZW50TmFtZSsnXCcpOyI+IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICcrZ2V0U3ZnKCdmYWNlYm9vaycpKycgXA0KICAgICAgICAgICAgICAgICAgICA8L2E+IFwNCiAgICAgICAgICAgICAgICA8L2Rpdj4nKTsNCiAgICAgICAgY2FzZSAnVHVtYmxyJzoNCiAgICAgICAgICAgIGhyZWYgPSAnaHR0cDovL3R1bWJsci5jb20vc2hhcmUvbGluaz91cmw9JytsaW5rKycmbmFtZT0nK2VuY29kZWRUaXRsZTsNCiAgICAgICAgICAgIHJldHVybiAoIA0KICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzb2NpYWwtaWNvbiIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICMzNTQ2NWM7Ij4gXA0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSInK2hyZWYrJyIgY2xhc3M9IicrbGlua0NsYXNzKyciIHRhcmdldD0iX2JsYW5rIiA+IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICcrZ2V0U3ZnKCd0dW1ibHInKSsnIFwNCiAgICAgICAgICAgICAgICAgICAgPC9hPiBcDQogICAgICAgICAgICAgICAgPC9kaXY+Jyk7DQogICAgICAgIGNhc2UgJ0xpbmtlZEluJzoNCiAgICAgICAgICAgIGhyZWYgPSAnaHR0cDovL3d3dy5saW5rZWRpbi5jb20vc2hhcmVBcnRpY2xlP21pbmk9dHJ1ZSZhbXA7dXJsPScrbGluaysnJmFtcDt0aXRsZT0nK2VuY29kZWRUaXRsZTsNCiAgICAgICAgICAgIHN0YXRzRXZlbnROYW1lID0gJ0NNX1NIQVJFX0xJTktFRElOJzsNCiAgICAgICAgICAgIHJldHVybiAoIA0KICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzb2NpYWwtaWNvbiIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICM0ODc1QjQ7Ij4gXA0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSInK2hyZWYrJyIgY2xhc3M9IicrbGlua0NsYXNzKyciIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJfdHJhY2tDb252V2lkZ2V0Q2xpY2tFdmVudChcJycrc3RhdHNFdmVudE5hbWUrJ1wnKTsiPiBcDQogICAgICAgICAgICAgICAgICAgICAgICAnK2dldFN2ZygnbGlua2VkSW4nKSsnIFwNCiAgICAgICAgICAgICAgICAgICAgPC9hPiBcDQogICAgICAgICAgICAgICAgPC9kaXY+Jyk7DQogICAgICAgIGNhc2UgJ1R3aXR0ZXInOg0KICAgICAgICAgICAgaHJlZiA9ICdodHRwczovL3R3aXR0ZXIuY29tL2ludGVudC90d2VldD90ZXh0PScrbGluazsNCiAgICAgICAgICAgIHN0YXRzRXZlbnROYW1lID0gJ0NNX1NIQVJFX1RXSVRURVInOw0KICAgICAgICAgICAgcmV0dXJuICgNCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ic29jaWFsLWljb24iIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOyI+IFwNCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJytocmVmKyciIGNsYXNzPSInK2xpbmtDbGFzcysnIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0iX3RyYWNrQ29udldpZGdldENsaWNrRXZlbnQoXCcnK3N0YXRzRXZlbnROYW1lKydcJyk7Ij4gXA0KICAgICAgICAgICAgICAgICAgICAgICAgJytnZXRTdmcoJ3R3aXR0ZXInKSsnIFwNCiAgICAgICAgICAgICAgICAgICAgPC9hPiBcDQogICAgICAgICAgICAgICAgPC9kaXY+Jyk7DQogICAgICAgIGNhc2UgJ1JlZGRpdCc6DQogICAgICAgICAgICBocmVmID0gJ2h0dHA6Ly93d3cucmVkZGl0LmNvbS9zdWJtaXQ/dXJsPScrbGluaysnJnRpdGxlPScrZW5jb2RlZFRpdGxlKycmdGV4dD0nK2VuY29kZWRUaXRsZTsNCiAgICAgICAgICAgIHJldHVybiAoIA0KICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzb2NpYWwtaWNvbiIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZjQ1MDA7Ij4gXA0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSInK2hyZWYrJyIgY2xhc3M9IicrbGlua0NsYXNzKyciIHRhcmdldD0iX2JsYW5rIj4gXA0KICAgICAgICAgICAgICAgICAgICAgICAgJytnZXRTdmcoJ3JlZGRpdCcpKycgXA0KICAgICAgICAgICAgICAgICAgICA8L2E+IFwNCiAgICAgICAgICAgICAgICA8L2Rpdj4nKTsNCiAgICAgICAvKiBjYXNlICdHb29nbGVQbHVzJzoNCiAgICAgICAgICAgIGhyZWYgPSAnaHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20vc2hhcmU/dXJsPScrbGluazsNCiAgICAgICAgICAgIHN0YXRzRXZlbnROYW1lID0gJ0NNX1NIQVJFX0dPT0dMRV9QTFVTJzsNCiAgICAgICAgICAgIHJldHVybiAoIA0KICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzb2NpYWwtaWNvbiIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNkMzQ4MzY7Ij4gXA0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSInK2hyZWYrJyIgY2xhc3M9IicrbGlua0NsYXNzKyciIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJfdHJhY2tDb252V2lkZ2V0Q2xpY2tFdmVudChcJycrc3RhdHNFdmVudE5hbWUrJ1wnKTsiPiBcDQogICAgICAgICAgICAgICAgICAgICAgICAnK2dldFN2ZygnZ1BsdXMnKSsnIFwNCiAgICAgICAgICAgICAgICAgICAgPC9hPiBcDQogICAgICAgICAgICAgICAgPC9kaXY+Jyk7ICovDQogICAgICAgIGNhc2UgJ1BpbnRlcmVzdCc6DQogICAgICAgICAgICBocmVmID0gJ2h0dHA6Ly9waW50ZXJlc3QuY29tL3Bpbi9jcmVhdGUvYnV0dG9uLz91cmw9JytsaW5rKycmYW1wO2Rlc2NyaXB0aW9uPScrZW5jb2RlZFRpdGxlOw0KICAgICAgICAgICAgcmV0dXJuICgNCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ic29jaWFsLWljb24iIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjY2IyMDI3OyI+IFwNCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJytocmVmKyciIGNsYXNzPSInK2xpbmtDbGFzcysnIiB0YXJnZXQ9Il9ibGFuayI+IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICcrZ2V0U3ZnKCdwaW50ZXJlc3QnKSsnIFwNCiAgICAgICAgICAgICAgICAgICAgPC9hPiBcDQogICAgICAgICAgICAgICAgPC9kaXY+Jyk7DQogICAgICAgIGRlZmF1bHQ6IA0KICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgIH0NCn0NCg0KLy8NCi8vIEhlbHBlcnMNCi8vDQovLyBjaGVjayBkaXNwbGF5IHR5cGUNCmZ1bmN0aW9uIGlzTW9iaWxlKCkgew0KICAgIHJldHVybiBkYXRhLmRldmljZSA9PT0gJ21vYmlsZSc7DQp9DQpmdW5jdGlvbiBnZXRJdGVtQWN0aW9uKGl0ZW0sIGVsZW0pIHsNCiAgICB2YXIgc3RhdHNFdmVudE5hbWU9Jyc7DQogICAgc3dpdGNoKGl0ZW0uQWN0aW9uKSB7DQogICAgICAgIGNhc2UgJ0xpbmsnOg0KICAgICAgICAgICAgaWYoIWl0ZW0uTGluaykge2l0ZW0uTGluayA9IHsgdGFyZ2V0OiAndGFyZ2V0PSJfYmxhbmsiJywgaHJlZjogJ2h0dHA6Ly93d3cuZ29vZ2xlLmNvbScgfX0gIC8vIGRlZmF1bHQgbGluaw0KICAgICAgICAgICAgdmFyIHRhcmdldCA9IGl0ZW0uTGluay50YXJnZXQ/IGB0YXJnZXQ9IiR7aXRlbS5MaW5rLnRhcmdldH0iYCA6ICcnOw0KICAgICAgICAgICAgdmFyIHN0YXRzRXZlbnROYW1lID0gJ0NNX0xJTktfQ0xJQ0snOw0KICAgICAgICAgICAgcmV0dXJuICc8YSAnK3RhcmdldCsnIGhyZWY9IicraXRlbS5MaW5rLmhyZWYrJyIgY2xhc3M9Im1lbnUtbGluayBic3ItbWVudWxpbmsiIG9uY2xpY2s9Il90cmFja0NvbnZXaWRnZXRDbGlja0V2ZW50KFwnJytzdGF0c0V2ZW50TmFtZSsnXCcpOyI+JytlbGVtKyc8L2E+JzsNCiAgICAgICAgY2FzZSAnQ2FsbCc6DQogICAgICAgICAgICBzdGF0c0V2ZW50TmFtZSA9ICdDTV9DTElDS19UT19DQUxMJzsNCiAgICAgICAgICAgIHJldHVybiAnPGEgaHJlZj0idGVsOicraXRlbS5DYWxsTnVtKyciIGNsYXNzPSJtZW51LWxpbmsgYnNyLW1lbnVsaW5rIiBvbmNsaWNrPSJfdHJhY2tDb252V2lkZ2V0Q2xpY2tFdmVudChcJycrc3RhdHNFdmVudE5hbWUrJ1wnKTsiPicrZWxlbSsnPC9hPic7DQogICAgICAgIGNhc2UgJ1Ntcyc6DQogICAgICAgICAgICBzdGF0c0V2ZW50TmFtZSA9ICdDTV9DTElDS19UT19TTVMnOw0KICAgICAgICAgICAgcmV0dXJuICc8YSBocmVmPSJzbXM6JytpdGVtLlNtc051bSsnIiBjbGFzcz0ibWVudS1saW5rIGJzci1tZW51bGluayIgb25jbGljaz0iX3RyYWNrQ29udldpZGdldENsaWNrRXZlbnQoXCcnK3N0YXRzRXZlbnROYW1lKydcJyk7Ij4nK2VsZW0rJzwvYT4nOw0KICAgICAgICBjYXNlICdFbWFpbCc6DQogICAgICAgICAgICBzdGF0c0V2ZW50TmFtZSA9ICdDTV9DTElDS19UT19FTUFJTCc7DQogICAgICAgICAgICByZXR1cm4gJzxhIGhyZWY9Im1haWx0bzonK2l0ZW0uRW1haWxBZGRyKyc/c3ViamVjdD0nK2l0ZW0uZW1haWxEZWZTdWJqZWN0ICsgJyZib2R5PScgKyBpdGVtLmRlZkVtYWlsQm9keSArICciIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0ibWVudS1saW5rIGJzci1tZW51bGluayIgb25jbGljaz0iX3RyYWNrQ29udldpZGdldENsaWNrRXZlbnQoXCcnK3N0YXRzRXZlbnROYW1lKydcJyk7Ij4nK2VsZW0rJzwvYT4nOw0KICAgICAgICBjYXNlICdNYXAnOg0KICAgICAgICAgICAgc3RhdHNFdmVudE5hbWUgPSAnQ01fRElSRUNUSU9OJzsNCiAgICAgICAgICAgIHJldHVybiAnPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbWFwcz9xPScraXRlbS5RdWVyeSsnIiBjbGFzcz0ibWVudS1saW5rIGJzci1tZW51bGluayIgb25jbGljaz0iX3RyYWNrQ29udldpZGdldENsaWNrRXZlbnQoXCcnK3N0YXRzRXZlbnROYW1lKydcJyk7IiBkYXRhLWV2ZW50bmFtZT0iRmluZCBMb2NhdGlvbiI+JytlbGVtKyc8L2E+JzsNCiAgICAgICAgY2FzZSAnTWVzcyc6DQogICAgICAgICAgICBzdGF0c0V2ZW50TmFtZSA9ICdDTV9GQl9NRVNTQUdFJzsNCiAgICAgICAgICAgIHJldHVybiAnPGEgaHJlZj0iaHR0cDovL20ubWUvJytpdGVtLkZiVXNlcisnIiBjbGFzcz0ibWVudS1saW5rIGJzci1tZW51bGluayIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9Il90cmFja0NvbnZXaWRnZXRDbGlja0V2ZW50KFwnJytzdGF0c0V2ZW50TmFtZSsnXCcpOyI+JytlbGVtKyc8L2E+JzsNCiAgICAgICAgY2FzZSAnU2hhcmUnOg0KICAgICAgICAgICAgcmV0dXJuICc8YSBocmVmPSIjIiBjbGFzcz0ibWVudS1saW5rIHNoYXJlIGJzci1tZW51bGluayI+JytlbGVtKyc8L2E+JzsNCiAgICAgICAgY2FzZSAnQ2hhdCc6DQogICAgICAgICAgICByZXR1cm4gJzxhIGhyZWY9IiMiIGNsYXNzPSJtZW51LWxpbmsgYnNyLWNoYXQgYnNyLW1lbnVsaW5rIj4nK2VsZW0rJzwvYT4nOw0KICAgICAgICBkZWZhdWx0OiANCiAgICAgICAgICAgIHJldHVybiAnJzsNCiAgICB9DQp9DQovLyByZXR1cm5zIG5ldyBkZWZhdWx0IGljb24gb25seSBpZiBpY29uIGlzIGRlZmF1bHQgKGlkZW50aWZpZWQgYnkgcGF0aCBkYXRhIGluIGRlZmF1bHQgc3ZnIE1VU1QgQ0hBTkdFIEZPUiBESUZGRVJFTlQgREVGQVVUTCkNCmZ1bmN0aW9uIHhnZXRJdGVtSWNvbihpdGVtKSB7DQogICAgLy8gaWNvbiBpcyBkZWZhdWx0DQogICAgaWYoaXRlbS5DdXN0b21JY29uKSB7DQogICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9Im5ldy1jb250YWluZXIiPicraXRlbS5JY29uKyc8L2Rpdj4nOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHN3aXRjaChpdGVtLkFjdGlvbikgew0KICAgICAgICAgICAgY2FzZSAnTGluayc6DQogICAgICAgICAgICAgICAgcmV0dXJuIGdldFN2ZygnbGluaycpOw0KICAgICAgICAgICAgY2FzZSAnQ2FsbCc6DQogICAgICAgICAgICAgICAgcmV0dXJuIGdldFN2ZygncGhvbmUnKTsNCiAgICAgICAgICAgIGNhc2UgJ1Ntcyc6DQogICAgICAgICAgICAgICAgcmV0dXJuIGdldFN2Zygnc21zJyk7DQogICAgICAgICAgICBjYXNlICdFbWFpbCc6DQogICAgICAgICAgICAgICAgcmV0dXJuIGdldFN2ZygnZW52ZWxvcGUnKTsNCiAgICAgICAgICAgIGNhc2UgJ01lc3MnOg0KICAgICAgICAgICAgICAgIHJldHVybiBnZXRTdmcoJ21lc3NlbmdlcicpOw0KICAgICAgICAgICAgY2FzZSAnTWFwJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3ZnKCdtYXAnKTsNCiAgICAgICAgICAgIGNhc2UgJ1NoYXJlJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3ZnKCdzaGFyZScpOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCmZ1bmN0aW9uIGdldEl0ZW1JY29uKGl0ZW0pIHsNCiAgICB2YXIgbGNhc2UgPSBpdGVtLkFjdGlvbi50b0xvd2VyQ2FzZSgpOw0KDQogICAgaWYoaXRlbS5DdXN0b21JY29uKSB7DQogICAgICAgIHN3aXRjaChpdGVtLkN1c3RvbUljb25fU2VsZWN0KSB7DQogICAgICAgICAgICBjYXNlICdjdXN0b21faWNvbjEnOg0KICAgICAgICAgICAgICAgIC8vIHJldHVybiAnPGRpdiBjbGFzcz0iJytsY2FzZSsnLWljb24tcHJldiBjdXN0b20tdXNlci1pY29uICcgKyBpdGVtLkN1c3RvbUljb25fU2VsZWN0ICsgJyI+JyArIGRhdGEuY29uZmlnLmN1c3RvbV9pY29uMSArICc8L2Rpdj4nOw0KICAgICAgICAgICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0iY3VzdG9tLXVzZXItaWNvbiAnICsgaXRlbS5DdXN0b21JY29uX1NlbGVjdCArICciPicgKyBkYXRhLmNvbmZpZy5jdXN0b21faWNvbjEgKyAnPC9kaXY+JzsNCiAgICAgICAgICAgIGNhc2UgJ2N1c3RvbV9pY29uMic6DQogICAgICAgICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJjdXN0b20tdXNlci1pY29uICcgKyBpdGVtLkN1c3RvbUljb25fU2VsZWN0ICsgJyI+JyArIGRhdGEuY29uZmlnLmN1c3RvbV9pY29uMiArICc8L2Rpdj4nOw0KICAgICAgICAgICAgY2FzZSAnY3VzdG9tX2ljb24zJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImN1c3RvbS11c2VyLWljb24gJyArIGl0ZW0uQ3VzdG9tSWNvbl9TZWxlY3QgKyAnIj4nICsgZGF0YS5jb25maWcuY3VzdG9tX2ljb24zICsgJzwvZGl2Pic7DQogICAgICAgICAgICBjYXNlICdjdXN0b21faWNvbjQnOg0KICAgICAgICAgICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0iY3VzdG9tLXVzZXItaWNvbiAnICsgaXRlbS5DdXN0b21JY29uX1NlbGVjdCArICciPicgKyBkYXRhLmNvbmZpZy5jdXN0b21faWNvbjQgKyAnPC9kaXY+JzsNCiAgICAgICAgICAgIGNhc2UgJ2N1c3RvbV9pY29uNSc6DQogICAgICAgICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJjdXN0b20tdXNlci1pY29uICcgKyBpdGVtLkN1c3RvbUljb25fU2VsZWN0ICsgJyI+JyArIGRhdGEuY29uZmlnLmN1c3RvbV9pY29uNSArICc8L2Rpdj4nOw0KICAgICAgICAgICAgY2FzZSAnY3VzdG9tX2ljb242JzoNCiAgICAgICAgICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImN1c3RvbS11c2VyLWljb24gJyArIGl0ZW0uQ3VzdG9tSWNvbl9TZWxlY3QgKyAnIj4nICsgZGF0YS5jb25maWcuY3VzdG9tX2ljb242ICsgJzwvZGl2Pic7DQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0KICAgICAgICBzd2l0Y2goaXRlbS5BY3Rpb24pIHsNCiAgICAgICAgICAgIGNhc2UgJ0xpbmsnOg0KICAgICAgICAgICAgICAgIHJldHVybiBnZXRTdmcoJ2xpbmsnKTsNCiAgICAgICAgICAgIGNhc2UgJ0NhbGwnOg0KICAgICAgICAgICAgICAgIHJldHVybiBnZXRTdmcoJ3Bob25lJyk7DQogICAgICAgICAgICBjYXNlICdTbXMnOg0KICAgICAgICAgICAgICAgIHJldHVybiBnZXRTdmcoJ3NtcycpOw0KICAgICAgICAgICAgY2FzZSAnRW1haWwnOg0KICAgICAgICAgICAgICAgIHJldHVybiBnZXRTdmcoJ2VudmVsb3BlJyk7DQogICAgICAgICAgICBjYXNlICdNZXNzJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3ZnKCdtZXNzZW5nZXInKTsNCiAgICAgICAgICAgIGNhc2UgJ01hcCc6DQogICAgICAgICAgICAgICAgcmV0dXJuIGdldFN2ZygnbWFwJyk7DQogICAgICAgICAgICBjYXNlICdTaGFyZSc6DQogICAgICAgICAgICAgICAgcmV0dXJuIGdldFN2Zygnc2hhcmUnKTsNCiAgICAgICAgICAgIGNhc2UgJ0NoYXQnOg0KICAgICAgICAgICAgICAgIHJldHVybiBnZXRTdmcoJ2NoYXQnKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KDQp3aW5kb3cuX3RyYWNrQ29udldpZGdldENsaWNrRXZlbnQgPSBmdW5jdGlvbihldmVudE5hbWUpIHsNCiAgICBpZih0eXBlb2YoSEFGKT09PSJvYmplY3QiKXsNCiAgICAgICAgSEFGLk9tVHJhY2tpbmcub25DTUNsaWNrKGV2ZW50TmFtZSkgDQogICAgfQ0KICAgIHJldHVybjsNCn0NCg0KZnVuY3Rpb24gZHVkYWljb24oaWNvbil7DQogICAgcmV0dXJuICc8c3BhbiBjbGFzcz0ibmV3LWNvbnRhaW5lciI+JytpY29uKyc8L3NwYW4+Jw0KICAgIA0KICAgIA0KfQ0KZnVuY3Rpb24geGdldFN2ZyhuYW1lKSB7DQogICAgY29uc3QgdHlwZSA9IG5hbWU/IG5hbWUgOiBkYXRhLmNvbmZpZy5EZXNrTWFpbjsNCiAgICBzd2l0Y2godHlwZSkgew0KICAgICAgICBjYXNlICd2RWxsaXBzaXMnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE5MiA1MTIiPjx0aXRsZT5Nb3JlPC90aXRsZT48cGF0aCBkPSJNOTYgMTg0YzM5LjggMCA3MiAzMi4yIDcyIDcycy0zMi4yIDcyLTcyIDcyLTcyLTMyLjItNzItNzIgMzIuMi03MiA3Mi03MnpNMjQgODBjMCAzOS44IDMyLjIgNzIgNzIgNzJzNzItMzIuMiA3Mi03MlMxMzUuOCA4IDk2IDggMjQgNDAuMiAyNCA4MHptMCAzNTJjMCAzOS44IDMyLjIgNzIgNzIgNzJzNzItMzIuMiA3Mi03Mi0zMi4yLTcyLTcyLTcyLTcyIDMyLjItNzIgNzJ6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnbWFwJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z21hcCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzg0IDUxMiIgZGF0YS1kZWZhdWx0PSJ0cnVlIj48cGF0aCBkPSJNMTcyLjI2OCA1MDEuNjdDMjYuOTcgMjkxLjAzMSAwIDI2OS40MTMgMCAxOTIgMCA4NS45NjEgODUuOTYxIDAgMTkyIDBzMTkyIDg1Ljk2MSAxOTIgMTkyYzAgNzcuNDEzLTI2Ljk3IDk5LjAzMS0xNzIuMjY4IDMwOS42Ny05LjUzNSAxMy43NzQtMjkuOTMgMTMuNzczLTM5LjQ2NCAwek0xOTIgMjcyYzQ0LjE4MyAwIDgwLTM1LjgxNyA4MC04MHMtMzUuODE3LTgwLTgwLTgwLTgwIDM1LjgxNy04MCA4MCAzNS44MTcgODAgODAgODB6Ii8+PC9zdmc+Jw0KICAgICAgICBjYXNlICdoRWxsaXBzaXMnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjx0aXRsZT5Nb3JlPC90aXRsZT48cGF0aCBkPSJNMzI4IDI1NmMwIDM5LjgtMzIuMiA3Mi03MiA3MnMtNzItMzIuMi03Mi03MiAzMi4yLTcyIDcyLTcyIDcyIDMyLjIgNzIgNzJ6bTEwNC03MmMtMzkuOCAwLTcyIDMyLjItNzIgNzJzMzIuMiA3MiA3MiA3MiA3Mi0zMi4yIDcyLTcyLTMyLjItNzItNzItNzJ6bS0zNTIgMGMtMzkuOCAwLTcyIDMyLjItNzIgNzJzMzIuMiA3MiA3MiA3MiA3Mi0zMi4yIDcyLTcyLTMyLjItNzItNzItNzJ6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAncGx1cyc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQyIDQyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0MiA0MjsgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRpdGxlPk1vcmU8L3RpdGxlPjxwb2x5Z29uIHBvaW50cz0iNDIsMjAgMjIsMjAgMjIsMCAyMCwwIDIwLDIwIDAsMjAgMCwyMiAyMCwyMiAyMCw0MiAyMiw0MiAyMiwyMiA0MiwyMiAiLz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48L3N2Zz4nOw0KICAgICAgICBjYXNlICdiYXJzJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48dGl0bGU+TW9yZTwvdGl0bGU+PHBhdGggZD0iTTE2IDEzMmg0MTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNlY3NmMwLTguODM3LTcuMTYzLTE2LTE2LTE2SDE2QzcuMTYzIDYwIDAgNjcuMTYzIDAgNzZ2NDBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNnptMCAxNjBoNDE2YzguODM3IDAgMTYtNy4xNjMgMTYtMTZ2LTQwYzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTZjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2NDBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNnptMCAxNjBoNDE2YzguODM3IDAgMTYtNy4xNjMgMTYtMTZ2LTQwYzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTZjLTguODM3IDAtMTYgNy4xNjMtMTYgMTZ2NDBjMCA4LjgzNyA3LjE2MyAxNiAxNiAxNnoiLz48L3N2Zz4nOw0KICAgICAgICBjYXNlICdlbnZlbG9wZSc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdlbWFpbCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPkVtYWlsPC90aXRsZT48cGF0aCBkPSJNNDY0IDY0SDQ4QzIxLjQ5IDY0IDAgODUuNDkgMCAxMTJ2Mjg4YzAgMjYuNTEgMjEuNDkgNDggNDggNDhoNDE2YzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWMTEyYzAtMjYuNTEtMjEuNDktNDgtNDgtNDh6bTAgNDh2NDAuODA1Yy0yMi40MjIgMTguMjU5LTU4LjE2OCA0Ni42NTEtMTM0LjU4NyAxMDYuNDktMTYuODQxIDEzLjI0Ny01MC4yMDEgNDUuMDcyLTczLjQxMyA0NC43MDEtMjMuMjA4LjM3NS01Ni41NzktMzEuNDU5LTczLjQxMy00NC43MDFDMTA2LjE4IDE5OS40NjUgNzAuNDI1IDE3MS4wNjcgNDggMTUyLjgwNVYxMTJoNDE2ek00OCA0MDBWMjE0LjM5OGMyMi45MTQgMTguMjUxIDU1LjQwOSA0My44NjIgMTA0LjkzOCA4Mi42NDYgMjEuODU3IDE3LjIwNSA2MC4xMzQgNTUuMTg2IDEwMy4wNjIgNTQuOTU1IDQyLjcxNy4yMzEgODAuNTA5LTM3LjE5OSAxMDMuMDUzLTU0Ljk0NyA0OS41MjgtMzguNzgzIDgyLjAzMi02NC40MDEgMTA0Ljk0Ny04Mi42NTNWNDAwSDQ4eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ3NoYXJlZW52ZWxvcGUnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJpY29uc3Znc2hhcmVlbWFpbCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPkVtYWlsPC90aXRsZT48cGF0aCBkPSJNNDY0IDY0SDQ4QzIxLjQ5IDY0IDAgODUuNDkgMCAxMTJ2Mjg4YzAgMjYuNTEgMjEuNDkgNDggNDggNDhoNDE2YzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWMTEyYzAtMjYuNTEtMjEuNDktNDgtNDgtNDh6bTAgNDh2NDAuODA1Yy0yMi40MjIgMTguMjU5LTU4LjE2OCA0Ni42NTEtMTM0LjU4NyAxMDYuNDktMTYuODQxIDEzLjI0Ny01MC4yMDEgNDUuMDcyLTczLjQxMyA0NC43MDEtMjMuMjA4LjM3NS01Ni41NzktMzEuNDU5LTczLjQxMy00NC43MDFDMTA2LjE4IDE5OS40NjUgNzAuNDI1IDE3MS4wNjcgNDggMTUyLjgwNVYxMTJoNDE2ek00OCA0MDBWMjE0LjM5OGMyMi45MTQgMTguMjUxIDU1LjQwOSA0My44NjIgMTA0LjkzOCA4Mi42NDYgMjEuODU3IDE3LjIwNSA2MC4xMzQgNTUuMTg2IDEwMy4wNjIgNTQuOTU1IDQyLjcxNy4yMzEgODAuNTA5LTM3LjE5OSAxMDMuMDUzLTU0Ljk0NyA0OS41MjgtMzguNzgzIDgyLjAzMi02NC40MDEgMTA0Ljk0Ny04Mi42NTNWNDAwSDQ4eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ3Bob25lJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z3Bob25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBkYXRhLWRlZmF1bHQ+PHRpdGxlPlBob25lPC90aXRsZT48cGF0aCBkPSJNNDkzLjQgMjQuNmwtMTA0LTI0Yy0xMS4zLTIuNi0yMi45IDMuMy0yNy41IDEzLjlsLTQ4IDExMmMtNC4yIDkuOC0xLjQgMjEuMyA2LjkgMjhsNjAuNiA0OS42Yy0zNiA3Ni43LTk4LjkgMTQwLjUtMTc3LjIgMTc3LjJsLTQ5LjYtNjAuNmMtNi44LTguMy0xOC4yLTExLjEtMjgtNi45bC0xMTIgNDhDMy45IDM2Ni41LTIgMzc4LjEuNiAzODkuNGwyNCAxMDRDMjcuMSA1MDQuMiAzNi43IDUxMiA0OCA1MTJjMjU2LjEgMCA0NjQtMjA3LjUgNDY0LTQ2NCAwLTExLjItNy43LTIwLjktMTguNi0yMy40eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ2Nsb3NlJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z2Nsb3NlIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4InZpZXdCb3g9IjAgMCAyMjQuNTEyIDIyNC41MTIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIyNC41MTIgMjI0LjUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPjx0aXRsZT5DbG9zZTwvdGl0bGU+PGc+PHBvbHlnb24gcG9pbnRzPSIyMjQuNTA3LDYuOTk3IDIxNy41MjEsMCAxMTIuMjU2LDEwNS4yNTggNi45OTgsMCAwLjAwNSw2Ljk5NyAxMDUuMjYzLDExMi4yNTQgMC4wMDUsMjE3LjUxMiA2Ljk5OCwyMjQuNTEyIDExMi4yNTYsMTE5LjI0IDIxNy41MjEsMjI0LjUxMiAyMjQuNTA3LDIxNy41MTIgMTE5LjI0OSwxMTIuMjU0Ii8+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ2ZhY2Vib29rJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z2ZiIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNjQgNTEyIj48dGl0bGU+RmFjZWJvb2s8L3RpdGxlPjxwYXRoIGQ9Ik03Ni43IDUxMlYyODNIMHYtOTFoNzYuN3YtNzEuN0M3Ni43IDQyLjQgMTI0LjMgMCAxOTMuOCAwYzMzLjMgMCA2MS45IDIuNSA3MC4yIDMuNlY4NWgtNDguMmMtMzcuOCAwLTQ1LjEgMTgtNDUuMSA0NC4zVjE5MkgyNTZsLTExLjcgOTFoLTczLjZ2MjI5Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnbWVzc2VuZ2VyJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z21lc2ciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjx0aXRsZT5GYWNlYm9vayBNZXNzZW5nZXI8L3RpdGxlPjxwYXRoIGQ9Ik0yMjQgMzJDMTUuOSAzMi03Ny41IDI3OCA4NC42IDQwMC42VjQ4MGw3NS43LTQyYzE0Mi4yIDM5LjggMjg1LjQtNTkuOSAyODUuNC0xOTguN0M0NDUuOCAxMjQuOCAzNDYuNSAzMiAyMjQgMzJ6bTIzLjQgMjc4LjFMMTkwIDI1MC41IDc5LjYgMzExLjZsMTIxLjEtMTI4LjUgNTcuNCA1OS42IDExMC40LTYxLjEtMTIxLjEgMTI4LjV6Ii8+PC9zdmc+Jw0KICAgICAgICBjYXNlICd0dW1ibHInOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJpY29uc3ZndG1iIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMjAgNTEyIj48dGl0bGU+VHVtYmxyPC90aXRsZT48cGF0aCBkPSJNMzA5LjggNDgwLjNjLTEzLjYgMTQuNS01MCAzMS43LTk3LjQgMzEuNy0xMjAuOCAwLTE0Ny04OC44LTE0Ny0xNDAuNnYtMTQ0SDE3LjljLTUuNSAwLTEwLTQuNS0xMC0xMHYtNjhjMC03LjIgNC41LTEzLjYgMTEuMy0xNiA2Mi0yMS44IDgxLjUtNzYgODQuMy0xMTcuMS44LTExIDYuNS0xNi4zIDE2LjEtMTYuM2g3MC45YzUuNSAwIDEwIDQuNSAxMCAxMHYxMTUuMmg4M2M1LjUgMCAxMCA0LjQgMTAgOS45djgxLjdjMCA1LjUtNC41IDEwLTEwIDEwaC04My40VjM2MGMwIDM0LjIgMjMuNyA1My42IDY4IDM1LjggNC44LTEuOSA5LTMuMiAxMi43LTIuMiAzLjUuOSA1LjggMy40IDcuNCA3LjlsMjIgNjQuM2MxLjggNSAzLjMgMTAuNi0uNCAxNC41eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ2xpbmtlZEluJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z2xpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48dGl0bGU+TGlua2VkSW48L3RpdGxlPjxwYXRoIGQ9Ik0xMDAuMyA0ODBINy40VjE4MC45aDkyLjlWNDgwek01My44IDE0MC4xQzI0LjEgMTQwLjEgMCAxMTUuNSAwIDg1LjggMCA1Ni4xIDI0LjEgMzIgNTMuOCAzMmMyOS43IDAgNTMuOCAyNC4xIDUzLjggNTMuOCAwIDI5LjctMjQuMSA1NC4zLTUzLjggNTQuM3pNNDQ4IDQ4MGgtOTIuN1YzMzQuNGMwLTM0LjctLjctNzkuMi00OC4zLTc5LjItNDguMyAwLTU1LjcgMzcuNy01NS43IDc2LjdWNDgwaC05Mi44VjE4MC45aDg5LjF2NDAuOGgxLjNjMTIuNC0yMy41IDQyLjctNDguMyA4Ny45LTQ4LjMgOTQgMCAxMTEuMyA2MS45IDExMS4zIDE0Mi4zVjQ4MHoiLz48L3N2Zz4nOw0KICAgICAgICBjYXNlICd0d2l0dGVyJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z3R3IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PHRpdGxlPlR3aXR0ZXI8L3RpdGxlPjxwYXRoIGQ9Ik0xMi42Ljc1aDIuNDU0bC01LjM2IDYuMTQyTDE2IDE1LjI1aC00LjkzN2wtMy44NjctNS4wNy00LjQyNSA1LjA3SC4zMTZsNS43MzMtNi41N0wwIC43NWg1LjA2M2wzLjQ5NSA0LjYzM0wxMi42MDEuNzVabS0uODYgMTMuMDI4aDEuMzZMNC4zMjMgMi4xNDVIMi44NjV6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAncmVkZGl0JzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z3JlZCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPlJlZGRpdDwvdGl0bGU+PHBhdGggZD0iTTQ0MC4zIDIwMy41Yy0xNSAwLTI4LjIgNi4yLTM3LjkgMTUuOS0zNS43LTI0LjctODMuOC00MC42LTEzNy4xLTQyLjNMMjkzIDUyLjNsODguMiAxOS44YzAgMjEuNiAxNy42IDM5LjIgMzkuMiAzOS4yIDIyIDAgMzkuNy0xOC4xIDM5LjctMzkuN3MtMTcuNi0zOS43LTM5LjctMzkuN2MtMTUuNCAwLTI4LjcgOS4zLTM1LjMgMjJsLTk3LjQtMjEuNmMtNC45LTEuMy05LjcgMi4yLTExIDcuMUwyNDYuMyAxNzdjLTUyLjkgMi4yLTEwMC41IDE4LjEtMTM2LjMgNDIuOC05LjctMTAuMS0yMy40LTE2LjMtMzguNC0xNi4zLTU1LjYgMC03My44IDc0LjYtMjIuOSAxMDAuMS0xLjggNy45LTIuNiAxNi4zLTIuNiAyNC43IDAgODMuOCA5NC40IDE1MS43IDIxMC4zIDE1MS43IDExNi40IDAgMjEwLjgtNjcuOSAyMTAuOC0xNTEuNyAwLTguNC0uOS0xNy4yLTMuMS0yNS4xIDQ5LjktMjUuNiAzMS41LTk5LjctMjMuOC05OS43ek0xMjkuNCAzMDguOWMwLTIyIDE3LjYtMzkuNyAzOS43LTM5LjcgMjEuNiAwIDM5LjIgMTcuNiAzOS4yIDM5LjcgMCAyMS42LTE3LjYgMzkuMi0zOS4yIDM5LjItMjIgLjEtMzkuNy0xNy42LTM5LjctMzkuMnptMjE0LjMgOTMuNWMtMzYuNCAzNi40LTEzOS4xIDM2LjQtMTc1LjUgMC00LTMuNS00LTkuNyAwLTEzLjcgMy41LTMuNSA5LjctMy41IDEzLjIgMCAyNy44IDI4LjUgMTIwIDI5IDE0OSAwIDMuNS0zLjUgOS43LTMuNSAxMy4yIDAgNC4xIDQgNC4xIDEwLjIuMSAxMy43em0tLjgtNTQuMmMtMjEuNiAwLTM5LjItMTcuNi0zOS4yLTM5LjIgMC0yMiAxNy42LTM5LjcgMzkuMi0zOS43IDIyIDAgMzkuNyAxNy42IDM5LjcgMzkuNy0uMSAyMS41LTE3LjcgMzkuMi0zOS43IDM5LjJ6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAncGludGVyZXN0JzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z3BpbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzg0IDUxMiI+PHRpdGxlPlBpbnRlcmVzdDwvdGl0bGU+PHBhdGggZD0iTTIwNCA2LjVDMTAxLjQgNi41IDAgNzQuOSAwIDE4NS42IDAgMjU2IDM5LjYgMjk2IDYzLjYgMjk2YzkuOSAwIDE1LjYtMjcuNiAxNS42LTM1LjQgMC05LjMtMjMuNy0yOS4xLTIzLjctNjcuOCAwLTgwLjQgNjEuMi0xMzcuNCAxNDAuNC0xMzcuNCA2OC4xIDAgMTE4LjUgMzguNyAxMTguNSAxMDkuOCAwIDUzLjEtMjEuMyAxNTIuNy05MC4zIDE1Mi43LTI0LjkgMC00Ni4yLTE4LTQ2LjItNDMuOCAwLTM3LjggMjYuNC03NC40IDI2LjQtMTEzLjQgMC02Ni4yLTkzLjktNTQuMi05My45IDI1LjggMCAxNi44IDIuMSAzNS40IDkuNiA1MC43LTEzLjggNTkuNC00MiAxNDcuOS00MiAyMDkuMSAwIDE4LjkgMi43IDM3LjUgNC41IDU2LjQgMy40IDMuOCAxLjcgMy40IDYuOSAxLjUgNTAuNC02OSA0OC42LTgyLjUgNzEuNC0xNzIuOCAxMi4zIDIzLjQgNDQuMSAzNiA2OS4zIDM2IDEwNi4yIDAgMTUzLjktMTAzLjUgMTUzLjktMTk2LjhDMzg0IDcxLjMgMjk4LjIgNi41IDIwNCA2LjV6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnc2hhcmUnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJpY29uc3Znc2hhcmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE1MzYgMTc5MiI+PHRpdGxlPlNoYXJlPC90aXRsZT48cGF0aCBkPSJNMTIxNiAxMDI0cTEzMyAwIDIyNi41IDkzLjV0OTMuNSAyMjYuNS05My41IDIyNi41LTIyNi41IDkzLjUtMjI2LjUtOTMuNS05My41LTIyNi41cTAtMTIgMi0zNGwtMzYwLTE4MHEtOTIgODYtMjE4IDg2LTEzMyAwLTIyNi41LTkzLjV0LTkzLjUtMjI2LjUgOTMuNS0yMjYuNSAyMjYuNS05My41cTEyNiAwIDIxOCA4NmwzNjAtMTgwcS0yLTIyLTItMzQgMC0xMzMgOTMuNS0yMjYuNXQyMjYuNS05My41IDIyNi41IDkzLjUgOTMuNSAyMjYuNS05My41IDIyNi41LTIyNi41IDkzLjVxLTEyNiAwLTIxOC04NmwtMzYwIDE4MHEyIDIyIDIgMzR0LTIgMzRsMzYwIDE4MHE5Mi04NiAyMTgtODZ6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnc21zJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z3NtcyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPlNNUyBUZXh0PC90aXRsZT48cGF0aCBkPSJNNDQ4IDBINjRDMjguNyAwIDAgMjguNyAwIDY0djI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NGg5NnY4NGMwIDkuOCAxMS4yIDE1LjUgMTkuMSA5LjdMMzA0IDQxNmgxNDRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjR6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnbGluayc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdsaW5rIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48cGF0aCBkPSJNMzI2LjYxMiAxODUuMzkxYzU5Ljc0NyA1OS44MDkgNTguOTI3IDE1NS42OTguMzYgMjE0LjU5LS4xMS4xMi0uMjQuMjUtLjM2LjM3bC02Ny4yIDY3LjJjLTU5LjI3IDU5LjI3LTE1NS42OTkgNTkuMjYyLTIxNC45NiAwLTU5LjI3LTU5LjI2LTU5LjI3LTE1NS43IDAtMjE0Ljk2bDM3LjEwNi0zNy4xMDZjOS44NC05Ljg0IDI2Ljc4Ni0zLjMgMjcuMjk0IDEwLjYwNi42NDggMTcuNzIyIDMuODI2IDM1LjUyNyA5LjY5IDUyLjcyMSAxLjk4NiA1LjgyMi41NjcgMTIuMjYyLTMuNzgzIDE2LjYxMmwtMTMuMDg3IDEzLjA4N2MtMjguMDI2IDI4LjAyNi0yOC45MDUgNzMuNjYtMS4xNTUgMTAxLjk2IDI4LjAyNCAyOC41NzkgNzQuMDg2IDI4Ljc0OSAxMDIuMzI1LjUxbDY3LjItNjcuMTljMjguMTkxLTI4LjE5MSAyOC4wNzMtNzMuNzU3IDAtMTAxLjgzLTMuNzAxLTMuNjk0LTcuNDI5LTYuNTY0LTEwLjM0MS04LjU2OWExNi4wMzcgMTYuMDM3IDAgMCAxLTYuOTQ3LTEyLjYwNmMtLjM5Ni0xMC41NjcgMy4zNDgtMjEuNDU2IDExLjY5OC0yOS44MDZsMjEuMDU0LTIxLjA1NWM1LjUyMS01LjUyMSAxNC4xODItNi4xOTkgMjAuNTg0LTEuNzMxYTE1Mi40ODIgMTUyLjQ4MiAwIDAgMSAyMC41MjIgMTcuMTk3ek00NjcuNTQ3IDQ0LjQ0OWMtNTkuMjYxLTU5LjI2Mi0xNTUuNjktNTkuMjctMjE0Ljk2IDBsLTY3LjIgNjcuMmMtLjEyLjEyLS4yNS4yNS0uMzYuMzctNTguNTY2IDU4Ljg5Mi01OS4zODcgMTU0Ljc4MS4zNiAyMTQuNTlhMTUyLjQ1NCAxNTIuNDU0IDAgMCAwIDIwLjUyMSAxNy4xOTZjNi40MDIgNC40NjggMTUuMDY0IDMuNzg5IDIwLjU4NC0xLjczMWwyMS4wNTQtMjEuMDU1YzguMzUtOC4zNSAxMi4wOTQtMTkuMjM5IDExLjY5OC0yOS44MDZhMTYuMDM3IDE2LjAzNyAwIDAgMC02Ljk0Ny0xMi42MDZjLTIuOTEyLTIuMDA1LTYuNjQtNC44NzUtMTAuMzQxLTguNTY5LTI4LjA3My0yOC4wNzMtMjguMTkxLTczLjYzOSAwLTEwMS44M2w2Ny4yLTY3LjE5YzI4LjIzOS0yOC4yMzkgNzQuMy0yOC4wNjkgMTAyLjMyNS41MSAyNy43NSAyOC4zIDI2Ljg3MiA3My45MzQtMS4xNTUgMTAxLjk2bC0xMy4wODcgMTMuMDg3Yy00LjM1IDQuMzUtNS43NjkgMTAuNzktMy43ODMgMTYuNjEyIDUuODY0IDE3LjE5NCA5LjA0MiAzNC45OTkgOS42OSA1Mi43MjEuNTA5IDEzLjkwNiAxNy40NTQgMjAuNDQ2IDI3LjI5NCAxMC42MDZsMzcuMTA2LTM3LjEwNmM1OS4yNzEtNTkuMjU5IDU5LjI3MS0xNTUuNjk5LjAwMS0yMTQuOTU5eiIvPjwvc3ZnPic7DQogICAgICAgIGRlZmF1bHQ6IA0KICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgIH0NCn0NCmZ1bmN0aW9uIGdldFN2ZyhuYW1lKSB7DQogICAgY29uc3QgdHlwZSA9IG5hbWU/IG5hbWUgOiBkYXRhLmNvbmZpZy5EZXNrTWFpbjsNCiAgICBzd2l0Y2godHlwZSkgew0KICAgICAgICBjYXNlICd2RWxsaXBzaXMnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE5MiA1MTIiPjx0aXRsZT5Nb3JlPC90aXRsZT48cGF0aCBkPSJNOTYgMTg0YzM5LjggMCA3MiAzMi4yIDcyIDcycy0zMi4yIDcyLTcyIDcyLTcyLTMyLjItNzItNzIgMzIuMi03MiA3Mi03MnpNMjQgODBjMCAzOS44IDMyLjIgNzIgNzIgNzJzNzItMzIuMiA3Mi03MlMxMzUuOCA4IDk2IDggMjQgNDAuMiAyNCA4MHptMCAzNTJjMCAzOS44IDMyLjIgNzIgNzIgNzJzNzItMzIuMiA3Mi03Mi0zMi4yLTcyLTcyLTcyLTcyIDMyLjItNzIgNzJ6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnbWFwJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0ibWFwLWljb24iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDM4NCA1MTIiIGRhdGEtZGVmYXVsdD0idHJ1ZSI+PHBhdGggZD0iTTE3Mi4yNjggNTAxLjY3QzI2Ljk3IDI5MS4wMzEgMCAyNjkuNDEzIDAgMTkyIDAgODUuOTYxIDg1Ljk2MSAwIDE5MiAwczE5MiA4NS45NjEgMTkyIDE5MmMwIDc3LjQxMy0yNi45NyA5OS4wMzEtMTcyLjI2OCAzMDkuNjctOS41MzUgMTMuNzc0LTI5LjkzIDEzLjc3My0zOS40NjQgMHpNMTkyIDI3MmM0NC4xODMgMCA4MC0zNS44MTcgODAtODBzLTM1LjgxNy04MC04MC04MC04MCAzNS44MTctODAgODAgMzUuODE3IDgwIDgwIDgweiIvPjwvc3ZnPicNCiAgICAgICAgY2FzZSAnaEVsbGlwc2lzJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48dGl0bGU+TW9yZTwvdGl0bGU+PHBhdGggZD0iTTMyOCAyNTZjMCAzOS44LTMyLjIgNzItNzIgNzJzLTcyLTMyLjItNzItNzIgMzIuMi03MiA3Mi03MiA3MiAzMi4yIDcyIDcyem0xMDQtNzJjLTM5LjggMC03MiAzMi4yLTcyIDcyczMyLjIgNzIgNzIgNzIgNzItMzIuMiA3Mi03Mi0zMi4yLTcyLTcyLTcyem0tMzUyIDBjLTM5LjggMC03MiAzMi4yLTcyIDcyczMyLjIgNzIgNzIgNzIgNzItMzIuMiA3Mi03Mi0zMi4yLTcyLTcyLTcyeiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ3BsdXMnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCA0MiA0MiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDIgNDI7IHhtbDpzcGFjZT0icHJlc2VydmUiPjx0aXRsZT5Nb3JlPC90aXRsZT48cG9seWdvbiBwb2ludHM9IjQyLDIwIDIyLDIwIDIyLDAgMjAsMCAyMCwyMCAwLDIwIDAsMjIgMjAsMjIgMjAsNDIgMjIsNDIgMjIsMjIgNDIsMjIgIi8+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnYmFycyc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDQ4IDUxMiI+PHRpdGxlPk1vcmU8L3RpdGxlPjxwYXRoIGQ9Ik0xNiAxMzJoNDE2YzguODM3IDAgMTYtNy4xNjMgMTYtMTZWNzZjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNkM3LjE2MyA2MCAwIDY3LjE2MyAwIDc2djQwYzAgOC44MzcgNy4xNjMgMTYgMTYgMTZ6bTAgMTYwaDQxNmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di00MGMwLTguODM3LTcuMTYzLTE2LTE2LTE2SDE2Yy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2djQwYzAgOC44MzcgNy4xNjMgMTYgMTYgMTZ6bTAgMTYwaDQxNmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di00MGMwLTguODM3LTcuMTYzLTE2LTE2LTE2SDE2Yy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2djQwYzAgOC44MzcgNy4xNjMgMTYgMTYgMTZ6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnZW52ZWxvcGUnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJlbWFpbC1pY29uIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48dGl0bGU+RW1haWw8L3RpdGxlPjxwYXRoIGQ9Ik00NjQgNjRINDhDMjEuNDkgNjQgMCA4NS40OSAwIDExMnYyODhjMCAyNi41MSAyMS40OSA0OCA0OCA0OGg0MTZjMjYuNTEgMCA0OC0yMS40OSA0OC00OFYxMTJjMC0yNi41MS0yMS40OS00OC00OC00OHptMCA0OHY0MC44MDVjLTIyLjQyMiAxOC4yNTktNTguMTY4IDQ2LjY1MS0xMzQuNTg3IDEwNi40OS0xNi44NDEgMTMuMjQ3LTUwLjIwMSA0NS4wNzItNzMuNDEzIDQ0LjcwMS0yMy4yMDguMzc1LTU2LjU3OS0zMS40NTktNzMuNDEzLTQ0LjcwMUMxMDYuMTggMTk5LjQ2NSA3MC40MjUgMTcxLjA2NyA0OCAxNTIuODA1VjExMmg0MTZ6TTQ4IDQwMFYyMTQuMzk4YzIyLjkxNCAxOC4yNTEgNTUuNDA5IDQzLjg2MiAxMDQuOTM4IDgyLjY0NiAyMS44NTcgMTcuMjA1IDYwLjEzNCA1NS4xODYgMTAzLjA2MiA1NC45NTUgNDIuNzE3LjIzMSA4MC41MDktMzcuMTk5IDEwMy4wNTMtNTQuOTQ3IDQ5LjUyOC0zOC43ODMgODIuMDMyLTY0LjQwMSAxMDQuOTQ3LTgyLjY1M1Y0MDBINDh6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnc2hhcmVlbnZlbG9wZSc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdzaGFyZWVtYWlsIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48dGl0bGU+RW1haWw8L3RpdGxlPjxwYXRoIGQ9Ik00NjQgNjRINDhDMjEuNDkgNjQgMCA4NS40OSAwIDExMnYyODhjMCAyNi41MSAyMS40OSA0OCA0OCA0OGg0MTZjMjYuNTEgMCA0OC0yMS40OSA0OC00OFYxMTJjMC0yNi41MS0yMS40OS00OC00OC00OHptMCA0OHY0MC44MDVjLTIyLjQyMiAxOC4yNTktNTguMTY4IDQ2LjY1MS0xMzQuNTg3IDEwNi40OS0xNi44NDEgMTMuMjQ3LTUwLjIwMSA0NS4wNzItNzMuNDEzIDQ0LjcwMS0yMy4yMDguMzc1LTU2LjU3OS0zMS40NTktNzMuNDEzLTQ0LjcwMUMxMDYuMTggMTk5LjQ2NSA3MC40MjUgMTcxLjA2NyA0OCAxNTIuODA1VjExMmg0MTZ6TTQ4IDQwMFYyMTQuMzk4YzIyLjkxNCAxOC4yNTEgNTUuNDA5IDQzLjg2MiAxMDQuOTM4IDgyLjY0NiAyMS44NTcgMTcuMjA1IDYwLjEzNCA1NS4xODYgMTAzLjA2MiA1NC45NTUgNDIuNzE3LjIzMSA4MC41MDktMzcuMTk5IDEwMy4wNTMtNTQuOTQ3IDQ5LjUyOC0zOC43ODMgODIuMDMyLTY0LjQwMSAxMDQuOTQ3LTgyLjY1M1Y0MDBINDh6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAncGhvbmUnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJjYWxsLWljb24iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGRhdGEtZGVmYXVsdD48dGl0bGU+UGhvbmU8L3RpdGxlPjxwYXRoIGQ9Ik00OTMuNCAyNC42bC0xMDQtMjRjLTExLjMtMi42LTIyLjkgMy4zLTI3LjUgMTMuOWwtNDggMTEyYy00LjIgOS44LTEuNCAyMS4zIDYuOSAyOGw2MC42IDQ5LjZjLTM2IDc2LjctOTguOSAxNDAuNS0xNzcuMiAxNzcuMmwtNDkuNi02MC42Yy02LjgtOC4zLTE4LjItMTEuMS0yOC02LjlsLTExMiA0OEMzLjkgMzY2LjUtMiAzNzguMS42IDM4OS40bDI0IDEwNEMyNy4xIDUwNC4yIDM2LjcgNTEyIDQ4IDUxMmMyNTYuMSAwIDQ2NC0yMDcuNSA0NjQtNDY0IDAtMTEuMi03LjctMjAuOS0xOC42LTIzLjR6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnY2xvc2UnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJpY29uc3ZnY2xvc2UiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgidmlld0JveD0iMCAwIDIyNC41MTIgMjI0LjUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjI0LjUxMiAyMjQuNTEyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHRpdGxlPkNsb3NlPC90aXRsZT48Zz48cG9seWdvbiBwb2ludHM9IjIyNC41MDcsNi45OTcgMjE3LjUyMSwwIDExMi4yNTYsMTA1LjI1OCA2Ljk5OCwwIDAuMDA1LDYuOTk3IDEwNS4yNjMsMTEyLjI1NCAwLjAwNSwyMTcuNTEyIDYuOTk4LDIyNC41MTIgMTEyLjI1NiwxMTkuMjQgMjE3LjUyMSwyMjQuNTEyIDIyNC41MDcsMjE3LjUxMiAxMTkuMjQ5LDExMi4yNTQiLz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnZmFjZWJvb2snOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJpY29uc3ZnZmIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDI2NCA1MTIiPjx0aXRsZT5GYWNlYm9vazwvdGl0bGU+PHBhdGggZD0iTTc2LjcgNTEyVjI4M0gwdi05MWg3Ni43di03MS43Qzc2LjcgNDIuNCAxMjQuMyAwIDE5My44IDBjMzMuMyAwIDYxLjkgMi41IDcwLjIgMy42Vjg1aC00OC4yYy0zNy44IDAtNDUuMSAxOC00NS4xIDQ0LjNWMTkySDI1NmwtMTEuNyA5MWgtNzMuNnYyMjkiLz48L3N2Zz4nOw0KICAgICAgICBjYXNlICdtZXNzZW5nZXInOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJtZXNzLWljb24iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjx0aXRsZT5GYWNlYm9vayBNZXNzZW5nZXI8L3RpdGxlPjxwYXRoIGQ9Ik0yMjQgMzJDMTUuOSAzMi03Ny41IDI3OCA4NC42IDQwMC42VjQ4MGw3NS43LTQyYzE0Mi4yIDM5LjggMjg1LjQtNTkuOSAyODUuNC0xOTguN0M0NDUuOCAxMjQuOCAzNDYuNSAzMiAyMjQgMzJ6bTIzLjQgMjc4LjFMMTkwIDI1MC41IDc5LjYgMzExLjZsMTIxLjEtMTI4LjUgNTcuNCA1OS42IDExMC40LTYxLjEtMTIxLjEgMTI4LjV6Ii8+PC9zdmc+Jw0KICAgICAgICBjYXNlICd0dW1ibHInOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJpY29uc3ZndG1iIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMjAgNTEyIj48dGl0bGU+VHVtYmxyPC90aXRsZT48cGF0aCBkPSJNMzA5LjggNDgwLjNjLTEzLjYgMTQuNS01MCAzMS43LTk3LjQgMzEuNy0xMjAuOCAwLTE0Ny04OC44LTE0Ny0xNDAuNnYtMTQ0SDE3LjljLTUuNSAwLTEwLTQuNS0xMC0xMHYtNjhjMC03LjIgNC41LTEzLjYgMTEuMy0xNiA2Mi0yMS44IDgxLjUtNzYgODQuMy0xMTcuMS44LTExIDYuNS0xNi4zIDE2LjEtMTYuM2g3MC45YzUuNSAwIDEwIDQuNSAxMCAxMHYxMTUuMmg4M2M1LjUgMCAxMCA0LjQgMTAgOS45djgxLjdjMCA1LjUtNC41IDEwLTEwIDEwaC04My40VjM2MGMwIDM0LjIgMjMuNyA1My42IDY4IDM1LjggNC44LTEuOSA5LTMuMiAxMi43LTIuMiAzLjUuOSA1LjggMy40IDcuNCA3LjlsMjIgNjQuM2MxLjggNSAzLjMgMTAuNi0uNCAxNC41eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ2xpbmtlZEluJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z2xpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48dGl0bGU+TGlua2VkSW48L3RpdGxlPjxwYXRoIGQ9Ik0xMDAuMyA0ODBINy40VjE4MC45aDkyLjlWNDgwek01My44IDE0MC4xQzI0LjEgMTQwLjEgMCAxMTUuNSAwIDg1LjggMCA1Ni4xIDI0LjEgMzIgNTMuOCAzMmMyOS43IDAgNTMuOCAyNC4xIDUzLjggNTMuOCAwIDI5LjctMjQuMSA1NC4zLTUzLjggNTQuM3pNNDQ4IDQ4MGgtOTIuN1YzMzQuNGMwLTM0LjctLjctNzkuMi00OC4zLTc5LjItNDguMyAwLTU1LjcgMzcuNy01NS43IDc2LjdWNDgwaC05Mi44VjE4MC45aDg5LjF2NDAuOGgxLjNjMTIuNC0yMy41IDQyLjctNDguMyA4Ny45LTQ4LjMgOTQgMCAxMTEuMyA2MS45IDExMS4zIDE0Mi4zVjQ4MHoiLz48L3N2Zz4nOw0KICAgICAgICBjYXNlICd0d2l0dGVyJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z3R3IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PHRpdGxlPlR3aXR0ZXI8L3RpdGxlPjxwYXRoIGQ9Ik0xMi42Ljc1aDIuNDU0bC01LjM2IDYuMTQyTDE2IDE1LjI1aC00LjkzN2wtMy44NjctNS4wNy00LjQyNSA1LjA3SC4zMTZsNS43MzMtNi41N0wwIC43NWg1LjA2M2wzLjQ5NSA0LjYzM0wxMi42MDEuNzVabS0uODYgMTMuMDI4aDEuMzZMNC4zMjMgMi4xNDVIMi44NjV6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAncmVkZGl0JzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z3JlZCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPlJlZGRpdDwvdGl0bGU+PHBhdGggZD0iTTQ0MC4zIDIwMy41Yy0xNSAwLTI4LjIgNi4yLTM3LjkgMTUuOS0zNS43LTI0LjctODMuOC00MC42LTEzNy4xLTQyLjNMMjkzIDUyLjNsODguMiAxOS44YzAgMjEuNiAxNy42IDM5LjIgMzkuMiAzOS4yIDIyIDAgMzkuNy0xOC4xIDM5LjctMzkuN3MtMTcuNi0zOS43LTM5LjctMzkuN2MtMTUuNCAwLTI4LjcgOS4zLTM1LjMgMjJsLTk3LjQtMjEuNmMtNC45LTEuMy05LjcgMi4yLTExIDcuMUwyNDYuMyAxNzdjLTUyLjkgMi4yLTEwMC41IDE4LjEtMTM2LjMgNDIuOC05LjctMTAuMS0yMy40LTE2LjMtMzguNC0xNi4zLTU1LjYgMC03My44IDc0LjYtMjIuOSAxMDAuMS0xLjggNy45LTIuNiAxNi4zLTIuNiAyNC43IDAgODMuOCA5NC40IDE1MS43IDIxMC4zIDE1MS43IDExNi40IDAgMjEwLjgtNjcuOSAyMTAuOC0xNTEuNyAwLTguNC0uOS0xNy4yLTMuMS0yNS4xIDQ5LjktMjUuNiAzMS41LTk5LjctMjMuOC05OS43ek0xMjkuNCAzMDguOWMwLTIyIDE3LjYtMzkuNyAzOS43LTM5LjcgMjEuNiAwIDM5LjIgMTcuNiAzOS4yIDM5LjcgMCAyMS42LTE3LjYgMzkuMi0zOS4yIDM5LjItMjIgLjEtMzkuNy0xNy42LTM5LjctMzkuMnptMjE0LjMgOTMuNWMtMzYuNCAzNi40LTEzOS4xIDM2LjQtMTc1LjUgMC00LTMuNS00LTkuNyAwLTEzLjcgMy41LTMuNSA5LjctMy41IDEzLjIgMCAyNy44IDI4LjUgMTIwIDI5IDE0OSAwIDMuNS0zLjUgOS43LTMuNSAxMy4yIDAgNC4xIDQgNC4xIDEwLjIuMSAxMy43em0tLjgtNTQuMmMtMjEuNiAwLTM5LjItMTcuNi0zOS4yLTM5LjIgMC0yMiAxNy42LTM5LjcgMzkuMi0zOS43IDIyIDAgMzkuNyAxNy42IDM5LjcgMzkuNy0uMSAyMS41LTE3LjcgMzkuMi0zOS43IDM5LjJ6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAncGludGVyZXN0JzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z3BpbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzg0IDUxMiI+PHRpdGxlPlBpbnRlcmVzdDwvdGl0bGU+PHBhdGggZD0iTTIwNCA2LjVDMTAxLjQgNi41IDAgNzQuOSAwIDE4NS42IDAgMjU2IDM5LjYgMjk2IDYzLjYgMjk2YzkuOSAwIDE1LjYtMjcuNiAxNS42LTM1LjQgMC05LjMtMjMuNy0yOS4xLTIzLjctNjcuOCAwLTgwLjQgNjEuMi0xMzcuNCAxNDAuNC0xMzcuNCA2OC4xIDAgMTE4LjUgMzguNyAxMTguNSAxMDkuOCAwIDUzLjEtMjEuMyAxNTIuNy05MC4zIDE1Mi43LTI0LjkgMC00Ni4yLTE4LTQ2LjItNDMuOCAwLTM3LjggMjYuNC03NC40IDI2LjQtMTEzLjQgMC02Ni4yLTkzLjktNTQuMi05My45IDI1LjggMCAxNi44IDIuMSAzNS40IDkuNiA1MC43LTEzLjggNTkuNC00MiAxNDcuOS00MiAyMDkuMSAwIDE4LjkgMi43IDM3LjUgNC41IDU2LjQgMy40IDMuOCAxLjcgMy40IDYuOSAxLjUgNTAuNC02OSA0OC42LTgyLjUgNzEuNC0xNzIuOCAxMi4zIDIzLjQgNDQuMSAzNiA2OS4zIDM2IDEwNi4yIDAgMTUzLjktMTAzLjUgMTUzLjktMTk2LjhDMzg0IDcxLjMgMjk4LjIgNi41IDIwNCA2LjV6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnc2hhcmUnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJzaGFyZS1pY29uIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNTM2IDE3OTIiPjx0aXRsZT5TaGFyZTwvdGl0bGU+PHBhdGggZD0iTTEyMTYgMTAyNHExMzMgMCAyMjYuNSA5My41dDkzLjUgMjI2LjUtOTMuNSAyMjYuNS0yMjYuNSA5My41LTIyNi41LTkzLjUtOTMuNS0yMjYuNXEwLTEyIDItMzRsLTM2MC0xODBxLTkyIDg2LTIxOCA4Ni0xMzMgMC0yMjYuNS05My41dC05My41LTIyNi41IDkzLjUtMjI2LjUgMjI2LjUtOTMuNXExMjYgMCAyMTggODZsMzYwLTE4MHEtMi0yMi0yLTM0IDAtMTMzIDkzLjUtMjI2LjV0MjI2LjUtOTMuNSAyMjYuNSA5My41IDkzLjUgMjI2LjUtOTMuNSAyMjYuNS0yMjYuNSA5My41cS0xMjYgMC0yMTgtODZsLTM2MCAxODBxMiAyMiAyIDM0dC0yIDM0bDM2MCAxODBxOTItODYgMjE4LTg2eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ3Ntcyc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9InNtcy1pY29uIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48dGl0bGU+U01TIFRleHQ8L3RpdGxlPjxwYXRoIGQ9Ik00NDggMEg2NEMyOC43IDAgMCAyOC43IDAgNjR2Mjg4YzAgMzUuMyAyOC43IDY0IDY0IDY0aDk2djg0YzAgOS44IDExLjIgMTUuNSAxOS4xIDkuN0wzMDQgNDE2aDE0NGMzNS4zIDAgNjQtMjguNyA2NC02NFY2NGMwLTM1LjMtMjguNy02NC02NC02NHoiLz48L3N2Zz4nOw0KICAgICAgICBjYXNlICdsaW5rJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0ibGluay1pY29uIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48cGF0aCBkPSJNMzI2LjYxMiAxODUuMzkxYzU5Ljc0NyA1OS44MDkgNTguOTI3IDE1NS42OTguMzYgMjE0LjU5LS4xMS4xMi0uMjQuMjUtLjM2LjM3bC02Ny4yIDY3LjJjLTU5LjI3IDU5LjI3LTE1NS42OTkgNTkuMjYyLTIxNC45NiAwLTU5LjI3LTU5LjI2LTU5LjI3LTE1NS43IDAtMjE0Ljk2bDM3LjEwNi0zNy4xMDZjOS44NC05Ljg0IDI2Ljc4Ni0zLjMgMjcuMjk0IDEwLjYwNi42NDggMTcuNzIyIDMuODI2IDM1LjUyNyA5LjY5IDUyLjcyMSAxLjk4NiA1LjgyMi41NjcgMTIuMjYyLTMuNzgzIDE2LjYxMmwtMTMuMDg3IDEzLjA4N2MtMjguMDI2IDI4LjAyNi0yOC45MDUgNzMuNjYtMS4xNTUgMTAxLjk2IDI4LjAyNCAyOC41NzkgNzQuMDg2IDI4Ljc0OSAxMDIuMzI1LjUxbDY3LjItNjcuMTljMjguMTkxLTI4LjE5MSAyOC4wNzMtNzMuNzU3IDAtMTAxLjgzLTMuNzAxLTMuNjk0LTcuNDI5LTYuNTY0LTEwLjM0MS04LjU2OWExNi4wMzcgMTYuMDM3IDAgMCAxLTYuOTQ3LTEyLjYwNmMtLjM5Ni0xMC41NjcgMy4zNDgtMjEuNDU2IDExLjY5OC0yOS44MDZsMjEuMDU0LTIxLjA1NWM1LjUyMS01LjUyMSAxNC4xODItNi4xOTkgMjAuNTg0LTEuNzMxYTE1Mi40ODIgMTUyLjQ4MiAwIDAgMSAyMC41MjIgMTcuMTk3ek00NjcuNTQ3IDQ0LjQ0OWMtNTkuMjYxLTU5LjI2Mi0xNTUuNjktNTkuMjctMjE0Ljk2IDBsLTY3LjIgNjcuMmMtLjEyLjEyLS4yNS4yNS0uMzYuMzctNTguNTY2IDU4Ljg5Mi01OS4zODcgMTU0Ljc4MS4zNiAyMTQuNTlhMTUyLjQ1NCAxNTIuNDU0IDAgMCAwIDIwLjUyMSAxNy4xOTZjNi40MDIgNC40NjggMTUuMDY0IDMuNzg5IDIwLjU4NC0xLjczMWwyMS4wNTQtMjEuMDU1YzguMzUtOC4zNSAxMi4wOTQtMTkuMjM5IDExLjY5OC0yOS44MDZhMTYuMDM3IDE2LjAzNyAwIDAgMC02Ljk0Ny0xMi42MDZjLTIuOTEyLTIuMDA1LTYuNjQtNC44NzUtMTAuMzQxLTguNTY5LTI4LjA3My0yOC4wNzMtMjguMTkxLTczLjYzOSAwLTEwMS44M2w2Ny4yLTY3LjE5YzI4LjIzOS0yOC4yMzkgNzQuMy0yOC4wNjkgMTAyLjMyNS41MSAyNy43NSAyOC4zIDI2Ljg3MiA3My45MzQtMS4xNTUgMTAxLjk2bC0xMy4wODcgMTMuMDg3Yy00LjM1IDQuMzUtNS43NjkgMTAuNzktMy43ODMgMTYuNjEyIDUuODY0IDE3LjE5NCA5LjA0MiAzNC45OTkgOS42OSA1Mi43MjEuNTA5IDEzLjkwNiAxNy40NTQgMjAuNDQ2IDI3LjI5NCAxMC42MDZsMzcuMTA2LTM3LjEwNmM1OS4yNzEtNTkuMjU5IDU5LjI3MS0xNTUuNjk5LjAwMS0yMTQuOTU5eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ2NoYXQnOg0KICAgICAgICAgICAgLy8gcmV0dXJuICc8c3ZnIGNsYXNzPSJjaGF0LWljb24iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjx0aXRsZT5FbWFpbDwvdGl0bGU+PHBhdGggZD0iTTQ2NCA2NEg0OEMyMS40OSA2NCAwIDg1LjQ5IDAgMTEydjI4OGMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDQxNmMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4VjExMmMwLTI2LjUxLTIxLjQ5LTQ4LTQ4LTQ4em0wIDQ4djQwLjgwNWMtMjIuNDIyIDE4LjI1OS01OC4xNjggNDYuNjUxLTEzNC41ODcgMTA2LjQ5LTE2Ljg0MSAxMy4yNDctNTAuMjAxIDQ1LjA3Mi03My40MTMgNDQuNzAxLTIzLjIwOC4zNzUtNTYuNTc5LTMxLjQ1OS03My40MTMtNDQuNzAxQzEwNi4xOCAxOTkuNDY1IDcwLjQyNSAxNzEuMDY3IDQ4IDE1Mi44MDVWMTEyaDQxNnpNNDggNDAwVjIxNC4zOThjMjIuOTE0IDE4LjI1MSA1NS40MDkgNDMuODYyIDEwNC45MzggODIuNjQ2IDIxLjg1NyAxNy4yMDUgNjAuMTM0IDU1LjE4NiAxMDMuMDYyIDU0Ljk1NSA0Mi43MTcuMjMxIDgwLjUwOS0zNy4xOTkgMTAzLjA1My01NC45NDcgNDkuNTI4LTM4Ljc4MyA4Mi4wMzItNjQuNDAxIDEwNC45NDctODIuNjUzVjQwMEg0OHoiLz48L3N2Zz4nOw0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJjaGF0LWljb24iIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxnPjxwYXRoIGQ9Im00NjAuNzQ3IDQzOS4xNjNjODkuMTE5LTEwMi43OTEgNTguMTExLTI2Mi41OTItNjMuMDk0LTMyNC45My0zNS4wMDQtNjcuNzg0LTEwNS43NTQtMTE0LjIzMy0xODcuMTUzLTExNC4yMzMtMTE2LjA2NCAwLTIxMC40ODggOTQuNDMtMjEwLjQ4OCAyMTAuNSAwIDUxLjA5OSAxOC4wODggOTkuNDI3IDUxLjIzNyAxMzcuNjYzbC00Ni43NzQgNDYuMTZjLTkuNDggOS4zNTctMi45MTMgMjUuNjEyIDEwLjQ2NSAyNS42NzdsMTEyLjk1Ni41MzhjMzguOTI1IDU2LjY0MSAxMDMuMjI4IDkxLjQ2MiAxNzMuNiA5MS40NjIuMTQ0IDAgMTk1LjQ0Ni0uOTk5IDE5NS41NjEtMSAxMy4zMzMtLjA2NCAxOS45NzUtMTYuMjkgMTAuNDY0LTI1LjY3N3ptLTM3Ny45ODUtMTAxLjE0NmMtMzQuMDE3LTM0LjA4LTUyLjc1Mi03OS4zNjctNTIuNzUyLTEyNy41MTcgMC05OS41MjggODAuOTY4LTE4MC41IDE4MC40OS0xODAuNXMxODAuNDkgODAuOTcyIDE4MC40OSAxODAuNWMwIDk1LjM3My03NS40NzMgMTgxLjI2OS0xODYuMzQzIDE4MC40MDNsLTE1My4yNTgtLjczIDMxLjI5My0zMC44ODJjNS45MTgtNS44NDIgNS45NTMtMTUuMzg5LjA4LTIxLjI3NHptMjE4LjczNCAxNDMuOTgzYy01Mi42MzQgMC0xMDEuNTU3LTIyLjQ4OS0xMzUuNTY1LTYxLjI4MSA1Ny4xMDQuMzc2IDQxLjk0NS4yODEgNDQuNTY5LjI4MSAxMzUuNDAyIDAgMjM2LjUwNi0xMjcuMDA5IDIwNC42ODktMjU5LjYxNyA4Mi45NjYgNjcuNzc0IDg5Ljc2MSAxOTEuNzc5IDE0LjA0NSAyNjcuNjM0LTUuODc0IDUuODg1LTUuODM4IDE1LjQzMy4wOCAyMS4yNzRsMzEuMjkzIDMwLjg4MmMtLjExOSAwLTE1OC45OTUuODI3LTE1OS4xMTEuODI3eiIvPjxwYXRoIGQ9Im0xMjEuMDA1IDE2NmgxNzkuOTljOC4yODQgMCAxNC45OTktNi43MTYgMTQuOTk5LTE1cy02LjcxNS0xNS0xNC45OTktMTVoLTE3OS45OWMtOC4yODQgMC0xNC45OTkgNi43MTYtMTQuOTk5IDE1czYuNzE2IDE1IDE0Ljk5OSAxNXoiLz48cGF0aCBkPSJtMTIxLjAwNSAyMjZoMTc5Ljk5YzguMjg0IDAgMTQuOTk5LTYuNzE2IDE0Ljk5OS0xNXMtNi43MTUtMTUtMTQuOTk5LTE1aC0xNzkuOTljLTguMjg0IDAtMTQuOTk5IDYuNzE2LTE0Ljk5OSAxNXM2LjcxNiAxNSAxNC45OTkgMTV6Ii8+PHBhdGggZD0ibTEyMS4wMDUgMjg2aDE3OS45OWM4LjI4NCAwIDE0Ljk5OS02LjcxNiAxNC45OTktMTVzLTYuNzE1LTE1LTE0Ljk5OS0xNWgtMTc5Ljk5Yy04LjI4NCAwLTE0Ljk5OSA2LjcxNi0xNC45OTkgMTVzNi43MTYgMTUgMTQuOTk5IDE1eiIvPjwvZz48L3N2Zz4nOw0KICAgICAgICBkZWZhdWx0OiANCiAgICAgICAgICAgIHJldHVybiAnJzsNCiAgICB9DQp9DQo=","css":"#main-container.open > svg {\n fill: #333333 !important;\n}\n\n#main-container {\n display: inline-block;\n margin: 0 auto;\n}\n\n.master-bar > #main-container {\n margin: 0;\n width: 40px;\n max-height: 60px;\n}\n\n#close-bar {\n width: 42.666px;\n z-index: 10000006;\n position: absolute;\n bottom: 0.5em;\n right: 0.5em;\n}\n\n#close-bar svg {\n fill: #fff !important;\n}\n\n.share-container .iconsvgshareemail {\n padding: 0 !important;\n margin: 0 auto !important;\n display: block;\n width: 60%;\n}\n\n.fab {\n background: #fff;\n width: 64px;\n height: 64px;\n border-radius: 50%;\n text-align: center;\n color: #333333;\n box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.5), 3px 3px 3px rgba(0, 0, 0, 0.25);\n position: fixed;\n bottom: 0px;\n right: 0px;\n font-size: 2.6667em;\n display: inline-block;\n cursor: default;\n}\n\n.fab.master-mobile, .child.mobile {\n bottom: 15px;\n right: 15px;\n}\n\n.fab.bsr-left {\n bottom: 15px !important;\n left: 15px !important;\n}\n\n.fab, .social-icon span {\n vertical-align: middle;\n}\n\n.fab.child {\n width: 42.66666667px;\n height: 42.66666667px;\n display: none;\n opacity: 0;\n font-size: 2em;\n background-color: #ffffff;\n z-index: 10000007;\n margin: 0 10px;\n /* Aligns icon in center */\n display: flex;\n align-items: center;\n}\n\n.fab.child.child-desktop-bar {\n position: absolute;\n left: 10px;\n background-color: black;\n background-color: rgba(0, 0, 0, 0);\n border: 2px solid #cccccc;\n box-shadow: none;\n display: none;\n}\n\n.fab.child.dark {\n background-color: #fff;\n}\n\n.fab.child.float {\n border-radius: 0px;\n background-color: #fff;\n box-shadow: none;\n margin: auto;\n position: relative;\n opacity: 1;\n min-width: 42.666px;\n top: 0;\n}\n\n.social-icon {\n width: 42.66666667px;\n height: 42.66666667px;\n font-size: 2em;\n z-index: 10000007;\n margin: 10px auto;\n display: flex;\n align-items: center;\n border-radius: 50%;\n}\n\n.social {\n width: inherit;\n height: inherit;\n}\n\n.social-icon svg {\n width: inherit;\n height: inherit;\n padding: 8px;\n fill: white;\n}\n\n.social-icon.light svg {\n fill: white;\n}\n\n.social-icon.dark svg {\n fill: black;\n}\n\n.overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: #ECECEC;\n opacity: 0.9;\n display: none;\n z-index: 10000001;\n}\n\n.overlay.dark {\n background: #000;\n opacity: 0.6;\n}\n\n.icon-container svg {\n fill: #CCCCCC;\n margin: 0 auto;\n display: block;\n width: 50%;\n height: 100%;\n}\n\n.icon-container.mobile.dark svg {\n fill: #000;\n}\n\n.mobile-bg, .social-bg {\n position: fixed;\n width: 100%;\n bottom: 0px;\n left: 0px;\n z-index: 10000002;\n display: none;\n}\n\n.social-bg {\n z-index: 10000005;\n}\n\n.mobile-bg.dark, .social-bg.dark {\n background: #000;\n}\n\n.mobile-bg.light, .social-bg.light {\n background: #fff;\n}\n\n.desktop-bg {\n position: absolute;\n min-width: 200px;\n bottom: 0px;\n left: 0px;\n z-index: 10000004;\n display: none;\n background: #ffffff;\n border-bottom: 6px solid #333333;\n box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.5), 3px 3px 3px rgba(0, 0, 0, 0.25);\n}\n\n.left-text {\n text-align: right;\n position: absolute;\n right: 4rem;\n width: 300px;\n top: 49%;\n transform: translateY(-49%);\n}\n\n.bsr-right-text {\n text-align: left;\n position: absolute;\n left: 4rem;\n width: 300px;\n top: 49%;\n transform: translateY(-49%);\n}\n\n.menu-link {\n text-decoration: none;\n align-self: center;\n}\n\n.menu-link.dark {\n color: white;\n}\n\n.menu-link.light {\n color: black;\n}\n\n.menu-link.desk-bar {\n color: #333333;\n font-size: 24px;\n}\n\n.right-text {\n position: absolute;\n text-align: left;\n font-size: 20px;\n width: 200px;\n left: 50px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n#float-container {\n position: fixed;\n right: 0px;\n top: 50%;\n transform: translateY(-50%);\n white-space: nowrap;\n z-index: 10000005;\n}\n\n.float-container {\n display: flex;\n height: 42.666px;\n max-width: 42.666px;\n background-color: white;\n margin-left: auto;\n margin-right: 0;\n float: right;\n clear: right;\n}\n\n.float-text-container {\n display: none;\n opacity: 1 !important;\n max-width: 100%;\n}\n\n.float-text {\n font-size: 20px;\n color: #333333;\n padding-left: 0.5em;\n padding-right: 44px;\n display: none;\n}\n\n.master-bar {\n border-radius: 0px;\n height: 50px;\n bottom: 0px;\n right: 50px;\n width: 200px;\n padding: 0 0.5em;\n}\n\n#help-text {\n display: none;\n position: absolute;\n margin: 20px;\n color: #333333;\n font-size: 24px;\n text-align: left;\n}\n\n#master-label {\n font-size: 16px;\n}\n\n#masterfab {\n z-index: 10000006;\n display: none;\n align-items: center;\n}\n\n#masterfab svg {\n fill: #cccccc;\n margin: 0 auto;\n display: block;\n width: 60%;\n max-width: 70px;\n max-height: 50px;\n}\n\n/* Pulse animation */\n.pulse {\n border: 3px solid #cccccc;\n -webkit-border-radius: 50px;\n height: 100px;\n width: 100px;\n position: absolute;\n /* trick to center, left margin half of width */\n margin: 0 0 0 -50px;\n left: 50%;\n -webkit-animation: pulsate 1s ease-out;\n -moz-animation: pulsate 1s ease-out;\n -o-animation: pulsate 1s ease-out;\n animation: pulsate 1s ease-out;\n opacity: 0;\n}\n\n@-webkit-keyframes pulsate {\n 0% {\n -webkit-transform: scale(0.8, 0.8);\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1.4, 1.4);\n opacity: 0;\n }\n}\n@-moz-keyframes pulsate {\n 0% {\n -webkit-transform: scale(0.8, 0.8);\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1.4, 1.4);\n opacity: 0;\n }\n}\n@-o-keyframes pulsate {\n 0% {\n -webkit-transform: scale(0.8, 0.8);\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1.4, 1.4);\n opacity: 0;\n }\n}\n@keyframes pulsate {\n 0% {\n -webkit-transform: scale(0.8, 0.8);\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1.4, 1.4);\n opacity: 0;\n }\n}\n.pulse2 {\n border: 3px solid #cccccc;\n -webkit-border-radius: 40px;\n height: 80px;\n width: 80px;\n position: absolute;\n /* trick to center, left margin half of width */\n margin: 0 0 0 -40px;\n left: 50%;\n -webkit-animation: pulsate2 1s ease-out;\n -moz-animation: pulsate2 1s ease-out;\n -o-animation: pulsate2 1s ease-out;\n animation: pulsate2 1s ease-out;\n opacity: 0;\n}\n\n@-webkit-keyframes pulsate2 {\n 0% {\n -webkit-transform: scale(0.8, 0.8);\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1.4, 1.4);\n opacity: 0;\n }\n}\n@-moz-keyframes pulsate2 {\n 0% {\n -webkit-transform: scale(0.8, 0.8);\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1.4, 1.4);\n opacity: 0;\n }\n}\n@-o-keyframes pulsate2 {\n 0% {\n -webkit-transform: scale(0.8, 0.8);\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1.4, 1.4);\n opacity: 0;\n }\n}\n@keyframes pulsate2 {\n 0% {\n -webkit-transform: scale(0.8, 0.8);\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n -webkit-transform: scale(1.4, 1.4);\n opacity: 0;\n }\n}\n.slide-pulse {\n -webkit-animation: slide 1s ease;\n -moz-animation: slide 1s ease;\n -o-animation: slide 1s ease;\n animation: slide 1s ease;\n}\n\n@-webkit-keyframes slide {\n 0% {\n max-width: 42.6667px;\n width: 42.667px;\n }\n 50% {\n max-width: 50px;\n width: 50px;\n }\n 100% {\n max-width: 50px;\n width: 42.667px;\n }\n}\n@-moz-keyframes slide {\n 0% {\n max-width: 42.6667px;\n width: 42.667px;\n }\n 50% {\n max-width: 50px;\n width: 50px;\n }\n 100% {\n max-width: 50px;\n width: 42.667px;\n }\n}\n@-o-keyframes slide {\n 0% {\n max-width: 42.6667px;\n width: 42.667px;\n }\n 50% {\n max-width: 50px;\n width: 50px;\n }\n 100% {\n max-width: 50px;\n width: 42.667px;\n }\n}\n@keyframes slide {\n 0% {\n max-width: 42.6667px;\n width: 42.667px;\n }\n 50% {\n max-width: 50px;\n width: 50px;\n }\n 100% {\n max-width: 50px;\n width: 42.667px;\n }\n}\n/* Modal Styles */\n.modal__overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.6);\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n height: 100%;\n width: 100%;\n}\n\n.modal__container {\n background-color: #fff;\n padding: 30px;\n max-width: 500px;\n min-width: 200px;\n max-height: 100vh;\n border-radius: 4px;\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n.modal__header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.modal__title {\n margin: 0 auto;\n color: black;\n font-weight: 600;\n font-size: 1.25rem;\n line-height: 1.25;\n box-sizing: border-box;\n}\n\n.modal__close {\n background: transparent;\n border: 0;\n position: absolute;\n top: 14px;\n right: 14px;\n}\n\n.modal__close, .modal__close svg {\n width: 20px;\n height: 20px;\n outline: none !important;\n}\n\n.modal__close svg {\n position: absolute;\n left: 0px;\n top: 0px;\n}\n\n.modal__content {\n margin-top: 2rem;\n margin-bottom: 2rem;\n line-height: 1.5;\n color: rgba(0, 0, 0, 0.8);\n}\n\n.modal__btn {\n font-size: 0.875rem;\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n background-color: #e6e6e6;\n color: rgba(0, 0, 0, 0.8);\n border-radius: 0.25rem;\n border-style: none;\n border-width: 0;\n cursor: pointer;\n -webkit-appearance: button;\n text-transform: none;\n overflow: visible;\n line-height: 1.15;\n margin: 0;\n will-change: transform;\n -moz-osx-font-smoothing: grayscale;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n transition: -webkit-transform 0.25s ease-out;\n transition: transform 0.25s ease-out;\n transition: transform 0.25s ease-out, -webkit-transform 0.25s ease-out;\n}\n\n.modal__btn:focus, .modal__btn:hover {\n -webkit-transform: scale(1.05);\n transform: scale(1.05);\n}\n\n.modal__btn-primary {\n background-color: #00449e;\n color: #fff;\n}\n\n/* Modal animation */\n@keyframes mmfadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes mmfadeOut {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@keyframes mmslideIn {\n from {\n transform: translateY(15%);\n }\n to {\n transform: translateY(0);\n }\n}\n@keyframes mmslideOut {\n from {\n transform: translateY(0);\n }\n to {\n transform: translateY(-10%);\n }\n}\n.micromodal-slide {\n display: none;\n}\n\n.micromodal-slide.is-open {\n display: block;\n}\n\n.micromodal-slide[aria-hidden=false] .modal__overlay {\n animation: mmfadeIn 0.3s cubic-bezier(0, 0, 0.2, 1);\n}\n\n.micromodal-slide[aria-hidden=false] .modal__container {\n animation: mmslideIn 0.3s cubic-bezier(0, 0, 0.2, 1);\n}\n\n.micromodal-slide[aria-hidden=true] .modal__overlay {\n animation: mmfadeOut 0.3s cubic-bezier(0, 0, 0.2, 1);\n}\n\n.micromodal-slide[aria-hidden=true] .modal__container {\n animation: mmslideOut 0.3s cubic-bezier(0, 0, 0.2, 1);\n}\n\n.micromodal-slide .modal__container,\n.micromodal-slide .modal__overlay {\n will-change: transform;\n}\n\n.micromodal-slide.is-open {\n display: block;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n z-index: 999;\n}\n","strings":{}}],"page_title":"Free Delivery Landscape Rock","flexstyles":[],"popups":[{"title":"Newsletter Registration","url":"/newsletter-registration","options":{"backgroundColor":"#FFFFFF","borderRadius":"5","width":"414","overlayColor":"rgba(0, 0, 0, 0.5)","height":"569.9839999999999","animation":"fadeIn"},"name":"newsletter-registration"}],"title":"Free Delivery Landscape Rock","uuid":"bbef1ebc19b64425a3db59335087f509","devicecss":"*#dm *.dmBody div.u_dm_content{\npadding-top:20px !important;\npadding-bottom:20px !important;\npadding-left:20px !important;\npadding-right:20px !important}\n*#dm *.dmBody div.u_1694205906{\npadding-top:0 !important;\npadding-left:0 !important;\npadding-bottom:0 !important;\nfloat:none !important;\nmargin-right:auto !important;\nmargin-left:auto !important;\ntop:auto !important;\nmax-width:none !important;\nleft:0 !important;\nwidth:100% !important;\nmargin-top:0 !important;\nposition:relative !important;\nmargin-bottom:0 !important;\npadding-right:0 !important;\nmin-width:0 !important;\ntext-align:center !important;\nheight:auto !important}","seometatags":"","content":"