https://www.domainedecice.com/wp-content/plugins/diadao-starter/pu…/prod/retargeting.js?v=1791277095
1!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.DiadaoRetargeting=t():e.DiadaoRetargeting=t()}(this,(()=>(()=>{var e=[function(e,t,o){e=o.nmd(e),function(o,n){"use strict";var i={};o.PubSub?i=o.PubSub:(o.PubSub=i,function(e){var t={},o=-1;function n(e,t,o){try{e(t,o)}catch(e){setTimeout(function(e){return function(){throw e}}(e),0)}}function i(e,t,o){e(t,o)}function r(e,o,r,a){var l,s=t[o],c=a?i:n;if(Object.prototype.hasOwnProperty.call(t,o))for(l in s)Object.prototype.hasOwnProperty.call(s,l)&&c(s[l],e,r)}function a(e){var o=String(e);return Boolean(Object.prototype.hasOwnProperty.call(t,o)&&function(e){var t;for(t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!0;return!1}(t[o]))}function l(e,t,o,n){var i=function(e,t,o){return function(){var n=String(e),i=n.lastIndexOf(".");for(r(e,e,t,o);-1!==i;)i=(n=n.substr(0,i)).lastIndexOf("."),r(e,n,t,o);r(e,"*",t,o)}}(e="symbol"==typeof e?e.toString():e,t,n);return!!function(e){for(var t=String(e),o=a(t)||a("*"),n=t.lastIndexOf(".");!o&&-1!==n;)n=(t=t.substr(0,n)).lastIndexOf("."),o=a(t);return o}(e)&&(!0===o?i():setTimeout(i,0),!0)}e.publish=function(t,o){return l(t,o,!1,e.immediateExceptions)},e.publishSync=function(t,o){return l(t,o,!0,e.immediateExceptions)},e.subscribe=function(e,n){if("function"!=typeof n)return!1;e="symbol"==typeof e?e.toString():e,Object.prototype.hasOwnProperty.call(t,e)||(t[e]={});var i="uid_"+String(++o);return t[e][i]=n,i},e.subscribeAll=function(t){return e.subscribe("*",t)},e.subscribeOnce=function(t,o){var n=e.subscribe(t,(function(){e.unsubscribe(n),o.apply(this,arguments)}));return e},e.clearAllSubscriptions=function(){t={}},e.clearSubscriptions=function(e){var o;for(o in t)Object.prototype.hasOwnProperty.call(t,o)&&0===o.indexOf(e)&&delete t[o]},e.countSubscriptions=function(e){var o,n,i=0;for(o in t)if(Object.prototype.hasOwnProperty.call(t,o)&&0===o.indexOf(e)){for(n in t[o])i++;break}return i},e.getSubscriptions=function(e){var o,n=[];for(o in t)Object.prototype.hasOwnProperty.call(t,o)&&0===o.indexOf(e)&&n.push(o);return n},e.unsubscribe=function(o){var n,i,r,a="string"==typeof o&&(Object.prototype.hasOwnProperty.call(t,o)||function(e){var o;for(o in t)if(Object.prototype.hasOwnProperty.call(t,o)&&0===o.indexOf(e))return!0;return!1}(o)),l=!a&&"string"==typeof o,s="function"==typeof o,c=!1;if(!a){for(n in t)if(Object.prototype.hasOwnProperty.call(t,n)){if(i=t[n],l&&i[o]){delete i[o],c=o;break}if(s)for(r in i)Object.prototype.hasOwnProperty.call(i,r)&&i[r]===o&&(delete i[r],c=!0)}return c}e.clearSubscriptions(o)}}(i)),void 0!==e&&e.exports&&(t=e.exports=i),t.PubSub=i,e.exports=t=i}("object"==typeof window&&window||this)}],t={};function o(n){var i=t[n];if(void 0!==i)return i.exports;var r=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(r.exports,r,r.exports,o),r.loaded=!0,r.exports}o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var n={};return(()=>{"use strict";o.r(n),o.d(n,{default:()=>r}),o(0);const e={init(){var e=jQuery.noConflict();this.onResize(),this.setDeviceType(window.getWindowWidth()),e(window).trigger("resize")},addLeadingZero:e=>(parseInt(e,10)<10&&(e=`0${e}`),e),onResize(){var e=jQuery.noConflict();const t=this;let o,n;e(window).resizeThrottle((function(i){e(this);const r=window.getWindowWidth(),a=window.getWindowHeight(),l=Math.floor(r/a);let s="landscape";l<1&&(s="portrait");let c=!1;Config.orientation!==s&&(c=!0,Config.orientation=s),t.setDeviceType(r),(o!==r||n!==a||void 0!==i&&void 0!==i.force&&!0===i.force)&&(PubSub.publish(Config.events.window.resize,{windowWidth:r,windowHeight:a,orientationChanged:c,ratio:l}),o=r,n=a,n=a)}))},formatDate(e,t,o){e=(e=e||"dd-mm-yy").split(t);for(let t=0;t<e.length;t++){switch(e[t]){case"dd":e[t]=o.getDate();break;case"mm":e[t]=o.getMonth()+1;break;case"yy":e[t]=o.getFullYear()}parseInt(e[t],10)<10&&(e[t]=`0${e[t]}`)}return e.join(t)},getScrollbarWidth(){const e=document.createElement("div");
1e.style.visibility="hidden",e.style.width="100px",e.style.msOverflowStyle="scrollbar",document.body.appendChild(e);const t=e.offsetWidth;e.style.overflow="scroll";const o=document.createElement("div");o.style.width="100%",e.appendChild(o);const n=o.offsetWidth;return e.parentNode.removeChild(e),Config.scrollbarWidth=t-n,Config.scrollbarWidth},setDeviceType(e){Config.deviceType="small",e>Config.gridBreakPoint.tablet?Config.deviceType="large":e>Config.gridBreakPoint.mobile&&(Config.deviceType="medium")},lazyLoad(e){var t=jQuery.noConflict();const o=Config.lazyLoad.offset||500;e.imagesLoaded({background:!0},(()=>{e.unveil(o,(function(){const e=t(this);e.is("img")?(e.prev().css({top:t(this).height()/2+"px"}),e.load((()=>{e.addClass("loaded"),PubSub.publish("bs.scroll.refresh"),e.siblings(".lazy-loading-icon-img").fadeOut((function(){t(this).remove()}))}))):e.imagesLoaded({background:!0},(()=>{e.addClass("loaded"),PubSub.publish("bs.scroll.refresh")}))}))}))},setCookie(e,t,o){const n=new Date;n.setTime(n.getTime()+24*o*60*60*1e3);const i="expires="+n.toUTCString();document.cookie=e+"="+t+";"+i+";path=/"},getCookie(e){const t=e+"=",o=decodeURIComponent(document.cookie).split(";");for(let e=0;e<o.length;e++){let n=o[e];for(;" "===n.charAt(0);)n=n.substring(1);if(0===n.indexOf(t))return n.substring(t.length,n.length)}return""},setBodyScrollTop(){const e=jQuery.noConflict()(window).scrollTop();document.body.style.setProperty("--scrollTop",e)},goToBodyScrollTop(){var e=jQuery.noConflict();void 0!==Config.smoothScrollInstance?Config.smoothScrollInstance.scrollTo(window.getComputedStyle(document.body).getPropertyValue("--scrollTop")):e(window).scrollTop(window.getComputedStyle(document.body).getPropertyValue("--scrollTop"))},getPercentageOfWidowHeight(e){const t=window.getWindowHeight()*e/100;return Math.ceil(parseFloat(t))},normalizeWheelDelta(e){if(e.detail)return e.wheelDelta?e.wheelDelta/e.detail/40*(e.detail>0?1:-1):-e.detail/3;if(e.wheelDelta)return e.wheelDelta/120;const t=window.pageYOffset||document.documentElement.scrollTop;return t>this.lastScrollTop?(this.lastScrollTop=t<=0?0:t,-1):(this.lastScrollTop=t<=0?0:t,1)}};var t;jQuery.fn.reverse=[].reverse,jQuery,(t=jQuery.noConflict()).prototype.getElementByAttributeValue=function(e,o){return t(this).filter(((t,n)=>{let i=!1;return"string"==typeof o?i=n[e].toString()===o.toString():"number"!=typeof o&&"boolean"!=typeof o||(i=parseInt(n[e],10)===parseInt(o,10)),i}))[0]},window.getWindowHeight=function(){return window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight},window.getWindowWidth=function(){return window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth},window.navigator.sayswho=function(){const e=window.navigator.userAgent;let t="",o=e.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];return/trident/i.test(o[1])?(t=/\brv[ :]+(\d+)/g.exec(e)||[],`IE ${t[1]||""}`):"Chrome"===o[1]&&(t=e.match(/\b(OPR|Edge)\/(\d+)/),null!=t)?t.slice(1).join(" ").replace("OPR","Opera"):(o=o[2]?[o[1],o[2]]:[window.navigator.appName,window.navigator.appVersion,"-?"],null!=(t=e.match(/version\/(\d+)/i))&&o.splice(1,1,t[1]),o.join(" "))}(),function(e){var t=jQuery.noConflict();t.extend({replaceTag:function(e,o,n,i){var r=t("<"+o+">")[0];return t.each(e.attributes,(function(){r.setAttribute(this.name,this.value)})),t(e).children().clone(n,i).appendTo(r),r}}),t.fn.extend({replaceTag:function(e,t,o){return this.map((function(){return jQuery.replaceTag(this,e,t,o)}))}})}(jQuery);const i=e,r=class{constructor(e){void 0!==window.diadao_page_id&&window.diadao_page_id,this.init()}init(){var e=jQuery.noConflict(),t=!0;void 0!==window.diadao_retargeting_check_cookies&&""!==window.diadao_retargeting_check_cookies&&0==parseInt(window.diadao_retargeting_check_cookies)&&(t=!1);const o=t,n=this,r=e("body").find(".panel-retargeting");n.config=e.extend(!0,{},{timeout:2e4,cookieDuration:1,timeoutBeforeAppear:300,inactivityTimeoutBeforeAppear:2e4,events:{open:"",close:""}},Config.retargeting),r.length>0&&(i.getCookie("retargeting")&&o?r.remove():(setTimeout((()=>{e("body, html").on("mousemove.retargeting touchmove.retargeting",n.handleMouseMove.bind(this))}),n.config.timeout),n.handleCloseRetargeting(),n.toggleShareButtons(),n.getInputFieldPlaceholder()))}handleMouseMove(e){var t=jQuery.noConflict();const o=this,n=t("html");
1o.timeoutBeforeAppearToken&&(window.clearTimeout(o.timeoutBeforeAppearToken),o.timeoutBeforeAppearToken=0),o.inactivityTimeoutBeforeAppearToken&&(window.clearTimeout(o.inactivityTimeoutBeforeAppearToken),o.inactivityTimeoutBeforeAppearToken=0),(e=e||window.event).pageY-n.scrollTop()<10?o.timeoutBeforeAppearToken=setTimeout((()=>{o.showPanel()}),o.config.timeoutBeforeAppear):(clearTimeout(o.timeoutBeforeAppearToken),o.timeoutBeforeAppearToken=setTimeout((()=>{o.showPanel()}),o.config.inactivityTimeoutBeforeAppear))}showPanel(){var e=jQuery.noConflict();const t=e(".panel-retargeting"),o=e("body"),n=e("html");if(e("body, html").off("mousemove.retargeting touchmove.retargeting"),setTimeout((()=>{this.timeoutBeforeAppearToken&&(window.clearTimeout(this.timeoutBeforeAppearToken),this.timeoutBeforeAppearToken=0),this.inactivityTimeoutBeforeAppearToken&&(window.clearTimeout(this.inactivityTimeoutBeforeAppearToken),this.inactivityTimeoutBeforeAppearToken=0)}),0),i.setCookie("retargeting",!0,this.config.cookieDuration),t.find(".medias-slideshow").length>0){var r=e(document).find(".swiper-container.retargetingSwiper").parent();new Swiper(".swiper-container.retargetingSwiper",{slidesPerView:1,centeredSlides:!1,spaceBetween:0,loop:!1,effect:"slide",clickable:!0,simulateTouch:!0,preventClicksPropagation:!1,preventClicks:!1,autoplay:{delay:6e3,disableOnInteraction:!0},navigation:{nextEl:".swiper-button-next.retargetingSwiper",prevEl:".swiper-button-prev.retargetingSwiper"},pagination:{el:".swiper-pagination.retargetingSwiper",clickable:!0},on:{init:function(e){r.addClass("is-initialized")},afterInit:function(e){setTimeout((function(){r.find(".swiper-slide.swiper-slide-init").removeClass("swiper-slide-init")}),2e3)}}})}t.addClass("active"),o.addClass("retargeting--opened"),n.addClass("retargeting--opened"),o.addClass("diadao-panel-plugin-opened"),n.addClass("diadao-panel-plugin-opened"),0===e(".panel-retargeting__overlay").length&&o.append('<div class="panel-retargeting__overlay"></div>')}handleCloseRetargeting(){const e=jQuery.noConflict()("body");e.on("click.retargeting",".panel-retargeting__overlay",this.closeRetargeting),e.on("click.retargeting",".panel-retargeting__close",this.closeRetargeting)}closeRetargeting(){var e=jQuery.noConflict();const t=e(".panel-retargeting__overlay"),o=e("body"),n=e("html"),i=e(".panel-retargeting");t.remove(),o.removeClass("retargeting--opened"),n.removeClass("retargeting--opened"),o.removeClass("diadao-panel-plugin-opened"),n.removeClass("diadao-panel-plugin-opened"),i.removeClass("active")}toggleShareButtons(){var e=jQuery.noConflict();const t=e(".social-button"),o=e(".panel-retargeting__share__socials"),n=e(".close-socials");t&&t.click((()=>{o.toggleClass("active")})),n&&n.click((()=>{o.removeClass("active")}))}getInputFieldPlaceholder(){const e=jQuery.noConflict()(".panel-retargeting__footer form.newsletter .form-element.email-container");if(e){const t=e.find("label"),o=e.find("input");if(t){const e=t.text();t.remove(),o&&(o.attr("placeholder")||o.attr("placeholder",e))}}}}})(),n})())); 2//# sourceMappingURL=data:application/json;charset=utf-8;base64,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VcsV0FDUHVRLEVBQWV6QixLQUFLLG1DQUFtQzhDLFlBQVksb0JBQ3ZFLEdBQUcsSUFDUCxJQS9COEUsQ0FxQzFGeEIsRUFBa0IzRyxTQUFTLFVBQzNCNEcsRUFBTTVHLFNBQVMsdUJBQ2ZxRyxFQUFNckcsU0FBUyx1QkFDZjRHLEVBQU01RyxTQUFTLDhCQUNmcUcsRUFBTXJHLFNBQVMsOEJBRWtDLElBQTdDekUsRUFBRywrQkFBK0JpQyxRQUNsQ29KLEVBQU13QixPQUFPLGlEQUdyQixDQUVBbkMseUJBSUksTUFBTVcsRUFGR3BMLE9BQU9DLFlBRUZGLENBQUcsUUFDakJxTCxFQUFNZCxHQUFHLG9CQUFxQiw4QkFKakJoUSxLQUlxRHVTLGtCQUNsRXpCLEVBQU1kLEdBQUcsb0JBQXFCLDRCQUxqQmhRLEtBS21EdVMsaUJBQ3BFLENBRUFBLG1CQUNJLElBQUk
25TSxFQUFLQyxPQUFPQyxhQUVoQixNQUFNNk0sRUFBVy9NLEVBQUcsK0JBQ2RxTCxFQUFRckwsRUFBRyxRQUNYOEssRUFBUTlLLEVBQUcsUUFDWG9MLEVBQW9CcEwsRUFBRyxzQkFFN0IrTSxFQUFTbkksU0FDVHlHLEVBQU11QixZQUFZLHVCQUNsQjlCLEVBQU04QixZQUFZLHVCQUNsQnZCLEVBQU11QixZQUFZLDhCQUNsQjlCLEVBQU04QixZQUFZLDhCQUVsQnhCLEVBQWtCd0IsWUFBWSxTQUVsQyxDQUVBakMscUJBQ0ksSUFBSTNLLEVBQUtDLE9BQU9DLGFBRWhCLE1BQU04TSxFQUFnQmhOLEVBQUcsa0JBQ25CaU4sRUFBb0JqTixFQUFHLHNDQUN2QmtOLEVBQWVsTixFQUFHLGtCQUNwQmdOLEdBQ0FBLEVBQWNHLE9BQU0sS0FDaEJGLEVBQWtCRyxZQUFZLFNBQVMsSUFJM0NGLEdBQ0FBLEVBQWFDLE9BQU0sS0FDZkYsRUFBa0JMLFlBQVksU0FBUyxHQUduRCxDQUVBaEMsMkJBRUksTUFBTXlDLEVBREdwTixPQUFPQyxZQUNRRixDQUFHLDRFQUUzQixHQUFHcU4sRUFBZ0IsQ0FDZixNQUFNQyxFQUFTRCxFQUFnQnZELEtBQUssU0FDOUJ5RCxFQUFTRixFQUFnQnZELEtBQUssU0FFcEMsR0FBR3dELEVBQU8sQ0FDTixNQUFNRSxFQUFZRixFQUFPRyxPQUN6QkgsRUFBTzFJLFNBRUoySSxJQUNxQkEsRUFBT0csS0FBSyxnQkFHNUJILEVBQU9HLEtBQUssY0FBZUYsR0FHdkMsQ0FDSixDQUNKLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9EaWFkYW9SZXRhcmdldGluZy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vRGlhZGFvUmV0YXJnZXRpbmcvLi9ub2RlX21vZHVsZXMvcHVic3ViLWpzL3NyYy9wdWJzdWIuanMiLCJ3ZWJwYWNrOi8vRGlhZGFvUmV0YXJnZXRpbmcvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vRGlhZGFvUmV0YXJnZXRpbmcvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0RpYWRhb1JldGFyZ2V0aW5nL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vRGlhZGFvUmV0YXJnZXRpbmcvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9EaWFkYW9SZXRhcmdldGluZy93ZWJwYWNrL3J1bnRpbWUvbm9kZSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL0RpYWRhb1JldGFyZ2V0aW5nLy4vc3JjL3V0aWxzLmpzIiwid2VicGFjazovL0RpYWRhb1JldGFyZ2V0aW5nLy4vc3JjL3JldGFyZ2V0aW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkRpYWRhb1JldGFyZ2V0aW5nXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkRpYWRhb1JldGFyZ2V0aW5nXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgKCkgPT4ge1xucmV0dXJuICIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEwLDIwMTEsMjAxMiwyMDEzLDIwMTQgTW9yZ2FuIFJvZGVyaWNrIGh0dHA6Ly9yb2Rlcmljay5ka1xuICogTGljZW5zZTogTUlUIC0gaHR0cDovL21yZ25yZHJjay5taXQtbGljZW5zZS5vcmdcbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbXJvZGVyaWNrL1B1YlN1YkpTXG4gKi9cblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KXtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgUHViU3ViID0ge307XG5cbiAgICBpZiAocm9vdC5QdWJTdWIpIHtcbiAgICAgICAgUHViU3ViID0gcm9vdC5QdWJTdWI7XG4gICAgICAgIC8vY29uc29sZS53YXJuKFwiUHViU3ViIGFscmVhZHkgbG9hZGVkLCB1c2luZyBleGlzdGluZyB2ZXJzaW9uXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuUHViU3ViID0gUHViU3ViO1xuICAgICAgICBmYWN0b3J5KFB1YlN1Yik7XG4gICAgfVxuICAgIC8vIENvbW1vbkpTIGFuZCBOb2RlLmpzIG1vZHVsZSBzdXBwb3J0XG4gICAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jyl7XG4gICAgICAgIGlmIChtb2R1bGUgIT09IHVuZGVmaW5lZCAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gUHViU3ViOyAvLyBOb2RlLmpzIHNwZWNpZmljIGBtb2R1bGUuZXhwb3J0c2BcbiAgICAgICAgfVxuICAgICAgICBleHBvcnRzLlB1YlN1YiA9IFB1YlN1YjsgLy8gQ29tbW9uSlMgbW9kdWxlIDEuMS4xIHNwZWNcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gUHViU3ViOyAvLyBDb21tb25KU1xuICAgIH1cbiAgICAvLyBBTUQgc3VwcG9ydFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKXtcbiAgICAgICAgZGVmaW5lKGZ1bmN0aW9uKCkgeyByZXR1cm4gUHViU3ViOyB9KTtcbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby11bmRlZiAqL1xuICAgIH1cblxufSgoIHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmIHdpbmRvdyApIHx8IHRoaXMsIGZ1bmN0aW9uIChQdWJTdWIpe1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBtZXNzYWdlcyA9IHt9LFxuICAgICAgICBsYXN0VWlkID0gLTEsXG4gICAgICAgIEFMTF9TVUJTQ1JJQklOR19NU0cgPSAnKic7XG5cbiAgICBmdW5jdGlvbiBoYXNLZXlzKG9iail7XG4gICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgZm9yIChrZXkgaW4gb2JqKXtcbiAgICAgICAgICAgIGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSApe1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgI
2HJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB0aHJvd3MgdGhlIHBhc3NlZCBleGNlcHRpb24sIGZvciB1c2UgYXMgYXJndW1lbnQgZm9yIHNldFRpbWVvdXRcbiAgICAgKiBAYWxpYXMgdGhyb3dFeGNlcHRpb25cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0geyBPYmplY3QgfSBleCBBbiBFcnJvciBvYmplY3RcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aHJvd0V4Y2VwdGlvbiggZXggKXtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJlVGhyb3dFeGNlcHRpb24oKXtcbiAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGxTdWJzY3JpYmVyV2l0aERlbGF5ZWRFeGNlcHRpb25zKCBzdWJzY3JpYmVyLCBtZXNzYWdlLCBkYXRhICl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyKCBtZXNzYWdlLCBkYXRhICk7XG4gICAgICAgIH0gY2F0Y2goIGV4ICl7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCB0aHJvd0V4Y2VwdGlvbiggZXggKSwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxsU3Vic2NyaWJlcldpdGhJbW1lZGlhdGVFeGNlcHRpb25zKCBzdWJzY3JpYmVyLCBtZXNzYWdlLCBkYXRhICl7XG4gICAgICAgIHN1YnNjcmliZXIoIG1lc3NhZ2UsIGRhdGEgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWxpdmVyTWVzc2FnZSggb3JpZ2luYWxNZXNzYWdlLCBtYXRjaGVkTWVzc2FnZSwgZGF0YSwgaW1tZWRpYXRlRXhjZXB0aW9ucyApe1xuICAgICAgICB2Y
2XIgc3Vic2NyaWJlcnMgPSBtZXNzYWdlc1ttYXRjaGVkTWVzc2FnZV0sXG4gICAgICAgICAgICBjYWxsU3Vic2NyaWJlciA9IGltbWVkaWF0ZUV4Y2VwdGlvbnMgPyBjYWxsU3Vic2NyaWJlcldpdGhJbW1lZGlhdGVFeGNlcHRpb25zIDogY2FsbFN1YnNjcmliZXJXaXRoRGVsYXllZEV4Y2VwdGlvbnMsXG4gICAgICAgICAgICBzO1xuXG4gICAgICAgIGlmICggIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCggbWVzc2FnZXMsIG1hdGNoZWRNZXNzYWdlICkgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHMgaW4gc3Vic2NyaWJlcnMpe1xuICAgICAgICAgICAgaWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3Vic2NyaWJlcnMsIHMpKXtcbiAgICAgICAgICAgICAgICBjYWxsU3Vic2NyaWJlciggc3Vic2NyaWJlcnNbc10sIG9yaWdpbmFsTWVzc2FnZSwgZGF0YSApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGVsaXZlcnlGdW5jdGlvbiggbWVzc2FnZSwgZGF0YSwgaW1tZWRpYXRlRXhjZXB0aW9ucyApe1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gZGVsaXZlck5hbWVzcGFjZWQoKXtcbiAgICAgICAgICAgIHZhciB0b3BpYyA9IFN0cmluZyggbWVzc2FnZSApLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gdG9waWMubGFzdEluZGV4T2YoICcuJyApO1xuXG4gICAgICAgICAgICAvLyBkZWxpdmVyIHRoZSBtZXNzYWdlIGFzIGl0IGlzIG5vd1xuICAgICAgICAgICAgZGVsaXZlck1lc3NhZ2UobWVzc2FnZSwgbWVzc2FnZSwgZGF0YSwgaW1tZWRpYXRlRXhjZXB0aW9ucyk7XG5cbiAgICAgICAgICAgIC8vIHRyaW0gdGhlIGhpZXJhcmNoeSBhbmQgZGVsaXZlciBtZXNzYWdlIHRvIGVhY2ggbGV2ZWxcbiAgICAgICAgICAgIHdoaWxlKCBwb3NpdGlvbiAhPT0gLTEgKXtcbiAgICAgICAgICAgICAgICB0b3BpYyA9IHRvcGljLnN1YnN0ciggMCwgcG9zaXRpb24gKTtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHRvcGljLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICAgICAgICAgICAgZGVsaXZlck1lc3NhZ2UoIG1lc3NhZ2UsIHRvcGljLCBkYXRhLCBpbW1lZGlhdGVFeGNlcHRpb25zICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlbGl2ZXJNZXNzYWdlKG1lc3NhZ2UsIEFMTF9TVUJTQ1JJQklOR19NU0csIGRhdGEsIGltbWVkaWF0ZUV4Y2VwdGlvbnMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc0RpcmVjdFN1YnNjcmliZXJzRm9yKCBtZXNzYWdlICkge1xuICAgICAgICB2Y
2XIgdG9waWMgPSBTdHJpbmcoIG1lc3NhZ2UgKSxcbiAgICAgICAgICAgIGZvdW5kID0gQm9vbGVhbihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIG1lc3NhZ2VzLCB0b3BpYyApICYmIGhhc0tleXMobWVzc2FnZXNbdG9waWNdKSk7XG5cbiAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lc3NhZ2VIYXNTdWJzY3JpYmVycyggbWVzc2FnZSApe1xuICAgICAgICB2YXIgdG9waWMgPSBTdHJpbmcoIG1lc3NhZ2UgKSxcbiAgICAgICAgICAgIGZvdW5kID0gaGFzRGlyZWN0U3Vic2NyaWJlcnNGb3IodG9waWMpIHx8IGhhc0RpcmVjdFN1YnNjcmliZXJzRm9yKEFMTF9TVUJTQ1JJQklOR19NU0cpLFxuICAgICAgICAgICAgcG9zaXRpb24gPSB0b3BpYy5sYXN0SW5kZXhPZiggJy4nICk7XG5cbiAgICAgICAgd2hpbGUgKCAhZm91bmQgJiYgcG9zaXRpb24gIT09IC0xICl7XG4gICAgICAgICAgICB0b3BpYyA9IHRvcGljLnN1YnN0ciggMCwgcG9zaXRpb24gKTtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gdG9waWMubGFzdEluZGV4T2YoICcuJyApO1xuICAgICAgICAgICAgZm91bmQgPSBoYXNEaXJlY3RTdWJzY3JpYmVyc0Zvcih0b3BpYyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHVibGlzaCggbWVzc2FnZSwgZGF0YSwgc3luYywgaW1tZWRpYXRlRXhjZXB0aW9ucyApe1xuICAgICAgICBtZXNzYWdlID0gKHR5cGVvZiBtZXNzYWdlID09PSAnc3ltYm9sJykgPyBtZXNzYWdlLnRvU3RyaW5nKCkgOiBtZXNzYWdlO1xuXG4gICAgICAgIHZhciBkZWxpdmVyID0gY3JlYXRlRGVsaXZlcnlGdW5jdGlvbiggbWVzc2FnZSwgZGF0YSwgaW1tZWRpYXRlRXhjZXB0aW9ucyApLFxuICAgICAgICAgICAgaGFzU3Vic2NyaWJlcnMgPSBtZXNzYWdlSGFzU3Vic2NyaWJlcnMoIG1lc3NhZ2UgKTtcblxuICAgICAgICBpZiAoICFoYXNTdWJzY3JpYmVycyApe1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCBzeW5jID09PSB0cnVlICl7XG4gICAgICAgICAgICBkZWxpdmVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCBkZWxpdmVyLCAwICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHVibGlzaGVzIHRoZSBtZXNzYWdlLCBwYXNzaW5nIHRoZSBkYXRhIHRvIGl0J3Mgc3Vic2NyaWJlcnNcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAYWxpYXMgcHVibGlzaFxuICAgICAqIEBwYXJhbSB7IFN0cmluZyB9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gcHVibGlzaFxuICAgICAqIEBwYXJhbSB7fSBkYXRhIFRoZSBkYXRhIHRvIHBhc3MgdG8gc3Vic2NyaWJlcnNcbiAgICAgKiBAcmV0dXJuIHsgQm9vbGVhbiB9XG4gICAgICovXG4gICAgUHViU3ViLnB1Ymxpc2ggPSBmdW5jdGlvbiggbWVzc2FnZSwgZGF0YSApe1xuICAgICAgICByZXR1cm4gcHVibGlzaCggbWVzc2FnZSwgZGF0YSwgZmFsc2UsIFB1YlN1Yi5pbW1lZGlhdGVFeGNlcHRpb25zICk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFB1Ymxpc2hlcyB0aGUgbWVzc2FnZSBzeW5jaHJvbm91c2x5LCBwYXNzaW5nIHRoZSBkYXRhIHRvIGl0J3Mgc3Vic2NyaWJlcnNcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAYWxpYXMgcHVibGlzaFN5bmNcbiAgICAgKiBAcGFyYW0geyBTdHJpbmcgfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIHB1Ymxpc2hcbiAgICAgKiBAcGFyYW0ge30gZGF0YSBUaGUgZGF0YSB0byBwYXNzIHRvIHN1YnNjcmliZXJzXG4gICAgICogQHJldHVybiB7IEJvb2xlYW4gfVxuICAgICAqL1xuICAgIFB1YlN1Yi5wdWJsaXNoU3luYyA9IGZ1bmN0aW9uKCBtZXNzYWdlLCBkYXRhICl7XG4gICAgICAgIHJldHVybiBwdWJsaXNoKCBtZXNzYWdlLCBkYXRhLCB0cnVlLCBQdWJTdWIuaW1tZWRpYXRlRXhjZXB0aW9ucyApO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTdWJzY3JpYmVzIHRoZSBwYXNzZWQgZnVuY3Rpb24gdG8gdGhlIHBhc3NlZCBtZXNzYWdlLiBFdmVyeSByZXR1cm5lZCB0b2tlbiBpcyB1bmlxdWUgYW5kIHNob3VsZCBiZSBzdG9yZWQgaWYgeW91IG5lZWQgdG8gdW5zdWJzY3JpYmVcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAYWxpYXMgc3Vic2NyaWJlXG4gICAgICogQHBhcmFtIHsgU3RyaW5nIH0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBzdWJzY3JpYmUgdG9cbiAgICAgKiBAcGFyYW0geyBGdW5jdGlvbiB9IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhIG5ldyBtZXNzYWdlIGlzIHB1Ymxpc2hlZFxuICAgICAqIEByZXR1cm4geyBTdHJpbmcgfVxuICAgICAqL1xuICAgIFB1YlN1Yi5zdWJzY3JpYmUgPSBmdW5jdGlvbiggbWVzc2FnZSwgZnVuYyApe1xuICAgICAgICBpZiAoIHR5cGVvZiBmdW5jICE9PSAnZnVuY3Rpb24nKXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lc3NhZ2UgPSAodHlwZW9mIG1lc3NhZ2UgPT09ICdzeW1ib2wnKSA/IG1lc3NhZ2UudG9TdHJpbmcoKSA6IG1lc3NhZ2U7XG5cbiAgICAgICAgLy8gbWVzc2FnZSBpcyBub3QgcmVnaXN0ZXJlZCB5ZXRcbiAgICAgICAgaWYgKCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCBtZXNzYWdlcywgbWVzc2FnZSApICl7XG4gICAgICAgICAgICBtZXNzYWdlc1ttZXNzYWdlXSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZm9yY2luZyB0b2tlbiBhcyBTdHJpbmcsIHRvIGFsbG93IGZvciBmdXR1cmUgZXhwYW5zaW9ucyB3aXRob3V0IGJyZWFraW5nIHVzYWdlXG4gICAgICAgIC8vIGFuZCBhbGxvdyBmb3IgZWFzeSB1c2UgYXMga2V5IG5hbWVzIGZvciB0aGUgJ21lc3NhZ2VzJyBvYmplY3RcbiAgICAgICAgdmFyIHRva2VuID0gJ3VpZF8nICsgU3RyaW5nKCsrbGFzdFVpZCk7XG4gICAgICAgIG1lc3NhZ2VzW21lc3NhZ2VdW3Rva2VuXSA9IGZ1bmM7XG5cbiAgICAgICAgLy8gcmV0dXJuIHRva2VuIGZvciB1bnN1YnNjcmliaW5nXG4gICAgICAgI
2HJldHVybiB0b2tlbjtcbiAgICB9O1xuXG4gICAgUHViU3ViLnN1YnNjcmliZUFsbCA9IGZ1bmN0aW9uKCBmdW5jICl7XG4gICAgICAgIHJldHVybiBQdWJTdWIuc3Vic2NyaWJlKEFMTF9TVUJTQ1JJQklOR19NU0csIGZ1bmMpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTdWJzY3JpYmVzIHRoZSBwYXNzZWQgZnVuY3Rpb24gdG8gdGhlIHBhc3NlZCBtZXNzYWdlIG9uY2VcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAYWxpYXMgc3Vic2NyaWJlT25jZVxuICAgICAqIEBwYXJhbSB7IFN0cmluZyB9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gc3Vic2NyaWJlIHRvXG4gICAgICogQHBhcmFtIHsgRnVuY3Rpb24gfSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBuZXcgbWVzc2FnZSBpcyBwdWJsaXNoZWRcbiAgICAgKiBAcmV0dXJuIHsgUHViU3ViIH1cbiAgICAgKi9cbiAgICBQdWJTdWIuc3Vic2NyaWJlT25jZSA9IGZ1bmN0aW9uKCBtZXNzYWdlLCBmdW5jICl7XG4gICAgICAgIHZhciB0b2tlbiA9IFB1YlN1Yi5zdWJzY3JpYmUoIG1lc3NhZ2UsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAvLyBiZWZvcmUgZnVuYyBhcHBseSwgdW5zdWJzY3JpYmUgbWVzc2FnZVxuICAgICAgICAgICAgUHViU3ViLnVuc3Vic2NyaWJlKCB0b2tlbiApO1xuICAgICAgICAgICAgZnVuYy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUHViU3ViO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYWxsIHN1YnNjcmlwdGlvbnNcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcHVibGljXG4gICAgICogQGFsaWFzIGNsZWFyQWxsU3Vic2NyaXB0aW9uc1xuICAgICAqL1xuICAgIFB1YlN1Yi5jbGVhckFsbFN1YnNjcmlwdGlvbnMgPSBmdW5jdGlvbiBjbGVhckFsbFN1YnNjcmlwdGlvbnMoKXtcbiAgICAgICAgbWVzc2FnZXMgPSB7fTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgc3Vic2NyaXB0aW9ucyBieSB0aGUgdG9waWNcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcHVibGljXG4gICAgICogQGFsaWFzIGNsZWFyQWxsU3Vic2NyaXB0aW9uc1xuICAgICAqIEByZXR1cm4geyBpbnQgfVxuICAgICAqL1xuICAgIFB1YlN1Yi5jbGVhclN1YnNjcmlwdGlvbnMgPSBmdW5jdGlvbiBjbGVhclN1YnNjcmlwdGlvbnModG9waWMpe1xuICAgICAgICB2Y
2XIgbTtcbiAgICAgICAgZm9yIChtIGluIG1lc3NhZ2VzKXtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZXMsIG0pICYmIG0uaW5kZXhPZih0b3BpYykgPT09IDApe1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBtZXNzYWdlc1ttXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgICBDb3VudCBzdWJzY3JpcHRpb25zIGJ5IHRoZSB0b3BpY1xuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAYWxpYXMgY291bnRTdWJzY3JpcHRpb25zXG4gICAgICogQHJldHVybiB7IEFycmF5IH1cbiAgICAqL1xuICAgIFB1YlN1Yi5jb3VudFN1YnNjcmlwdGlvbnMgPSBmdW5jdGlvbiBjb3VudFN1YnNjcmlwdGlvbnModG9waWMpe1xuICAgICAgICB2YXIgbTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICAgIHZhciB0b2tlbjtcbiAgICAgICAgdmFyIGNvdW50ID0gMDtcbiAgICAgICAgZm9yIChtIGluIG1lc3NhZ2VzKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2VzLCBtKSAmJiBtLmluZGV4T2YodG9waWMpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZm9yICh0b2tlbiBpbiBtZXNzYWdlc1ttXSkge1xuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICAgR2V0cyBzdWJzY3JpcHRpb25zIGJ5IHRoZSB0b3BpY1xuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAYWxpYXMgZ2V0U3Vic2NyaXB0aW9uc1xuICAgICovXG4gICAgUHViU3ViLmdldFN1YnNjcmlwdGlvbnMgPSBmdW5jdGlvbiBnZXRTdWJzY3JpcHRpb25zKHRvcGljKXtcbiAgICAgICAgdmFyIG07XG4gICAgICAgIHZhciBsaXN0ID0gW107XG4gICAgICAgIGZvciAobSBpbiBtZXNzYWdlcyl7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2VzLCBtKSAmJiBtLmluZGV4T2YodG9waWMpID09PSAwKXtcbiAgICAgICAgICAgICAgICBsaXN0LnB1c2gobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgc3Vic2NyaXB0aW9uc1xuICAgICAqXG4gICAgICogLSBXaGVuIHBhc3NlZCBhIHRva2VuLCByZW1vdmVzIGEgc3BlY2lmaWMgc3Vic2NyaXB0aW9uLlxuICAgICAqXG5cdCAqIC0gV2hlbiBwYXNzZWQgYSBmdW5jdGlvbiwgcmVtb3ZlcyBhbGwgc3Vic2NyaXB0aW9ucyBmb3IgdGhhdCBmdW5jdGlvblxuICAgICAqXG5cdCAqIC0gV2hlbiBwYXNzZWQgYSB0b3BpYywgcmVtb3ZlcyBhbGwgc3Vic2NyaXB0aW9ucyBmb3IgdGhhdCB0b3BpYyAoaGllcmFyY2h5KVxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAYWxpYXMgc3Vic2NyaWJlT25jZVxuICAgICAqIEBwYXJhbSB7IFN0cmluZyB8IEZ1bmN0aW9uIH0gdmFsdWUgQSB0b2tlbiwgZnVuY3Rpb24gb3IgdG9waWMgdG8gdW5zdWJzY3JpYmUgZnJvbVxuICAgICAqIEBleGFtcGxlIC8vIFVuc3Vic2NyaWJpbmcgd2l0aCBhIHRva2VuXG4gICAgICogdmFyIHRva2VuID0gUHViU3ViLnN1YnNjcmliZSgnbXl0b3BpYycsIG15RnVuYyk7XG4gICAgICogUHViU3ViLnVuc3Vic2NyaWJlKHRva2VuKTtcbiAgICAgKiBAZXhhbXBsZSAvLyBVbnN1YnNjcmliaW5nIHdpdGggYSBmdW5jdGlvblxuICAgICAqIFB1YlN1Yi51bnN1YnNjcmliZShteUZ1bmMpO1xuICAgICAqIEBleGFtcGxlIC8vIFVuc3Vic2NyaWJpbmcgZnJvbSBhIHRvcGljXG4gICAgICogUHViU3ViLnVuc3Vic2NyaWJlKCdteXRvcGljJyk7XG4gICAgICovXG4gICAgUHViU3ViLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24odmFsdWUpe1xuICAgICAgICB2Y
2XIgZGVzY2VuZGFudFRvcGljRXhpc3RzID0gZnVuY3Rpb24odG9waWMpIHtcbiAgICAgICAgICAgICAgICB2YXIgbTtcbiAgICAgICAgICAgICAgICBmb3IgKCBtIGluIG1lc3NhZ2VzICl7XG4gICAgICAgICAgICAgICAgICAgIGlmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2VzLCBtKSAmJiBtLmluZGV4T2YodG9waWMpID09PSAwICl7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGRlc2NlbmRhbnQgb2YgdGhlIHRvcGljIGV4aXN0czpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzVG9waWMgICAgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1lc3NhZ2VzLCB2YWx1ZSkgfHwgZGVzY2VuZGFudFRvcGljRXhpc3RzKHZhbHVlKSApLFxuICAgICAgICAgICAgaXNUb2tlbiAgICA9ICFpc1RvcGljICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycsXG4gICAgICAgICAgICBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2UsXG4gICAgICAgICAgICBtLCBtZXNzYWdlLCB0O1xuXG4gICAgICAgIGlmIChpc1RvcGljKXtcbiAgICAgICAgICAgIFB1YlN1Yi5jbGVhclN1YnNjcmlwdGlvbnModmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICggbSBpbiBtZXNzYWdlcyApe1xuICAgICAgICAgICAgaWYgKCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoIG1lc3NhZ2VzLCBtICkgKXtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZXNbbV07XG5cbiAgICAgICAgICAgICAgICBpZiAoIGlzVG9rZW4gJiYgbWVzc2FnZVt2YWx1ZV0gKXtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1lc3NhZ2VbdmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdG9rZW5zIGFyZSB1bmlxdWUsIHNvIHdlIGNhbiBqdXN0IHN0b3AgaGVyZVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKCB0IGluIG1lc3NhZ2UgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZSwgdCkgJiYgbWVzc2FnZVt0XSA9PT0gdmFsdWUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtZXNzYWdlW3RdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG59KSk7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYn
2BhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdHJldHVybiBtb2R1bGU7XG59OyIsImNvbnN0IERpYWRhb1V0aWxzID0ge1xuICAgIC8vIFNldHVwXG4gICAgaW5pdCgpIHtcbiAgICAgICAgdmFyIGpRID0galF1ZXJ5Lm5vQ29uZmxpY3QoKTtcblxuICAgICAgICB0aGlzLm9uUmVzaXplKCk7XG4gICAgICAgIHRoaXMuc2V0RGV2aWNlVHlwZSh3aW5kb3cuZ2V0V2luZG93V2lkdGgoKSk7XG5cbiAgICAgICAgalEod2luZG93KS50cmlnZ2VyKCdyZXNpemUnKTtcbiAgICB9LFxuXG4gICAgYWRkTGVhZGluZ1plcm8obnVtYmVyKSB7XG4gICAgICAgIGlmIChwYXJzZUludChudW1iZXIsIDEwKSA8IDEwKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBgMCR7bnVtYmVyfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9LFxuXG4gICAgLy8gQWN0aW9ucyBvbiB3aW5kb3cgcmVzaXplXG4gICAgb25SZXNpemUoKSB7XG4gICAgICAgIHZhciBqUSA9IGpRdWVyeS5ub0NvbmZsaWN0KCk7XG5cbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBvbGRXaWR0aDtcbiAgICAgICAgbGV0IG9sZEhlaWdodDtcblxuICAgICAgICBqUSh3aW5kb3cpLnJlc2l6ZVRocm90dGxlKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgICBjb25zdCAkd2luZG93ID0galEodGhpcyk7XG4gICAgICAgICAgICBjb25zdCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5nZXRXaW5kb3dXaWR0aCgpO1xuICAgICAgICAgICAgY29uc3Qgd2luZG93SGVpZ2h0ID0gd2luZG93LmdldFdpbmRvd0hlaWdodCgpO1xuXG4gICAgICAgICAgICBjb25zdCByYXRpbyA9IE1hdGguZmxvb3Iod2luZG93V2lkdGggLyB3aW5kb3dIZWlnaHQpO1xuICAgICAgICAgICAgbGV0IG9yaWVudGF0aW9uID0gJ2xhbmRzY2FwZSc7XG4gICAgICAgICAgICBpZiAocmF0aW8gPCAxKSB7XG4gICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPSAncG9ydHJhaXQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IG9yaWVudGF0aW9uQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKENvbmZpZy5vcmllbnRhdGlvbiAhPT0gb3JpZW50YXRpb24pIHtcbiAgICAgICAgICAgICAgICBvcmllbnRhdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIENvbmZpZy5vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5zZXREZXZpY2VUeXBlKHdpbmRvd1dpZHRoKTtcbiAgICAgICAgICAgIGlmIChvbGRXaWR0aCAhPT0gd2luZG93V2lkdGggfHwgb2xkSGVpZ2h0ICE9PSB3aW5kb3dIZWlnaHRcbiAgICAgICAgICAgICAgICB8fCAodHlwZW9mIHAgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwLmZvcmNlICE9PSAndW5kZWZpbmVkJyAmJiBwLmZvcmNlID09PSB0cnVlKSkge1xuICAgICAgICAgICAgICAgIFB1YlN1Yi5wdWJsaXNoKENvbmZpZy5ldmVudHMud2luZG93LnJlc2l6ZSwge3dpbmRvd1dpZHRoLCB3aW5kb3dIZWlnaHQsIG9yaWVudGF0aW9uQ2hhbmdlZCwgcmF0aW99KTtcbiAgICAgICAgICAgICAgICBvbGRXaWR0aCA9IHdpbmRvd1dpZHRoO1xuICAgICAgICAgICAgICAgIG9sZEhlaWdodCA9IHdpbmRvd0hlaWdodDtcbiAgICAgICAgICAgICAgICBvbGRIZWlnaHQgPSB3aW5kb3dIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBmb3JtYXREYXRlKGZvcm1hdCwgc2VwYXJhdG9yLCBkYXRlKSB7XG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnZGQtbW0teXknO1xuICAgICAgICBmb3JtYXQgPSBmb3JtYXQuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0W2ldKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgICAgICBmb3JtYXRbaV0gPSBkYXRlLmdldERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgICAgICBmb3JtYXRbaV0gPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdFtpXSA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyc2VJbnQoZm9ybWF0W2ldLCAxMCkgPCAxMCkge1xuICAgICAgICAgICAgICAgIGZvcm1hdFtpXSA9IGAwJHtmb3JtYXRbaV19YDtcbiAgICAgICAgICAgI
2H1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0LmpvaW4oc2VwYXJhdG9yKTtcbiAgICB9LFxuXG4gICAgZ2V0U2Nyb2xsYmFyV2lkdGgoKSB7XG4gICAgICAgIGNvbnN0IG91dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgb3V0ZXIuc3R5bGUud2lkdGggPSAnMTAwcHgnO1xuICAgICAgICBvdXRlci5zdHlsZS5tc092ZXJmbG93U3R5bGUgPSAnc2Nyb2xsYmFyJzsgLy8gbmVlZGVkIGZvciBXaW5KUyBhcHBzXG5cbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlcik7XG5cbiAgICAgICAgY29uc3Qgd2lkdGhOb1Njcm9sbCA9IG91dGVyLm9mZnNldFdpZHRoO1xuICAgICAgICAvLyBmb3JjZSBzY3JvbGxiYXJzXG4gICAgICAgIG91dGVyLnN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG5cbiAgICAgICAgLy8gYWRkIGlubmVyZGl2XG4gICAgICAgIGNvbnN0IGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGlubmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XG5cbiAgICAgICAgY29uc3Qgd2lkdGhXaXRoU2Nyb2xsID0gaW5uZXIub2Zmc2V0V2lkdGg7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGRpdnNcbiAgICAgICAgb3V0ZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvdXRlcik7XG5cbiAgICAgICAgLy8gc3RvcmVzIHZhbHVlXG4gICAgICAgIENvbmZpZy5zY3JvbGxiYXJXaWR0aCA9IHdpZHRoTm9TY3JvbGwgLSB3aWR0aFdpdGhTY3JvbGw7XG5cbiAgICAgICAgcmV0dXJuIENvbmZpZy5zY3JvbGxiYXJXaWR0aDtcbiAgICB9LFxuXG4gICAgc2V0RGV2aWNlVHlwZSh3aW5kb3dXaWR0aCkge1xuICAgICAgICBDb25maWcuZGV2aWNlVHlwZSA9ICdzbWFsbCc7XG4gICAgICAgIGlmICh3aW5kb3dXaWR0aCA+IENvbmZpZy5ncmlkQnJlYWtQb2ludC50YWJsZXQpIHtcbiAgICAgICAgICAgIENvbmZpZy5kZXZpY2VUeXBlID0gJ2xhcmdlJztcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3dXaWR0aCA+IENvbmZpZy5ncmlkQnJlYWtQb2ludC5tb2JpbGUpIHtcbiAgICAgICAgICAgIENvbmZpZy5kZXZpY2VUeXBlID0gJ21lZGl1bSc7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgbGF6eUxvYWQoJHNlbGVjdG9yKSB7XG4gICAgICAgIHZhciBqUSA9IGpRdWVyeS5ub0NvbmZsaWN0KCk7XG5cbiAgICAgICAgY29uc3QgbGF6eU9mZnNldCA9IENvbmZpZy5sYXp5TG9hZC5vZmZzZXQgfHwgNTAwO1xuICAgICAgICAkc2VsZWN0b3IuaW1hZ2VzTG9hZGVkKHtiYWNrZ3JvdW5kOiB0cnVlfSwgKCkgPT4ge1xuICAgICAgICAgICAgJHNlbGVjdG9yLnVudmVpbChsYXp5T2Zmc2V0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgJHRoaXMgPSBqUSh0aGlzKTtcbiAgICAgICAgICAgICAgICBpZiAoJHRoaXMuaXMoJ2ltZycpKSB7XG4gICAgICAgICAgICAgICAgICAgICR0aGlzLnByZXYoKS5jc3Moe1widG9wXCI6IGpRKHRoaXMpLmhlaWdodCgpIC8gMiArIFwicHhcIn0pO1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy5sb2FkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLmFkZENsYXNzKCdsb2FkZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFB1YlN1Yi5wdWJsaXNoKCdicy5zY3JvbGwucmVmcmVzaCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuc2libGluZ3MoJy5sYXp5LWxvYWRpbmctaWNvbi1pbWcnKS5mYWRlT3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUSh0aGlzKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy5pbWFnZXNMb2FkZWQoe2JhY2tncm91bmQ6IHRydWV9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5hZGRDbGFzcygnbG9hZGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBQdWJTdWIucHVibGlzaCgnYnMuc2Nyb2xsLnJlZnJlc2gnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBzZXRDb29raWUoY25hbWUsIGN2YWx1ZSwgZXhkYXlzKSB7XG4gICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBkLnNldFRpbWUoZC5nZXRUaW1lKCkgKyAoZXhkYXlzICogMjQgKiA2MCAqIDYwICogMTAwMCkpO1xuICAgICAgICBjb25zdCBleHBpcmVzID0gJ2V4cGlyZXM9JyArIGQudG9VVENTdHJpbmcoKTtcbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gY25hbWUgKyAnPScgKyBjdmFsdWUgKyAnOycgKyBleHBpcmVzICsgJztwYXRoPS8nO1xuICAgIH0sXG5cbiAgICBnZXRDb29raWUoY25hbWUpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGNuYW1lICsgJz0nO1xuICAgICAgICBjb25zdCBkZWNvZGVkQ29va2llID0gZGVjb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LmNvb2tpZSk7XG4gICAgICAgIGNvbnN0IGNhID0gZGVjb2RlZENvb2tpZS5zcGxpdCgnOycpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgYyA9IGNhW2ldO1xuICAgICAgICAgICAgd2hpbGUgKGMuY2hhckF0KDApID09PSAnICcpIHtcbiAgICAgICAgICAgICAgICBjID0gYy5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYy5pbmRleE9mKG5hbWUpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMuc3Vic3RyaW5nKG5hbWUubGVuZ3RoLCBjLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH0sXG5cbiAgICBzZXRCb2R5U2Nyb2xsVG9wKCkge1xuICAgICAgICB2Y
2XIgalEgPSBqUXVlcnkubm9Db25mbGljdCgpO1xuXG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IGpRKHdpbmRvdykuc2Nyb2xsVG9wKCk7XG4gICAgICAgIGNvbnN0IGJvZHlTdHlsZSA9IGRvY3VtZW50LmJvZHkuc3R5bGU7XG4gICAgICAgIGJvZHlTdHlsZS5zZXRQcm9wZXJ0eSgnLS1zY3JvbGxUb3AnLCBzY3JvbGxUb3ApO1xuICAgIH0sXG5cbiAgICBnb1RvQm9keVNjcm9sbFRvcCgpIHtcbiAgICAgICAgdmFyIGpRID0galF1ZXJ5Lm5vQ29uZmxpY3QoKTtcblxuICAgICAgICBpZiAodHlwZW9mIENvbmZpZy5zbW9vdGhTY3JvbGxJbnN0YW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHNtb290aFNjcm9sbCA9IENvbmZpZy5zbW9vdGhTY3JvbGxJbnN0YW5jZTtcbiAgICAgICAgICAgIHNtb290aFNjcm9sbC5zY3JvbGxUbyh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKCctLXNjcm9sbFRvcCcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGpRKHdpbmRvdykuc2Nyb2xsVG9wKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmdldFByb3BlcnR5VmFsdWUoJy0tc2Nyb2xsVG9wJykpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldFBlcmNlbnRhZ2VPZldpZG93SGVpZ2h0KHBlcmNlbnRhZ2UpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gKHdpbmRvdy5nZXRXaW5kb3dIZWlnaHQoKSAqIHBlcmNlbnRhZ2UpIC8gMTAwO1xuXG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwocGFyc2VGbG9hdChyZXN1bHQpKTtcbiAgICB9LFxuXG4gICAgbm9ybWFsaXplV2hlZWxEZWx0YShlKSB7XG4gICAgICAgIGlmIChlLmRldGFpbCkge1xuICAgICAgICAgICAgaWYgKGUud2hlZWxEZWx0YSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZS53aGVlbERlbHRhIC8gZS5kZXRhaWwgLyA0MCAqIChlLmRldGFpbCA+IDAgPyAxIDogLTEpOyAvLyBPcGVyYVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiAtZS5kZXRhaWwgLyAzOyAvLyBGaXJlZm94XG4gICAgICAgIH0gZWxzZSBpZiAoZS53aGVlbERlbHRhKSB7XG4gICAgICAgICAgICByZXR1cm4gZS53aGVlbERlbHRhIC8gMTIwOyAvLyBJRSxTYWZhcmksQ2hyb21lXG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3Igd2hlbiBzY3JvbGwgZXZlbnQgaXMgZmlyZWRcbiAgICAgICAgY29uc3Qgc3QgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgaWYgKHN0ID4gdGhpcy5sYXN0U2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAvLyBkb3duc2Nyb2xsIGNvZGVcbiAgICAgICAgICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IHN0IDw9IDAgPyAwIDogc3Q7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cHNjcm9sbCBjb2RlXG4gICAgICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IHN0IDw9IDAgPyAwIDogc3Q7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH0sXG59O1xualF1ZXJ5LmZuLnJldmVyc2UgPSBbXS5yZXZlcnNlO1xuXG4vKipcbiAqIFJldHVybnMgZWxlbWVudCB2YWx1ZSwgZXhjbHVkaW5nIGV4Y2x1ZGVkIG9wdGlvbnMgYW5kIHZhbHVlcyBiZWxvdyBtaW5pbXVtIGFuZCBncmVhdGVyIHRoYW4gbWF4aW11bVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG4oZnVuY3Rpb24oICQgKSB7XG4gICAgdmFyIGpRID0galF1ZXJ5Lm5vQ29uZmxpY3QoKTtcblxuICAgIGpRLnByb3RvdHlwZS5nZXRFbGVtZW50QnlBdHRyaWJ1dGVWYWx1ZSA9IGZ1bmN0aW9uIChhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBqUSh0aGlzKS5maWx0ZXIoKGksIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXRlbVthdHRyaWJ1dGVdLnRvU3RyaW5nKCkgPT09IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZUludChpdGVtW2F0dHJpYnV0ZV0sIDEwKSA9PT0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pWzBdO1xuICAgIH07XG59KSggalF1ZXJ5ICk7XG5cbndpbmRvdy5nZXRXaW5kb3dIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O1xuICAgIHJldHVybiBoZWlnaHQ7XG59O1xuXG53aW5kb3cuZ2V0V2luZG93V2lkdGggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHdpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XG4gICAgcmV0dXJuIHdpZHRoO1xufTtcblxud2luZG93Lm5hdmlnYXRvci5zYXlzd2hvID0gKGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGxldCB0ZW0gPSAnJztcbiAgICBsZXQgTSA9IHVhLm1hdGNoKC8ob3BlcmF8Y2hyb21lfHNhZmFyaXxmaXJlZm94fG1zaWV8dHJpZGVudCg/PVxcLykpXFwvP1xccyooXFxkKykvaSkgfHwgW107XG4gICAgaWYgKC90cmlkZW50L2kudGVzdChNWzFdKSkge1xuICAgICAgICB0ZW0gPSAvXFxicnZbIDpdKyhcXGQrKS9nLmV4ZWModWEpIHx8IFtdO1xuICAgICAgICByZXR1cm4gYElFICR7dGVtWzFdIHx8ICcnfWA7XG4gICAgfVxuICAgIGlmIChNWzFdID09PSAnQ2hyb21lJykge1xuICAgICAgICB0ZW0gPSB1YS5tYXRjaCgvXFxiKE9QUnxFZGdlKVxcLyhcXGQrKS8pO1xuICAgICAgICBpZiAodGVtICE9IG51bGwpIHJldHVybi
2B0ZW0uc2xpY2UoMSkuam9pbignICcpLnJlcGxhY2UoJ09QUicsICdPcGVyYScpO1xuICAgIH1cbiAgICBNID0gTVsyXSA/IFtNWzFdLCBNWzJdXSA6IFt3aW5kb3cubmF2aWdhdG9yLmFwcE5hbWUsIHdpbmRvdy5uYXZpZ2F0b3IuYXBwVmVyc2lvbiwgJy0/J107XG4gICAgaWYgKCh0ZW0gPSB1YS5tYXRjaCgvdmVyc2lvblxcLyhcXGQrKS9pKSkgIT0gbnVsbCkgTS5zcGxpY2UoMSwgMSwgdGVtWzFdKTtcbiAgICByZXR1cm4gTS5qb2luKCcgJyk7XG59KCkpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuY29uc3QgZGVib3VuY2UgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgIGxldCBkO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBlID0gdGhpcywgZiA9IGFyZ3VtZW50cztcbiAgICAgICAgY2xlYXJUaW1lb3V0KGQpLCBkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkID0gbnVsbCwgYyB8fCBhLmFwcGx5KGUsIGYpO1xuICAgICAgICB9LCBiKSwgYyAmJiAhZCAmJiBhLmFwcGx5KGUsIGYpO1xuICAgIH07XG59O1xuXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgdGhyZXNoaG9sZCwgc2NvcGUpIHtcbiAgICB0aHJlc2hob2xkIHx8ICh0aHJlc2hob2xkID0gMjUwKTtcbiAgICB2YXIgbGFzdCxcbiAgICAgICAgZGVmZXJUaW1lcjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29udGV4dCA9IHNjb3BlIHx8IHRoaXM7XG5cbiAgICAgICAgdmFyIG5vdyA9ICtuZXcgRGF0ZSxcbiAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGlmIChsYXN0ICYmIG5vdyA8IGxhc3QgKyB0aHJlc2hob2xkKSB7XG4gICAgICAgICAgICAvLyBob2xkIG9uIHRvIGl0XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJUaW1lcik7XG4gICAgICAgICAgICBkZWZlclRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGFzdCA9IG5vdztcbiAgICAgICAgICAgICAgICBmbi5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICAgIH0sIHRocmVzaGhvbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGFzdCA9IG5vdztcbiAgICAgICAgICAgIGZuLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuKGZ1bmN0aW9uKCAkICkge1xuICAgIHZhciBqUSA9IGpRdWVyeS5ub0NvbmZsaWN0KCk7XG5cbiAgICBqUS5leHRlbmQoe1xuICAgICAgICByZXBsYWNlVGFnOiBmdW5jdGlvbiAoZWxlbWVudCwgdGFnTmFtZSwgd2l0aERhdGFBbmRFdmVudHMsIGRlZXBXaXRoRGF0YUFuZEV2ZW50cykge1xuICAgICAgICAgICAgdmFyIG5ld1RhZyA9IGpRKFwiPFwiICsgdGFnTmFtZSArIFwiPlwiKVswXTtcbiAgICAgICAgICAgIC8vIEZyb20gW1N0YWNrb3ZlcmZsb3c6IENvcHkgYWxsIEF0dHJpYnV0ZXNdKGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzY3NTM0ODYvMjA5NjcyOSlcbiAgICAgICAgICAgIGpRLmVhY2goZWxlbWVudC5hdHRyaWJ1dGVzLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBuZXdUYWcuc2V0QXR0cmlidXRlKHRoaXMubmFtZSwgdGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGpRKGVsZW1lbnQpLmNoaWxkcmVuKCkuY2xvbmUod2l0aERhdGFBbmRFdmVudHMsIGRlZXBXaXRoRGF0YUFuZEV2ZW50cykuYXBwZW5kVG8obmV3VGFnKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdUYWc7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGpRLmZuLmV4dGVuZCh7XG4gICAgICAgIHJlcGxhY2VUYWc6IGZ1bmN0aW9uICh0YWdOYW1lLCB3aXRoRGF0YUFuZEV2ZW50cywgZGVlcFdpdGhEYXRhQW5kRXZlbnRzKSB7XG4gICAgICAgICAgICAvLyBVc2UgbWFwIHRvIHJlY29uc3RydWN0IHRoZSBzZWxlY3RvciB3aXRoIG5ld2x5IGNyZWF0ZWQgZWxlbWVudHNcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnJlcGxhY2VUYWcodGhpcywgdGFnTmFtZSwgd2l0aERhdGFBbmRFdmVudHMsIGRlZXBXaXRoRGF0YUFuZEV2ZW50cyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfSk7XG59KSggalF1ZXJ5ICk7XG5cbi8qIGVzbGludC1lbmFibGUgKi9cblxuZXhwb3J0IGRlZmF1bHQgRGlhZGFvVXRpbHM7XG5leHBvcnQgeyBkZWJvdW5jZSwgdGhyb3R0bGUgfTtcbiIsImltcG9ydCBQdWJTdWIgZnJvbSAncHVic3ViLWpzJztcbmltcG9ydCBEaWFkYW9VdGlscyBmcm9tICcuL3V0aWxzLmpzJztcblxuLyoqXG4gKiBSZXRhcmdldGluZ1xuICpcbiAqL1xuXG5jbGFzcyBEaWFkYW9SZXRhcmdldGluZyB7XG5cbiAgICBjb25zdHJ1Y3RvciggcGFyYW1zICkge1xuICAgICAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIGRpYWRhb1BhZ2VJZCA9IG51bGw7XG4gICAgICAgIGlmKCB3aW5kb3dbJ2RpYWRhb19wYWdlX2lkJ10gIT09IHVuZGVmaW5lZCApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpYWRhb1BhZ2VJZCA9IHdpbmRvd1snZGlhZGFvX3BhZ2VfaWQnXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWdlSWQgPSBkaWFkYW9QYWdlSWQ7XG4gICAgICAgIFxuICAgICAgICB0aGF0LmluaXQoKTtcbiAgICB9XG5cbiAgICBpbml0KCkgXG4gICAge1xuICAgICAgICB2Y
2XIgalEgPSBqUXVlcnkubm9Db25mbGljdCgpO1xuICAgICAgICB2YXIgZGVidWcgPSBmYWxzZTtcblxuICAgICAgICB2YXIgdF9jaGVja0Nvb2tpZXMgPSB0cnVlO1xuICAgICAgICBpZiggXG4gICAgICAgICAgICB3aW5kb3dbJ2RpYWRhb19yZXRhcmdldGluZ19jaGVja19jb29raWVzJ10gIT09IHVuZGVmaW5lZCBcbiAgICAgICAgICAgICYmIHdpbmRvd1snZGlhZGFvX3JldGFyZ2V0aW5nX2NoZWNrX2Nvb2tpZXMnXSAhPT0gXCJcIiBcbiAgICAgICAgICAgICYmIHBhcnNlSW50KCB3aW5kb3dbJ2RpYWRhb19yZXRhcmdldGluZ19jaGVja19jb29raWVzJ10gKSA9PSAwIFxuICAgICAgICApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRfY2hlY2tDb29raWVzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGVja19jb29raWVzID0gdF9jaGVja0Nvb2tpZXM7XG4gICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgICAgICBjb25zdCAkcGFuZWxSZXRhcmdldGluZyA9IGpRKCdib2R5JykuZmluZCgnLnBhbmVsLXJldGFyZ2V0aW5nJyk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb25maWcgPSB7XG4gICAgICAgICAgICB0aW1lb3V0OiAyMDAwMCwgLy8gbXNcbiAgICAgICAgICAgIGNvb2tpZUR1cmF0aW9uOiAxLCAvLyBkYXlzLFxuICAgICAgICAgICAgdGltZW91dEJlZm9yZUFwcGVhcjogMzAwLCAvLyBtc1xuICAgICAgICAgICAgaW5hY3Rpdml0eVRpbWVvdXRCZWZvcmVBcHBlYXI6IDIwMDAwLCAvLyBtc1xuICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgb3BlbjogXCJcIixcbiAgICAgICAgICAgICAgICBjbG9zZTogXCJcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoYXQuY29uZmlnID0galEuZXh0ZW5kKHRydWUsIHt9LCBkZWZhdWx0Q29uZmlnLCBDb25maWcucmV0YXJnZXRpbmcpO1xuXG4gICAgICAgIGlmKCBkZWJ1ZyApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCBcIi0+IHJldGFyZ2V0aW5nIGRlYnVnIDFcIiApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coIFwiY29uZmlnXCIsIHRoYXQuY29uZmlnICk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyggXCJwYW5lbCByZXRhcmdldGluZ1wiLCAkcGFuZWxSZXRhcmdldGluZy5sZW5ndGggKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCBcImNoZWNrIGNvb2tpZXNcIiwgY2hlY2tfY29va2llcyApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCRwYW5lbFJldGFyZ2V0aW5nLmxlbmd0aCA+IDApIFxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBPbiB2w6lyaWZpZSBzaSBsZSBjb29raWUgcmV0YXJnZXRpbmcgbidleGlzdGUgcGFzXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIURpYWRhb1V0aWxzLmdldENvb2tpZSgncmV0YXJnZXRpbmcnKSBcbiAgICAgICAgICAgICAgICB8fCAhY2hlY2tfY29va2llc1xuICAgICAgICAgICAgKSBcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiggZGVidWcgKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIFwiLT4gcmV0YXJnZXRpbmcgZGVidWcgMlwiICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEF1IGJvdXQgZGUgWCBzZWNvbmRlcyBzdXIgbGEgcGFnZSBzaSBsZSBjdXJzZXVyIGRlIGxhIHNvdXJpc1xuICAgICAgICAgICAgICAgICAgICAvLyBzb3J0IGR1IHNpdGUgcGFyIGxlIGhhdXQgbGUgcGFuZWwgUmV0YXJnZXRpbmcgcydvdXZyZVxuICAgICAgICAgICAgICAgICAgICBqUSgnYm9keSwgaHRtbCcpLm9uKCdtb3VzZW1vdmUucmV0YXJnZXRpbmcgdG91Y2htb3ZlLnJldGFyZ2V0aW5nJywgdGhhdC5oYW5kbGVNb3VzZU1vdmUuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKCBkZWJ1ZyApXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCBcIi0+IHJldGFyZ2V0aW5nIGRlYnVnIDNcIiApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgdGhhdC5jb25maWcudGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICB0aGF0LmhhbmRsZUNsb3NlUmV0YXJnZXRpbmcoKTtcbiAgICAgICAgICAgICAgICB0aGF0LnRvZ2dsZVNoYXJlQnV0dG9ucygpO1xuICAgICAgICAgICAgICAgIHRoYXQuZ2V0SW5wdXRGaWVsZFBsYWNlaG9sZGVyKCk7XG4gICAgICAgICAgICB9IFxuICAgICAgICAgICAgZWxzZSBcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiggZGVidWcgKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIFwiLT4gcmV0YXJnZXRpbmcgZGVidWcgNFwiICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJHBhbmVsUmV0YXJnZXRpbmcucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVNb3VzZU1vdmUoZXZlbnQpIHtcbiAgICAgICAgdmFyIGpRID0galF1ZXJ5Lm5vQ29uZmxpY3QoKTtcbiAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgICAgIGNvbnN0ICRodG1sID0galEoJ2h0bWwnKTtcblxuICAgICAgICBpZiAodGhhdC50aW1lb3V0QmVmb3JlQXBwZWFyVG9rZW4pIHtcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhhdC50aW1lb3V0QmVmb3JlQXBwZWFyVG9rZW4pO1xuICAgICAgICAgICAgdGhhdC50aW1lb3V0QmVmb3JlQXBwZWFyVG9rZW4gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoYXQuaW5hY3Rpdml0eVRpbWVvdXRCZWZvcmVBcHBlYXJUb2tlbikge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGF0LmluYWN0aXZpdHlUaW1lb3V0QmVmb3JlQXBwZWFyVG9rZW4pO1xuICAgICAgICAgICAgdGhhdC5pbmFjdGl2aXR5VGltZW91dEJlZm9yZUFwcGVhclRva2VuID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50OyAvLyBJRS1pc21cblxuICAgICAgICAvLyBJZiBtb3VzZSBpcyBvbiB0aGUgdG9wIG9mIHdpbmRvd1xuICAgICAgICBpZiAoZXZlbnQucGFnZVkgLSAkaHRtbC5zY3JvbGxUb3AoKSA8IDEwKSB7XG4gICAgICAgICAgICB0aGF0LnRpbWVvdXRCZWZvcmVBcHBlYXJUb2tlbiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgI
2HRoYXQuc2hvd1BhbmVsKCk7XG4gICAgICAgICAgICB9LCB0aGF0LmNvbmZpZy50aW1lb3V0QmVmb3JlQXBwZWFyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGF0LnRpbWVvdXRCZWZvcmVBcHBlYXJUb2tlbik7XG4gICAgICAgICAgICB0aGF0LnRpbWVvdXRCZWZvcmVBcHBlYXJUb2tlbiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoYXQuc2hvd1BhbmVsKCk7XG4gICAgICAgICAgICB9LCB0aGF0LmNvbmZpZy5pbmFjdGl2aXR5VGltZW91dEJlZm9yZUFwcGVhcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93UGFuZWwoKSB7XG4gICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgalEgPSBqUXVlcnkubm9Db25mbGljdCgpO1xuXG4gICAgICAgIGNvbnN0ICRyZXRhcmdldGluZ1BhbmVsID0galEoJy5wYW5lbC1yZXRhcmdldGluZycpO1xuICAgICAgICBjb25zdCAkYm9keSA9IGpRKCdib2R5Jyk7XG4gICAgICAgIGNvbnN0ICRodG1sID0galEoJ2h0bWwnKTtcblxuICAgICAgICBqUSgnYm9keSwgaHRtbCcpLm9mZignbW91c2Vtb3ZlLnJldGFyZ2V0aW5nIHRvdWNobW92ZS5yZXRhcmdldGluZycpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXRCZWZvcmVBcHBlYXJUb2tlbikge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0QmVmb3JlQXBwZWFyVG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMudGltZW91dEJlZm9yZUFwcGVhclRva2VuID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmluYWN0aXZpdHlUaW1lb3V0QmVmb3JlQXBwZWFyVG9rZW4pIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuaW5hY3Rpdml0eVRpbWVvdXRCZWZvcmVBcHBlYXJUb2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmFjdGl2aXR5VGltZW91dEJlZm9yZUFwcGVhclRva2VuID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG5cbiAgICAgICAgRGlhZGFvVXRpbHMuc2V0Q29va2llKCdyZXRhcmdldGluZycsIHRydWUsIHRoYXQuY29uZmlnLmNvb2tpZUR1cmF0aW9uKTtcbiAgICAgICAgaWYoJHJldGFyZ2V0aW5nUGFuZWwuZmluZCgnLm1lZGlhcy1zbGlkZXNob3cnKS5sZW5ndGggPiAwKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyRyZXRhcmdldGluZ1BhbmVsLmZpbmQoJy5tZWRpYXMtc2xpZGVzaG93Jykuc2xpY2soKTsgLy8gJ3Jlc2l6ZSdcbiAgICAgICAgICAgIHZhciB0X3N3aXBlclBhcmVudCA9IGpRKGRvY3VtZW50KS5maW5kKCcuc3dpcGVyLWNvbnRhaW5lci5yZXRhcmdldGluZ1N3aXBlcicpLnBhcmVudCgpO1xuICAgICAgICAgICAgdmFyIHRfcmV0YXJnZXRpbmdQYW5lbFN3aXBlciA9IG5ldyBTd2lwZXIoXCIuc3dpcGVyLWNvbnRhaW5lci5yZXRhcmdldGluZ1N3aXBlclwiLCB7XG4gICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgICAgICAgICAgICBjZW50ZXJlZFNsaWRlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiAwLFxuICAgICAgICAgICAgICAgIGxvb3A6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVmZmVjdDogXCJzbGlkZVwiLFxuICAgICAgICAgICAgICAgIGNsaWNrYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaW11bGF0ZVRvdWNoOiB0cnVlLFxuICAgICAgICAgICAgICAgIHByZXZlbnRDbGlja3NQcm9wYWdhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgcHJldmVudENsaWNrczogZmFsc2UsXG4gICAgICAgICAgICAgICAgYXV0b3BsYXk6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsYXk6IDYwMDAsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVPbkludGVyYWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBuZXh0RWw6IFwiLnN3aXBlci1idXR0b24tbmV4dC5yZXRhcmdldGluZ1N3aXBlclwiLFxuICAgICAgICAgICAgICAgICAgICBwcmV2RWw6IFwiLnN3aXBlci1idXR0b24tcHJldi5yZXRhcmdldGluZ1N3aXBlclwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBlbDogJy5zd2lwZXItcGFnaW5hdGlvbi5yZXRhcmdldGluZ1N3aXBlcicsXG4gICAgICAgICAgICAgICAgICAgIGNsaWNrYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICB0X3N3aXBlclBhcmVudC5hZGRDbGFzcygnaXMtaW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJJbml0OiBmdW5jdGlvbihlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0X3N3aXBlclBhcmVudC5maW5kKCcuc3dpcGVyLXNsaWRlLnN3aXBlci1zbGlkZS1pbml0JykucmVtb3ZlQ2xhc3MoJ3N3aXBlci1zbGlkZS1pbml0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9XG5cbiAgICAgICAgJHJldGFyZ2V0aW5nUGFuZWwuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICAkYm9keS5hZGRDbGFzcygncmV0YXJnZXRpbmctLW9wZW5lZCcpO1xuICAgICAgICAkaHRtbC5hZGRDbGFzcygncmV0YXJnZXRpbmctLW9wZW5lZCcpO1xuICAgICAgICAkYm9keS5hZGRDbGFzcygnZGlhZGFvLXBhbmVsLXBsdWdpbi1vcGVuZWQnKTtcbiAgICAgICAgJGh0bWwuYWRkQ2xhc3MoJ2RpYWRhby1wYW5lbC1wbHVnaW4tb3BlbmVkJyk7XG5cbiAgICAgICAgaWYgKGpRKCcucGFuZWwtcmV0YXJnZXRpbmdfX292ZXJsYXknKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICRib2R5LmFwcGVuZCgnPGRpdiBjbGFzcz1cInBhbmVsLXJldGFyZ2V0aW5nX19vdmVybGF5XCI+PC9kaXY+Jyk7XG4gICAgICAgI
2H1cbiAgICAgICAgLy9QdWJTdWIucHVibGlzaChDb25maWcucmV0YXJnZXRpbmcuZXZlbnRzLm9wZW4pO1xuICAgIH1cblxuICAgIGhhbmRsZUNsb3NlUmV0YXJnZXRpbmcoKSB7XG4gICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgalEgPSBqUXVlcnkubm9Db25mbGljdCgpO1xuXG4gICAgICAgIGNvbnN0ICRib2R5ID0galEoJ2JvZHknKTtcbiAgICAgICAgJGJvZHkub24oJ2NsaWNrLnJldGFyZ2V0aW5nJywgJy5wYW5lbC1yZXRhcmdldGluZ19fb3ZlcmxheScsIHRoYXQuY2xvc2VSZXRhcmdldGluZyk7XG4gICAgICAgICRib2R5Lm9uKCdjbGljay5yZXRhcmdldGluZycsICcucGFuZWwtcmV0YXJnZXRpbmdfX2Nsb3NlJywgdGhhdC5jbG9zZVJldGFyZ2V0aW5nKTtcbiAgICB9XG5cbiAgICBjbG9zZVJldGFyZ2V0aW5nKCkge1xuICAgICAgICB2YXIgalEgPSBqUXVlcnkubm9Db25mbGljdCgpO1xuXG4gICAgICAgIGNvbnN0ICRvdmVybGF5ID0galEoJy5wYW5lbC1yZXRhcmdldGluZ19fb3ZlcmxheScpO1xuICAgICAgICBjb25zdCAkYm9keSA9IGpRKCdib2R5Jyk7XG4gICAgICAgIGNvbnN0ICRodG1sID0galEoJ2h0bWwnKTtcbiAgICAgICAgY29uc3QgJHJldGFyZ2V0aW5nUGFuZWwgPSBqUSgnLnBhbmVsLXJldGFyZ2V0aW5nJyk7XG5cbiAgICAgICAgJG92ZXJsYXkucmVtb3ZlKCk7XG4gICAgICAgICRib2R5LnJlbW92ZUNsYXNzKCdyZXRhcmdldGluZy0tb3BlbmVkJyk7XG4gICAgICAgICRodG1sLnJlbW92ZUNsYXNzKCdyZXRhcmdldGluZy0tb3BlbmVkJyk7XG4gICAgICAgICRib2R5LnJlbW92ZUNsYXNzKCdkaWFkYW8tcGFuZWwtcGx1Z2luLW9wZW5lZCcpO1xuICAgICAgICAkaHRtbC5yZW1vdmVDbGFzcygnZGlhZGFvLXBhbmVsLXBsdWdpbi1vcGVuZWQnKTtcblxuICAgICAgICAkcmV0YXJnZXRpbmdQYW5lbC5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgIC8vUHViU3ViLnB1Ymxpc2goQ29uZmlnLnJldGFyZ2V0aW5nLmV2ZW50cy5jbG9zZSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2hhcmVCdXR0b25zKCkge1xuICAgICAgICB2Y
2XIgalEgPSBqUXVlcnkubm9Db25mbGljdCgpO1xuXG4gICAgICAgIGNvbnN0ICRzb2NpYWxCdXR0b24gPSBqUSgnLnNvY2lhbC1idXR0b24nKTtcbiAgICAgICAgY29uc3QgJHJldGFyZ2V0aW5nU2hhcmUgPSBqUSgnLnBhbmVsLXJldGFyZ2V0aW5nX19zaGFyZV9fc29jaWFscycpO1xuICAgICAgICBjb25zdCAkY2xvc2VTb2NpYWwgPSBqUSgnLmNsb3NlLXNvY2lhbHMnKTtcbiAgICAgICAgaWYgKCRzb2NpYWxCdXR0b24pIHtcbiAgICAgICAgICAgICRzb2NpYWxCdXR0b24uY2xpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICRyZXRhcmdldGluZ1NoYXJlLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCRjbG9zZVNvY2lhbCkge1xuICAgICAgICAgICAgJGNsb3NlU29jaWFsLmNsaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICAkcmV0YXJnZXRpbmdTaGFyZS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldElucHV0RmllbGRQbGFjZWhvbGRlciAoKSB7XG4gICAgICAgIHZhciBqUSA9IGpRdWVyeS5ub0NvbmZsaWN0KCk7XG4gICAgICAgIGNvbnN0ICRlbWFpbENvbnRhaW5lciA9IGpRKCcucGFuZWwtcmV0YXJnZXRpbmdfX2Zvb3RlciBmb3JtLm5ld3NsZXR0ZXIgLmZvcm0tZWxlbWVudC5lbWFpbC1jb250YWluZXInKTtcblxuICAgICAgICBpZigkZW1haWxDb250YWluZXIpe1xuICAgICAgICAgICAgY29uc3QgJGxhYmVsID0gJGVtYWlsQ29udGFpbmVyLmZpbmQoJ2xhYmVsJyk7XG4gICAgICAgICAgICBjb25zdCAkaW5wdXQgPSAkZW1haWxDb250YWluZXIuZmluZCgnaW5wdXQnKTtcblxuICAgICAgICAgICAgaWYoJGxhYmVsKXtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbFRleHQgPSAkbGFiZWwudGV4dCgpO1xuICAgICAgICAgICAgICAgICRsYWJlbC5yZW1vdmUoKTtcblxuICAgICAgICAgICAgICAgIGlmKCRpbnB1dCl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gJGlucHV0LmF0dHIoJ3BsYWNlaG9sZG
2VyJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYoIXBsYWNlaG9sZGVyKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC5hdHRyKCdwbGFjZWhvbGRlcicsIGxhYmVsVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpYWRhb1JldGFyZ2V0aW5nO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsInRoaXMiLCJQdWJTdWIiLCJtZXNzYWdlcyIsImxhc3RVaWQiLCJjYWxsU3Vic2NyaWJlcldpdGhEZWxheWVkRXhjZXB0aW9ucyIsInN1YnNjcmliZXIiLCJtZXNzYWdlIiwiZGF0YSIsImV4Iiwic2V0VGltZW91dCIsInRocm93RXhjZXB0aW9uIiwiY2FsbFN1YnNjcmliZXJXaXRoSW1tZWRpYXRlRXhjZXB0aW9ucyIsImRlbGl2ZXJNZXNzYWdlIiwib3JpZ2luYWxNZXNzYWdlIiwibWF0Y2hlZE1lc3NhZ2UiLCJpbW1lZGlhdGVFeGNlcHRpb25zIiwicyIsInN1YnNjcmliZXJzIiwiY2FsbFN1YnNjcmliZXIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJoYXNEaXJlY3RTdWJzY3JpYmVyc0ZvciIsInRvcGljIiwiU3RyaW5nIiwiQm9vbGVhbiIsIm9iaiIsImtleSIsImhhc0tleXMiLCJwdWJsaXNoIiwic3luYyIsImRlbGl2ZXIiLCJwb3NpdGlvbiIsImxhc3RJbmRleE9mIiwic3Vic3RyIiwiY3JlYXRlRGVsaXZlcnlGdW5jdGlvbiIsInRvU3RyaW5nIiwiZm91bmQiLCJtZXNzYWdlSGFzU3Vic2NyaWJlcnMiLCJwdWJsaXNoU3luYyIsInN1YnNjcmliZSIsImZ1bmMiLCJ0b2tlbiIsInN1YnNjcmliZUFsbCIsInN1YnNjcmliZU9uY2UiLCJ1bnN1YnNjcmliZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiY2xlYXJBbGxTdWJzY3JpcHRpb25zIiwiY2xlYXJTdWJzY3JpcHRpb25zIiwibSIsImluZGV4T2YiLCJjb3VudFN1YnNjcmlwdGlvbnMiLCJjb3VudCIsImdldFN1YnNjcmlwdGlvbnMiLCJsaXN0IiwicHVzaCIsInZhbHVlIiwidCIsImlzVG9waWMiLCJkZXNjZW5kYW50VG9waWNFeGlzdHMiLCJpc1Rva2VuIiwiaXNGdW5jdGlvbiIsInJlc3VsdCIsInVuZGVmaW5lZCIsIndpbmRvdyIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsImlkIiwibG9hZGVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImQiLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInByb3AiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJubWQiLCJwYXRocyIsImNoaWxkcmVuIiwiRGlhZGFvVXRpbHMiLCJpbml0IiwialEiLCJqUXVlcnkiLCJub0NvbmZsaWN0Iiwib25SZXNpemUiLCJzZXREZXZpY2VUeXBlIiwiZ2V0V2luZG93V2lkdGgiLCJ0cmlnZ2VyIiwiYWRkTGVhZGluZ1plcm8iLCJudW1iZXIiLCJwYXJzZUludCIsInNlbGYiLCJvbGRXaWR0aCIsIm9sZEhlaWdodCIsInJlc2l6ZVRocm90dGxlIiwicCIsIndpbmRvd1dpZHRoIiwid2luZG93SGVpZ2h0IiwiZ2V0V2luZG93SGVpZ2h0IiwicmF0aW8iLCJNYXRoIiwiZmxvb3IiLCJvcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uQ2hhbmdlZCIsIkNvbmZpZyIsImZvcmNlIiwiZXZlbnRzIiwicmVzaXplIiwiZm9ybWF0RGF0ZSIsImZvcm1hdCIsInNlcGFyYXRvciIsImRhdGUiLCJzcGxpdCIsImkiLCJsZW5ndGgiLCJnZXREYXRlIiwiZ2V0TW9udGgiLCJnZXRGdWxsWWVhciIsImpvaW4iLCJnZXRTY3JvbGxiYXJXaWR0aCIsIm91dGVyIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJ2aXNpYmlsaXR5Iiwid2lkdGgiLCJtc092ZXJmbG93U3R5bGUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aE5vU2Nyb2xsIiwib2Zmc2V0V2lkdGgiLCJvdmVyZmxvdyIsImlubmVyIiwid2lkdGhXaXRoU2Nyb2xsIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic2Nyb2xsYmFyV2lkdGgiLCJkZXZpY2VUeXBlIiwiZ3JpZEJyZWFrUG9pbnQiLCJ0YWJsZXQiLCJtb2JpbGUiLCJsYXp5TG9hZCIsIiRzZWxlY3RvciIsImxhenlPZmZzZXQiLCJvZmZzZXQiLCJpbWFnZXNMb2FkZWQiLCJiYWNrZ3JvdW5kIiwidW52ZWlsIiwiJHRoaXMiLCJpcyIsInByZXYiLCJjc3MiLCJoZWlnaHQiLCJsb2FkIiwiYWRkQ2xhc3MiLCJzaWJsaW5ncyIsImZhZGVPdXQiLCJyZW1vdmUiLCJzZXRDb29raWUiLCJjbmFtZSIsImN2YWx1ZSIsImV4ZGF5cyIsIkRhdGUiLCJzZXRUaW1lIiwiZ2V0VGltZSIsImV4cGlyZXMiLCJ0b1VUQ1N0cmluZyIsImNvb2tpZSIsImdldENvb2tpZSIsIm5hbWUiLCJjYSIsImRlY29kZVVSSUNvbXBvbmVudCIsImMiLCJjaGFyQXQiLCJzdWJzdHJpbmciLCJzZXRCb2R5U2Nyb2xsVG9wIiwic2Nyb2xsVG9wIiwic2V0UHJvcGVydHkiLCJnb1RvQm9keVNjcm9sbFRvcCIsInNtb290aFNjcm9sbEluc3RhbmNlIiwic2Nyb2xsVG8iLCJnZXRDb21wdXRlZFN0eWxlIiwiZ2V0UHJvcGVydHlWYWx1ZSIsImdldFBlcmNlbnRhZ2VPZldpZG93SGVpZ2h0IiwicGVyY2VudGFnZSIsImNlaWwiLCJwYXJzZUZsb2F0Iiwibm9ybWFsaXplV2hlZWxEZWx0YSIsImUiLCJkZXRhaWwiLCJ3aGVlbERlbHRhIiwic3QiLCJwYWdlWU9mZnNldCIsImRvY3VtZW50RWxlbWVudCIsImxhc3RTY3JvbGxUb3AiLCJmbiIsInJldmVyc2UiLCJnZXRFbGVtZW50QnlBdHRyaWJ1dGVWYWx1ZSIsImF0dHJpYnV0ZSIsImZpbHRlciIsIml0ZW0iLCJpbm5lckhlaWdodCIsImNsaWVudEhlaWdodCIsImlubmVyV2lkdGgiLCJjbGllbnRXaWR0aCIsIm5hdmlnYXRvciIsInNheXN3aG8iLCJ1YSIsInVzZXJBZ2VudCIsInRlbSIsIk0iLCJtYXRjaCIsInRlc3QiLCJleGVjIiwic2xpY2UiLCJyZXBsYWNlIiwiYXBwTmFtZSIsImFwcFZlcnNpb24iLCJzcGxpY2UiLCIkIiwiZXh0ZW5kIiwicmVwbGFjZVRhZyIsImVsZW1lbnQiLCJ0YWdOYW1lIiwid2l0aERhdGFBbmRFdmVudHMiLCJkZWVwV2l0aERhdGFBbmRFdmVudHMiLCJuZXdUYWciLCJlYWNoIiwiYXR0cmlidXRlcyIsInNldEF0dHJpYnV0ZSIsImNsb25lIiwiYXBwZW5kVG8iLCJtYXAiLCJjb25zdHJ1Y3RvciIsInBhcmFtcyIsInRfY2hlY2tDb29raWVzIiwiY2hlY2tfY29va2llcyIsInRoYXQiLCIkcGFuZWxSZXRhcmdldGluZyIsImZpbmQiLCJjb25maWciLCJ0aW1lb3V0IiwiY29va2llRHVyYXRpb24iLCJ0aW1lb3V0QmVmb3JlQXBwZWFyIiwiaW5hY3Rpdml0eVRpbWVvdXRCZWZvcmVBcHBlYXIiLCJvcGVuIiwiY2xvc2UiLCJyZXRhcmdldGluZyIsIm9uIiwiaGFuZGxlTW91c2VNb3ZlIiwiYmluZCIsImhhbmRsZUNsb3NlUmV0YXJnZXRpbmciLCJ0b2dnbGVTaGFyZUJ1dHRvbnMiLCJ
2nZXRJbnB1dEZpZWxkUGxhY2Vob2xkZXIiLCJldmVudCIsIiRodG1sIiwidGltZW91dEJlZm9yZUFwcGVhclRva2VuIiwiY2xlYXJUaW1lb3V0IiwiaW5hY3Rpdml0eVRpbWVvdXRCZWZvcmVBcHBlYXJUb2tlbiIsInBhZ2VZIiwic2hvd1BhbmVsIiwiJHJldGFyZ2V0aW5nUGFuZWwiLCIkYm9keSIsIm9mZiIsInRfc3dpcGVyUGFyZW50IiwicGFyZW50IiwiU3dpcGVyIiwic2xpZGVzUGVyVmlldyIsImNlbnRlcmVkU2xpZGVzIiwic3BhY2VCZXR3ZWVuIiwibG9vcCIsImVmZmVjdCIsImNsaWNrYWJsZSIsInNpbXVsYXRlVG91Y2giLCJwcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb24iLCJwcmV2ZW50Q2xpY2tzIiwiYXV0b3BsYXkiLCJkZWxheSIsImRpc2FibGVPbkludGVyYWN0aW9uIiwibmF2aWdhdGlvbiIsIm5leHRFbCIsInByZXZFbCIsInBhZ2luYXRpb24iLCJlbCIsImFmdGVySW5pdCIsInJlbW92ZUNsYXNzIiwiYXBwZW5kIiwiY2xvc2VSZXRhcmdldGluZyIsIiRvdmVybGF5IiwiJHNvY2lhbEJ1dHRvbiIsIiRyZXRhcmdldGluZ1NoYXJlIiwiJGNsb3NlU29jaWFsIiwiY2xpY2siLCJ0b2dnbGVDbGFzcyIsIiRlbWFpbENvbnRhaW5lciIsIiRsYWJlbCIsIiRpbnB1dCIsImxhYmVsVGV4dCIsInRleHQiLCJhdHRyIl0sInNvdXJjZVJvb3QiOiIifQ==
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.