HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/slenders/slenders.nl/wwwroot/js/site/app.js
(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{0:function(e,t,i){i("pjEF"),i("mf46"),e.exports=i("o6KM")},"2QcG":function(e,t,i){function n(e){var t=this;return this.sliderId="",this.definedPreviousNext=!0,this.autoSlider=!1,this.sliderInterval=4e3,this.navigationButtons="",this.dots="",this.captions="",this.slideQuery="",this.setSliderProjectorId=function(e){return this.sliderId=e,this},this.setDefinedPreviousNext=function(e){return this.definedPreviousNext=e,this},this.setAutoSlider=function(e){return this.autoSlider=e,this},this.setSliderInterval=function(e){return this.sliderInterval=e,this},this.setSlideQuery=function(e){return this.slideQuery=e,this},this.setNavigationButtons=function(e){return this.navigationButtons=e,this},this.setDots=function(e){return this.dots=e,this},this.setCaptions=function(e){return this.captions=e,this},this.getSliderProjectorId=function(){return this.sliderId},this.getDefinedPreviousNext=function(){return this.definedPreviousNext},this.getAutoSlider=function(){return this.autoSlider},this.getSliderInterval=function(){return this.sliderInterval},this.getSlideQuery=function(){return this.slideQuery},this.getNavigationButtons=function(){return this.navigationButtons},this.getDots=function(){return this.dots},this.getCaptions=function(){return this.captions},this.prepareParameters=function(){return{sliderId:t.getSliderProjectorId(),definedPreviousNext:t.getDefinedPreviousNext(),autoSlider:t.getAutoSlider(),sliderInterval:t.getSliderInterval(),navigationButtons:t.getNavigationButtons(),dots:t.getDots(),captions:t.getCaptions(),slideQuery:t.getSlideQuery()}},this.fill=function(){for(var i=Object.keys(e),n=i.length,o=0;o<n;o++){var r=i[o];t[r]=e[r]}},this.fill(),{sliderId:t.setSliderProjectorId,definedPreviousNext:t.setDefinedPreviousNext,autoSlider:t.setAutoSlider,sliderInterval:t.setSliderInterval,navigationButtons:t.setNavigationButtons,dots:t.setDots,captions:t.setCaptions,slideQuery:t.setSlideQuery,prepareParameters:t.prepareParameters}}function o(e){var t=this;this.sliderObject="",this.activeSlideId=0,this.previousSlideId=0,this.nextSlideId=0,this.availableSlides=1,this.slides=[],this.autoSliderInterval=null,this.settings={},this.init=function(){this.settings=e,this.sliderObject=document.getElementById(this.settings.sliderId),this.slides=document.querySelectorAll(this.settings.slideQuery),this.availableSlides=this.slides.length,this.activeSlideId=0,t.settings.definedPreviousNext&&this.setPreviousAndNextSlide(),this.setSlide();var i=new Hammer(this.sliderObject);if(i.on("swipeleft",(function(){t.resetAutoSlider(),t.nextSlide(),t.setSlide()})),i.on("swiperight",(function(){t.resetAutoSlider(),t.previousSlide(),t.setSlide()})),""!==this.settings.navigationButtons)for(var n=document.querySelectorAll(this.settings.navigationButtons),o=n.length,r=0;r<o;r++){n[r].addEventListener("click",(function(){t.clickNavigationButton(this)}))}if(""!==this.settings.dots)for(var s=document.querySelectorAll(this.settings.dots),a=s.length,l=0;l<a;l++){s[l].addEventListener("click",(function(){t.clickDot(this)}))}t.autoSlider()},this.autoSlider=function(){null!==this.autoSliderInterval&&clearInterval(this.autoSliderInterval),this.settings.autoSlider&&Number.isInteger(this.settings.sliderInterval)&&(this.autoSliderInterval=setInterval((function(){t.nextSlide(),t.setSlide()}),this.settings.sliderInterval))},this.resetAutoSlider=t.autoSlider,this.nextSlide=function(){this.activeSlideId++,this.activeSlideId>=this.availableSlides&&(this.activeSlideId=0),t.settings.definedPreviousNext&&this.setPreviousAndNextSlide()},this.previousSlide=function(){this.activeSlideId--,this.activeSlideId<0&&(this.activeSlideId=this.availableSlides-1),t.settings.definedPreviousNext&&this.setPreviousAndNextSlide()},this.setPreviousAndNextSlide=function(){this.nextSlideId=this.activeSlideId+1,this.nextSlideId>=this.availableSlides&&(this.nextSlideId=0),this.previousSlideId=this.activeSlideId-1,this.previousSlideId<0&&(this.previousSlideId=this.availableSlides-1)},this.setSlide=function(){for(var e=t.slides.length,i=0;i<e;i++){var n=t.slides[i],o=parseInt(n.getAttribute("data-order"));o!==t.activeSlideId?n.classList.remove("is-active"):n.classList.add("is-active"),t.settings.definedPreviousNext&&(o!==t.previousSlideId?n.classList.remove("previous"):n.classList.add("previous"),o!==t.nextSlideId?n.classList.remove("next"):n.classList.add("next"))}""!==t.settings.dots&&t.setActiveDot(),""!==t.settings.captions&&t.setActiveCaption()},this.clickNavigationButton=function(e){t.activeSlideId=parseInt(e.getAttribute("data-order")),t.settings.definedPreviousNext&&t.setPreviousAndNextSlide(),t.setSlide();var i=document.querySelector(t.settings.navigationButtons+".next"),n=document.querySelector(t.settings.navigationButtons+".previous");i.setAttribute("data-order",t.nextSlideId),n.setAttribute("data-order",t.previousSlideId),t.resetAutoSlider()},this.clickDot=function(e){t.activeSlideId=parseInt(e.getAttribute("data-order")),t.setSlide(),t.resetAutoSlider()},this.setActiveDot=function(){for(var e=document.querySelectorAll(this.settings.dots),i=e.length,n=0;n<i;n++){var o=e[n];dotOrder=parseInt(o.getAttribute("data-order")),dotOrder!==t.activeSlideId?o.classList.remove("is-active"):o.classList.add("is-active")}},this.setActiveCaption=function(){for(var e=document.querySelectorAll(this.settings.captions),i=e.length,n=0;n<i;n++){var o=e[n];captionOrder=parseInt(o.getAttribute("data-order")),captionOrder!==t.activeSlideId?o.classList.remove("is-active"):o.classList.add("is-active")}}}i("yLV6"),function(){for(var e=[],t=document.querySelectorAll(".js-slide-projector"),i=t.length,r=0;r<i;r++){var s=t[r],a=s.getAttribute("id"),l=s.getAttribute("data-auto-slide");if(null!==a){var c=new n({sliderId:a,slideQuery:"#"+a+" .js-slide-projector-slide",navigationButtons:"#"+a+" .js-slide-projector-button",autoSlider:l,sliderInterval:6e3});e.push(new o(c.prepareParameters()).init())}else console.log("An image slider has no id...")}}()},"7L8a":function(e,t){var i={inputFields:null,init:function(){i.inputFields=document.querySelectorAll("form input, form textarea");for(var e=i.inputFields.length,t=0;t<e;t++){var n=i.inputFields[t],o=n.getAttribute("id");if(isset(o)){var r=document.querySelector('form label[for="'+o+'"]');isset(r)&&i.addEventListenersToInput(n)}}},addEventListenersToInput:function(e){parentElement=e.parentNode,parentElement.classList.add("filled"),i.removeFocus(e),e.addEventListener("focus",(function(){for(var t=i.inputFields.length,n=0;n<t;n++){var o=i.inputFields[n];o===e?i.addFocus(this):i.removeFocus(o)}})),e.addEventListener("focusout",(function(){i.removeFocus(this)}))},addFocus:function(e){if(isset(e)){var t=e.getAttribute("id");parentElement=e.parentNode,parentElement.classList.add("focused"),parentElement.classList.add("filled");var i=document.querySelector("form .error-message#"+t+"-error");isset(i)&&i.classList.add("fade-out")}},removeFocus:function(e){if(isset(e)){var t=e.value;parentElement=e.parentNode,parentElement.classList.remove("focused"),isset(t)&&""!==t||parentElement.classList.remove("filled")}}};i.init()},"8oxB":function(e,t){var i,n,o=e.exports={};function r(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(e){if(i===setTimeout)return setTimeout(e,0);if((i===r||!i)&&setTimeout)return i=setTimeout,setTimeout(e,0);try{return i(e,0)}catch(t){try{return i.call(null,e,0)}catch(t){return i.call(this,e,0)}}}!function(){try{i="function"==typeof setTimeout?setTimeout:r}catch(e){i=r}try{n="function"==typeof clearTimeout?clearTimeout:s}catch(e){n=s}}();var l,c=[],u=!1,d=-1;function f(){u&&l&&(u=!1,l.length?c=l.concat(c):d=-1,c.length&&h())}function h(){if(!u){var e=a(f);u=!0;for(var t=c.length;t;){for(l=c,c=[];++d<t;)l&&l[d].run();d=-1,t=c.length}l=null,u=!1,function(e){if(n===clearTimeout)return clearTimeout(e);if((n===s||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(e);try{n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}(e)}}function v(e,t){this.fun=e,this.array=t}function p(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)t[i-1]=arguments[i];c.push(new v(e,t)),1!==c.length||u||a(h)},v.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=p,o.addListener=p,o.once=p,o.off=p,o.removeListener=p,o.removeAllListeners=p,o.emit=p,o.prependListener=p,o.prependOnceListener=p,o.listeners=function(e){return[]},o.binding=function(e){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(e){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},"9RzG":function(e,t){function i(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var n=function(){for(var e=document.querySelectorAll(".js-usp-impressions"),t=e.length,i=0;i<t;i++){var n=e[i];new o(n).autoSlide()}},o=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.slider=t,this.slides=this.slider.querySelectorAll(".js-usp-impression"),this.currentSlide=0,this.slideInterval=4e3}var t,n,o;return t=e,(n=[{key:"autoSlide",value:function(){var e=this;setTimeout((function(){e.nextSlide(),e.autoSlide()}),this.slideInterval)}},{key:"nextSlide",value:function(){this.currentSlide++,this.currentSlide>=this.slides.length&&(this.currentSlide=0);for(var e=0;e<this.slides.length;e++){var t=this.slides[e];t.getAttribute("data-usp")==this.currentSlide?t.classList.add("is-active"):t.classList.remove("is-active")}}}])&&i(t.prototype,n),o&&i(t,o),e}();n()},Coew:function(e,t,i){function n(e){var t=this;this.clientReviewObject="",this.activeSlideId=0,this.previousSlideId=0,this.nextSlideId=0,this.availableSlides=1,this.slides=[],this.settings={},this.init=function(){this.settings=e,this.clientReviewObject=document.getElementById(this.settings.clientReviewId),this.slides=document.querySelectorAll(this.settings.slideQuery),this.availableSlides=this.slides.length,this.activeSlideId=0,this.setSlide();var i=new Hammer(this.clientReviewObject);if(i.on("swipeleft",(function(){t.nextSlide(),t.setSlide()})),i.on("swiperight",(function(){t.previousSlide(),t.setSlide()})),""!==this.settings.navigationButtons)for(var n=document.querySelectorAll(this.settings.navigationButtons),o=n.length,r=0;r<o;r++){n[r].addEventListener("click",(function(){t.clickNavigationButton(this)}))}},this.nextSlide=function(){this.activeSlideId++,this.activeSlideId>=this.availableSlides&&(this.activeSlideId=0),t.settings.definedPreviousNext&&this.setPreviousAndNextSlide()},this.previousSlide=function(){this.activeSlideId--,this.activeSlideId<0&&(this.activeSlideId=this.availableSlides-1),t.settings.definedPreviousNext&&this.setPreviousAndNextSlide()},this.setPreviousAndNextSlide=function(){this.nextSlideId=this.activeSlideId+1,this.nextSlideId>=this.availableSlides&&(this.nextSlideId=0),this.previousSlideId=this.activeSlideId-1,this.previousSlideId<0&&(this.previousSlideId=this.availableSlides-1)},this.setSlide=function(){for(var e=t.slides.length,i=0;i<e;i++){var n=t.slides[i],o=parseInt(n.getAttribute("data-order"));o!==t.activeSlideId?n.classList.remove("is-active"):n.classList.add("is-active"),t.settings.definedPreviousNext&&(o!==t.previousSlideId?n.classList.remove("previous"):n.classList.add("previous"),o!==t.nextSlideId?n.classList.remove("next"):n.classList.add("next"))}},this.clickNavigationButton=function(e){t.activeSlideId=parseInt(e.getAttribute("data-order")),t.setPreviousAndNextSlide(),t.setSlide();var i=document.querySelector(t.settings.navigationButtons+".next"),n=document.querySelector(t.settings.navigationButtons+".previous");i.setAttribute("data-order",t.nextSlideId),n.setAttribute("data-order",t.previousSlideId)}}i("yLV6"),function(){for(var e=[],t=document.querySelectorAll(".js-client-reviews"),i=t.length,o=0;o<i;o++){var r=t[o].getAttribute("id");null!==r?e.push(new n({clientReviewId:r,slideQuery:"#"+r+" .js-client-review-slide",navigationButtons:"#"+r+" .js-client-reviews-button"}).init()):console.log("An image slider has no id...")}}()},K6O8:function(e,t){var i={youtubeClass:".js-youtube-player",players:[],init:function(){for(var e=document.querySelectorAll(i.youtubeClass),t=e.length,n=0;n<t;n++){var o=e[n];if(null!==o.getAttribute("id")){var r={id:o.getAttribute("id"),link:o.getAttribute("data-youtube-link"),autoPlay:parseInt(o.getAttribute("data-auto-play"))};i.players.push(r)}else console.log("Element not include because there isn't a id on the player"),console.log(o)}t>=1&&i.initYoutube()},initYoutube:function(){"undefined"==typeof YT||void 0===YT.Player?(window.onYouTubePlayerAPIReady=function(){i.loadPlayers()},getScript("https://www.youtube.com/iframe_api")):i.loadPlayers()},loadPlayers:function(){for(var e=[],t=i.players.length,n=0;n<t;n++){var o=i.players[n];o.player=new YT.Player(o.id,{height:200,width:200,videoId:o.link,host:"https://www.youtube-nocookie.com",playerVars:{modestbranding:0,rel:0,disablekb:1,autoplay:o.autoPlay},events:{onStateChange:i.onStateChange}}),e[o.id]=o}i.players=e},onReady:function(e){var t=e.target.getIframe().getAttribute("id");i.players[t].player},onStateChange:function(e){var t=e.target.getIframe().getAttribute("id"),n=i.players[t].player;e.data;e.data===YT.PlayerState.ENDED&&n.playVideo()}};i.init()},KnFR:function(e,t,i){function n(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}i("yLV6");var o=function(){for(var e=document.querySelectorAll(".js-image-rack"),t=e.length,i=0;i<t;i++)new r(e[i])},r=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e);var i=this;this.rack=t,this.slideArea=this.rack.querySelector(".js-image-rack-slide"),this.items=this.rack.querySelectorAll(".js-image-rack-item"),this.direction=this.rack.getAttribute("data-direction"),this.imageLoaded=!1,this.currentItem=0,this.maxItemPosition=this.items.length,this.maxTranslated=0,this.steps=[],this.previousButton=this.rack.querySelector(".js-image-rack-button.previous"),this.nextButton=this.rack.querySelector(".js-image-rack-button.next"),this.calculateSteps(),isset(this.previousButton)&&this.previousButton.addEventListener("click",(function(){i.previousItem(),i.setImageRack()})),isset(this.nextButton)&&this.nextButton.addEventListener("click",(function(){i.nextItem(),i.setImageRack()}));var n=new Hammer(this.rack);n.on("swipeleft",(function(){console.log("swipe Left"),i.swipeLeft(),i.setImageRack()})),n.on("swiperight",(function(){console.log("swipe Rith"),i.swipeRight(),i.setImageRack()})),this.debounceTimeout=null,this.waitDebounce=500,window.addEventListener("resize",(function(){isset(i.debounceTimeout)&&clearTimeout(i.debounceTimeout),i.debounceTimeout=setTimeout((function(){i.calculateSteps(),i.setImageRack()}),i.waitDebounce)}))}var t,i,o;return t=e,(i=[{key:"calculateSteps",value:function(){this.steps=[];var e,t,i=window.bodyOffset(this.rack);e="ltr"===this.direction?document.body.offsetWidth-i.left:i.left+this.rack.offsetWidth,t="ltr"===this.direction?this.items[this.items.length-1].offsetLeft+this.items[this.items.length-1].offsetWidth:-1*(this.items[this.items.length-1].offsetLeft-this.rack.offsetWidth),this.maxTranslated=t-e;for(var n=!1,o=!0,r=0;r<this.items.length;r++){var s=this.items[r];0===s.offsetWidth&&(o=!1);var a=void 0,l=void 0;"ltr"===this.direction?(a=s.offsetLeft+s.offsetWidth,l=s.offsetLeft):(a=-1*(-1*this.rack.offsetWidth+(s.offsetLeft+s.offsetWidth)),l=-1*(-1*this.rack.offsetWidth+s.offsetLeft)),this.steps.push({offsetFromLeftSide:l,offsetFromRightSide:a}),("ltr"===this.direction?a:l)>this.maxTranslated&&!n&&(this.maxItemPosition=r+1,n=!0)}o&&(this.imageLoaded=!0),console.log(this.imageLoaded)}},{key:"nextItem",value:function(){this.currentItem++,this.currentItem>=this.maxItemPosition&&(this.currentItem=this.maxItemPosition)}},{key:"previousItem",value:function(){this.currentItem--,this.currentItem<0&&(this.currentItem=0)}},{key:"swipeLeft",value:function(){"ltr"===this.direction?this.nextItem():this.previousItem()}},{key:"swipeRight",value:function(){"ltr"===this.direction?this.previousItem():this.nextItem()}},{key:"setImageRack",value:function(){var e;this.imageLoaded||(console.warn("ImageRack: Recalculated because images weren't loaded yet."),this.calculateSteps()),e="ltr"===this.direction?"-"+this.steps[this.currentItem].offsetFromLeftSide:this.steps[this.currentItem].offsetFromRightSide,this.slideArea.style.transform="translateX("+e+"px)"}}])&&n(t.prototype,i),o&&n(t,o),e}();o()},NzwN:function(e,t){var i={offset:60,duration:1400,body:null,start:0,change:0,currentTime:0,allowAnimation:!1,scrollToAnimation:null,easing:"easeInOutQuad",init:function(){for(var e=document.querySelectorAll(".js-scroll-to-target"),t=e.length,n=0;n<t;n++){e[n].addEventListener("click",(function(e){i.prepareScrollTo(this.getAttribute("href")),e.preventDefault()}))}},prepareScrollTo:function(e){e=e.substr(e.indexOf("#")+1);var t=document.getElementById(e).getBoundingClientRect();i.body=document.documentElement,i.start=Math.max(i.body.scrollTop,document.body.scrollTop,window.pageYOffset),i.change=t.top+i.start-i.start-i.offset,i.startTime="now"in window.performance?performance.now():(new Date).getTime(),i.allowAnimation=!0,scrollToAnimation=requestAnimationFrame(i.animateScroll),window.addEventListener("mousedown",i.abortScrollAnimation),window.addEventListener("wheel",i.abortScrollAnimation),window.addEventListener("DOMMouseScroll",i.abortScrollAnimation),window.addEventListener("mousewheel",i.abortScrollAnimation),window.addEventListener("keyup",i.abortScrollAnimation),window.addEventListener("touchmove",i.abortScrollAnimation)},animateScroll:function(e){var t=Math.min(1,(e-i.startTime)/i.duration);t<0&&(t=0),t=EasingFunctions[i.easing](t);var n=i.start+i.change*t;i.body.scrollTop=n,0===i.body.scrollTop&&(document.body.scrollTop=n),t<1&&i.allowAnimation&&(scrollToAnimation=requestAnimationFrame(i.animateScroll))},abortScrollAnimation:function(e){i.allowAnimation=!1,cancelAnimationFrame(i.scrollToAnimation)}};i.init()},QZD3:function(e,t,i){(function(n,o){var r,s,a;function l(e){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}a=function(){"use strict";function e(e){var t=this.constructor;return this.then((function(i){return t.resolve(e()).then((function(){return i}))}),(function(i){return t.resolve(e()).then((function(){return t.reject(i)}))}))}var t=setTimeout;function i(){}function r(e){if(!(this instanceof r))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],f(e,this)}function s(e,t){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,r._immediateFn((function(){var i=1===e._state?t.onFulfilled:t.onRejected;if(null!==i){var n;try{n=i(e._value)}catch(e){return void c(t.promise,e)}a(t.promise,n)}else(1===e._state?a:c)(t.promise,e._value)}))):e._deferreds.push(t)}function a(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"===l(t)||"function"==typeof t)){var i=t.then;if(t instanceof r)return e._state=3,e._value=t,void u(e);if("function"==typeof i)return void f((n=i,o=t,function(){n.apply(o,arguments)}),e)}e._state=1,e._value=t,u(e)}catch(t){c(e,t)}var n,o}function c(e,t){e._state=2,e._value=t,u(e)}function u(e){2===e._state&&0===e._deferreds.length&&r._immediateFn((function(){e._handled||r._unhandledRejectionFn(e._value)}));for(var t=0,i=e._deferreds.length;t<i;t++)s(e,e._deferreds[t]);e._deferreds=null}function d(e,t,i){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=i}function f(e,t){var i=!1;try{e((function(e){i||(i=!0,a(t,e))}),(function(e){i||(i=!0,c(t,e))}))}catch(e){if(i)return;i=!0,c(t,e)}}r.prototype.catch=function(e){return this.then(null,e)},r.prototype.then=function(e,t){var n=new this.constructor(i);return s(this,new d(e,t,n)),n},r.prototype.finally=e,r.all=function(e){return new r((function(t,i){if(!e||void 0===e.length)throw new TypeError("Promise.all accepts an array");var n=Array.prototype.slice.call(e);if(0===n.length)return t([]);var o=n.length;function r(e,s){try{if(s&&("object"===l(s)||"function"==typeof s)){var a=s.then;if("function"==typeof a)return void a.call(s,(function(t){r(e,t)}),i)}n[e]=s,0==--o&&t(n)}catch(e){i(e)}}for(var s=0;s<n.length;s++)r(s,n[s])}))},r.resolve=function(e){return e&&"object"===l(e)&&e.constructor===r?e:new r((function(t){t(e)}))},r.reject=function(e){return new r((function(t,i){i(e)}))},r.race=function(e){return new r((function(t,i){for(var n=0,o=e.length;n<o;n++)e[n].then(t,i)}))},r._immediateFn="function"==typeof n&&function(e){n(e)}||function(e){t(e,0)},r._unhandledRejectionFn=function(e){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var h=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==o)return o;throw new Error("unable to locate global object")}();"Promise"in h?h.Promise.prototype.finally||(h.Promise.prototype.finally=e):h.Promise=r},"object"===l(t)&&void 0!==e?a():void 0===(s="function"==typeof(r=a)?r.call(t,i,t,e):r)||(e.exports=s)}).call(this,i("URgk").setImmediate,i("yLpj"))},Qr8U:function(e,t){Number.isInteger=Number.isInteger||function(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}},URgk:function(e,t,i){(function(e){var n=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function r(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new r(o.call(setTimeout,n,arguments),clearTimeout)},t.setInterval=function(){return new r(o.call(setInterval,n,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},r.prototype.unref=r.prototype.ref=function(){},r.prototype.close=function(){this._clearFn.call(n,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},i("YBdB"),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,i("yLpj"))},YBdB:function(e,t,i){(function(e,t){!function(e,i){"use strict";if(!e.setImmediate){var n,o,r,s,a,l=1,c={},u=!1,d=e.document,f=Object.getPrototypeOf&&Object.getPrototypeOf(e);f=f&&f.setTimeout?f:e,"[object process]"==={}.toString.call(e.process)?n=function(e){t.nextTick((function(){v(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,i=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=i,t}}()?e.MessageChannel?((r=new MessageChannel).port1.onmessage=function(e){v(e.data)},n=function(e){r.port2.postMessage(e)}):d&&"onreadystatechange"in d.createElement("script")?(o=d.documentElement,n=function(e){var t=d.createElement("script");t.onreadystatechange=function(){v(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):n=function(e){setTimeout(v,0,e)}:(s="setImmediate$"+Math.random()+"$",a=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(s)&&v(+t.data.slice(s.length))},e.addEventListener?e.addEventListener("message",a,!1):e.attachEvent("onmessage",a),n=function(t){e.postMessage(s+t,"*")}),f.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),i=0;i<t.length;i++)t[i]=arguments[i+1];var o={callback:e,args:t};return c[l]=o,n(l),l++},f.clearImmediate=h}function h(e){delete c[e]}function v(e){if(u)setTimeout(v,0,e);else{var t=c[e];if(t){u=!0;try{!function(e){var t=e.callback,n=e.args;switch(n.length){case 0:t();break;case 1:t(n[0]);break;case 2:t(n[0],n[1]);break;case 3:t(n[0],n[1],n[2]);break;default:t.apply(i,n)}}(t)}finally{h(e),u=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,i("yLpj"),i("8oxB"))},"YZ/b":function(e,t){var i={navigationNode:null,scrolledLog:0,isOpen:!1,init:function(){var e=document.querySelectorAll(".js-nav-trigger"),t=document.querySelector(".js-close-overlay-nav");if(i.navigationNode=document.querySelector(".js-overlay-nav"),isset(i.navigationNode)){document.addEventListener("keydown",(function(e){"Escape"===e.code&&i.closeNavigation()}));for(var n=0;n<e.length;n++)i.initNavigation(e[n]);t.addEventListener("click",(function(){i.closeNavigation()}))}},initNavigation:function(e){e.addEventListener("click",i.toggleNavigation,!1)},toggleNavigation:function(e){e.preventDefault(),i.scrolled=window.pageYOffset,i.isOpen?i.closeNavigation():i.openNavigation()},openNavigation:function(){i.isOpen=!0,i.scrolled=window.pageYOffset,document.body.classList.add("nav-is-active"),setTimeout((function(){document.body.classList.add("scroll-lock")}),400)},closeNavigation:function(){document.body.classList.remove("scroll-lock"),window.pageYOffset=i.scrolled,document.body.classList.remove("nav-is-active"),i.isOpen=!1}};i.init()},kdf5:function(e,t){var i={map:"",key:"AIzaSyBv6FJHn23Lz3S0j9T1DYWr57zTBU-T0oY",location:{lat:51.2618222,lng:5.5965538},styling:"",init:function(){i.map=document.getElementById("map"),isset(i.map)&&(i.map.hasAttribute("data-google-lat")&&(i.location.lat=parseFloat(i.map.getAttribute("data-google-lat"))),i.map.hasAttribute("data-google-lng")&&(i.location.lng=parseFloat(i.map.getAttribute("data-google-lng"))),i.setCustomStyling(),"undefined"==typeof google||void 0===google.maps?getScript("https://maps.googleapis.com/maps/api/js?key="+i.key,i.drawMap):i.drawMap())},drawMap:function(){var e=new google.maps.Map(i.map,{zoom:11,center:i.location,disableDefaultUI:!0,styles:i.styling});new google.maps.Marker({position:i.location,map:e})},setCustomStyling:function(){i.styling=[{featureType:"poi",elementType:"labels.text.fill",stylers:[{color:"#747474"},{lightness:"23"}]},{featureType:"poi.attraction",elementType:"geometry.fill",stylers:[{color:"#f38eb0"}]},{featureType:"poi.government",elementType:"geometry.fill",stylers:[{color:"#ced7db"}]},{featureType:"poi.medical",elementType:"geometry.fill",stylers:[{color:"#ffa5a8"}]},{featureType:"poi.park",elementType:"geometry.fill",stylers:[{color:"#c7e5c8"}]},{featureType:"poi.place_of_worship",elementType:"geometry.fill",stylers:[{color:"#d6cbc7"}]},{featureType:"poi.school",elementType:"geometry.fill",stylers:[{color:"#c4c9e8"}]},{featureType:"poi.sports_complex",elementType:"geometry.fill",stylers:[{color:"#b1eaf1"}]},{featureType:"road",elementType:"geometry",stylers:[{lightness:"100"}]},{featureType:"road",elementType:"labels",stylers:[{visibility:"off"},{lightness:"100"}]},{featureType:"road.highway",elementType:"geometry.fill",stylers:[{color:"#ffd4a5"}]},{featureType:"road.arterial",elementType:"geometry.fill",stylers:[{color:"#ffe9d2"}]},{featureType:"road.local",elementType:"all",stylers:[{visibility:"simplified"}]},{featureType:"road.local",elementType:"geometry.fill",stylers:[{weight:"3.00"}]},{featureType:"road.local",elementType:"geometry.stroke",stylers:[{weight:"0.30"}]},{featureType:"road.local",elementType:"labels.text",stylers:[{visibility:"on"}]},{featureType:"road.local",elementType:"labels.text.fill",stylers:[{color:"#747474"},{lightness:"36"}]},{featureType:"road.local",elementType:"labels.text.stroke",stylers:[{color:"#e9e5dc"},{lightness:"30"}]},{featureType:"transit.line",elementType:"geometry",stylers:[{visibility:"on"},{lightness:"100"}]},{featureType:"water",elementType:"all",stylers:[{color:"#d2e7f7"}]}]}};i.init()},mBdS:function(e,t){},mf46:function(e,t){},o5AR:function(e,t){var i={bannedVisitor:[],enter:function(){var e=document.querySelectorAll(".js-chocolate-factory");if(isset(e))for(var t=e.length,n=0;n<t;n++){var o=e[n];i._flashTicket(o)}},_flashTicket:function(e){var t=e.querySelector(".js-golden-ticket");isset(t)?t.addEventListener("click",(function(){i.enjoyTheTour(e)})):console.log("To bad, no golden tickets has been found.")},enjoyTheTour:function(e){var t=e.querySelectorAll("input, textarea");if(isset(t)){for(var n={},o=0,r=t.length,s=0;s<r;s++){var a=t[s],l=a.getAttribute("name");i._isVisitorBanned(l)||(n[l]=i._getArrangement(a),o++)}if(0===o)return;i._finishTour(n,e)}else console.log("To bad, no members to visit this factory")},_isVisitorBanned:function(e){return-1!==i.bannedVisitor.indexOf(e)},_getArrangement:function(e){e.nodeName;return e.value},_finishTour:function(e,t){e=i._addWillieWonka(e);try{Ajax.post("/contact/process",e,(function(e){var n=JSON.parse(e.response);switch(e.status){case 200:return i._thanksForVisiting(n.redirectUrl);case 422:return i._giveFeedbackToMembers(n.errors,t)}return i._unknownGapInFactory(t)}))}catch(e){return i._unknownGapInFactory(t)}},_addWillieWonka:function(e){return e._willie="wonka",e},_giveFeedbackToMembers:function(e,t){var n=t.querySelector(".js-error-area");isset(n)&&(n.innerHTML=""),i._clearPreviousMarkedJackets(t),Object.keys(e).forEach((function(o){var r=null,s=null;if("_honey"!==o&&"_secretCode"!==o){var a=t.querySelector("#"+o);r=i._grabVisitorJacket(a),isset(r)&&(s=r.querySelector(".js-form-element-error")),isset(s)&&(s.innerHTML="")}for(var l=e[o],c=l.length,u=0;u<c;u++){var d=l[u];if("_honey"!==o&&"_secretCode"!==o&&(isset(r)&&r.classList.add("has-error"),isset(s))){var f=s.innerHTML;f+="<span>"+capitalizeFirstLetter(d)+"</span>",s.innerHTML=f}if(isset(n)){var h=n.innerHTML;h+="<li>"+capitalizeFirstLetter(d)+"</li>",n.innerHTML=h}}}))},_clearPreviousMarkedJackets:function(e){for(var t=e.querySelectorAll(".has-error"),i=t.length,n=0;n<i;n++)t[n].classList.remove("has-error")},_grabVisitorJacket:function(e){if(!isset(e))return null;currentLayer=e,safetyBreak=0;do{if(safetyBreak++,currentLayer=currentLayer.parentNode,currentLayer.classList.contains("js-form-element"))return currentLayer}while("BODY"!==currentLayer.tagName&&safetyBreak<=10);return null},_thanksForVisiting:function(e){window.location=e},_unknownGapInFactory:function(e){console.log(e),console.log("ChocolateFactory: Unkown Error")}};i.enter()},o6KM:function(e,t){},pjEF:function(e,t,i){i("yLV6"),i("eCb9"),i("mBdS"),i("Qr8U"),i("QZD3"),i("yFlJ"),i("q2ye"),i("o5AR"),i("yQ37"),i("KnFR"),i("7L8a"),i("kdf5"),i("YZ/b"),i("NzwN"),i("2QcG"),i("Coew"),i("9RzG"),i("K6O8")},q2ye:function(e,t){var i={userAgent:"",browserInfo:"",init:function(){i.userAgent=window.navigator.userAgent,i.browserInfo=i.getBrowserInfo(),i.handleIE(),i.handleSafari()},handleIE:function(){var e=i.userAgent.indexOf("MSIE "),t=e>0,n=!!navigator.userAgent.match(/Trident.*rv\:11\./);if(t||n){var o="11";t&&(o=parseInt(i.userAgent.substring(e+5,i.userAgent.indexOf(".",e)))),document.body.classList.add("ie"),document.body.classList.add("v"+o)}},handleSafari:function(){"Safari"===i.browserInfo.name&&i.browserInfo.version<=10&&document.getElementsByTagName("html")[0].classList.add("ie")},getBrowserInfo:function(){var e,t=navigator.userAgent,i=t.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];return/trident/i.test(i[1])?{name:"IE ",version:(e=/\brv[ :]+(\d+)/g.exec(t)||[])[1]||""}:"Chrome"===i[1]&&null!=(e=t.match(/\bOPR\/(\d+)/))?{name:"Opera",version:e[1]}:(i=i[2]?[i[1],i[2]]:[navigator.appName,navigator.appVersion,"-?"],null!=(e=t.match(/version\/(\d+)/i))&&i.splice(1,1,e[1]),{name:i[0],version:i[1]})}};i.init()},yFlJ:function(e,t){window.isset=function(e){return null!=e},window.EasingFunctions={linear:function(e){return e},easeInQuad:function(e){return e*e},easeOutQuad:function(e){return e*(2-e)},easeInOutQuad:function(e){return e<.5?2*e*e:(4-2*e)*e-1},easeInCubic:function(e){return e*e*e},easeOutCubic:function(e){return--e*e*e+1},easeInOutCubic:function(e){return e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1},easeInQuart:function(e){return e*e*e*e},easeOutQuart:function(e){return 1- --e*e*e*e},easeInOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},easeInQuint:function(e){return e*e*e*e*e},easeOutQuint:function(e){return 1+--e*e*e*e*e},easeInOutQuint:function(e){return e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e}},window.getScript=function(e,t){var i=document.createElement("script");i.async=1;var n=document.getElementsByTagName("script"),o=n[n.length-1];i.onload=i.onreadystatechange=function(e,n){(n||!i.readyState||/loaded|complete/.test(i.readyState))&&(i.onload=i.onreadystatechange=null,i=void 0,n||t&&t())},i.src=e,o.parentNode.insertBefore(i,o)},window.debounce=function(e,t,i){var n;return function(){var o=this,r=arguments,s=function(){n=null,i||e.apply(o,r)},a=i&&!n;clearTimeout(n),n=setTimeout(s,t),a&&e.apply(o,r)}},window.Cookie={set:function(e,t,i){var n,o,r,s,a;i?((r=new Date).setTime(r.getTime()+24*i*60*60*1e3),s="; expires="+r.toGMTString()):s="",1===(a=location.host).split(".").length?document.cookie=e+"="+t+s+"; path=/":((o=a.split(".")).shift(),n="."+o.join("."),document.cookie=e+"="+t+s+"; path=/; domain="+n,null!=Cookie.get(e)&&Cookie.get(e)==t||(n="."+a,document.cookie=e+"="+t+s+"; path=/; domain="+n))},get:function(e){for(var t=e+"=",i=document.cookie.split(";"),n=0;n<i.length;n++){for(var o=i[n];" "===o.charAt(0);)o=o.substring(1,o.length);if(0===o.indexOf(t))return o.substring(t.length,o.length)}return null},erase:function(e){Cookie.set(e,"",-1)}},window.number_format=function(e,t,i,n){e=(e+"").replace(/[^0-9+\-Ee.]/g,"");var o=isFinite(+e)?+e:0,r=isFinite(+t)?Math.abs(t):0,s=void 0===n?",":n,a=void 0===i?".":i,l="";return(l=(r?function(e,t){var i=Math.pow(10,t);return""+Math.round(e*i)/i}(o,r):""+Math.round(o)).split("."))[0].length>3&&(l[0]=l[0].replace(/\B(?=(?:\d{3})+(?!\d))/g,s)),(l[1]||"").length<r&&(l[1]=l[1]||"",l[1]+=new Array(r-l[1].length+1).join("0")),l.join(a)},Element.prototype.closest||(Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest=function(e){var t=this;if(!document.documentElement.contains(this))return null;do{if(t.matches(e))return t;t=t.parentElement}while(null!==t);return null}),window.Ajax={get:function(e,t){var i=new XMLHttpRequest,n=document.querySelector('meta[name="csrf-token"]').content;i.open("get",e,!0),i.setRequestHeader("Content-Type","application/json"),i.setRequestHeader("X-CSRF-TOKEN",n),i.setRequestHeader("X-Requested-With","XMLHttpRequest"),i.onreadystatechange=function(){4===i.readyState&&t(i)},i.send()},post:function(e,t,i){var n=new XMLHttpRequest,o=document.querySelector('meta[name="csrf-token"]').content;n.open("post",e,!0),n.setRequestHeader("Content-Type","application/json"),n.setRequestHeader("X-CSRF-TOKEN",o),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.onreadystatechange=function(){4===n.readyState&&i(n)},n.send(JSON.stringify(t))}},window.capitalizeFirstLetter=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},window.snakeToCamel=function(e){return e.replace(/(\-\w)/g,(function(e){return e[1].toUpperCase()}))},window.indexInParent=function(e){for(var t=e.parentNode.childNodes,i=0,n=0;n<t.length;n++){if(t[n]==e)return i;1==t[n].nodeType&&i++}return-1},window.copyToClipboard=function(e){if(e="string"==typeof e?document.querySelector(e):e,navigator.userAgent.match(/ipad|ipod|iphone/i)){var t=e.contentEditable,i=e.readOnly;e.contentEditable=!0,e.readOnly=!0;var n=document.createRange();n.selectNodeContents(e);var o=window.getSelection();o.removeAllRanges(),o.addRange(n),e.setSelectionRange(0,999999),e.contentEditable=t,e.readOnly=i}else e.select();document.execCommand("copy")},window.bodyOffset=function(e){var t=e.getBoundingClientRect(),i=window.pageXOffset||document.documentElement.scrollLeft,n=window.pageYOffset||document.documentElement.scrollTop;return{top:t.top+n,left:t.left+i}}},yLpj:function(e,t){var i;i=function(){return this}();try{i=i||new Function("return this")()}catch(e){"object"==typeof window&&(i=window)}e.exports=i},yQ37:function(e,t){var i={cookieBar:null,cookieOverlay:null,cookieMessage:null,cookieSwitch:null,cookieFadeOutAnimationDuration:400,acceptTracking:!1,init:function(){i.cookieMessage=document.querySelector(".js-cookie-bar, .js-cookie-overlay"),i.cookieBar=document.querySelector(".js-cookie-bar"),isset(i.cookieBar)?i.initCookieBar():(i.cookieOverlay=document.querySelector(".js-cookie-overlay"),isset(i.cookieOverlay)&&i.initCookieOverlay()),isset(i.cookieMessage)&&i.checkForCookieSettings(),i.cookieSwitch=document.querySelector(".js-cookie-switch"),isset(i.cookieSwitch)&&i.initCookieSwitch()},initCookieBar:function(){var e=i.cookieBar.querySelector(".js-disable-cookie-bar");isset(e)&&e.addEventListener("click",i.closeCookieMessage)},initCookieOverlay:function(){var e=i.cookieMessage.querySelector(".js-change-cookies-settings");isset(e)&&e.addEventListener("click",i.openCookieSettings);var t=i.cookieMessage.querySelector(".c-cookie-type__input--tracking");isset(t)&&(!0===t.checked&&(i.acceptTracking=!0),t.addEventListener("change",i.toggleTrackingSetting));var n=i.cookieMessage.querySelector(".js-accept-cookies");isset(n)&&n.addEventListener("click",i.setCookieSettings)},initCookieSwitch:function(){var e=i.cookieSwitch.querySelector(".c-cookie-type__input--tracking");isset(e)&&(!0===e.checked?i.acceptTracking=!0:i.acceptTracking=!1,e.addEventListener("change",i.toggleTrackingSetting));var t=i.cookieSwitch.querySelector(".js-save-cookie-settings");isset(t)&&t.addEventListener("click",(function(){i.cookieFadeOutAnimationDuration=0,i.setCookieSettings()}))},checkForCookieSettings:function(){Cookie.get("cookieMessage")?i.cookieMessage.classList.add("is-accepted"):i.cookieMessage.classList.remove("is-accepted")},closeCookieMessage:function(){Cookie.set("cookieMessage",!0,90),i.cookieMessage.classList.add("fade-out")},openCookieSettings:function(){i.cookieOverlay.querySelector(".js-cookie-settings").classList.remove("is-hidden"),i.cookieOverlay.querySelector(".js-cookie-info").classList.add("is-hidden")},toggleTrackingSetting:function(){i.acceptTracking?i.acceptTracking=!1:i.acceptTracking=!0},setCookieSettings:function(){i.acceptTracking?Cookie.set("trackingCookieAccepted","true",90):Cookie.get("trackingCookieAccepted")&&Cookie.erase("trackingCookieAccepted"),i.closeCookieMessage(),setTimeout((function(){location.reload()}),i.cookieFadeOutAnimationDuration)}};i.init()}},[[0,1,2]]]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2l0ZS9jb21wb25lbnRzL3NsaWRlUHJvamVjdG9ySGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2l0ZS9jb21wb25lbnRzL2lucHV0SGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2NvbXBvbmVudHMvdXNwSW1wcmVzc2lvbnNIYW5kbGVyLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2NvbXBvbmVudHMvY2xpZW50UmV2aWV3c0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvY29tcG9uZW50cy95b3V0dWJlSGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2l0ZS9jb21wb25lbnRzL2ltYWdlUmFja0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvY29tcG9uZW50cy9zY3JvbGxUb0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2dsb2JhbC9wb2x5ZmlsbHMvcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvZ2xvYmFsL3BvbHlmaWxscy9pc0ludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RpbWVycy1icm93c2VyaWZ5L21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvY29tcG9uZW50cy9uYXZpZ2F0aW9uSGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2l0ZS9jb21wb25lbnRzL21hcHNIYW5kbGVyLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2NvbXBvbmVudHMvY2hvY29sYXRlRmFjdG9yeS5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2l0ZS9hcHAuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvZ2xvYmFsL2Jyb3dzZXJIYW5kbGVyLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2dsb2JhbC9oZWxwZXJzLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvY29tcG9uZW50cy9jb29raWVIYW5kbGVyLmpzIl0sIm5hbWVzIjpbIlNsaWRlclByb2plY3RvclNldHRpbmciLCJzZXR0aW5nc09iamVjdCIsInNlbGYiLCJ0aGlzIiwic2xpZGVySWQiLCJkZWZpbmVkUHJldmlvdXNOZXh0IiwiYXV0b1NsaWRlciIsInNsaWRlckludGVydmFsIiwibmF2aWdhdGlvbkJ1dHRvbnMiLCJkb3RzIiwiY2FwdGlvbnMiLCJzbGlkZVF1ZXJ5Iiwic2V0U2xpZGVyUHJvamVjdG9ySWQiLCJzdHJpbmciLCJzZXREZWZpbmVkUHJldmlvdXNOZXh0IiwiYm9vbGVhbiIsInNldEF1dG9TbGlkZXIiLCJzZXRTbGlkZXJJbnRlcnZhbCIsImludGVnZXIiLCJzZXRTbGlkZVF1ZXJ5Iiwic2V0TmF2aWdhdGlvbkJ1dHRvbnMiLCJzZXREb3RzIiwic2V0Q2FwdGlvbnMiLCJnZXRTbGlkZXJQcm9qZWN0b3JJZCIsImdldERlZmluZWRQcmV2aW91c05leHQiLCJnZXRBdXRvU2xpZGVyIiwiZ2V0U2xpZGVySW50ZXJ2YWwiLCJnZXRTbGlkZVF1ZXJ5IiwiZ2V0TmF2aWdhdGlvbkJ1dHRvbnMiLCJnZXREb3RzIiwiZ2V0Q2FwdGlvbnMiLCJwcmVwYXJlUGFyYW1ldGVycyIsImZpbGwiLCJzZXR0aW5nc09iamVjdEtleXMiLCJPYmplY3QiLCJrZXlzIiwic2V0dGluZ3NPYmplY3RMZW5ndGgiLCJsZW5ndGgiLCJpIiwia2V5IiwiU2xpZGVyUHJvamVjdG9yIiwic2V0dGluZ3MiLCJzbGlkZXJPYmplY3QiLCJhY3RpdmVTbGlkZUlkIiwicHJldmlvdXNTbGlkZUlkIiwibmV4dFNsaWRlSWQiLCJhdmFpbGFibGVTbGlkZXMiLCJzbGlkZXMiLCJhdXRvU2xpZGVySW50ZXJ2YWwiLCJpbml0IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJzZXRQcmV2aW91c0FuZE5leHRTbGlkZSIsInNldFNsaWRlIiwic3dpcGVHZXN0dXJlcyIsIkhhbW1lciIsIm9uIiwicmVzZXRBdXRvU2xpZGVyIiwibmV4dFNsaWRlIiwicHJldmlvdXNTbGlkZSIsIm5hdmlnYXRpb25CdXR0b25zTGVuZ3RoIiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsaWNrTmF2aWdhdGlvbkJ1dHRvbiIsImRvdHNMZW5ndGgiLCJjbGlja0RvdCIsImNsZWFySW50ZXJ2YWwiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJzZXRJbnRlcnZhbCIsInNsaWRlc0xlbmd0aCIsInNsaWRlIiwic2xpZGVPcmRlciIsInBhcnNlSW50IiwiZ2V0QXR0cmlidXRlIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiYWRkIiwic2V0QWN0aXZlRG90Iiwic2V0QWN0aXZlQ2FwdGlvbiIsIm5hdkJ1dHRvbiIsIm5leHQiLCJxdWVyeVNlbGVjdG9yIiwicHJldmlvdXMiLCJzZXRBdHRyaWJ1dGUiLCJjbGlja2VkRG90IiwiZG90IiwiZG90T3JkZXIiLCJjYXB0aW9uc0xlbmd0aCIsImNhcHRpb24iLCJjYXB0aW9uT3JkZXIiLCJyZXF1aXJlIiwic2xpZGVQcm9qZWN0b3JzIiwic2xpZGVQcm9qZWN0b3JDb250YWluZXJzIiwic2xpZGVQcm9qZWN0b3JDb250YWluZXJzTGVuZ3RoIiwic2xpZGVQcm9qZWN0b3IiLCJzbGlkZVByb2plY3RvcklkIiwiYXV0b1NsaWRlIiwic2xpZGVQcm9qZWN0b3JTZXR0aW5nIiwicHVzaCIsImNvbnNvbGUiLCJsb2ciLCJTbGlkZXJQcm9qZWN0b3JIYW5kbGVyIiwiSW5wdXRIYW5kbGVyIiwiaW5wdXRGaWVsZHMiLCJpbnB1dExlbmd0aCIsImlucHV0IiwiaW5wdXRJZCIsImlzc2V0IiwiaW5wdXRMYWJlbCIsImFkZEV2ZW50TGlzdGVuZXJzVG9JbnB1dCIsInBhcmVudEVsZW1lbnQiLCJwYXJlbnROb2RlIiwicmVtb3ZlRm9jdXMiLCJsb29wZWRJbnB1dCIsImFkZEZvY3VzIiwiZXJyb3JNZXNzYWdlIiwiaW5wdXRWYWx1ZSIsInZhbHVlIiwiY2FjaGVkU2V0VGltZW91dCIsImNhY2hlZENsZWFyVGltZW91dCIsInByb2Nlc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdFNldFRpbW91dCIsIkVycm9yIiwiZGVmYXVsdENsZWFyVGltZW91dCIsInJ1blRpbWVvdXQiLCJmdW4iLCJzZXRUaW1lb3V0IiwiZSIsImNhbGwiLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50UXVldWUiLCJxdWV1ZSIsImRyYWluaW5nIiwicXVldWVJbmRleCIsImNsZWFuVXBOZXh0VGljayIsImNvbmNhdCIsImRyYWluUXVldWUiLCJ0aW1lb3V0IiwibGVuIiwicnVuIiwibWFya2VyIiwicnVuQ2xlYXJUaW1lb3V0IiwiSXRlbSIsImFycmF5Iiwibm9vcCIsIm5leHRUaWNrIiwiYXJncyIsIkFycmF5IiwiYXJndW1lbnRzIiwicHJvdG90eXBlIiwiYXBwbHkiLCJ0aXRsZSIsImJyb3dzZXIiLCJlbnYiLCJhcmd2IiwidmVyc2lvbiIsInZlcnNpb25zIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJlbWl0IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImxpc3RlbmVycyIsIm5hbWUiLCJiaW5kaW5nIiwiY3dkIiwiY2hkaXIiLCJkaXIiLCJ1bWFzayIsIlVzcEltcHJlc3Npb25zSGFuZGxlciIsInVzcEltcHJlc3Npb25zVHJheXMiLCJ1c3BJbXByZXNzaW9uc1RyYXlzTGVuZ3RoIiwidXNwSW1wcmVzc2lvbnNUcmF5IiwiVXNwSW1wcmVzc2lvblNsaWRlciIsInNsaWRlciIsImN1cnJlbnRTbGlkZSIsInNsaWRlSW50ZXJ2YWwiLCJDbGllbnRSZXZpZXciLCJjbGllbnRSZXZpZXdPYmplY3QiLCJjbGllbnRSZXZpZXdJZCIsImNsaWVudFJldmlld3MiLCJjbGllbnRSZXZpZXdDb250YWluZXJzIiwiY2xpZW50UmV2aWV3Q29udGFpbmVyc0xlbmd0aCIsIkNsaWVudFJldmlld3NIYW5kbGVyIiwiWW91dHViZUhhbmRsZXIiLCJ5b3V0dWJlQ2xhc3MiLCJwbGF5ZXJzIiwieW91dHViZVBsYXllcnMiLCJ5b3V0dWJlUGxheWVyc0Ftb3VudCIsInlvdXR1YmVQbGF5ZXIiLCJ5b3V0dWJlRWxlbWVudCIsImlkIiwibGluayIsImF1dG9QbGF5IiwiaW5pdFlvdXR1YmUiLCJZVCIsIlBsYXllciIsIndpbmRvdyIsIm9uWW91VHViZVBsYXllckFQSVJlYWR5IiwibG9hZFBsYXllcnMiLCJnZXRTY3JpcHQiLCJwbGF5ZXIiLCJoZWlnaHQiLCJ3aWR0aCIsInZpZGVvSWQiLCJob3N0IiwicGxheWVyVmFycyIsIm1vZGVzdGJyYW5kaW5nIiwicmVsIiwiZGlzYWJsZWtiIiwiYXV0b3BsYXkiLCJldmVudHMiLCJvblN0YXRlQ2hhbmdlIiwib25SZWFkeSIsImV2ZW50IiwicGxheWVyQ29udGFpbmVySWQiLCJ0YXJnZXQiLCJnZXRJZnJhbWUiLCJkYXRhIiwiUGxheWVyU3RhdGUiLCJFTkRFRCIsInBsYXlWaWRlbyIsIkltYWdlUmFja0hhbmRsZXIiLCJpbWFnZVJhY2tFbGVtZW50cyIsImltYWdlUmFja0VsZW1lbnRzTGVuZ3RoIiwiSW1hZ2VSYWNrIiwiaW1hZ2VSYWNrIiwicmFjayIsInNsaWRlQXJlYSIsIml0ZW1zIiwiZGlyZWN0aW9uIiwiaW1hZ2VMb2FkZWQiLCJjdXJyZW50SXRlbSIsIm1heEl0ZW1Qb3NpdGlvbiIsIm1heFRyYW5zbGF0ZWQiLCJzdGVwcyIsInByZXZpb3VzQnV0dG9uIiwibmV4dEJ1dHRvbiIsImNhbGN1bGF0ZVN0ZXBzIiwicHJldmlvdXNJdGVtIiwic2V0SW1hZ2VSYWNrIiwibmV4dEl0ZW0iLCJzd2lwZUxlZnQiLCJzd2lwZVJpZ2h0IiwiZGVib3VuY2VUaW1lb3V0Iiwid2FpdERlYm91bmNlIiwiYXZhaWxhYmxlVmlld0FyZWEiLCJyYWNrV2lkdGgiLCJib2R5T2Zmc2V0IiwiYm9keSIsIm9mZnNldFdpZHRoIiwibGVmdCIsIm9mZnNldExlZnQiLCJtYXhJdGVtQ2FsY3VsYXRlZCIsImltYWdlc0xvYWRlZCIsIml0ZW0iLCJvZmZzZXRGcm9tUmlnaHRTaWRlIiwib2Zmc2V0RnJvbUxlZnRTaWRlIiwibmV4dE9mZnNldFBvc2l0aW9uIiwid2FybiIsInN0eWxlIiwidHJhbnNmb3JtIiwiU2Nyb2xsVG9IYW5kbGVyIiwib2Zmc2V0IiwiZHVyYXRpb24iLCJzdGFydCIsImNoYW5nZSIsImN1cnJlbnRUaW1lIiwiYWxsb3dBbmltYXRpb24iLCJzY3JvbGxUb0FuaW1hdGlvbiIsImVhc2luZyIsImFuY2hvckxpbmtzIiwiYW5jaG9yTGlua3NBbW91bnQiLCJwcmVwYXJlU2Nyb2xsVG8iLCJwcmV2ZW50RGVmYXVsdCIsImVsZW1lbnRJZCIsInN1YnN0ciIsImluZGV4T2YiLCJzY3JvbGxUb0VsZW1lbnRQb3NpdGlvbiIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImRvY3VtZW50RWxlbWVudCIsIk1hdGgiLCJtYXgiLCJzY3JvbGxUb3AiLCJwYWdlWU9mZnNldCIsInRvcCIsInN0YXJ0VGltZSIsInBlcmZvcm1hbmNlIiwibm93IiwiRGF0ZSIsImdldFRpbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJhbmltYXRlU2Nyb2xsIiwiYWJvcnRTY3JvbGxBbmltYXRpb24iLCJ0aW1lc3RhbXAiLCJwcm9ncmVzcyIsIm1pbiIsIkVhc2luZ0Z1bmN0aW9ucyIsIm5ld1Njcm9sbFRvcCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiZmFjdG9yeSIsImZpbmFsbHlDb25zdHJ1Y3RvciIsImNhbGxiYWNrIiwiY29uc3RydWN0b3IiLCJ0aGVuIiwicmVzb2x2ZSIsInJlYXNvbiIsInJlamVjdCIsInNldFRpbWVvdXRGdW5jIiwiUHJvbWlzZSIsImZuIiwiVHlwZUVycm9yIiwiX3N0YXRlIiwiX2hhbmRsZWQiLCJfdmFsdWUiLCJ1bmRlZmluZWQiLCJfZGVmZXJyZWRzIiwiZG9SZXNvbHZlIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJfaW1tZWRpYXRlRm4iLCJjYiIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJldCIsInByb21pc2UiLCJuZXdWYWx1ZSIsImZpbmFsZSIsInRoaXNBcmciLCJfdW5oYW5kbGVkUmVqZWN0aW9uRm4iLCJIYW5kbGVyIiwiZG9uZSIsImV4IiwicHJvbSIsImFsbCIsImFyciIsInNsaWNlIiwicmVtYWluaW5nIiwicmVzIiwidmFsIiwicmFjZSIsInZhbHVlcyIsInNldEltbWVkaWF0ZSIsImVyciIsImdsb2JhbE5TIiwiZ2xvYmFsIiwiZGVmaW5lIiwiaXNGaW5pdGUiLCJmbG9vciIsIkZ1bmN0aW9uIiwiVGltZW91dCIsImNsZWFyRm4iLCJfaWQiLCJfY2xlYXJGbiIsInNjb3BlIiwiY2xvc2UiLCJ1bnJlZiIsInJlZiIsImVucm9sbCIsIm1zZWNzIiwiX2lkbGVUaW1lb3V0SWQiLCJfaWRsZVRpbWVvdXQiLCJ1bmVucm9sbCIsIl91bnJlZkFjdGl2ZSIsImFjdGl2ZSIsIl9vblRpbWVvdXQiLCJjbGVhckltbWVkaWF0ZSIsInJlZ2lzdGVySW1tZWRpYXRlIiwiaHRtbCIsImNoYW5uZWwiLCJtZXNzYWdlUHJlZml4Iiwib25HbG9iYWxNZXNzYWdlIiwibmV4dEhhbmRsZSIsInRhc2tzQnlIYW5kbGUiLCJjdXJyZW50bHlSdW5uaW5nQVRhc2siLCJkb2MiLCJhdHRhY2hUbyIsImdldFByb3RvdHlwZU9mIiwidG9TdHJpbmciLCJydW5JZlByZXNlbnQiLCJwb3N0TWVzc2FnZSIsImltcG9ydFNjcmlwdHMiLCJwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzIiwib2xkT25NZXNzYWdlIiwib25tZXNzYWdlIiwiY2FuVXNlUG9zdE1lc3NhZ2UiLCJNZXNzYWdlQ2hhbm5lbCIsInBvcnQxIiwicG9ydDIiLCJjcmVhdGVFbGVtZW50Iiwic2NyaXB0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVtb3ZlQ2hpbGQiLCJhcHBlbmRDaGlsZCIsInJhbmRvbSIsInNvdXJjZSIsImF0dGFjaEV2ZW50IiwidGFzayIsIk5hdmlnYXRpb25IYW5kbGVyIiwibmF2aWdhdGlvbk5vZGUiLCJzY3JvbGxlZExvZyIsImlzT3BlbiIsIm5hdlRyaWdnZXJzIiwiY2xvc2VCdXR0b24iLCJjb2RlIiwiY2xvc2VOYXZpZ2F0aW9uIiwiaW5pdE5hdmlnYXRpb24iLCJuYXZUcmlnZ2VyIiwidG9nZ2xlTmF2aWdhdGlvbiIsInNjcm9sbGVkIiwib3Blbk5hdmlnYXRpb24iLCJNYXBzSGFuZGxlciIsIm1hcCIsImxvY2F0aW9uIiwibGF0IiwibG5nIiwic3R5bGluZyIsImhhc0F0dHJpYnV0ZSIsInBhcnNlRmxvYXQiLCJzZXRDdXN0b21TdHlsaW5nIiwiZ29vZ2xlIiwibWFwcyIsImRyYXdNYXAiLCJNYXAiLCJ6b29tIiwiY2VudGVyIiwiZGlzYWJsZURlZmF1bHRVSSIsInN0eWxlcyIsIk1hcmtlciIsInBvc2l0aW9uIiwiQ2hvY29sYXRlRmFjdG9yeSIsImJhbm5lZFZpc2l0b3IiLCJlbnRlciIsImNob2NvbGF0ZUZhY3RvcmllcyIsImFtb3VudE9mQ2hvY29sYXRlRmFjdG9yaWVzIiwiQ2hvY29sYXRlQmFyIiwiX2ZsYXNoVGlja2V0IiwiY2hvY29sYXRlQmFyIiwiZ29sZGVuVGlja2V0IiwiZW5qb3lUaGVUb3VyIiwiY2hvY29sYXRlRmFjdG9yeSIsInRvdXJHcm91cCIsIm9vbXBhTG9vbXBhcyIsImFtb3VudE9mT29tcGFMb29tcGFzIiwidG91ckdyb3VwU2l6ZSIsInZpc2l0b3IiLCJ2aXNpdG9yTmFtZSIsIl9pc1Zpc2l0b3JCYW5uZWQiLCJfZ2V0QXJyYW5nZW1lbnQiLCJfZmluaXNoVG91ciIsIm5vZGVOYW1lIiwiZ3JvdXAiLCJfYWRkV2lsbGllV29ua2EiLCJBamF4IiwicG9zdCIsIkh0dHBSZXF1ZXN0IiwicmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJzdGF0dXMiLCJfdGhhbmtzRm9yVmlzaXRpbmciLCJyZWRpcmVjdFVybCIsIl9naXZlRmVlZGJhY2tUb01lbWJlcnMiLCJlcnJvcnMiLCJfdW5rbm93bkdhcEluRmFjdG9yeSIsIl93aWxsaWUiLCJmZWVkYmFja0FyZWEiLCJpbm5lckhUTUwiLCJfY2xlYXJQcmV2aW91c01hcmtlZEphY2tldHMiLCJmb3JFYWNoIiwiamFja2V0IiwidmlzaXRvckZlZWRiYWNrQXJlYSIsInZpc2l0b3JOb2RlIiwiX2dyYWJWaXNpdG9ySmFja2V0IiwidmlzaXRvckZlZWRiYWNrIiwidmlzaXRvckZlZWRiYWNrQW1vdW50IiwidmlzaXRvckZlZWRiYWNrTGluZSIsImN1cnJlbnRGZWVkYmFja0FyZWEiLCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIiLCJtYXJrZWRKYWNrZXRzIiwibWFya2VkSmFja2V0c0Ftb3VudCIsImN1cnJlbnRMYXllciIsInNhZmV0eUJyZWFrIiwiY29udGFpbnMiLCJ0YWdOYW1lIiwibmV4dFN0b3AiLCJCcm93c2VySGFuZGxlciIsInVzZXJBZ2VudCIsImJyb3dzZXJJbmZvIiwibmF2aWdhdG9yIiwiZ2V0QnJvd3NlckluZm8iLCJoYW5kbGVJRSIsImhhbmRsZVNhZmFyaSIsIm1zaWUiLCJpZWx0MTEiLCJpZTExIiwibWF0Y2giLCJzdWJzdHJpbmciLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInRlbSIsInVhIiwiTSIsInRlc3QiLCJleGVjIiwiYXBwTmFtZSIsImFwcFZlcnNpb24iLCJzcGxpY2UiLCJvYmoiLCJsaW5lYXIiLCJ0IiwiZWFzZUluUXVhZCIsImVhc2VPdXRRdWFkIiwiZWFzZUluT3V0UXVhZCIsImVhc2VJbkN1YmljIiwiZWFzZU91dEN1YmljIiwiZWFzZUluT3V0Q3ViaWMiLCJlYXNlSW5RdWFydCIsImVhc2VPdXRRdWFydCIsImVhc2VJbk91dFF1YXJ0IiwiZWFzZUluUXVpbnQiLCJlYXNlT3V0UXVpbnQiLCJlYXNlSW5PdXRRdWludCIsImFzeW5jIiwic2NyaXB0cyIsInByaW9yIiwib25sb2FkIiwiXyIsImlzQWJvcnQiLCJyZWFkeVN0YXRlIiwic3JjIiwiaW5zZXJ0QmVmb3JlIiwiZGVib3VuY2UiLCJmdW5jIiwid2FpdCIsImltbWVkaWF0ZSIsImNvbnRleHQiLCJsYXRlciIsImNhbGxOb3ciLCJDb29raWUiLCJzZXQiLCJkYXlzIiwiZG9tYWluIiwiZG9tYWluUGFydHMiLCJkYXRlIiwiZXhwaXJlcyIsInNldFRpbWUiLCJ0b0dNVFN0cmluZyIsInNwbGl0IiwiY29va2llIiwic2hpZnQiLCJqb2luIiwiZ2V0IiwibmFtZUVRIiwiY2EiLCJjIiwiY2hhckF0IiwiZXJhc2UiLCJudW1iZXJfZm9ybWF0IiwibnVtYmVyIiwiZGVjaW1hbHMiLCJkZWNfcG9pbnQiLCJ0aG91c2FuZHNfc2VwIiwicmVwbGFjZSIsIm4iLCJwcmVjIiwiYWJzIiwic2VwIiwiZGVjIiwicyIsImsiLCJwb3ciLCJyb3VuZCIsInRvRml4ZWRGaXgiLCJFbGVtZW50IiwiY2xvc2VzdCIsIm1hdGNoZXMiLCJtc01hdGNoZXNTZWxlY3RvciIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsImFuY2VzdG9yIiwidXJsIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJ0b2tlbiIsImNvbnRlbnQiLCJvcGVuIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJzdHJpbmdpZnkiLCJ0b1VwcGVyQ2FzZSIsInNuYWtlVG9DYW1lbCIsIm0iLCJpbmRleEluUGFyZW50Iiwibm9kZSIsImNoaWxkcmVuIiwiY2hpbGROb2RlcyIsIm51bSIsIm5vZGVUeXBlIiwiY29weVRvQ2xpcGJvYXJkIiwiZWwiLCJlZGl0YWJsZSIsImNvbnRlbnRFZGl0YWJsZSIsInJlYWRPbmx5IiwicmFuZ2UiLCJjcmVhdGVSYW5nZSIsInNlbGVjdE5vZGVDb250ZW50cyIsInNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJzZWxlY3QiLCJleGVjQ29tbWFuZCIsInJlY3QiLCJzY3JvbGxMZWZ0IiwicGFnZVhPZmZzZXQiLCJnIiwiQ29va2llSGFuZGxlciIsImNvb2tpZUJhciIsImNvb2tpZU92ZXJsYXkiLCJjb29raWVNZXNzYWdlIiwiY29va2llU3dpdGNoIiwiY29va2llRmFkZU91dEFuaW1hdGlvbkR1cmF0aW9uIiwiYWNjZXB0VHJhY2tpbmciLCJpbml0Q29va2llQmFyIiwiaW5pdENvb2tpZU92ZXJsYXkiLCJjaGVja0ZvckNvb2tpZVNldHRpbmdzIiwiaW5pdENvb2tpZVN3aXRjaCIsImNsb3NlQ29va2llTWVzc2FnZSIsIm9wZW5Db29raWVTZXR0aW5nc0J1dHRvbiIsIm9wZW5Db29raWVTZXR0aW5ncyIsInRvZ2dsZVRyYWNraW5nSW5wdXQiLCJjaGVja2VkIiwidG9nZ2xlVHJhY2tpbmdTZXR0aW5nIiwiYWNjZXB0QnV0dG9uIiwic2V0Q29va2llU2V0dGluZ3MiLCJzYXZlQnV0dG9uIiwicmVsb2FkIl0sIm1hcHBpbmdzIjoiMklBb0RBLFNBQVNBLEVBQXVCQyxHQUU1QixJQUFNQyxFQUFPQyxLQXVHYixPQXJHQUEsS0FBS0MsU0FBVyxHQUNoQkQsS0FBS0UscUJBQXNCLEVBQzNCRixLQUFLRyxZQUFhLEVBQ2xCSCxLQUFLSSxlQUFpQixJQUN0QkosS0FBS0ssa0JBQW9CLEdBQ3pCTCxLQUFLTSxLQUFPLEdBQ1pOLEtBQUtPLFNBQVcsR0FDaEJQLEtBQUtRLFdBQWEsR0FFbEJSLEtBQUtTLHFCQUF1QixTQUFVQyxHQUVsQyxPQURBVixLQUFLQyxTQUFXUyxFQUNUVixNQUVYQSxLQUFLVyx1QkFBeUIsU0FBVUMsR0FFcEMsT0FEQVosS0FBS0Usb0JBQXNCVSxFQUNwQlosTUFFWEEsS0FBS2EsY0FBZ0IsU0FBVUQsR0FFM0IsT0FEQVosS0FB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akIsc0JBQXVCLFdBQ2hCaEIsRUFBY00sZUFDYk4sRUFBY00sZ0JBQWlCLEVBRy9CTixFQUFjTSxnQkFBaUIsR0FJdkNZLGtCQUFtQixXQUdabEIsRUFBY00sZUFDYnBGLE9BQU9DLElBQUkseUJBQTBCLE9BQVEsSUFHMUNELE9BQU9hLElBQUksMkJBQ1ZiLE9BQU9rQixNQUFNLDBCQUlyQjRELEVBQWNXLHFCQUdkeGYsWUFBVyxXQUNQa1MsU0FBUytOLFdBQ1ZwQixFQUFjSyxrQ0FLekJMLEVBQWM3akIsUyIsImZpbGUiOiIvanMvc2l0ZS9hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBFeGFtcGxlXG5cbmNvbnN0IGhlYWRlckltYWdlU2xpZGVyU2V0dGluZyA9IG5ldyBTbGlkZXJQcm9qZWN0b3JTZXR0aW5nKHtcbiAgICBzbGlkZXJQcm9qZWN0b3JJZDogJ2hlYWRlci1pbWFnZS1zbGlkZXInLFxuICAgIHNsaWRlUXVlcnk6ICcjaGVhZGVyLWltYWdlLXNsaWRlciAucGxhY2Vob2xkZXIgZmlndXJlJyxcbiAgICBkb3RzOiAnI2hlYWRlci1pbWFnZS1zbGlkZXIgLnNsaWRlci1uYXZpZ2F0aW9uLWxhYmVscyAubmF2aWdhdGlvbiBzcGFuJyxcbiAgICBjYXB0aW9uczogJyNoZWFkZXItaW1hZ2Utc2xpZGVyIC5zbGlkZXItbmF2aWdhdGlvbi1sYWJlbHMgLmNhcHRpb24gcCcsXG4gICAgYXV0b1NsaWRlcjogdHJ1ZSxcbiAgICBzbGlkZXJJbnRlcnZhbDogNDAwMFxufSk7XG5oZWFkZXJJbWFnZVNsaWRlclNldHRpbmcgPSBoZWFkZXJJbWFnZVNsaWRlclNldHRpbmcucHJlcGFyZVBhcmFtZXRlcnMoKTtcblxuY29uc3QgaGVhZGVySW1hZ2VTbGlkZXIgPSBuZXcgU2xpZGVyUHJvamVjdG9yKGhlYWRlckltYWdlU2xpZGVyU2V0dGluZykuaW5pdCgpO1xuXG4gKi9cblxucmVxdWlyZSgnaGFtbWVyanMnKTtcblxuY29uc3QgU2xpZGVyUHJvamVjdG9ySGFuZGxlciA9IHtcblxuICBpbml0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgc2xpZGVQcm9qZWN0b3JzID0gW107XG5cbiAgICAgIGNvbnN0IHNsaWRlUHJvamVjdG9yQ29udGFpbmVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5qcy1zbGlkZS1wcm9qZWN0b3InKTtcbiAgICAgIGNvbnN0IHNsaWRlUHJvamVjdG9yQ29udGFpbmVyc0xlbmd0aCA9IHNsaWRlUHJvamVjdG9yQ29udGFpbmVycy5sZW5ndGg7XG5cbiAgICAgIGZvcihsZXQgaSA9MDsgaSA8IHNsaWRlUHJvamVjdG9yQ29udGFpbmVyc0xlbmd0aDsgaSsrKXtcblxuICAgICAgICAgIGNvbnN0IHNsaWRlUHJvamVjdG9yID0gc2xpZGVQcm9qZWN0b3JDb250YWluZXJzW2ldO1xuICAgICAgICAgIGNvbnN0IHNsaWRlUHJvamVjdG9ySWQgPSBzbGlkZVByb2plY3Rvci5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG5cbiAgICAgICAgICBjb25zdCBhdXRvU2xpZGUgPSBzbGlkZVByb2plY3Rvci5nZXRBdHRyaWJ1dGUoJ2RhdGEtYXV0by1zbGlkZScpO1xuXG4gICAgICAgICAgaWYoc2xpZGVQcm9qZWN0b3JJZCAhPT0gbnVsbCl7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc2xpZGVQcm9qZWN0b3JTZXR0aW5nID0gbmV3IFNsaWRlclByb2plY3RvclNldHRpbmcoe1xuICAgICAgICAgICAgICAgICAgc2xpZGVySWQ6IHNsaWRlUHJvamVjdG9ySWQsXG4gICAgICAgICAgICAgICAgICBzbGlkZVF1ZXJ5OiAnIycgKyBzbGlkZVByb2plY3RvcklkICsnIC5qcy1zbGlkZS1wcm9qZWN0b3Itc2xpZGUnLFxuICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbkJ1dHRvbnM6ICcjJyArIHNsaWRlUHJvamVjdG9ySWQgKycgLmpzLXNsaWRlLXByb2plY3Rvci1idXR0b24nICxcbiAgICAgICAgICAgICAgICAgIGF1dG9TbGlkZXI6IGF1dG9TbGlkZSxcbiAgICAgICAgICAgICAgICAgIHNsaWRlckludGVydmFsOiA2MDAwXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHNsaWRlUHJvamVjdG9ycy5wdXNoKCBuZXcgU2xpZGVyUHJvamVjdG9yKHNsaWRlUHJvamVjdG9yU2V0dGluZy5wcmVwYXJlUGFyYW1ldGVycygpKS5pbml0KCkgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBjb25zb2xlLmxvZygnQW4gaW1hZ2Ugc2xpZGVyIGhhcyBubyBpZC4uLicpO1xuICAgICAgfVxuICB9XG59O1xuXG5TbGlkZXJQcm9qZWN0b3JIYW5kbGVyLmluaXQoKTtcblxuZnVuY3Rpb24gU2xpZGVyUHJvamVjdG9yU2V0dGluZyhzZXR0aW5nc09iamVjdCkge1xuXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLnNsaWRlcklkID0gJyc7XG4gICAgdGhpcy5kZWZpbmVkUHJldmlvdXNOZXh0ID0gdHJ1ZTtcbiAgICB0aGlzLmF1dG9TbGlkZXIgPSBmYWxzZTtcbiAgICB0aGlzLnNsaWRlckludGVydmFsID0gNDAwMDtcbiAgICB0aGlzLm5hdmlnYXRpb25CdXR0b25zID0gJyc7XG4gICAgdGhpcy5kb3RzID0gJyc7XG4gICAgdGhpcy5jYXB0aW9ucyA9ICcnO1xuICAgIHRoaXMuc2xpZGVRdWVyeSA9ICcnO1xuXG4gICAgdGhpcy5zZXRTbGlkZXJQcm9qZWN0b3JJZCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zbGlkZXJJZCA9IHN0cmluZztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICB0aGlzLnNldERlZmluZWRQcmV2aW91c05leHQgPSBmdW5jdGlvbiAoYm9vbGVhbikge1xuICAgICAgICB0aGlzLmRlZmluZWRQcmV2aW91c05leHQgPSBib29sZWFuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHRoaXMuc2V0QXV0b1NsaWRlciA9IGZ1bmN0aW9uIChib29sZWFuKSB7XG4gICAgICAgIHRoaXMuYXV0b1NsaWRlciA9IGJvb2xlYW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgdGhpcy5zZXRTbGlkZXJJbnRlcnZhbCA9IGZ1bmN0aW9uIChpbnRlZ2VyKSB7XG4gICAgICAgIHRoaXMuc2xpZGVySW50ZXJ2YWwgPSBpbnRlZ2VyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHRoaXMuc2V0U2xpZGVRdWVyeSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zbGlkZVF1ZXJ5ID0gc3RyaW5nO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHRoaXMuc2V0TmF2aWdhdGlvbkJ1dHRvbnMgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkJ1dHRvbnMgPSBzdHJpbmc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgdGhpcy5zZXREb3RzID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICB0aGlzLmRvdHMgPSBzdHJpbmc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgdGhpcy5zZXRDYXB0aW9ucyA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jYXB0aW9ucyA9IHN0cmluZztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICB0aGlzLmdldFNsaWRlclByb2plY3RvcklkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXJJZDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0RGVmaW5lZFByZXZpb3VzTmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmaW5lZFByZXZpb3VzTmV4dDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0QXV0b1NsaWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0b1NsaWRlcjtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2xpZGVySW50ZXJ2YWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNsaWRlckludGVydmFsO1xuICAgIH07XG4gICAgdGhpcy5nZXRTbGlkZVF1ZXJ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZVF1ZXJ5O1xuICAgIH07XG4gICAgdGhpcy5nZXROYXZpZ2F0aW9uQnV0dG9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvbkJ1dHRvbnM7XG4gICAgfTtcbiAgICB0aGlzLmdldERvdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvdHM7XG4gICAgfTtcbiAgICB0aGlzLmdldENhcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXB0aW9ucztcbiAgICB9O1xuXG5cbiAgICAvLyBJbnZlcnQgc2V0dGVycyB0byBnZXR0ZXJzXG4gICAgdGhpcy5wcmVwYXJlUGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2xpZGVySWQ6IHNlbGYuZ2V0U2xpZGVyUHJvamVjdG9ySWQoKSxcbiAgICAgICAgICAgIGRlZmluZWRQcmV2aW91c05leHQ6IHNlbGYuZ2V0RGVmaW5lZFByZXZpb3VzTmV4dCgpLFxuICAgICAgICAgICAgYXV0b1NsaWRlcjogc2VsZi5nZXRBdXRvU2xpZGVyKCksXG4gICAgICAgICAgICBzbGlkZXJJbnRlcnZhbDogc2VsZi5nZXRTbGlkZXJJbnRlcnZhbCgpLFxuICAgICAgICAgICAgbmF2aWdhdGlvbkJ1dHRvbnM6IHNlbGYuZ2V0TmF2aWdhdGlvbkJ1dHRvbnMoKSxcbiAgICAgICAgICAgIGRvdHM6IHNlbGYuZ2V0RG90cygpLFxuICAgICAgICAgICAgY2FwdGlvbnM6IHNlbGYuZ2V0Q2FwdGlvbnMoKSxcbiAgICAgICAgICAgIHNsaWRlUXVlcnk6IHNlbGYuZ2V0U2xpZGVRdWVyeSgpXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICAvLyBNYXNzIGFzc2lnbiBzZXR0aW5nc1xuICAgIHRoaXMuZmlsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gT2JqZWN0LmtleXMoc2V0dGluZ3NPYmplY3QpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAvLyAgICAgc2VsZltrZXldID0gc2V0dGluZ3NPYmplY3Rba2V5XTtcbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgY29uc3Qgc2V0dGluZ3NPYmplY3RLZXlzID0gT2JqZWN0LmtleXMoc2V0dGluZ3NPYmplY3QpO1xuICAgICAgICBjb25zdCBzZXR0aW5nc09iamVjdExlbmd0aCA9IHNldHRpbmdzT2JqZWN0S2V5cy5sZW5ndGg7XG5cbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHNldHRpbmdzT2JqZWN0TGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gc2V0dGluZ3NPYmplY3RLZXlzW2ldO1xuICAgICAgICAgICAgc2VsZltrZXldID0gc2V0dGluZ3NPYmplY3Rba2V5XTtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHRoaXMuZmlsbCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2xpZGVySWQ6IHNlbGYuc2V0U2xpZGVyUHJvamVjdG9ySWQsXG4gICAgICAgIGRlZmluZWRQcmV2aW91c05leHQ6IHNlbGYuc2V0RGVmaW5lZFByZXZpb3VzTmV4dCxcbiAgICAgICAgYXV0b1NsaWRlcjogc2VsZi5zZXRBdXRvU2xpZGVyLFxuICAgICAgICBzbGlkZXJJbnRlcnZhbDogc2VsZi5zZXRTbGlkZXJJbnRlcnZhbCxcbiAgICAgICAgbmF2aWdhdGlvbkJ1dHRvbnM6IHNlbGYuc2V0TmF2aWdhdGlvbkJ1dHRvbnMsXG4gICAgICAgIGRvdHM6IHNlbGYuc2V0RG90cyxcbiAgICAgICAgY2FwdGlvbnM6IHNlbGYuc2V0Q2FwdGlvbnMsXG4gICAgICAgIHNsaWRlUXVlcnk6IHNlbGYuc2V0U2xpZGVRdWVyeSxcbiAgICAgICAgcHJlcGFyZVBhcmFtZXRlcnM6IHNlbGYucHJlcGFyZVBhcmFtZXRlcnNcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBTbGlkZXJQcm9qZWN0b3Ioc2V0dGluZ3MpIHtcblxuICAgIC8vRGVmaW5lIFNsaWRlclByb2plY3RvciBvYmplY3RcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB0aGlzLnNsaWRlck9iamVjdCA9ICcnO1xuXG4gICAgLy9TbGlkZVBhcmFtZXRlcnNcbiAgICB0aGlzLmFjdGl2ZVNsaWRlSWQgPSAwO1xuICAgIHRoaXMucHJldmlvdXNTbGlkZUlkID0gMDtcbiAgICB0aGlzLm5leHRTbGlkZUlkID0gMDtcbiAgICB0aGlzLmF2YWlsYWJsZVNsaWRlcyA9IDE7XG4gICAgdGhpcy5zbGlkZXMgPSBbXTtcbiAgICB0aGlzLmF1dG9TbGlkZXJJbnRlcnZhbCA9IG51bGw7XG5cbiAgICB0aGlzLnNldHRpbmdzID0ge307XG5cbiAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgLy9BcHBlbmQgc2V0dGluZ3MgdG8gc2VsZlxuICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG5cbiAgICAgICAgLy9Bc3NpZ24gbmVlZGVkIGVsZW1lbnRzIGFuZCBjYWxjdWxhdGlvbnNcbiAgICAgICAgdGhpcy5zbGlkZXJPYmplY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNldHRpbmdzLnNsaWRlcklkKTtcbiAgICAgICAgdGhpcy5zbGlkZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuc2V0dGluZ3Muc2xpZGVRdWVyeSk7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlU2xpZGVzID0gdGhpcy5zbGlkZXMubGVuZ3RoO1xuICAgICAgICB0aGlzLmFjdGl2ZVNsaWRlSWQgPSAwO1xuXG4gICAgICAgIC8vRGVmaW5lIHByZXZpb3VzIGFuZCBuZXh0IGlmIHdlIHdhbnQgdG8gdXNlIHRob3NlXG4gICAgICAgIGlmIChzZWxmLnNldHRpbmdzLmRlZmluZWRQcmV2aW91c05leHQpIHRoaXMuc2V0UHJldmlvdXNBbmROZXh0U2xpZGUoKTtcblxuICAgICAgICAvLyBTZXQgYWN0aXZlIHNsaWRlIChhbmQgcG9zc2libGUgcHJldmlvdXMgYW5kIG5leHQgY2xhc3NlcylcbiAgICAgICAgdGhpcy5zZXRTbGlkZSgpO1xuXG4gICAgICAgIC8vIFN3aXBlIGludGVyYWN0aW9uXG4gICAgICAgIGNvbnN0IHN3aXBlR2VzdHVyZXMgPSBuZXcgSGFtbWVyKHRoaXMuc2xpZGVyT2JqZWN0KTtcbiAgICAgICAgc3dpcGVHZXN0dXJlcy5vbignc3dpcGVsZWZ0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5yZXNldEF1dG9TbGlkZXIoKTtcbiAgICAgICAgICAgIHNlbGYubmV4dFNsaWRlKCk7XG4gICAgICAgICAgICBzZWxmLnNldFNsaWRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzd2lwZUdlc3R1cmVzLm9uKCdzd2lwZXJpZ2h0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5yZXNldEF1dG9TbGlkZXIoKTtcbiAgICAgICAgICAgIHNlbGYucHJldmlvdXNTbGlkZSgpO1xuICAgICAgICAgICAgc2VsZi5zZXRTbGlkZSgpO1xuICAgICAgICB9KTtcblxuXG5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubmF2aWdhdGlvbkJ1dHRvbnMgIT09ICcnKSB7XG5cbiAgICAgICAgICAgIC8vIENsaWNrIGludGVyYWN0aW9uXG4gICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uQnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZXR0aW5ncy5uYXZpZ2F0aW9uQnV0dG9ucyk7XG4gICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uQnV0dG9uc0xlbmd0aCA9IG5hdmlnYXRpb25CdXR0b25zLmxlbmd0aDtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBuYXZpZ2F0aW9uQnV0dG9uc0xlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uQnV0dG9uID0gbmF2aWdhdGlvbkJ1dHRvbnNbaV07XG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGlja05hdmlnYXRpb25CdXR0b24odGhpcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRvdHMgIT09ICcnKSB7XG4gICAgICAgICAgICAvLyBDbGljayBpbnRlcmFjdGlvblxuICAgICAgICAgICAgY29uc3QgZG90cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZXR0aW5ncy5kb3RzKTtcbiAgICAgICAgICAgIGNvbnN0IGRvdHNMZW5ndGggPSBkb3RzLmxlbmd0aDtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuc2V0dGluZ3MuZG90cyk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhkb3RzKTtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBkb3RzTGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvdCA9IGRvdHNbaV07XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2hpZXInKTtcbiAgICAgICAgICAgICAgICBkb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpY2tEb3QodGhpcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuYXV0b1NsaWRlcigpO1xuICAgIH07XG5cblxuICAgIHRoaXMuYXV0b1NsaWRlciA9IGZ1bmN0aW9uICgpe1xuXG4gICAgICAgIGlmKHRoaXMuYXV0b1NsaWRlckludGVydmFsICE9PSBudWxsKSBjbGVhckludGVydmFsKHRoaXMuYXV0b1NsaWRlckludGVydmFsKTtcblxuICAgICAgICBpZih0aGlzLnNldHRpbmdzLmF1dG9TbGlkZXIgJiYgTnVtYmVyLmlzSW50ZWdlcih0aGlzLnNldHRpbmdzLnNsaWRlckludGVydmFsKSApe1xuXG4gICAgICAgICAgICB0aGlzLmF1dG9TbGlkZXJJbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm5leHRTbGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNldFNsaWRlKCk7XG4gICAgICAgICAgICAgICAgfSwgdGhpcy5zZXR0aW5ncy5zbGlkZXJJbnRlcnZhbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnJlc2V0QXV0b1NsaWRlciA9IHNlbGYuYXV0b1NsaWRlcjtcblxuXG4gICAgdGhpcy5uZXh0U2xpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlU2xpZGVJZCsrO1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVTbGlkZUlkID49IHRoaXMuYXZhaWxhYmxlU2xpZGVzKSB0aGlzLmFjdGl2ZVNsaWRlSWQgPSAwO1xuXG4gICAgICAgIGlmIChzZWxmLnNldHRpbmdzLmRlZmluZWRQcmV2aW91c05leHQpIHRoaXMuc2V0UHJldmlvdXNBbmROZXh0U2xpZGUoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5wcmV2aW91c1NsaWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVNsaWRlSWQtLTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlU2xpZGVJZCA8IDApIHRoaXMuYWN0aXZlU2xpZGVJZCA9IHRoaXMuYXZhaWxhYmxlU2xpZGVzIC0gMTtcblxuICAgICAgICBpZiAoc2VsZi5zZXR0aW5ncy5kZWZpbmVkUHJldmlvdXNOZXh0KSB0aGlzLnNldFByZXZpb3VzQW5kTmV4dFNsaWRlKCk7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0UHJldmlvdXNBbmROZXh0U2xpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubmV4dFNsaWRlSWQgPSB0aGlzLmFjdGl2ZVNsaWRlSWQgKyAxO1xuICAgICAgICBpZiAodGhpcy5uZXh0U2xpZGVJZCA+PSB0aGlzLmF2YWlsYWJsZVNsaWRlcykgdGhpcy5uZXh0U2xpZGVJZCA9IDA7XG5cbiAgICAgICAgdGhpcy5wcmV2aW91c1NsaWRlSWQgPSB0aGlzLmFjdGl2ZVNsaWRlSWQgLSAxO1xuICAgICAgICBpZiAodGhpcy5wcmV2aW91c1NsaWRlSWQgPCAwKSB0aGlzLnByZXZpb3VzU2xpZGVJZCA9IHRoaXMuYXZhaWxhYmxlU2xpZGVzIC0gMTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRTbGlkZSA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIGZvcm0gZWxlbWVudHNcbiAgICAgICAgY29uc3Qgc2xpZGVzTGVuZ3RoID0gc2VsZi5zbGlkZXMubGVuZ3RoO1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgc2xpZGVzTGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgY29uc3Qgc2xpZGUgPSBzZWxmLnNsaWRlc1tpXTtcblxuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHNldCBhdHRyaWJ1dGUgdG8gZGVzaXJlZCB0eXBlXG4gICAgICAgICAgICBjb25zdCBzbGlkZU9yZGVyID0gcGFyc2VJbnQoc2xpZGUuZ2V0QXR0cmlidXRlKCdkYXRhLW9yZGVyJykpO1xuXG4gICAgICAgICAgICAvLyBSZW1vdmUgYW5kIHNldCBhY3RpdmUgZm9yIGFsbCBzbGlkZXNcbiAgICAgICAgICAgIGlmIChzbGlkZU9yZGVyICE9PSBzZWxmLmFjdGl2ZVNsaWRlSWQpIHNsaWRlLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScpO1xuICAgICAgICAgICAgZWxzZSBzbGlkZS5jbGFzc0xpc3QuYWRkKCdpcy1hY3RpdmUnKTtcblxuICAgICAgICAgICAgLy8gSWYgd2UgdXNlIHRoZSBwcmV2aW91cyBhbmQgbmV4dCwgYWxzbyBzZXQgdGhvc2UgY2xhc3Nlc1xuICAgICAgICAgICAgaWYgKHNlbGYuc2V0dGluZ3MuZGVmaW5lZFByZXZpb3VzTmV4dCkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHNsaWRlT3JkZXIgIT09IHNlbGYucHJldmlvdXNTbGlkZUlkKSBzbGlkZS5jbGFzc0xpc3QucmVtb3ZlKCdwcmV2aW91cycpO1xuICAgICAgICAgICAgICAgIGVsc2Ugc2xpZGUuY2xhc3NMaXN0LmFkZCgncHJldmlvdXMnKTtcblxuICAgICAgICAgICAgICAgIGlmIChzbGlkZU9yZGVyICE9PSBzZWxmLm5leHRTbGlkZUlkKSBzbGlkZS5jbGFzc0xpc3QucmVtb3ZlKCduZXh0Jyk7XG4gICAgICAgICAgICAgICAgZWxzZSBzbGlkZS5jbGFzc0xpc3QuYWRkKCduZXh0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VsZi5zZXR0aW5ncy5kb3RzICE9PSAnJykgeyBzZWxmLnNldEFjdGl2ZURvdCgpOyB9XG4gICAgICAgIGlmIChzZWxmLnNldHRpbmdzLmNhcHRpb25zICE9PSAnJykgeyBzZWxmLnNldEFjdGl2ZUNhcHRpb24oKTsgfVxuICAgIH07XG5cbiAgICB0aGlzLmNsaWNrTmF2aWdhdGlvbkJ1dHRvbiA9IGZ1bmN0aW9uIChuYXZCdXR0b24pIHtcbiAgICAgICAgc2VsZi5hY3RpdmVTbGlkZUlkID0gcGFyc2VJbnQobmF2QnV0dG9uLmdldEF0dHJpYnV0ZSgnZGF0YS1vcmRlcicpKTtcbiAgICAgICAgaWYgKHNlbGYuc2V0dGluZ3MuZGVmaW5lZFByZXZpb3VzTmV4dCkgc2VsZi5zZXRQcmV2aW91c0FuZE5leHRTbGlkZSgpO1xuICAgICAgICBzZWxmLnNldFNsaWRlKCk7XG5cbiAgICAgICAgY29uc3QgbmV4dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZi5zZXR0aW5ncy5uYXZpZ2F0aW9uQnV0dG9ucyArICcubmV4dCcpO1xuICAgICAgICBjb25zdCBwcmV2aW91cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZi5zZXR0aW5ncy5uYXZpZ2F0aW9uQnV0dG9ucyArICcucHJldmlvdXMnKTtcblxuICAgICAgICBuZXh0LnNldEF0dHJpYnV0ZSgnZGF0YS1vcmRlcicsIHNlbGYubmV4dFNsaWRlSWQpO1xuICAgICAgICBwcmV2aW91cy5zZXRBdHRyaWJ1dGUoJ2RhdGEtb3JkZXInLCBzZWxmLnByZXZpb3VzU2xpZGVJZCk7XG5cbiAgICAgICAgc2VsZi5yZXNldEF1dG9TbGlkZXIoKTtcblxuICAgICAgICAvLyBuZXh0LnF1ZXJ5U2VsZWN0b3IoJ3AnKS5pbm5lckhUTUwgPSBzZWxmLnNsaWRlc1tzZWxmLm5leHRTbGlkZUlkXS5kYXRhc2V0Lm5hbWU7XG4gICAgICAgIC8vIHByZXZpb3VzLnF1ZXJ5U2VsZWN0b3IoJ3AnKS5pbm5lckhUTUwgPSBzZWxmLnNsaWRlc1tzZWxmLnByZXZpb3VzU2xpZGVJZF0uZGF0YXNldC5uYW1lO1xuICAgIH07XG5cbiAgICB0aGlzLmNsaWNrRG90ID0gZnVuY3Rpb24gKGNsaWNrZWREb3QpIHtcbiAgICAgICAgc2VsZi5hY3RpdmVTbGlkZUlkID0gcGFyc2VJbnQoY2xpY2tlZERvdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JkZXInKSk7XG4gICAgICAgIHNlbGYuc2V0U2xpZGUoKTtcbiAgICAgICAgc2VsZi5yZXNldEF1dG9TbGlkZXIoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRBY3RpdmVEb3QgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgZG90cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZXR0aW5ncy5kb3RzKTtcbiAgICAgICAgY29uc3QgZG90c0xlbmd0aCA9IGRvdHMubGVuZ3RoO1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgZG90c0xlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgIGNvbnN0IGRvdCA9IGRvdHNbaV07XG4gICAgICAgICAgICBkb3RPcmRlciA9IHBhcnNlSW50KGRvdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JkZXInKSk7XG5cbiAgICAgICAgICAgIGlmKGRvdE9yZGVyICE9PSBzZWxmLmFjdGl2ZVNsaWRlSWQpIGRvdC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgIGVsc2UgZG90LmNsYXNzTGlzdC5hZGQoJ2lzLWFjdGl2ZScpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuc2V0QWN0aXZlQ2FwdGlvbiA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBjYXB0aW9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZXR0aW5ncy5jYXB0aW9ucyk7XG4gICAgICAgIGNvbnN0IGNhcHRpb25zTGVuZ3RoID0gY2FwdGlvbnMubGVuZ3RoO1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgY2FwdGlvbnNMZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBjb25zdCBjYXB0aW9uID0gY2FwdGlvbnNbaV07XG4gICAgICAgICAgICBjYXB0aW9uT3JkZXIgPSBwYXJzZUludChjYXB0aW9uLmdldEF0dHJpYnV0ZSgnZGF0YS1vcmRlcicpKTtcblxuICAgICAgICAgICAgaWYoY2FwdGlvbk9yZGVyICE9PSBzZWxmLmFjdGl2ZVNsaWRlSWQpIGNhcHRpb24uY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWN0aXZlJyk7XG4gICAgICAgICAgICBlbHNlIGNhcHRpb24uY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyk7XG4gICAgICAgIH1cbiAgICB9O1xufSIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgSW5wdXQgaGFuZGxlclxuXG4gICAgVGhpcyBoYW5kbGVyIGNhbiBiZSByZW1vdmUgd2hlbiB0aGUgY3NzIHN1cHBvcnQgZm9yIDpmb2N1cy13aXRoaW4gaXMgYmV0dGVyXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgSW5wdXRIYW5kbGVyID0ge1xuXG4gICAgaW5wdXRGaWVsZHM6IG51bGwsXG5cbiAgICBpbml0IDogZnVuY3Rpb24oKVxuICAgIHtcbiAgICAgICAgLy8gR2V0IHRoZSBmb3JtIGlucHV0c1xuICAgICAgICBJbnB1dEhhbmRsZXIuaW5wdXRGaWVsZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdmb3JtIGlucHV0LCBmb3JtIHRleHRhcmVhJyk7XG5cbiAgICAgICAgY29uc3QgaW5wdXRMZW5ndGggPSBJbnB1dEhhbmRsZXIuaW5wdXRGaWVsZHMubGVuZ3RoO1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkrKyl7XG5cbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gSW5wdXRIYW5kbGVyLmlucHV0RmllbGRzW2ldO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRJZCA9IGlucHV0LmdldEF0dHJpYnV0ZSgnaWQnKTtcblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW4gaWQgb24gdGhlIGlucHV0XG4gICAgICAgICAgICBpZihpc3NldChpbnB1dElkKSl7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dExhYmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZm9ybSBsYWJlbFtmb3I9XCInK2lucHV0SWQrJ1wiXScpO1xuXG4gICAgICAgICAgICAgICAgLy8gLy8gQW5kIGlmIHRoZXJlIGlzIGEgYmVsb25naW5nIGxhYmVsXG4gICAgICAgICAgICAgICAgaWYoaXNzZXQoaW5wdXRMYWJlbCkpe1xuICAgICAgICAgICAgICAgICAgICBJbnB1dEhhbmRsZXIuYWRkRXZlbnRMaXN0ZW5lcnNUb0lucHV0KGlucHV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhZGRFdmVudExpc3RlbmVyc1RvSW5wdXQgOiBmdW5jdGlvbihpbnB1dClcbiAgICB7XG4gICAgICAgIC8vIEFkZCB0aGUgZmlsbCBjbGFzcyBhbmQgdHJpZ2dlciByZW1vdmVGb2N1cyBzbyB0aGUgaW5wdXQgd2lsbCBiZSBhdXRvbWF0aWMgYmUgbWFya2VkIGFzIGZpbGxlZCBvciBub3RcbiAgICAgICAgcGFyZW50RWxlbWVudCA9IGlucHV0LnBhcmVudE5vZGU7XG4gICAgICAgIHBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZmlsbGVkJyk7XG4gICAgICAgIElucHV0SGFuZGxlci5yZW1vdmVGb2N1cyhpbnB1dCk7XG5cbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIC8vIFdlIGxvb3AgdGhyb3VnaCB0aGUgaW5wdXQgZWxlbWVudHMgYmVjYXVzZSBhdXRvY29tcGxldGUgKG9uIGNocm9tZSkgdHJpZ2dlcnMgYWwgdGhlIGZvY3VzIGVsZW1lbnRzIGJ1dCBub25lIGZvY3VzIG91dFxuICAgICAgICAgICAgY29uc3QgaW5wdXRMZW5ndGggPSBJbnB1dEhhbmRsZXIuaW5wdXRGaWVsZHMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvb3BlZElucHV0ID0gSW5wdXRIYW5kbGVyLmlucHV0RmllbGRzW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBhZGQgZm9jdXMgb24gdGhpcyBmb2N1c2VkIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBpZihsb29wZWRJbnB1dCA9PT0gaW5wdXQpe1xuICAgICAgICAgICAgICAgICAgICBJbnB1dEhhbmRsZXIuYWRkRm9jdXModGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBmb2N1cyBvbiBhbGwgb3RoZXIgaW5wdXQvdGV4dGFyZWEgZWxlbWVudHNcbiAgICAgICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgICAgICBJbnB1dEhhbmRsZXIucmVtb3ZlRm9jdXMobG9vcGVkSW5wdXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIElucHV0SGFuZGxlci5yZW1vdmVGb2N1cyh0aGlzKTtcbiAgICAgICAgfSk7XG5cbiAgICB9LFxuXG4gICAgYWRkRm9jdXMgIDogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIGlmKGlzc2V0KGlucHV0KSkge1xuXG4gICAgICAgICAgICBjb25zdCBpbnB1dElkID0gaW5wdXQuZ2V0QXR0cmlidXRlKCdpZCcpO1xuXG4gICAgICAgICAgICBwYXJlbnRFbGVtZW50ID0gaW5wdXQucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZm9jdXNlZCcpO1xuICAgICAgICAgICAgcGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdmaWxsZWQnKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBlcnJvciBtZXNzYWdlIHJlbW92ZSBpdCBvbiBmb2N1c1xuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZm9ybSAuZXJyb3ItbWVzc2FnZSMnICsgaW5wdXRJZCArICctZXJyb3InKTtcbiAgICAgICAgICAgIGlmIChpc3NldChlcnJvck1lc3NhZ2UpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLmNsYXNzTGlzdC5hZGQoJ2ZhZGUtb3V0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH0sXG5cbiAgICAvLyBSZXNldCB0aGUgbGFiZWwgbG9jYXRpb24gb25seSBpZiB0aGUgaW5wdXQgaXMgZW1wdHlcbiAgICByZW1vdmVGb2N1cyA6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICBpZihpc3NldChpbnB1dCkpe1xuXG4gICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gaW5wdXQudmFsdWU7XG5cbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnQgPSBpbnB1dC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgcGFyZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdmb2N1c2VkJyk7XG5cbiAgICAgICAgICAgIGlmKCFpc3NldChpbnB1dFZhbHVlKSB8fCBpbnB1dFZhbHVlID09PSAnJyl7XG4gICAgICAgICAgICAgICAgcGFyZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdmaWxsZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbn07XG5cbklucHV0SGFuZGxlci5pbml0KCk7IiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgVXNwIEltcHJlc3Npb25zIGhhbmRsZXJcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5jb25zdCBVc3BJbXByZXNzaW9uc0hhbmRsZXIgPSB7XG5cbiAgICB0aW1lb3V0OiBudWxsLFxuXG4gICAgaW5pdDogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgY29uc3QgdXNwSW1wcmVzc2lvbnNUcmF5cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5qcy11c3AtaW1wcmVzc2lvbnMnKTtcbiAgICAgICAgY29uc3QgdXNwSW1wcmVzc2lvbnNUcmF5c0xlbmd0aCA9IHVzcEltcHJlc3Npb25zVHJheXMubGVuZ3RoO1xuXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB1c3BJbXByZXNzaW9uc1RyYXlzTGVuZ3RoOyBpKyspIHtcblxuICAgICAgICAgICAgY29uc3QgdXNwSW1wcmVzc2lvbnNUcmF5ID0gdXNwSW1wcmVzc2lvbnNUcmF5c1tpXTtcblxuICAgICAgICAgICAgY29uc3QgdXNwSW1wcmVzc2lvblNsaWRlciA9IG5ldyBVc3BJbXByZXNzaW9uU2xpZGVyKHVzcEltcHJlc3Npb25zVHJheSk7XG4gICAgICAgICAgICB1c3BJbXByZXNzaW9uU2xpZGVyLmF1dG9TbGlkZSgpO1xuXG4gICAgICAgIH1cbiAgICB9LFxufTtcblxuY2xhc3MgVXNwSW1wcmVzc2lvblNsaWRlciB7XG5cbiAgICBjb25zdHJ1Y3RvcihzbGlkZXIpIHtcbiAgICAgICAgdGhpcy5zbGlkZXIgPSBzbGlkZXI7XG4gICAgICAgIHRoaXMuc2xpZGVzICA9IHRoaXMuc2xpZGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5qcy11c3AtaW1wcmVzc2lvbicpO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFNsaWRlID0gMDtcbiAgICAgICAgdGhpcy5zbGlkZUludGVydmFsID0gNDAwMDtcbiAgICB9XG5cbiAgICBhdXRvU2xpZGUoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5uZXh0U2xpZGUoKTtcbiAgICAgICAgICAgIHNlbGYuYXV0b1NsaWRlKCk7XG4gICAgICAgIH0sIHRoaXMuc2xpZGVJbnRlcnZhbCk7XG4gICAgfVxuXG4gICAgbmV4dFNsaWRlKCkge1xuXG4gICAgICAgIHRoaXMuY3VycmVudFNsaWRlICsrO1xuICAgICAgICBpZih0aGlzLmN1cnJlbnRTbGlkZSA+PSB0aGlzLnNsaWRlcy5sZW5ndGgpIHRoaXMuY3VycmVudFNsaWRlID0gMDtcblxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy5zbGlkZXMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICAgICAgY29uc3Qgc2xpZGUgPSB0aGlzLnNsaWRlc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHNsaWRlSWQgPSBzbGlkZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdXNwJyk7XG5cbiAgICAgICAgICAgIGlmKCBzbGlkZUlkID09IHRoaXMuY3VycmVudFNsaWRlICkge1xuICAgICAgICAgICAgICAgIHNsaWRlLmNsYXNzTGlzdC5hZGQoJ2lzLWFjdGl2ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBzbGlkZS5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuVXNwSW1wcmVzc2lvbnNIYW5kbGVyLmluaXQoKTsiLCIvKiBFeGFtcGxlXG5cbmNvbnN0IGhlYWRlckltYWdlU2xpZGVyU2V0dGluZyA9IG5ldyBTbGlkZXJQcm9qZWN0b3JTZXR0aW5nKHtcbiAgICBzbGlkZXJQcm9qZWN0b3JJZDogJ2hlYWRlci1pbWFnZS1zbGlkZXInLFxuICAgIHNsaWRlUXVlcnk6ICcjaGVhZGVyLWltYWdlLXNsaWRlciAucGxhY2Vob2xkZXIgZmlndXJlJyxcbiAgICBkb3RzOiAnI2hlYWRlci1pbWFnZS1zbGlkZXIgLnNsaWRlci1uYXZpZ2F0aW9uLWxhYmVscyAubmF2aWdhdGlvbiBzcGFuJyxcbiAgICBjYXB0aW9uczogJyNoZWFkZXItaW1hZ2Utc2xpZGVyIC5zbGlkZXItbmF2aWdhdGlvbi1sYWJlbHMgLmNhcHRpb24gcCcsXG4gICAgYXV0b1NsaWRlcjogdHJ1ZSxcbiAgICBzbGlkZXJJbnRlcnZhbDogNDAwMFxufSk7XG5oZWFkZXJJbWFnZVNsaWRlclNldHRpbmcgPSBoZWFkZXJJbWFnZVNsaWRlclNldHRpbmcucHJlcGFyZVBhcmFtZXRlcnMoKTtcblxuY29uc3QgaGVhZGVySW1hZ2VTbGlkZXIgPSBuZXcgU2xpZGVyUHJvamVjdG9yKGhlYWRlckltYWdlU2xpZGVyU2V0dGluZykuaW5pdCgpO1xuXG4gKi9cblxucmVxdWlyZSgnaGFtbWVyanMnKTtcblxuY29uc3QgQ2xpZW50UmV2aWV3c0hhbmRsZXIgPSB7XG5cbiAgaW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGNsaWVudFJldmlld3MgPSBbXTtcblxuICAgICAgY29uc3QgY2xpZW50UmV2aWV3Q29udGFpbmVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5qcy1jbGllbnQtcmV2aWV3cycpO1xuICAgICAgY29uc3QgY2xpZW50UmV2aWV3Q29udGFpbmVyc0xlbmd0aCA9IGNsaWVudFJldmlld0NvbnRhaW5lcnMubGVuZ3RoO1xuXG4gICAgICBmb3IobGV0IGkgPTA7IGkgPCBjbGllbnRSZXZpZXdDb250YWluZXJzTGVuZ3RoOyBpKyspe1xuXG4gICAgICAgICAgY29uc3QgY2xpZW50UmV2aWV3ID0gY2xpZW50UmV2aWV3Q29udGFpbmVyc1tpXTtcbiAgICAgICAgICBjb25zdCBjbGllbnRSZXZpZXdJZCA9IGNsaWVudFJldmlldy5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG5cbiAgICAgICAgICBpZihjbGllbnRSZXZpZXdJZCAhPT0gbnVsbCl7XG5cbiAgICAgICAgICAgICAgY2xpZW50UmV2aWV3cy5wdXNoKCBuZXcgQ2xpZW50UmV2aWV3KCB7XG4gICAgICAgICAgICAgICAgICBjbGllbnRSZXZpZXdJZDogY2xpZW50UmV2aWV3SWQsXG4gICAgICAgICAgICAgICAgICBzbGlkZVF1ZXJ5OiAnIycgKyBjbGllbnRSZXZpZXdJZCArJyAuanMtY2xpZW50LXJldmlldy1zbGlkZScsXG4gICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uQnV0dG9uczogJyMnICsgY2xpZW50UmV2aWV3SWQgKycgLmpzLWNsaWVudC1yZXZpZXdzLWJ1dHRvbicgLFxuICAgICAgICAgICAgICB9ICkuaW5pdCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBjb25zb2xlLmxvZygnQW4gaW1hZ2Ugc2xpZGVyIGhhcyBubyBpZC4uLicpO1xuICAgICAgfVxuICB9XG59O1xuXG5DbGllbnRSZXZpZXdzSGFuZGxlci5pbml0KCk7XG5cbmZ1bmN0aW9uIENsaWVudFJldmlldyhzZXR0aW5ncykge1xuXG4gICAgLy9EZWZpbmUgU2xpZGVyUHJvamVjdG9yIG9iamVjdFxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuY2xpZW50UmV2aWV3T2JqZWN0ID0gJyc7XG5cbiAgICAvL1NsaWRlUGFyYW1ldGVyc1xuICAgIHRoaXMuYWN0aXZlU2xpZGVJZCA9IDA7XG4gICAgdGhpcy5wcmV2aW91c1NsaWRlSWQgPSAwO1xuICAgIHRoaXMubmV4dFNsaWRlSWQgPSAwO1xuICAgIHRoaXMuYXZhaWxhYmxlU2xpZGVzID0gMTtcbiAgICB0aGlzLnNsaWRlcyA9IFtdO1xuXG4gICAgdGhpcy5zZXR0aW5ncyA9IHt9O1xuXG4gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIC8vQXBwZW5kIHNldHRpbmdzIHRvIHNlbGZcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuXG4gICAgICAgIC8vQXNzaWduIG5lZWRlZCBlbGVtZW50cyBhbmQgY2FsY3VsYXRpb25zXG4gICAgICAgIHRoaXMuY2xpZW50UmV2aWV3T2JqZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZXR0aW5ncy5jbGllbnRSZXZpZXdJZCk7XG4gICAgICAgIHRoaXMuc2xpZGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLnNldHRpbmdzLnNsaWRlUXVlcnkpO1xuICAgICAgICB0aGlzLmF2YWlsYWJsZVNsaWRlcyA9IHRoaXMuc2xpZGVzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5hY3RpdmVTbGlkZUlkID0gMDtcblxuICAgICAgICAvLyBTZXQgYWN0aXZlIHNsaWRlIChhbmQgcG9zc2libGUgcHJldmlvdXMgYW5kIG5leHQgY2xhc3NlcylcbiAgICAgICAgdGhpcy5zZXRTbGlkZSgpO1xuXG4gICAgICAgIC8vIFN3aXBlIGludGVyYWN0aW9uXG4gICAgICAgIGNvbnN0IHN3aXBlR2VzdHVyZXMgPSBuZXcgSGFtbWVyKHRoaXMuY2xpZW50UmV2aWV3T2JqZWN0KTtcbiAgICAgICAgc3dpcGVHZXN0dXJlcy5vbignc3dpcGVsZWZ0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5uZXh0U2xpZGUoKTtcbiAgICAgICAgICAgIHNlbGYuc2V0U2xpZGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN3aXBlR2VzdHVyZXMub24oJ3N3aXBlcmlnaHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZWxmLnByZXZpb3VzU2xpZGUoKTtcbiAgICAgICAgICAgIHNlbGYuc2V0U2xpZGUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubmF2aWdhdGlvbkJ1dHRvbnMgIT09ICcnKSB7XG5cbiAgICAgICAgICAgIC8vIENsaWNrIGludGVyYWN0aW9uXG4gICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uQnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZXR0aW5ncy5uYXZpZ2F0aW9uQnV0dG9ucyk7XG4gICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uQnV0dG9uc0xlbmd0aCA9IG5hdmlnYXRpb25CdXR0b25zLmxlbmd0aDtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBuYXZpZ2F0aW9uQnV0dG9uc0xlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uQnV0dG9uID0gbmF2aWdhdGlvbkJ1dHRvbnNbaV07XG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGlja05hdmlnYXRpb25CdXR0b24odGhpcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH07XG5cblxuICAgIHRoaXMubmV4dFNsaWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVNsaWRlSWQrKztcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlU2xpZGVJZCA+PSB0aGlzLmF2YWlsYWJsZVNsaWRlcykgdGhpcy5hY3RpdmVTbGlkZUlkID0gMDtcblxuICAgICAgICBpZiAoc2VsZi5zZXR0aW5ncy5kZWZpbmVkUHJldmlvdXNOZXh0KSB0aGlzLnNldFByZXZpb3VzQW5kTmV4dFNsaWRlKCk7XG4gICAgfTtcblxuICAgIHRoaXMucHJldmlvdXNTbGlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVTbGlkZUlkLS07XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVNsaWRlSWQgPCAwKSB0aGlzLmFjdGl2ZVNsaWRlSWQgPSB0aGlzLmF2YWlsYWJsZVNsaWRlcyAtIDE7XG5cbiAgICAgICAgaWYgKHNlbGYuc2V0dGluZ3MuZGVmaW5lZFByZXZpb3VzTmV4dCkgdGhpcy5zZXRQcmV2aW91c0FuZE5leHRTbGlkZSgpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldFByZXZpb3VzQW5kTmV4dFNsaWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm5leHRTbGlkZUlkID0gdGhpcy5hY3RpdmVTbGlkZUlkICsgMTtcbiAgICAgICAgaWYgKHRoaXMubmV4dFNsaWRlSWQgPj0gdGhpcy5hdmFpbGFibGVTbGlkZXMpIHRoaXMubmV4dFNsaWRlSWQgPSAwO1xuXG4gICAgICAgIHRoaXMucHJldmlvdXNTbGlkZUlkID0gdGhpcy5hY3RpdmVTbGlkZUlkIC0gMTtcbiAgICAgICAgaWYgKHRoaXMucHJldmlvdXNTbGlkZUlkIDwgMCkgdGhpcy5wcmV2aW91c1NsaWRlSWQgPSB0aGlzLmF2YWlsYWJsZVNsaWRlcyAtIDE7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0U2xpZGUgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBmb3JtIGVsZW1lbnRzXG4gICAgICAgIGNvbnN0IHNsaWRlc0xlbmd0aCA9IHNlbGYuc2xpZGVzLmxlbmd0aDtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHNsaWRlc0xlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgIGNvbnN0IHNsaWRlID0gc2VsZi5zbGlkZXNbaV07XG5cbiAgICAgICAgICAgIC8vIENvbnZlcnQgZGF0YSBzZXQgYXR0cmlidXRlIHRvIGRlc2lyZWQgdHlwZVxuICAgICAgICAgICAgY29uc3Qgc2xpZGVPcmRlciA9IHBhcnNlSW50KHNsaWRlLmdldEF0dHJpYnV0ZSgnZGF0YS1vcmRlcicpKTtcblxuICAgICAgICAgICAgLy8gUmVtb3ZlIGFuZCBzZXQgYWN0aXZlIGZvciBhbGwgc2xpZGVzXG4gICAgICAgICAgICBpZiAoc2xpZGVPcmRlciAhPT0gc2VsZi5hY3RpdmVTbGlkZUlkKSBzbGlkZS5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgIGVsc2Ugc2xpZGUuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyk7XG5cbiAgICAgICAgICAgIC8vIElmIHdlIHVzZSB0aGUgcHJldmlvdXMgYW5kIG5leHQsIGFsc28gc2V0IHRob3NlIGNsYXNzZXNcbiAgICAgICAgICAgIGlmIChzZWxmLnNldHRpbmdzLmRlZmluZWRQcmV2aW91c05leHQpIHtcblxuICAgICAgICAgICAgICAgIGlmIChzbGlkZU9yZGVyICE9PSBzZWxmLnByZXZpb3VzU2xpZGVJZCkgc2xpZGUuY2xhc3NMaXN0LnJlbW92ZSgncHJldmlvdXMnKTtcbiAgICAgICAgICAgICAgICBlbHNlIHNsaWRlLmNsYXNzTGlzdC5hZGQoJ3ByZXZpb3VzJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2xpZGVPcmRlciAhPT0gc2VsZi5uZXh0U2xpZGVJZCkgc2xpZGUuY2xhc3NMaXN0LnJlbW92ZSgnbmV4dCcpO1xuICAgICAgICAgICAgICAgIGVsc2Ugc2xpZGUuY2xhc3NMaXN0LmFkZCgnbmV4dCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuY2xpY2tOYXZpZ2F0aW9uQnV0dG9uID0gZnVuY3Rpb24gKG5hdkJ1dHRvbikge1xuICAgICAgICBzZWxmLmFjdGl2ZVNsaWRlSWQgPSBwYXJzZUludChuYXZCdXR0b24uZ2V0QXR0cmlidXRlKCdkYXRhLW9yZGVyJykpO1xuICAgICAgICBzZWxmLnNldFByZXZpb3VzQW5kTmV4dFNsaWRlKCk7XG4gICAgICAgIHNlbGYuc2V0U2xpZGUoKTtcblxuICAgICAgICBjb25zdCBuZXh0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxmLnNldHRpbmdzLm5hdmlnYXRpb25CdXR0b25zICsgJy5uZXh0Jyk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxmLnNldHRpbmdzLm5hdmlnYXRpb25CdXR0b25zICsgJy5wcmV2aW91cycpO1xuXG4gICAgICAgIG5leHQuc2V0QXR0cmlidXRlKCdkYXRhLW9yZGVyJywgc2VsZi5uZXh0U2xpZGVJZCk7XG4gICAgICAgIHByZXZpb3VzLnNldEF0dHJpYnV0ZSgnZGF0YS1vcmRlcicsIHNlbGYucHJldmlvdXNTbGlkZUlkKTtcbiAgICB9O1xufSIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgWW91dHViZSBoYW5kbGVyXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgWW91dHViZUhhbmRsZXIgPSB7XG5cbiAgICB5b3V0dWJlQ2xhc3MgOiAnLmpzLXlvdXR1YmUtcGxheWVyJyxcbiAgICBwbGF5ZXJzOiBbXSxcblxuICAgIGluaXQgOiBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICAvLyBHZXQgdGhlIHlvdXR1YmUgcGxheWVycyBjb250YWluZXJzXG4gICAgICAgIGNvbnN0IHlvdXR1YmVQbGF5ZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChZb3V0dWJlSGFuZGxlci55b3V0dWJlQ2xhc3MpO1xuICAgICAgICBjb25zdCB5b3V0dWJlUGxheWVyc0Ftb3VudCA9IHlvdXR1YmVQbGF5ZXJzLmxlbmd0aDtcblxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgeW91dHViZVBsYXllcnNBbW91bnQ7IGkrKyl7XG5cbiAgICAgICAgICAgIGNvbnN0IHlvdXR1YmVQbGF5ZXIgPSB5b3V0dWJlUGxheWVyc1tpXTtcblxuXG4gICAgICAgICAgICBjb25zdCB5b3V0dWJlUGxheWVySWQgPSB5b3V0dWJlUGxheWVyLmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICAgIGlmKHlvdXR1YmVQbGF5ZXJJZCAhPT0gbnVsbCApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gU3RyaXAgdGhlIG5lY2Vzc2FyeSBkYXRhIGZyb20gdGhlIGh0bWwgYW5kIGNyZWF0ZSBvYmplY3RzIGZyb20gaXRcbiAgICAgICAgICAgICAgICBjb25zdCB5b3V0dWJlRWxlbWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHlvdXR1YmVQbGF5ZXIuZ2V0QXR0cmlidXRlKCdpZCcpLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiB5b3V0dWJlUGxheWVyLmdldEF0dHJpYnV0ZSgnZGF0YS15b3V0dWJlLWxpbmsnKSxcbiAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXk6IHBhcnNlSW50KHlvdXR1YmVQbGF5ZXIuZ2V0QXR0cmlidXRlKCdkYXRhLWF1dG8tcGxheScpKSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgWW91dHViZUhhbmRsZXIucGxheWVycy5wdXNoKHlvdXR1YmVFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFbGVtZW50IG5vdCBpbmNsdWRlIGJlY2F1c2UgdGhlcmUgaXNuJ3QgYSBpZCBvbiB0aGUgcGxheWVyXCIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHlvdXR1YmVQbGF5ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoeW91dHViZVBsYXllcnNBbW91bnQgPj0gMSkgWW91dHViZUhhbmRsZXIuaW5pdFlvdXR1YmUoKTtcblxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBleHRlcm5hbCBzY3JpcHQgaXMgbG9hZGVkXG4gICAgICpcbiAgICAgKi9cbiAgICBpbml0WW91dHViZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIFNlZSBpZiBZVCB2YXJpYWJsZSBleGlzdHNcbiAgICAgICAgaWYgKHR5cGVvZihZVCkgPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mKFlULlBsYXllcikgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIC8vIFNldHVwIEFQSSByZWFkeSBmdW5jdGlvblxuICAgICAgICAgICAgd2luZG93Lm9uWW91VHViZVBsYXllckFQSVJlYWR5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgWW91dHViZUhhbmRsZXIubG9hZFBsYXllcnMoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBMb2FkIGV4dGVybmFsIHNjcmlwdFxuICAgICAgICAgICAgZ2V0U2NyaXB0KCdodHRwczovL3d3dy55b3V0dWJlLmNvbS9pZnJhbWVfYXBpJyk7XG4gICAgICAgICAgICAvLyBJZiBZVCBhbHJlYWR5IGV4aXN0cyBsb2FkIHBsYXllclxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgWW91dHViZUhhbmRsZXIubG9hZFBsYXllcnMoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgdGhlIFlvdXR1YmUgcGxheWVyKHMpIHdpdGggcGFyYW1ldGVyc1xuICAgICAqIEFuZCByZXdyaXRlIHRoZSBwbGF5ZXJzIHRvIGtleSB0aGVtIGJ5IHRoZSBlbGVtZW50IGlkXG4gICAgICpcbiAgICAgKi9cbiAgICBsb2FkUGxheWVyczogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgbGV0IHBsYXllcnMgPSBbXTtcblxuICAgICAgICBjb25zdCB5b3V0dWJlUGxheWVyc0Ftb3VudCA9IFlvdXR1YmVIYW5kbGVyLnBsYXllcnMubGVuZ3RoO1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgeW91dHViZVBsYXllcnNBbW91bnQ7IGkrKyl7XG5cbiAgICAgICAgICAgIGxldCB5b3V0dWJlUGxheWVyID0gWW91dHViZUhhbmRsZXIucGxheWVyc1tpXTtcblxuICAgICAgICAgICAgLy8gTG9hZCBwbGF5ZXJcbiAgICAgICAgICAgIHlvdXR1YmVQbGF5ZXIucGxheWVyID0gbmV3IFlULlBsYXllcih5b3V0dWJlUGxheWVyLmlkLHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwMCxcbiAgICAgICAgICAgICAgICB3aWR0aDogMjAwLFxuICAgICAgICAgICAgICAgIHZpZGVvSWQ6IHlvdXR1YmVQbGF5ZXIubGluayxcbiAgICAgICAgICAgICAgICBob3N0OiAnaHR0cHM6Ly93d3cueW91dHViZS1ub2Nvb2tpZS5jb20nLFxuICAgICAgICAgICAgICAgIHBsYXllclZhcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZXN0YnJhbmRpbmc6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJlbDogMCxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWtiOiAxLFxuICAgICAgICAgICAgICAgICAgICBhdXRvcGxheTogeW91dHViZVBsYXllci5hdXRvUGxheVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vICdvblJlYWR5JzogWW91dHViZUhhbmRsZXIub25SZWFkeSxcbiAgICAgICAgICAgICAgICAgICAgJ29uU3RhdGVDaGFuZ2UnOiBZb3V0dWJlSGFuZGxlci5vblN0YXRlQ2hhbmdlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHBsYXllcnNbeW91dHViZVBsYXllci5pZF0gPSB5b3V0dWJlUGxheWVyO1xuXG4gICAgICAgIH1cblxuICAgICAgICBZb3V0dWJlSGFuZGxlci5wbGF5ZXJzID0gcGxheWVycztcblxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBsYXllciBpcyByZWFkeSB0byBwbGF5XG4gICAgICovXG4gICAgb25SZWFkeSA6IGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICAgICAgY29uc3QgcGxheWVyQ29udGFpbmVySWQgPSBldmVudC50YXJnZXQuZ2V0SWZyYW1lKCkuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICBjb25zdCBwbGF5ZXIgPSBZb3V0dWJlSGFuZGxlci5wbGF5ZXJzW3BsYXllckNvbnRhaW5lcklkXS5wbGF5ZXI7XG5cbiAgICAgICAgLy8gU2hvdyB2aWRlb1xuICAgICAgICAvLyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ICQoJyMnICsgcGxheWVyQ29udGFpbmVySWQpLnN0b3AoKS5hbmltYXRlKHsgb3BhY2l0eTogMSB9LDEwMDApIH0sODAwKTtcblxuICAgICAgICAvLyBJZiBub3Qgb24gdGFibGV0IG9yIG1vYmlsZSwgcGxheSBvbiBoaWdoIHF1YWxpdHlcbiAgICAgICAgLy8gcGxheWVyLm11dGUoKTtcbiAgICAgICAgLy8gcGxheWVyLnBsYXlWaWRlbygpO1xuICAgICAgICAvLyBwbGF5ZXIuc2V0UGxheWJhY2tRdWFsaXR5KCdoZDEwODAnKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTGlzdGVuZXIgZm9yIFlvdXR1YmUgc3RhdGUgY2hhbmdlXG4gICAgICovXG4gICAgb25TdGF0ZUNoYW5nZSA6IGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICAgICAgY29uc3QgcGxheWVyQ29udGFpbmVySWQgPSBldmVudC50YXJnZXQuZ2V0SWZyYW1lKCkuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICBjb25zdCBwbGF5ZXIgPSBZb3V0dWJlSGFuZGxlci5wbGF5ZXJzW3BsYXllckNvbnRhaW5lcklkXS5wbGF5ZXI7XG5cbiAgICAgICAgY29uc3QgdmlkZW9TdGF0ZSA9IGV2ZW50LmRhdGE7XG5cbiAgICAgICAgLy8gTG9vcCB2aWRlb1xuICAgICAgICBpZiAoZXZlbnQuZGF0YSA9PT0gWVQuUGxheWVyU3RhdGUuRU5ERUQgKSB7XG4gICAgICAgICAgICBwbGF5ZXIucGxheVZpZGVvKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5Zb3V0dWJlSGFuZGxlci5pbml0KCk7IiwicmVxdWlyZSgnaGFtbWVyanMnKTtcblxuY29uc3QgSW1hZ2VSYWNrSGFuZGxlciA9IHtcblxuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VSYWNrRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtaW1hZ2UtcmFjaycpO1xuICAgICAgICBjb25zdCBpbWFnZVJhY2tFbGVtZW50c0xlbmd0aCA9IGltYWdlUmFja0VsZW1lbnRzLmxlbmd0aDtcblxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgaW1hZ2VSYWNrRWxlbWVudHNMZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBuZXcgSW1hZ2VSYWNrKGltYWdlUmFja0VsZW1lbnRzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuY2xhc3MgSW1hZ2VSYWNrIHtcblxuICAgIGNvbnN0cnVjdG9yKGltYWdlUmFjaykge1xuXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMucmFjayA9IGltYWdlUmFjaztcbiAgICAgICAgdGhpcy5zbGlkZUFyZWEgPSB0aGlzLnJhY2sucXVlcnlTZWxlY3RvcignLmpzLWltYWdlLXJhY2stc2xpZGUnKTtcbiAgICAgICAgdGhpcy5pdGVtcyAgPSB0aGlzLnJhY2sucXVlcnlTZWxlY3RvckFsbCgnLmpzLWltYWdlLXJhY2staXRlbScpO1xuXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID0gdGhpcy5yYWNrLmdldEF0dHJpYnV0ZSgnZGF0YS1kaXJlY3Rpb24nKTtcbiAgICAgICAgdGhpcy5pbWFnZUxvYWRlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY3VycmVudEl0ZW0gPSAwO1xuICAgICAgICB0aGlzLm1heEl0ZW1Qb3NpdGlvbiA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICB0aGlzLm1heFRyYW5zbGF0ZWQgPSAwO1xuXG4gICAgICAgIHRoaXMuc3RlcHMgPSBbXTtcblxuICAgICAgICB0aGlzLnByZXZpb3VzQnV0dG9uID0gdGhpcy5yYWNrLnF1ZXJ5U2VsZWN0b3IoJy5qcy1pbWFnZS1yYWNrLWJ1dHRvbi5wcmV2aW91cycpO1xuICAgICAgICB0aGlzLm5leHRCdXR0b24gPSB0aGlzLnJhY2sucXVlcnlTZWxlY3RvcignLmpzLWltYWdlLXJhY2stYnV0dG9uLm5leHQnKTtcblxuICAgICAgICB0aGlzLmNhbGN1bGF0ZVN0ZXBzKCk7XG5cbiAgICAgICAgaWYoaXNzZXQodGhpcy5wcmV2aW91c0J1dHRvbikpIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5wcmV2aW91c0l0ZW0oKTtcbiAgICAgICAgICAgICAgICBzZWxmLnNldEltYWdlUmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihpc3NldCh0aGlzLm5leHRCdXR0b24pKSB7XG4gICAgICAgICAgICB0aGlzLm5leHRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5uZXh0SXRlbSgpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2V0SW1hZ2VSYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN3aXBlIGludGVyYWN0aW9uXG4gICAgICAgIGNvbnN0IHN3aXBlR2VzdHVyZXMgPSBuZXcgSGFtbWVyKHRoaXMucmFjayk7XG4gICAgICAgIHN3aXBlR2VzdHVyZXMub24oJ3N3aXBlbGVmdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzd2lwZSBMZWZ0Jyk7XG4gICAgICAgICAgICBzZWxmLnN3aXBlTGVmdCgpO1xuICAgICAgICAgICAgc2VsZi5zZXRJbWFnZVJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN3aXBlR2VzdHVyZXMub24oJ3N3aXBlcmlnaHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc3dpcGUgUml0aCcpO1xuICAgICAgICAgICAgc2VsZi5zd2lwZVJpZ2h0KCk7XG4gICAgICAgICAgICBzZWxmLnNldEltYWdlUmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRlYm91bmNlVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMud2FpdERlYm91bmNlID0gNTAwO1xuXG4gICAgICAgIC8vIERlYm91bmNlIFJlc2l6ZVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYoaXNzZXQoc2VsZi5kZWJvdW5jZVRpbWVvdXQpKSBjbGVhclRpbWVvdXQoc2VsZi5kZWJvdW5jZVRpbWVvdXQpO1xuICAgICAgICAgICAgc2VsZi5kZWJvdW5jZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsY3VsYXRlU3RlcHMoKTtcbiAgICAgICAgICAgICAgICBzZWxmLnNldEltYWdlUmFjaygpO1xuICAgICAgICAgICAgfSwgc2VsZi53YWl0RGVib3VuY2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVTdGVwcygpIHtcblxuICAgICAgICAvL1Jlc3QgdGhlIHN0ZXBzIGFycmF5XG4gICAgICAgIHRoaXMuc3RlcHMgPSBbXTtcblxuICAgICAgICAvLyBDYWxjdWxhdGVkIHRoZSBvZmZzZXQgb2YgdGhlIHdob2xlIHJhY2sgdG8ga25vdyBob3cgbXVjaCB3ZSBtYXkgdHJhbnNsYXRlIGF0IG1vc3RcbiAgICAgICAgY29uc3QgYm9keU9mZnNldCA9IHdpbmRvdy5ib2R5T2Zmc2V0KHRoaXMucmFjayk7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlZCB0aGUgYXZhaWxhYmxlIHZpZXcgYXJlYSBvZiB0aGUgcmFja1xuICAgICAgICBsZXQgYXZhaWxhYmxlVmlld0FyZWE7XG4gICAgICAgIGlmKHRoaXMuZGlyZWN0aW9uID09PSAnbHRyJykgYXZhaWxhYmxlVmlld0FyZWEgPSBkb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoIC0gYm9keU9mZnNldC5sZWZ0O1xuICAgICAgICBlbHNlIGF2YWlsYWJsZVZpZXdBcmVhID0gYm9keU9mZnNldC5sZWZ0ICsgdGhpcy5yYWNrLm9mZnNldFdpZHRoO1xuXG4gICAgICAgIC8vIEdldCB0aGUgcmFja2V0IFdpZHRoXG4gICAgICAgIGxldCByYWNrV2lkdGg7XG4gICAgICAgIGlmKHRoaXMuZGlyZWN0aW9uID09PSAnbHRyJykgcmFja1dpZHRoID0gdGhpcy5pdGVtc1t0aGlzLml0ZW1zLmxlbmd0aCAtIDFdLm9mZnNldExlZnQgKyB0aGlzLml0ZW1zW3RoaXMuaXRlbXMubGVuZ3RoIC0gMV0ub2Zmc2V0V2lkdGg7XG4gICAgICAgIGVsc2UgcmFja1dpZHRoID0gKHRoaXMuaXRlbXNbdGhpcy5pdGVtcy5sZW5ndGggLSAxXS5vZmZzZXRMZWZ0IC0gdGhpcy5yYWNrLm9mZnNldFdpZHRoKSAqIC0xO1xuICAgICAgICB0aGlzLm1heFRyYW5zbGF0ZWQgPSByYWNrV2lkdGggLSBhdmFpbGFibGVWaWV3QXJlYTtcblxuICAgICAgICBsZXQgbWF4SXRlbUNhbGN1bGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGltYWdlc0xvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlZCBmb3IgZWFjaCBpdGVtIHRoZSBvZmZzZXQgaW4gdGhlIHJhY2tcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xuXG4gICAgICAgICAgICBpZihpdGVtLm9mZnNldFdpZHRoID09PSAwKSBpbWFnZXNMb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgbGV0IG9mZnNldEZyb21SaWdodFNpZGU7XG4gICAgICAgICAgICBsZXQgb2Zmc2V0RnJvbUxlZnRTaWRlO1xuXG4gICAgICAgICAgICBpZih0aGlzLmRpcmVjdGlvbiA9PT0gJ2x0cicpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXRGcm9tUmlnaHRTaWRlID0gaXRlbS5vZmZzZXRMZWZ0ICsgaXRlbS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICBvZmZzZXRGcm9tTGVmdFNpZGUgPSBpdGVtLm9mZnNldExlZnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvZmZzZXRGcm9tUmlnaHRTaWRlID0gKCh0aGlzLnJhY2sub2Zmc2V0V2lkdGggKiAtIDEpICsgKGl0ZW0ub2Zmc2V0TGVmdCArIGl0ZW0ub2Zmc2V0V2lkdGgpKSAqIC0xO1xuICAgICAgICAgICAgICAgIG9mZnNldEZyb21MZWZ0U2lkZSA9ICgodGhpcy5yYWNrLm9mZnNldFdpZHRoICogLSAxKSArIGl0ZW0ub2Zmc2V0TGVmdCkgKiAtMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQXBwZW5kIHRoZXNlIG9mZnNldCB0byB0aGUgb2Zmc2V0IHBvc2l0aW9uIGFycmF5XG4gICAgICAgICAgICB0aGlzLnN0ZXBzLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRGcm9tTGVmdFNpZGU6IG9mZnNldEZyb21MZWZ0U2lkZSxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0RnJvbVJpZ2h0U2lkZTogb2Zmc2V0RnJvbVJpZ2h0U2lkZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIERlZmluZSB0aGUgY29tcGFyZSB2YXJpYWJsZVxuICAgICAgICAgICAgLy8gRWxzZSB3ZSBoYXZlIHRvIGNyZWF0ZSBhIGNvbXBsZXggaWYgc3RhdGVtZW50Li4uXG4gICAgICAgICAgICBsZXQgb2Zmc2V0Q29tcGFyZVZhcmlhYmxlO1xuICAgICAgICAgICAgaWYodGhpcy5kaXJlY3Rpb24gPT09ICdsdHInKSBvZmZzZXRDb21wYXJlVmFyaWFibGUgPSBvZmZzZXRGcm9tUmlnaHRTaWRlO1xuICAgICAgICAgICAgZWxzZSBvZmZzZXRDb21wYXJlVmFyaWFibGUgPSBvZmZzZXRGcm9tTGVmdFNpZGU7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBtYXggdHJhbnNsYXRlZCBpcyBzbWFsbGVyIGFuZCBpc24ndCBhbHJlYWR5IGRlZmluZWRcbiAgICAgICAgICAgIGlmKG9mZnNldENvbXBhcmVWYXJpYWJsZSA+IHRoaXMubWF4VHJhbnNsYXRlZCAmJiAhbWF4SXRlbUNhbGN1bGF0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1heEl0ZW1Qb3NpdGlvbiA9IChpICsgMSk7XG4gICAgICAgICAgICAgICAgbWF4SXRlbUNhbGN1bGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVjYWxjdWxhdGVkIHdoZW4gdGhlIGltYWdlcyBhcmVuJ3QgbG9hZGVkXG4gICAgICAgIGlmKGltYWdlc0xvYWRlZCkgdGhpcy5pbWFnZUxvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc29sZS5sb2codGhpcy5pbWFnZUxvYWRlZCk7XG5cbiAgICAgICAgLy8gaWYoIWltYWdlc0xvYWRlZCl7XG4gICAgICAgIC8vICAgICBjb25zb2xlLndhcm4oXCJJbWFnZVJhY2s6IFJlY2FsY3VsYXRlZCB3aWR0aCBiZWNhdXNlIGltYWdlcyB3ZXJlbid0IGxvYWRlZC5cIik7XG4gICAgICAgIC8vICAgICBzZXRUaW1lb3V0KHNlbGYuY2FsY3VsYXRlU3RlcHMoKSwgNDAwMCk7XG4gICAgICAgIC8vIH1cblxuICAgIH1cblxuICAgIG5leHRJdGVtKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRJdGVtKys7XG4gICAgICAgIGlmKHRoaXMuY3VycmVudEl0ZW0gPj0gdGhpcy5tYXhJdGVtUG9zaXRpb24pICB0aGlzLmN1cnJlbnRJdGVtID0gdGhpcy5tYXhJdGVtUG9zaXRpb247XG4gICAgfVxuXG4gICAgcHJldmlvdXNJdGVtKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRJdGVtLS07XG4gICAgICAgIGlmKHRoaXMuY3VycmVudEl0ZW0gPCAwKSB0aGlzLmN1cnJlbnRJdGVtID0gMDtcbiAgICB9XG5cbiAgICAvLyBXZSBoYXZlIHRvIHVzZSB0aGVzZSBpbnRlcnZlbmUgZnVuY3Rpb25zIHRvIHN3YXAgdGhlIGZ1bmN0aW9uIHdoZW4gdGhlIHNsaWRlcnMgYXMgYSBkaWZmZXJlbnQgZGlyZWN0aW9uXG4gICAgc3dpcGVMZWZ0KCkge1xuICAgICAgICBpZih0aGlzLmRpcmVjdGlvbiA9PT0gJ2x0cicpIHRoaXMubmV4dEl0ZW0oKTtcbiAgICAgICAgZWxzZSB0aGlzLnByZXZpb3VzSXRlbSgpO1xuICAgIH1cblxuICAgIHN3aXBlUmlnaHQoKSB7XG4gICAgICAgIGlmKHRoaXMuZGlyZWN0aW9uID09PSAnbHRyJykgdGhpcy5wcmV2aW91c0l0ZW0oKTtcbiAgICAgICAgZWxzZSB0aGlzLm5leHRJdGVtKCk7XG4gICAgfVxuXG4gICAgc2V0SW1hZ2VSYWNrKCkge1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGltYWdlIGFyZSBsb2FkIHdoZW4gaW50ZXJhY3Rpb25cbiAgICAgICAgaWYoIXRoaXMuaW1hZ2VMb2FkZWQpe1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiSW1hZ2VSYWNrOiBSZWNhbGN1bGF0ZWQgYmVjYXVzZSBpbWFnZXMgd2VyZW4ndCBsb2FkZWQgeWV0LlwiKTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlU3RlcHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBuZXh0T2Zmc2V0UG9zaXRpb247XG4gICAgICAgIGlmKHRoaXMuZGlyZWN0aW9uID09PSAnbHRyJykgbmV4dE9mZnNldFBvc2l0aW9uID0gJy0nICsgdGhpcy5zdGVwc1t0aGlzLmN1cnJlbnRJdGVtXS5vZmZzZXRGcm9tTGVmdFNpZGU7XG4gICAgICAgIGVsc2UgbmV4dE9mZnNldFBvc2l0aW9uID0gdGhpcy5zdGVwc1t0aGlzLmN1cnJlbnRJdGVtXS5vZmZzZXRGcm9tUmlnaHRTaWRlO1xuXG4gICAgICAgIHRoaXMuc2xpZGVBcmVhLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKCcgKyBuZXh0T2Zmc2V0UG9zaXRpb24gKyAncHgpJztcbiAgICB9XG59XG5cbkltYWdlUmFja0hhbmRsZXIuaW5pdCgpOyIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgU2Nyb2xsIFRvIENsaWNrIGhhbmRsZXJcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5jb25zdCBTY3JvbGxUb0hhbmRsZXIgPSB7XG5cbiAgICAvLyBBbmltYXRpb24gc2V0dGluZ3NcbiAgICBvZmZzZXQgOiA2MCwgLy9waXhlbFxuICAgIGR1cmF0aW9uIDogMTQwMCwgLy9tc1xuXG4gICAgLy8gQW5pbWF0aW9uIHZhcmlhYmxlc1xuICAgIGJvZHkgOiBudWxsLFxuICAgIHN0YXJ0IDogMCxcbiAgICBjaGFuZ2UgOiAwLFxuICAgIGN1cnJlbnRUaW1lIDogMCxcbiAgICBhbGxvd0FuaW1hdGlvbiA6IGZhbHNlLFxuICAgIHNjcm9sbFRvQW5pbWF0aW9uIDogbnVsbCxcblxuICAgIC8vIFdhdGNoIHRoZSBFYXNpbmdGdW5jdGlvbiBoZWxwZXIgZm9yIHRoZSBhdmFpbGFibGUgbWV0aG9kc1xuICAgIGVhc2luZzogJ2Vhc2VJbk91dFF1YWQnLFxuXG4gICAgaW5pdCA6IGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgY29uc3QgYW5jaG9yTGlua3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtc2Nyb2xsLXRvLXRhcmdldCcpO1xuICAgICAgICBjb25zdCBhbmNob3JMaW5rc0Ftb3VudCA9IGFuY2hvckxpbmtzLmxlbmd0aDtcblxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgYW5jaG9yTGlua3NBbW91bnQ7IGkrKykge1xuXG4gICAgICAgICAgICBjb25zdCBhbmNob3JMaW5rID0gYW5jaG9yTGlua3NbaV07XG5cbiAgICAgICAgICAgIGFuY2hvckxpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBTY3JvbGxUb0hhbmRsZXIucHJlcGFyZVNjcm9sbFRvKHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJykpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlIHRoZSBIYW5kbGVyIGZvciB0aGUgYW5pbWF0aW9uXG4gICAgICovXG4gICAgcHJlcGFyZVNjcm9sbFRvIDogZnVuY3Rpb24oZWxlbWVudElkKXtcblxuICAgICAgICAvLyBHZXQgdGhlIHNjcm9sbCB0byBlbGVtZW50XG4gICAgICAgIGVsZW1lbnRJZCA9IGVsZW1lbnRJZC5zdWJzdHIoZWxlbWVudElkLmluZGV4T2YoJyMnKSsxKTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9FbGVtZW50UG9zaXRpb24gPSBzY3JvbGxUb0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgLy8gUmVzZXQgb3IgZGVmaW5lIHRoZSBIYW5kbGVyIHZhcmlhYmxlc1xuICAgICAgICBTY3JvbGxUb0hhbmRsZXIuYm9keSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgU2Nyb2xsVG9IYW5kbGVyLnN0YXJ0ID0gTWF0aC5tYXgoU2Nyb2xsVG9IYW5kbGVyLmJvZHkuc2Nyb2xsVG9wLCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCwgd2luZG93LnBhZ2VZT2Zmc2V0KTsgLy9Vc2UgTWF0aC5tYXggYmVjYXVzZSBzYWZhcmkgZG9lc24ndCBzdXBwb3J0IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BcbiAgICAgICAgU2Nyb2xsVG9IYW5kbGVyLmNoYW5nZSA9ICgoc2Nyb2xsVG9FbGVtZW50UG9zaXRpb24udG9wICsgU2Nyb2xsVG9IYW5kbGVyLnN0YXJ0KSAtIFNjcm9sbFRvSGFuZGxlci5zdGFydCkgLSBTY3JvbGxUb0hhbmRsZXIub2Zmc2V0O1xuICAgICAgICBTY3JvbGxUb0hhbmRsZXIuc3RhcnRUaW1lID0gJ25vdycgaW4gd2luZG93LnBlcmZvcm1hbmNlID8gcGVyZm9ybWFuY2Uubm93KCkgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgU2Nyb2xsVG9IYW5kbGVyLmFsbG93QW5pbWF0aW9uID0gdHJ1ZTtcblxuICAgICAgICAvLyBUcmlnZ2VyIGFuaW1hdGlvblxuICAgICAgICBzY3JvbGxUb0FuaW1hdGlvbiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShTY3JvbGxUb0hhbmRsZXIuYW5pbWF0ZVNjcm9sbCk7XG5cbiAgICAgICAgLy8gU3RvcCBvbiBzY3JvbGxcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIFNjcm9sbFRvSGFuZGxlci5hYm9ydFNjcm9sbEFuaW1hdGlvbik7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIFNjcm9sbFRvSGFuZGxlci5hYm9ydFNjcm9sbEFuaW1hdGlvbik7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Nb3VzZVNjcm9sbCcsIFNjcm9sbFRvSGFuZGxlci5hYm9ydFNjcm9sbEFuaW1hdGlvbik7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXdoZWVsJywgU2Nyb2xsVG9IYW5kbGVyLmFib3J0U2Nyb2xsQW5pbWF0aW9uKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgU2Nyb2xsVG9IYW5kbGVyLmFib3J0U2Nyb2xsQW5pbWF0aW9uKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIFNjcm9sbFRvSGFuZGxlci5hYm9ydFNjcm9sbEFuaW1hdGlvbik7XG5cbiAgICB9LFxuXG4gICAgLypcbiAgICAgKiBBbmltYXRlIHRoZSBzY3JvbGwgcG9zaXRpb25cbiAgICAgKi9cbiAgICBhbmltYXRlU2Nyb2xsIDogZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSBwcm9ncmVzcyBmcm9tIDAgLSAxXG4gICAgICAgIGxldCBwcm9ncmVzcyA9IE1hdGgubWluKDEsICh0aW1lc3RhbXAgLSAgU2Nyb2xsVG9IYW5kbGVyLnN0YXJ0VGltZSkgLyBTY3JvbGxUb0hhbmRsZXIuZHVyYXRpb24pO1xuICAgICAgICBpZihwcm9ncmVzcyA8IDApIHByb2dyZXNzID0gMDtcblxuICAgICAgICAvLyBDb252ZXJ0IHByb2dyZXNzIHdpdGggZWFzaW5nIGZ1bmN0aW9uXG4gICAgICAgIHByb2dyZXNzID0gRWFzaW5nRnVuY3Rpb25zW1Njcm9sbFRvSGFuZGxlci5lYXNpbmddKHByb2dyZXNzKTtcblxuICAgICAgICBjb25zdCBuZXdTY3JvbGxUb3AgPSBTY3JvbGxUb0hhbmRsZXIuc3RhcnQgKyAoIFNjcm9sbFRvSGFuZGxlci5jaGFuZ2UgKiBwcm9ncmVzcyApO1xuXG4gICAgICAgIFNjcm9sbFRvSGFuZGxlci5ib2R5LnNjcm9sbFRvcCA9IG5ld1Njcm9sbFRvcDtcbiAgICAgICAgaWYoIFNjcm9sbFRvSGFuZGxlci5ib2R5LnNjcm9sbFRvcCA9PT0gMCApIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wID0gbmV3U2Nyb2xsVG9wOyAvLyBTYWZhcmkgZG9lc24ndCBzdXBwb3J0IHNvIGlmIFNjcm9sbFRvSGFuZGxlci5ib2R5LnNjcm9sbFRvcCBpcyAwIGZvcmNlIHRoZSBzY3JvbGwgcG9zaXRpb24gdGhyb3VnaCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcFxuXG4gICAgICAgIGlmKHByb2dyZXNzIDwgMSAmJiBTY3JvbGxUb0hhbmRsZXIuYWxsb3dBbmltYXRpb24pe1xuICAgICAgICAgICAgc2Nyb2xsVG9BbmltYXRpb24gPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoU2Nyb2xsVG9IYW5kbGVyLmFuaW1hdGVTY3JvbGwpO1xuICAgICAgICB9XG5cbiAgICB9LFxuXG4gICAgLypcbiAgICAgKiBBYm9ydCB0aGUgc2Nyb2xsIGFuaW1hdGlvblxuICAgICAqL1xuICAgIGFib3J0U2Nyb2xsQW5pbWF0aW9uIDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIFNjcm9sbFRvSGFuZGxlci5hbGxvd0FuaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShTY3JvbGxUb0hhbmRsZXIuc2Nyb2xsVG9BbmltYXRpb24pO1xuICAgIH1cblxufTtcblxuU2Nyb2xsVG9IYW5kbGVyLmluaXQoKTsiLCIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoKSA6XG4gICAgICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgICAgICAgICAoZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogQHRoaXMge1Byb21pc2V9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZmluYWxseUNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgICAgIHJldHVybiB0aGlzLnRoZW4oXG4gICAgICAgICAgICBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3IucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4vLyBTdG9yZSBzZXRUaW1lb3V0IHJlZmVyZW5jZSBzbyBwcm9taXNlLXBvbHlmaWxsIHdpbGwgYmUgdW5hZmZlY3RlZCBieVxuLy8gb3RoZXIgY29kZSBtb2RpZnlpbmcgc2V0VGltZW91dCAobGlrZSBzaW5vbi51c2VGYWtlVGltZXJzKCkpXG4gICAgdmFyIHNldFRpbWVvdXRGdW5jID0gc2V0VGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4vLyBQb2x5ZmlsbCBmb3IgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbiAgICBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBQcm9taXNlKGZuKSB7XG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldycpO1xuICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICAvKiogQHR5cGUgeyFudW1iZXJ9ICovXG4gICAgICAgIHRoaXMuX3N0YXRlID0gMDtcbiAgICAgICAgLyoqIEB0eXBlIHshYm9vbGVhbn0gKi9cbiAgICAgICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICAvKiogQHR5cGUge1Byb21pc2V8dW5kZWZpbmVkfSAqL1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqIEB0eXBlIHshQXJyYXk8IUZ1bmN0aW9uPn0gKi9cbiAgICAgICAgdGhpcy5fZGVmZXJyZWRzID0gW107XG5cbiAgICAgICAgZG9SZXNvbHZlKGZuLCB0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGUoc2VsZiwgZGVmZXJyZWQpIHtcbiAgICAgICAgd2hpbGUgKHNlbGYuX3N0YXRlID09PSAzKSB7XG4gICAgICAgICAgICBzZWxmID0gc2VsZi5fdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuX3N0YXRlID09PSAwKSB7XG4gICAgICAgICAgICBzZWxmLl9kZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5faGFuZGxlZCA9IHRydWU7XG4gICAgICAgIFByb21pc2UuX2ltbWVkaWF0ZUZuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGNiID0gc2VsZi5fc3RhdGUgPT09IDEgPyBkZWZlcnJlZC5vbkZ1bGZpbGxlZCA6IGRlZmVycmVkLm9uUmVqZWN0ZWQ7XG4gICAgICAgICAgICBpZiAoY2IgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAoc2VsZi5fc3RhdGUgPT09IDEgPyByZXNvbHZlIDogcmVqZWN0KShkZWZlcnJlZC5wcm9taXNlLCBzZWxmLl92YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJldDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0ID0gY2Ioc2VsZi5fdmFsdWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlamVjdChkZWZlcnJlZC5wcm9taXNlLCBlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKGRlZmVycmVkLnByb21pc2UsIHJldCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmUoc2VsZiwgbmV3VmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFByb21pc2UgUmVzb2x1dGlvbiBQcm9jZWR1cmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9taXNlcy1hcGx1cy9wcm9taXNlcy1zcGVjI3RoZS1wcm9taXNlLXJlc29sdXRpb24tcHJvY2VkdXJlXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IHNlbGYpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBwcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0c2VsZi4nKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICh0eXBlb2YgbmV3VmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciB0aGVuID0gbmV3VmFsdWUudGhlbjtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gMztcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmluYWxlKHNlbGYpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBkb1Jlc29sdmUoYmluZCh0aGVuLCBuZXdWYWx1ZSksIHNlbGYpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5fc3RhdGUgPSAxO1xuICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIGZpbmFsZShzZWxmKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KHNlbGYsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVqZWN0KHNlbGYsIG5ld1ZhbHVlKSB7XG4gICAgICAgIHNlbGYuX3N0YXRlID0gMjtcbiAgICAgICAgc2VsZi5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgZmluYWxlKHNlbGYpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmFsZShzZWxmKSB7XG4gICAgICAgIGlmIChzZWxmLl9zdGF0ZSA9PT0gMiAmJiBzZWxmLl9kZWZlcnJlZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBQcm9taXNlLl9pbW1lZGlhdGVGbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGYuX2hhbmRsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5fdW5oYW5kbGVkUmVqZWN0aW9uRm4oc2VsZi5fdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHNlbGYuX2RlZmVycmVkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaGFuZGxlKHNlbGYsIHNlbGYuX2RlZmVycmVkc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5fZGVmZXJyZWRzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSB7XG4gICAgICAgIHRoaXMub25GdWxmaWxsZWQgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IG51bGw7XG4gICAgICAgIHRoaXMub25SZWplY3RlZCA9IHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVuY3Rpb24nID8gb25SZWplY3RlZCA6IG51bGw7XG4gICAgICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFrZSBhIHBvdGVudGlhbGx5IG1pc2JlaGF2aW5nIHJlc29sdmVyIGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmVcbiAgICAgKiBvbkZ1bGZpbGxlZCBhbmQgb25SZWplY3RlZCBhcmUgb25seSBjYWxsZWQgb25jZS5cbiAgICAgKlxuICAgICAqIE1ha2VzIG5vIGd1YXJhbnRlZXMgYWJvdXQgYXN5bmNocm9ueS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb1Jlc29sdmUoZm4sIHNlbGYpIHtcbiAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZuKFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNlbGYsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHNlbGYsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIHJlamVjdChzZWxmLCBleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBQcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uKG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbiAgICB9O1xuXG4gICAgUHJvbWlzZS5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdmFyIHByb20gPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihub29wKTtcblxuICAgICAgICBoYW5kbGUodGhpcywgbmV3IEhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb20pKTtcbiAgICAgICAgcmV0dXJuIHByb207XG4gICAgfTtcblxuICAgIFByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gPSBmaW5hbGx5Q29uc3RydWN0b3I7XG5cbiAgICBQcm9taXNlLmFsbCA9IGZ1bmN0aW9uKGFycikge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBpZiAoIWFyciB8fCB0eXBlb2YgYXJyLmxlbmd0aCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheScpO1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gYXJncy5sZW5ndGg7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlcyhpLCB2YWwpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsICYmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRoZW4gPSB2YWwudGhlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyhpLCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcmVzKGksIGFyZ3NbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgUHJvbWlzZS5yZXNvbHZlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIFByb21pc2UucmVqZWN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgcmVqZWN0KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIFByb21pc2UucmFjZSA9IGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsdWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzW2ldLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuLy8gVXNlIHBvbHlmaWxsIGZvciBzZXRJbW1lZGlhdGUgZm9yIHBlcmZvcm1hbmNlIGdhaW5zXG4gICAgUHJvbWlzZS5faW1tZWRpYXRlRm4gPVxuICAgICAgICAodHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfSkgfHxcbiAgICAgICAgZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXRGdW5jKGZuLCAwKTtcbiAgICAgICAgfTtcblxuICAgIFByb21pc2UuX3VuaGFuZGxlZFJlamVjdGlvbkZuID0gZnVuY3Rpb24gX3VuaGFuZGxlZFJlamVjdGlvbkZuKGVycikge1xuICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOicsIGVycik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKiBAc3VwcHJlc3Mge3VuZGVmaW5lZFZhcnN9ICovXG4gICAgdmFyIGdsb2JhbE5TID0gKGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyB0aGUgb25seSByZWxpYWJsZSBtZWFucyB0byBnZXQgdGhlIGdsb2JhbCBvYmplY3QgaXNcbiAgICAgICAgLy8gYEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKClgXG4gICAgICAgIC8vIEhvd2V2ZXIsIHRoaXMgY2F1c2VzIENTUCB2aW9sYXRpb25zIGluIENocm9tZSBhcHBzLlxuICAgICAgICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0Jyk7XG4gICAgfSkoKTtcblxuICAgIGlmICghKCdQcm9taXNlJyBpbiBnbG9iYWxOUykpIHtcbiAgICAgICAgZ2xvYmFsTlNbJ1Byb21pc2UnXSA9IFByb21pc2U7XG4gICAgfSBlbHNlIGlmICghZ2xvYmFsTlMuUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSkge1xuICAgICAgICBnbG9iYWxOUy5Qcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddID0gZmluYWxseUNvbnN0cnVjdG9yO1xuICAgIH1cblxufSkpKTsiLCJOdW1iZXIuaXNJbnRlZ2VyID0gTnVtYmVyLmlzSW50ZWdlciB8fCBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgaXNGaW5pdGUodmFsdWUpICYmXG4gICAgICAgIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZTtcbn07IiwidmFyIHNjb3BlID0gKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgICAgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYpIHx8XG4gICAgICAgICAgICB3aW5kb3c7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJUaW1lb3V0KTtcbn07XG5leHBvcnRzLnNldEludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJJbnRlcnZhbCk7XG59O1xuZXhwb3J0cy5jbGVhclRpbWVvdXQgPVxuZXhwb3J0cy5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dCkge1xuICBpZiAodGltZW91dCkge1xuICAgIHRpbWVvdXQuY2xvc2UoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbChzY29wZSwgdGhpcy5faWQpO1xufTtcblxuLy8gRG9lcyBub3Qgc3RhcnQgdGhlIHRpbWUsIGp1c3Qgc2V0cyB1cCB0aGUgbWVtYmVycyBuZWVkZWQuXG5leHBvcnRzLmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0sIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSBtc2Vjcztcbn07XG5cbmV4cG9ydHMudW5lbnJvbGwgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSAtMTtcbn07XG5cbmV4cG9ydHMuX3VucmVmQWN0aXZlID0gZXhwb3J0cy5hY3RpdmUgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcblxuICB2YXIgbXNlY3MgPSBpdGVtLl9pZGxlVGltZW91dDtcbiAgaWYgKG1zZWNzID49IDApIHtcbiAgICBpdGVtLl9pZGxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiBvblRpbWVvdXQoKSB7XG4gICAgICBpZiAoaXRlbS5fb25UaW1lb3V0KVxuICAgICAgICBpdGVtLl9vblRpbWVvdXQoKTtcbiAgICB9LCBtc2Vjcyk7XG4gIH1cbn07XG5cbi8vIHNldGltbWVkaWF0ZSBhdHRhY2hlcyBpdHNlbGYgdG8gdGhlIGdsb2JhbCBvYmplY3RcbnJlcXVpcmUoXCJzZXRpbW1lZGlhdGVcIik7XG4vLyBPbiBzb21lIGV4b3RpYyBlbnZpcm9ubWVudHMsIGl0J3Mgbm90IGNsZWFyIHdoaWNoIG9iamVjdCBgc2V0aW1tZWRpYXRlYCB3YXNcbi8vIGFibGUgdG8gaW5zdGFsbCBvbnRvLiAgU2VhcmNoIGVhY2ggcG9zc2liaWxpdHkgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4vLyBgc2V0aW1tZWRpYXRlYCBsaWJyYXJ5LlxuZXhwb3J0cy5zZXRJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuc2V0SW1tZWRpYXRlKTtcbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5jbGVhckltbWVkaWF0ZSk7XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCwgdW5kZWZpbmVkKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICBpZiAoZ2xvYmFsLnNldEltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5leHRIYW5kbGUgPSAxOyAvLyBTcGVjIHNheXMgZ3JlYXRlciB0aGFuIHplcm9cbiAgICB2YXIgdGFza3NCeUhhbmRsZSA9IHt9O1xuICAgIHZhciBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICB2YXIgZG9jID0gZ2xvYmFsLmRvY3VtZW50O1xuICAgIHZhciByZWdpc3RlckltbWVkaWF0ZTtcblxuICAgIGZ1bmN0aW9uIHNldEltbWVkaWF0ZShjYWxsYmFjaykge1xuICAgICAgLy8gQ2FsbGJhY2sgY2FuIGVpdGhlciBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBuZXcgRnVuY3Rpb24oXCJcIiArIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICAgIC8vIENvcHkgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAxXTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3JlIGFuZCByZWdpc3RlciB0aGUgdGFza1xuICAgICAgdmFyIHRhc2sgPSB7IGNhbGxiYWNrOiBjYWxsYmFjaywgYXJnczogYXJncyB9O1xuICAgICAgdGFza3NCeUhhbmRsZVtuZXh0SGFuZGxlXSA9IHRhc2s7XG4gICAgICByZWdpc3RlckltbWVkaWF0ZShuZXh0SGFuZGxlKTtcbiAgICAgIHJldHVybiBuZXh0SGFuZGxlKys7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaGFuZGxlKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuKHRhc2spIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdGFzay5jYWxsYmFjaztcbiAgICAgICAgdmFyIGFyZ3MgPSB0YXNrLmFyZ3M7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuSWZQcmVzZW50KGhhbmRsZSkge1xuICAgICAgICAvLyBGcm9tIHRoZSBzcGVjOiBcIldhaXQgdW50aWwgYW55IGludm9jYXRpb25zIG9mIHRoaXMgYWxnb3JpdGhtIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgb25lIGhhdmUgY29tcGxldGVkLlwiXG4gICAgICAgIC8vIFNvIGlmIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIGEgdGFzaywgd2UnbGwgbmVlZCB0byBkZWxheSB0aGlzIGludm9jYXRpb24uXG4gICAgICAgIGlmIChjdXJyZW50bHlSdW5uaW5nQVRhc2spIHtcbiAgICAgICAgICAgIC8vIERlbGF5IGJ5IGRvaW5nIGEgc2V0VGltZW91dC4gc2V0SW1tZWRpYXRlIHdhcyB0cmllZCBpbnN0ZWFkLCBidXQgaW4gRmlyZWZveCA3IGl0IGdlbmVyYXRlZCBhXG4gICAgICAgICAgICAvLyBcInRvbyBtdWNoIHJlY3Vyc2lvblwiIGVycm9yLlxuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICAgICAgICAgIGlmICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBydW4odGFzayk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHsgcnVuSWZQcmVzZW50KGhhbmRsZSk7IH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhblVzZVBvc3RNZXNzYWdlKCkge1xuICAgICAgICAvLyBUaGUgdGVzdCBhZ2FpbnN0IGBpbXBvcnRTY3JpcHRzYCBwcmV2ZW50cyB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gYmVpbmcgaW5zdGFsbGVkIGluc2lkZSBhIHdlYiB3b3JrZXIsXG4gICAgICAgIC8vIHdoZXJlIGBnbG9iYWwucG9zdE1lc3NhZ2VgIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBhbmQgY2FuJ3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICBpZiAoZ2xvYmFsLnBvc3RNZXNzYWdlICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgICAgICAgICAgdmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG9sZE9uTWVzc2FnZSA9IGdsb2JhbC5vbm1lc3NhZ2U7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShcIlwiLCBcIipcIik7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gb2xkT25NZXNzYWdlO1xuICAgICAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgLy8gSW5zdGFsbHMgYW4gZXZlbnQgaGFuZGxlciBvbiBgZ2xvYmFsYCBmb3IgdGhlIGBtZXNzYWdlYCBldmVudDogc2VlXG4gICAgICAgIC8vICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5wb3N0TWVzc2FnZVxuICAgICAgICAvLyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1zLmh0bWwjY3Jvc3NEb2N1bWVudE1lc3NhZ2VzXG5cbiAgICAgICAgdmFyIG1lc3NhZ2VQcmVmaXggPSBcInNldEltbWVkaWF0ZSRcIiArIE1hdGgucmFuZG9tKCkgKyBcIiRcIjtcbiAgICAgICAgdmFyIG9uR2xvYmFsTWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuaW5kZXhPZihtZXNzYWdlUHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudCgrZXZlbnQuZGF0YS5zbGljZShtZXNzYWdlUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKG1lc3NhZ2VQcmVmaXggKyBoYW5kbGUsIFwiKlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZShoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIDxzY3JpcHQ+IGVsZW1lbnQ7IGl0cyByZWFkeXN0YXRlY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQgYXN5bmNocm9ub3VzbHkgb25jZSBpdCBpcyBpbnNlcnRlZFxuICAgICAgICAgICAgLy8gaW50byB0aGUgZG9jdW1lbnQuIERvIHNvLCB0aHVzIHF1ZXVpbmcgdXAgdGhlIHRhc2suIFJlbWVtYmVyIHRvIGNsZWFuIHVwIG9uY2UgaXQncyBiZWVuIGNhbGxlZC5cbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaHRtbC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIHNjcmlwdCA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaHRtbC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBzdXBwb3J0ZWQsIHdlIHNob3VsZCBhdHRhY2ggdG8gdGhlIHByb3RvdHlwZSBvZiBnbG9iYWwsIHNpbmNlIHRoYXQgaXMgd2hlcmUgc2V0VGltZW91dCBldCBhbC4gbGl2ZS5cbiAgICB2YXIgYXR0YWNoVG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbCk7XG4gICAgYXR0YWNoVG8gPSBhdHRhY2hUbyAmJiBhdHRhY2hUby5zZXRUaW1lb3V0ID8gYXR0YWNoVG8gOiBnbG9iYWw7XG5cbiAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IGUuZy4gYnJvd3NlcmlmeSBlbnZpcm9ubWVudHMuXG4gICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwoZ2xvYmFsLnByb2Nlc3MpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIikge1xuICAgICAgICAvLyBGb3IgTm9kZS5qcyBiZWZvcmUgMC45XG4gICAgICAgIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGNhblVzZVBvc3RNZXNzYWdlKCkpIHtcbiAgICAgICAgLy8gRm9yIG5vbi1JRTEwIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChnbG9iYWwuTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgICAgLy8gRm9yIHdlYiB3b3JrZXJzLCB3aGVyZSBzdXBwb3J0ZWRcbiAgICAgICAgaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZG9jICYmIFwib25yZWFkeXN0YXRlY2hhbmdlXCIgaW4gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpIHtcbiAgICAgICAgLy8gRm9yIElFIDbigJM4XG4gICAgICAgIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCk7XG4gICAgfVxuXG4gICAgYXR0YWNoVG8uc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlO1xuICAgIGF0dGFjaFRvLmNsZWFySW1tZWRpYXRlID0gY2xlYXJJbW1lZGlhdGU7XG59KHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gdHlwZW9mIGdsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMgOiBnbG9iYWwgOiBzZWxmKSk7XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTmF2aWdhdGlvbiBoYW5kbGVyXG4gICAtIEhhbmRsZXMgdGhlIG5hdmlnYXRpb24gY29tcG9uZW50IHdoaWNoIGhhcyB0aGUgcHJvcGVyIGNsYXNzZXMuXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgTmF2aWdhdGlvbkhhbmRsZXIgPSB7XG5cbiAgICBuYXZpZ2F0aW9uTm9kZTogbnVsbCxcbiAgICBzY3JvbGxlZExvZzogMCxcbiAgICBpc09wZW46IGZhbHNlLFxuXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IG5hdlRyaWdnZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpzLW5hdi10cmlnZ2VyJyk7XG4gICAgICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWNsb3NlLW92ZXJsYXktbmF2Jyk7XG4gICAgICAgIE5hdmlnYXRpb25IYW5kbGVyLm5hdmlnYXRpb25Ob2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLW92ZXJsYXktbmF2Jyk7XG5cbiAgICAgICAgaWYoaXNzZXQoTmF2aWdhdGlvbkhhbmRsZXIubmF2aWdhdGlvbk5vZGUpKXtcblxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgaWYoZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScpIE5hdmlnYXRpb25IYW5kbGVyLmNsb3NlTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBuYXZUcmlnZ2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIE5hdmlnYXRpb25IYW5kbGVyLmluaXROYXZpZ2F0aW9uKG5hdlRyaWdnZXJzW2ldKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBOYXZpZ2F0aW9uSGFuZGxlci5jbG9zZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaW5pdE5hdmlnYXRpb246IGZ1bmN0aW9uIChuYXZUcmlnZ2VyKSB7XG4gICAgICAgIG5hdlRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBOYXZpZ2F0aW9uSGFuZGxlci50b2dnbGVOYXZpZ2F0aW9uLCBmYWxzZSk7XG4gICAgfSxcblxuICAgIHRvZ2dsZU5hdmlnYXRpb246IGZ1bmN0aW9uIChldmVudCkge1xuXG4gICAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBsaW5rIGJlaGF2aW9yXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIE5hdmlnYXRpb25IYW5kbGVyLnNjcm9sbGVkID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuXG4gICAgICAgIC8vIElmIHRoZSBuYXYgaXMgYWxyZWFkeSBhY3RpdmUsIGNvbGxhcHNlIGl0IGFuZCBxdWl0XG4gICAgICAgIGlmIChOYXZpZ2F0aW9uSGFuZGxlci5pc09wZW4pIE5hdmlnYXRpb25IYW5kbGVyLmNsb3NlTmF2aWdhdGlvbigpO1xuICAgICAgICBlbHNlIE5hdmlnYXRpb25IYW5kbGVyLm9wZW5OYXZpZ2F0aW9uKCk7XG5cbiAgICB9LFxuXG4gICAgb3Blbk5hdmlnYXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICBOYXZpZ2F0aW9uSGFuZGxlci5pc09wZW4gPSB0cnVlO1xuICAgICAgICBOYXZpZ2F0aW9uSGFuZGxlci5zY3JvbGxlZCA9IHdpbmRvdy5wYWdlWU9mZnNldDtcblxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ25hdi1pcy1hY3RpdmUnKTtcblxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnc2Nyb2xsLWxvY2snKTtcbiAgICAgICAgfSwgNDAwKTtcbiAgICB9LFxuXG4gICAgY2xvc2VOYXZpZ2F0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnc2Nyb2xsLWxvY2snKTtcbiAgICAgICAgd2luZG93LnBhZ2VZT2Zmc2V0ID0gTmF2aWdhdGlvbkhhbmRsZXIuc2Nyb2xsZWQ7XG5cbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCduYXYtaXMtYWN0aXZlJyk7XG4gICAgICAgIE5hdmlnYXRpb25IYW5kbGVyLmlzT3BlbiA9IGZhbHNlO1xuICAgIH1cbn07XG5cbk5hdmlnYXRpb25IYW5kbGVyLmluaXQoKTsiLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIEdvb2dsZSBNYXBzIGhhbmRsZXJcbiAgICAtIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L2FkZGluZy1hLWdvb2dsZS1tYXBcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5jb25zdCBNYXBzSGFuZGxlciA9IHtcblxuICAgIG1hcDogJycsXG4gICAga2V5OiAnQUl6YVN5QnY2RkpIbjIzTHozUzBqOVQxRFlXcjU3elRCVS1UMG9ZJyxcbiAgICBsb2NhdGlvbjoge2xhdDogNTEuMjYxODIyMiwgbG5nOiA1LjU5NjU1Mzh9LFxuICAgIHN0eWxpbmc6ICcnLFxuXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBHZXQgbWFwIGJ5IGlkXG4gICAgICAgIE1hcHNIYW5kbGVyLm1hcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXAnKTtcblxuICAgICAgICAvLyBDaGVjayBpZiBhIG1hcCBpcyBkZWZpbmVkXG4gICAgICAgIGlmIChpc3NldChNYXBzSGFuZGxlci5tYXApKSB7XG5cbiAgICAgICAgICAgIGlmKE1hcHNIYW5kbGVyLm1hcC5oYXNBdHRyaWJ1dGUoJ2RhdGEtZ29vZ2xlLWxhdCcpKSBNYXBzSGFuZGxlci5sb2NhdGlvbi5sYXQgPSBwYXJzZUZsb2F0KE1hcHNIYW5kbGVyLm1hcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZ29vZ2xlLWxhdCcpKTtcbiAgICAgICAgICAgIGlmKE1hcHNIYW5kbGVyLm1hcC5oYXNBdHRyaWJ1dGUoJ2RhdGEtZ29vZ2xlLWxuZycpKSBNYXBzSGFuZGxlci5sb2NhdGlvbi5sbmcgPSBwYXJzZUZsb2F0KE1hcHNIYW5kbGVyLm1hcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZ29vZ2xlLWxuZycpKTtcblxuICAgICAgICAgICAgTWFwc0hhbmRsZXIuc2V0Q3VzdG9tU3R5bGluZygpO1xuXG4gICAgICAgICAgICAvLyBTZWUgaWYgZ29vZ2xlIHZhcmlhYmxlIGV4aXN0c1xuICAgICAgICAgICAgaWYgKHR5cGVvZihnb29nbGUpID09ICd1bmRlZmluZWQnIHx8IHR5cGVvZihnb29nbGUubWFwcykgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAvLyBMb2FkIGV4dGVybmFsIHNjcmlwdFxuICAgICAgICAgICAgICAgIGdldFNjcmlwdCgnaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2pzP2tleT0nICsgTWFwc0hhbmRsZXIua2V5LCBNYXBzSGFuZGxlci5kcmF3TWFwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgTWFwc0hhbmRsZXIuZHJhd01hcCgpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBkcmF3TWFwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG1hcFxuICAgICAgICBjb25zdCBtYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKE1hcHNIYW5kbGVyLm1hcCwge1xuICAgICAgICAgICAgem9vbTogMTEsXG4gICAgICAgICAgICBjZW50ZXI6IE1hcHNIYW5kbGVyLmxvY2F0aW9uLFxuICAgICAgICAgICAgZGlzYWJsZURlZmF1bHRVSTogdHJ1ZSxcbiAgICAgICAgICAgIHN0eWxlczogTWFwc0hhbmRsZXIuc3R5bGluZ1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gQWRkIGEgbWFya2VyXG4gICAgICAgIGNvbnN0IG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICAgICAgcG9zaXRpb246IE1hcHNIYW5kbGVyLmxvY2F0aW9uLFxuICAgICAgICAgICAgbWFwOiBtYXBcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIHNldEN1c3RvbVN0eWxpbmc6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBNYXBzSGFuZGxlci5zdHlsaW5nID1cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJwb2lcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImxhYmVscy50ZXh0LmZpbGxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiIzc0NzQ3NFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IFwiMjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJwb2kuYXR0cmFjdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnkuZmlsbFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZjM4ZWIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicG9pLmdvdmVybm1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5LmZpbGxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2NlZDdkYlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInBvaS5tZWRpY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeS5maWxsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmZmE1YThcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJwb2kucGFya1wiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnkuZmlsbFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjYzdlNWM4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicG9pLnBsYWNlX29mX3dvcnNoaXBcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5LmZpbGxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2Q2Y2JjN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInBvaS5zY2hvb2xcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5LmZpbGxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2M0YzllOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInBvaS5zcG9ydHNfY29tcGxleFwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnkuZmlsbFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjYjFlYWYxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicm9hZFwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiBcIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInJvYWRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImxhYmVsc1wiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmlzaWJpbGl0eVwiOiBcIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IFwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicm9hZC5oaWdod2F5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeS5maWxsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmZmQ0YTVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJyb2FkLmFydGVyaWFsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeS5maWxsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmZmU5ZDJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJyb2FkLmxvY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJhbGxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZpc2liaWxpdHlcIjogXCJzaW1wbGlmaWVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicm9hZC5sb2NhbFwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnkuZmlsbFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IFwiMy4wMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInJvYWQubG9jYWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5LnN0cm9rZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IFwiMC4zMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInJvYWQubG9jYWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImxhYmVscy50ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXNpYmlsaXR5XCI6IFwib25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJyb2FkLmxvY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJsYWJlbHMudGV4dC5maWxsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiM3NDc0NzRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiBcIjM2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicm9hZC5sb2NhbFwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwibGFiZWxzLnRleHQuc3Ryb2tlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNlOWU1ZGNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiBcIjMwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwidHJhbnNpdC5saW5lXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeVwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmlzaWJpbGl0eVwiOiBcIm9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaWdodG5lc3NcIjogXCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJ3YXRlclwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNkMmU3ZjdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXTtcbiAgICB9XG59O1xuXG5NYXBzSGFuZGxlci5pbml0KCk7IiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiB8IFByZXZlbnQgQm90cyBoYW5kbGVyXG4gfFxuIHwgV2UgbmFtZWQgdGhpcyBjaG9jb2xhdGUgZmFjdG9yeSBhbmQgYmVsb25naW5nIGNvbmZ1c2luZyBqcyBob29rc1xuIHwgdG8gcHJldmVudCBzbWFydCBib3RzIGZyb20gYmxvY2tpbmcgdGhlc2UgdmFyaWFibGUgb3IgZnVuY3Rpb25zLlxuIHxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5jb25zdCBDaG9jb2xhdGVGYWN0b3J5ID0ge1xuXG4gICAgYmFubmVkVmlzaXRvcjogW10sXG5cbiAgICAvKiogR2V0IGFsbCB0aGUgY2hvY29sYXRlIGZhY3RvcnkgYW5kIHN0YXJ0XG4gICAgICogIExvb3BpbmcgdGhyb3VnaCB0aG9zZSBzdGFydCBmbGFzaGluZyB0aWNrZXRzXG4gICAgICovXG4gICAgZW50ZXI6IGZ1bmN0aW9uKClcbiAgICB7XG5cbiAgICAgICAgY29uc3QgY2hvY29sYXRlRmFjdG9yaWVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpzLWNob2NvbGF0ZS1mYWN0b3J5Jyk7XG5cbiAgICAgICAgaWYoaXNzZXQoY2hvY29sYXRlRmFjdG9yaWVzKSl7XG5cbiAgICAgICAgICAgIGNvbnN0IGFtb3VudE9mQ2hvY29sYXRlRmFjdG9yaWVzID0gY2hvY29sYXRlRmFjdG9yaWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBhbW91bnRPZkNob2NvbGF0ZUZhY3RvcmllczsgaSsrKXtcblxuICAgICAgICAgICAgICAgIGNvbnN0IENob2NvbGF0ZUJhciA9IGNob2NvbGF0ZUZhY3Rvcmllc1tpXTtcbiAgICAgICAgICAgICAgICBDaG9jb2xhdGVGYWN0b3J5Ll9mbGFzaFRpY2tldChDaG9jb2xhdGVCYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIElmIGZhY3RvcnkgaGFzIGEgZ29sZGVuIHRpY2tldFxuICAgICAqIFRoZW4gd2UgY2FuIG1ha2UgdGhlbSBnbyBvbiB0aGUgdG91ciBpZiB0aGVyZSBoYXMgYmVlbiBjbGljayBvbiB0aGUgdGlja2V0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hvY29sYXRlQmFyXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfZmxhc2hUaWNrZXQ6IGZ1bmN0aW9uIChjaG9jb2xhdGVCYXIpIHtcblxuICAgICAgICAvLyBUcnkgZ2V0IHRoZSB0aWNrZXQgZnJvbSB0aGUgY2hvY29sYXRlQmFyXG4gICAgICAgIGNvbnN0IGdvbGRlblRpY2tldCA9IGNob2NvbGF0ZUJhci5xdWVyeVNlbGVjdG9yKCcuanMtZ29sZGVuLXRpY2tldCcpO1xuXG4gICAgICAgIC8vIE9ubHkgY29udGludWUgaWYgY2hvY29sYXRlIGJhciBoYXMgYSBnb2xkZW4gdGlja2V0XG4gICAgICAgIGlmKGlzc2V0KGdvbGRlblRpY2tldCkpe1xuXG4gICAgICAgICAgICBnb2xkZW5UaWNrZXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgQ2hvY29sYXRlRmFjdG9yeS5lbmpveVRoZVRvdXIoY2hvY29sYXRlQmFyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVG8gYmFkLCBubyBnb2xkZW4gdGlja2V0cyBoYXMgYmVlbiBmb3VuZC4nKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTdGFydCB0aGUgdG91ciB0aHJvdWdoIHRoZSBmYWN0b3J5XG4gICAgICogQW5kIGdldCB0aGUgbmFtZXMgYW5kIHByb3BlcnRpZXMgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIGdyb3VwXG4gICAgICogSWYgdGhlcmUgYXJlIG1lbWJlcnMgaW4gdGhlIGdyb3VwIG9mIGNvdXJzZVxuICAgICAqXG4gICAgICogQHBhcmFtIGNob2NvbGF0ZUZhY3RvcnlcbiAgICAgKi9cbiAgICBlbmpveVRoZVRvdXIoY2hvY29sYXRlRmFjdG9yeSl7XG5cbiAgICAgICAgLy8gQXNrIGZvciB0aGUgdG91ciBncm91cFxuICAgICAgICBjb25zdCB0b3VyR3JvdXAgPSBjaG9jb2xhdGVGYWN0b3J5LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCB0ZXh0YXJlYScpO1xuXG4gICAgICAgIGlmKGlzc2V0KHRvdXJHcm91cCkpe1xuXG4gICAgICAgICAgICAvLyBGb3IgZWFjaCB2aXNpdG9yIHdlIHdhbnQgYSBiZWxvbmdpbmcgT29tcGEgTG9vbXBhXG4gICAgICAgICAgICBsZXQgb29tcGFMb29tcGFzID0ge307XG4gICAgICAgICAgICBsZXQgYW1vdW50T2ZPb21wYUxvb21wYXMgPSAwO1xuXG4gICAgICAgICAgICBjb25zdCB0b3VyR3JvdXBTaXplID0gdG91ckdyb3VwLmxlbmd0aDtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0b3VyR3JvdXBTaXplOyBpKyspe1xuXG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSB2aXNpdG9yIGZyb20gdGhlIGdyb3VwXG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaXRvciA9IHRvdXJHcm91cFtpXTtcblxuICAgICAgICAgICAgICAgIC8vIEFzayBmb3IgaXRzIG5hbWVcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpdG9yTmFtZSA9IHZpc2l0b3IuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgdmlzaXRvciBpcyBiYW5uZWRcbiAgICAgICAgICAgICAgICBpZiggQ2hvY29sYXRlRmFjdG9yeS5faXNWaXNpdG9yQmFubmVkKHZpc2l0b3JOYW1lKSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBvb21wYUxvb21wYXNbIHZpc2l0b3JOYW1lIF0gPSBDaG9jb2xhdGVGYWN0b3J5Ll9nZXRBcnJhbmdlbWVudCh2aXNpdG9yKTtcbiAgICAgICAgICAgICAgICBhbW91bnRPZk9vbXBhTG9vbXBhcysrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgaW5zdXJhbmNlIHRoYXQgdGhlcmUgYXJlIG9vbXBhIGxvb21wYXNcbiAgICAgICAgICAgIGlmKGFtb3VudE9mT29tcGFMb29tcGFzID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgICAgIC8vIFNlbmQgc3VibWl0IHJlcXVlc3RcbiAgICAgICAgICAgIENob2NvbGF0ZUZhY3RvcnkuX2ZpbmlzaFRvdXIob29tcGFMb29tcGFzLCBjaG9jb2xhdGVGYWN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RvIGJhZCwgbm8gbWVtYmVycyB0byB2aXNpdCB0aGlzIGZhY3RvcnknKVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSB2aXNpdG9yIG5hbWUgaXNuJ3QgYWxsb3dcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aXNpdG9yTmFtZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2lzVmlzaXRvckJhbm5lZDogZnVuY3Rpb24odmlzaXRvck5hbWUpe1xuICAgICAgICBpZihDaG9jb2xhdGVGYWN0b3J5LmJhbm5lZFZpc2l0b3IuaW5kZXhPZih2aXNpdG9yTmFtZSkgIT09IC0xKXtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTW9zdCBnZXQgdmlzaXRvciBoYXZlIGEgbm9ybWFsIGFycmFuZ2VtZW50XG4gICAgICogQnV0IHNvbWV0aW1lcyB0aGVyZSBhcmUgc3BlY2lhbCBjYXNlc1xuICAgICAqIExpa2UgYSBTZWxlY3RvciBvciBjaGVja2JveFxuICAgICAqXG4gICAgICogQHBhcmFtIHZpc2l0b3JcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9nZXRBcnJhbmdlbWVudDogZnVuY3Rpb24odmlzaXRvcilcbiAgICB7XG5cbiAgICAgICAgY29uc3QgdmlzaXRvclR5cGUgPSB2aXNpdG9yLm5vZGVOYW1lO1xuXG4gICAgICAgIHN3aXRjaCAodmlzaXRvclR5cGUpIHtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZpc2l0b3IudmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRmluaXNoIHRoZSB0b3VyXG4gICAgICogSWYgc3VjY2Vzc2Z1bCBzaG93IHRoYW5rcyBtZXNzYWdlXG4gICAgICogT3Igc2hvdyBkZWZpbmVkIGVycm9yIG1lc3NhZ2Ugb3IgZmFsbGJhY2tcbiAgICAgKlxuICAgICAqIEBwYXJhbSBncm91cFxuICAgICAqIEBwYXJhbSBjaG9jb2xhdGVGYWN0b3J5XG4gICAgICogQHJldHVybnMgeyp8dm9pZH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9maW5pc2hUb3VyOiBmdW5jdGlvbihncm91cCwgY2hvY29sYXRlRmFjdG9yeSlcbiAgICB7XG4gICAgICAgIC8vIEFkZCB3aWxsaWUgdG8gdGhlIGdyb3VwXG4gICAgICAgIGdyb3VwID0gQ2hvY29sYXRlRmFjdG9yeS5fYWRkV2lsbGllV29ua2EoZ3JvdXApO1xuXG4gICAgICAgIC8vIEdldCB0aGUgZ2F0ZSBmb3IgZmluaXNoIHRoZSB0b3VyXG4gICAgICAgIGNvbnN0IGdhdGUgPSAnL2NvbnRhY3QvcHJvY2Vzcyc7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIEFqYXgucG9zdChnYXRlLCBncm91cCwgZnVuY3Rpb24gKEh0dHBSZXF1ZXN0KSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoSHR0cFJlcXVlc3QucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChIdHRwUmVxdWVzdC5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyMDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2hvY29sYXRlRmFjdG9yeS5fdGhhbmtzRm9yVmlzaXRpbmcocmVzcG9uc2UucmVkaXJlY3RVcmwpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQyMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDaG9jb2xhdGVGYWN0b3J5Ll9naXZlRmVlZGJhY2tUb01lbWJlcnMocmVzcG9uc2UuZXJyb3JzLCBjaG9jb2xhdGVGYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBDaG9jb2xhdGVGYWN0b3J5Ll91bmtub3duR2FwSW5GYWN0b3J5KGNob2NvbGF0ZUZhY3RvcnkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBDaG9jb2xhdGVGYWN0b3J5Ll91bmtub3duR2FwSW5GYWN0b3J5KGNob2NvbGF0ZUZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFkZCB3aWxsaWUgd29ua2EgdG8gdGhlIGdyb3VwXG4gICAgICogUHMuLi4gaXQgYWN0dWFsbHkgdGhlIHNlY3JldCBjb2RlIVxuICAgICAqXG4gICAgICogQHBhcmFtIGdyb3VwXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfYWRkV2lsbGllV29ua2E6IGZ1bmN0aW9uKGdyb3VwKXtcbiAgICAgICAgZ3JvdXAuX3dpbGxpZSA9ICd3b25rYSc7XG4gICAgICAgIHJldHVybiBncm91cDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkIHRoZSBmZWVkYmFjayB0byB0aGUgZGVzaXJlZCBhcmVhLlxuICAgICAqIE1vc3QgbGlrZWx5IHRvIHRoZSB2aXNpdG9yIGRpcmVjdGx5LCBidXQgc29tZXRpbWUgdG8gdGhlIGZhY3RvcnkgZGVzaXJlZCBmZWVkYmFjayBhcmVhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXJyb3JzXG4gICAgICogQHBhcmFtIGNob2NvbGF0ZUZhY3RvcnlcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9naXZlRmVlZGJhY2tUb01lbWJlcnM6IGZ1bmN0aW9uKGVycm9ycywgY2hvY29sYXRlRmFjdG9yeSl7XG5cbiAgICAgICAgLy8gR3JhYiB0aGUgZmFjdG9yeSBmZWVkYmFjayBhcmVhXG4gICAgICAgIGNvbnN0IGZlZWRiYWNrQXJlYSA9IGNob2NvbGF0ZUZhY3RvcnkucXVlcnlTZWxlY3RvcignLmpzLWVycm9yLWFyZWEnKTtcblxuICAgICAgICAvLyBDbGVhciB0aGUgY3VycmVudCBodG1sXG4gICAgICAgIGlmKGlzc2V0KGZlZWRiYWNrQXJlYSkpIGZlZWRiYWNrQXJlYS5pbm5lckhUTUwgPSAnJztcblxuICAgICAgICAvLyBDbGVhciB0aGUgcHJldmlvdXMgbWFya2VkIGphY2tldHNcbiAgICAgICAgQ2hvY29sYXRlRmFjdG9yeS5fY2xlYXJQcmV2aW91c01hcmtlZEphY2tldHMoY2hvY29sYXRlRmFjdG9yeSk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKGZ1bmN0aW9uKHZpc2l0b3IpIHtcblxuICAgICAgICAgICAgbGV0IGphY2tldCA9IG51bGw7XG4gICAgICAgICAgICBsZXQgdmlzaXRvckZlZWRiYWNrQXJlYSA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIEhvbmV5IGVsZW1lbnRzIGRvZXNuJ3QgaGFzIGEgYWNjZXNzaWJsZSBlbGVtZW50XG4gICAgICAgICAgICBpZih2aXNpdG9yICE9PSAnX2hvbmV5JyAmJiB2aXNpdG9yICE9PSAnX3NlY3JldENvZGUnKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBHcmFiIHRoZSB2aXNpdG9yXG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaXRvck5vZGUgPSBjaG9jb2xhdGVGYWN0b3J5LnF1ZXJ5U2VsZWN0b3IoJyMnICsgdmlzaXRvcik7XG5cbiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBqYWNrZXQgb2YgYSB2aXNpdG9yXG4gICAgICAgICAgICAgICAgamFja2V0ID0gQ2hvY29sYXRlRmFjdG9yeS5fZ3JhYlZpc2l0b3JKYWNrZXQodmlzaXRvck5vZGUpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgZm91bmQgZ2V0IHRoZSBkZXNpcmVkIGFyZWFcbiAgICAgICAgICAgICAgICBpZihpc3NldChqYWNrZXQpKSB2aXNpdG9yRmVlZGJhY2tBcmVhID0gamFja2V0LnF1ZXJ5U2VsZWN0b3IoJy5qcy1mb3JtLWVsZW1lbnQtZXJyb3InKTtcblxuICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBjdXJyZW50IGh0bWxcbiAgICAgICAgICAgICAgICBpZihpc3NldCh2aXNpdG9yRmVlZGJhY2tBcmVhKSkgdmlzaXRvckZlZWRiYWNrQXJlYS5pbm5lckhUTUwgPSAnJztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBHZXQgdGhlIGZlZWRiYWNrIGZvciB0aGlzIHZpc2l0b3JcbiAgICAgICAgICAgIGNvbnN0IHZpc2l0b3JGZWVkYmFjayA9IGVycm9yc1t2aXNpdG9yXTtcblxuICAgICAgICAgICAgLy8gU3BpdCBvdXQgZWFjaCBsaW5lXG4gICAgICAgICAgICBjb25zdCB2aXNpdG9yRmVlZGJhY2tBbW91bnQgPSB2aXNpdG9yRmVlZGJhY2subGVuZ3RoO1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHZpc2l0b3JGZWVkYmFja0Ftb3VudDsgaSsrKXtcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpdG9yRmVlZGJhY2tMaW5lID0gdmlzaXRvckZlZWRiYWNrW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gSG9uZXkgZWxlbWVudHMgZG9lc24ndCBoYXMgYSBhY2Nlc3NpYmxlIGVsZW1lbnQgYXJlYVxuICAgICAgICAgICAgICAgIGlmKHZpc2l0b3IgIT09ICdfaG9uZXknICYmIHZpc2l0b3IgIT09ICdfc2VjcmV0Q29kZScpIHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBNYXJrIHRoZSBqYWNrZXRcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNzZXQoamFja2V0KSkgamFja2V0LmNsYXNzTGlzdC5hZGQoJ2hhcy1lcnJvcicpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCBmZWVkYmFjayB0byB2aXNpdG9yIGZlZWRiYWNrIGFyZWEgaWYgZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICBpZihpc3NldCh2aXNpdG9yRmVlZGJhY2tBcmVhKSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRGZWVkYmFja0FyZWEgPSB2aXNpdG9yRmVlZGJhY2tBcmVhLmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZWVkYmFja0FyZWEgKz0gJzxzcGFuPicgKyBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodmlzaXRvckZlZWRiYWNrTGluZSkgKyAnPC9zcGFuPic7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yRmVlZGJhY2tBcmVhLmlubmVySFRNTCA9IGN1cnJlbnRGZWVkYmFja0FyZWE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBBcHBlbmQgZmVlZGJhY2sgdG8gZmFjdG9yeSBmZWVkYmFjayBhcmVhIGlmIGRlZmluZWRcbiAgICAgICAgICAgICAgICBpZihpc3NldChmZWVkYmFja0FyZWEpKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRGZWVkYmFja0FyZWEgPSBmZWVkYmFja0FyZWEuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmVlZGJhY2tBcmVhICs9ICc8bGk+JyArIGNhcGl0YWxpemVGaXJzdExldHRlcih2aXNpdG9yRmVlZGJhY2tMaW5lKSArICc8L2xpPic7XG4gICAgICAgICAgICAgICAgICAgIGZlZWRiYWNrQXJlYS5pbm5lckhUTUwgPSBjdXJyZW50RmVlZGJhY2tBcmVhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENsZWFyIHRoZSBwcmV2aW91cyBtYXJrZWQgamFja2V0c1xuICAgICAqXG4gICAgICogQHBhcmFtIGNob2NvbGF0ZUZhY3RvcnlcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9jbGVhclByZXZpb3VzTWFya2VkSmFja2V0cyhjaG9jb2xhdGVGYWN0b3J5KSB7XG5cbiAgICAgICAgY29uc3QgbWFya2VkSmFja2V0cyA9IGNob2NvbGF0ZUZhY3RvcnkucXVlcnlTZWxlY3RvckFsbCgnLmhhcy1lcnJvcicpO1xuICAgICAgICBjb25zdCBtYXJrZWRKYWNrZXRzQW1vdW50ID0gbWFya2VkSmFja2V0cy5sZW5ndGg7XG5cbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IG1hcmtlZEphY2tldHNBbW91bnQ7IGkrKyl7XG4gICAgICAgICAgICBtYXJrZWRKYWNrZXRzW2ldLmNsYXNzTGlzdC5yZW1vdmUoJ2hhcy1lcnJvcicpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdyYWIgdGhlIGphY2tldCBvZiB0aGUgdmlzaXRvclxuICAgICAqXG4gICAgICogQHBhcmFtIHZpc2l0b3JcbiAgICAgKiBAcmV0dXJucyB7bnVsbHwqfCgoKSA9PiAoTm9kZSB8IG51bGwpKXxBY3RpdmVYLklYTUxET01Ob2RlfChOb2RlICYgUGFyZW50Tm9kZSl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfZ3JhYlZpc2l0b3JKYWNrZXQ6IGZ1bmN0aW9uKHZpc2l0b3Ipe1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHZpc2l0b3IgaXMgZGVmaW5lZFxuICAgICAgICBpZiAoIWlzc2V0KHZpc2l0b3IpKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAvLyBEbyBsb29wIHNldHRpbmdzXG4gICAgICAgIGN1cnJlbnRMYXllciA9IHZpc2l0b3I7XG4gICAgICAgIHNhZmV0eUJyZWFrID0gMDtcblxuICAgICAgICAvLyBHcmFiIHRoZSBuZXh0IGxheWVyIHRpbGwgaXQgaXMgdGhlIGphY2tldCAob3Igc2FmZXR5QnJlYWsgaGFzIGJlZW4gcmVhY2hlZFxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBzYWZldHlCcmVhaysrO1xuICAgICAgICAgICAgY3VycmVudExheWVyID0gY3VycmVudExheWVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgICBpZihjdXJyZW50TGF5ZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdqcy1mb3JtLWVsZW1lbnQnKSkgcmV0dXJuIGN1cnJlbnRMYXllcjtcbiAgICAgICAgfSB3aGlsZSAoY3VycmVudExheWVyLnRhZ05hbWUgIT09ICdCT0RZJyAmJiBzYWZldHlCcmVhayA8PSAxMCk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlZGlyZWN0IHRoZSB2aXNpdG9yIHRvIHRoZSB0aGFua3MgcGFnZVxuICAgICAqXG4gICAgICogQHBhcmFtIG5leHRTdG9wXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdGhhbmtzRm9yVmlzaXRpbmc6IGZ1bmN0aW9uIChuZXh0U3RvcCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBuZXh0U3RvcDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVW5rbm93biBlcnJvciBvY2N1cnJlZCwgbG9nIHRoZSBlcnJvclxuICAgICAqXG4gICAgICogQHBhcmFtIGNob2NvbGF0ZUZhY3RvcnlcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF91bmtub3duR2FwSW5GYWN0b3J5OiBmdW5jdGlvbiAoY2hvY29sYXRlRmFjdG9yeSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaG9jb2xhdGVGYWN0b3J5KTtcbiAgICAgICAgY29uc29sZS5sb2coJ0Nob2NvbGF0ZUZhY3Rvcnk6IFVua293biBFcnJvcicpO1xuICAgIH0sXG59O1xuXG5DaG9jb2xhdGVGYWN0b3J5LmVudGVyKCk7IiwiLyoqXG4gKiBKYXZhU2NyaXB0IGRlcGVuZGVuY2llc1xuICovXG5cbi8qKlxuICogRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbnJlcXVpcmUoJ2hhbW1lcmpzJyk7XG5yZXF1aXJlKCdvYmplY3RGaXRQb2x5ZmlsbCcpO1xuXG4vKipcbiAqIEdsb2JhbCBjdXN0b20gZGVwZW5kZW5jaWVzXG4gKi9cbnJlcXVpcmUoJy4vLi4vZ2xvYmFsL3BvbHlmaWxscy9ldmVudFBvbHlGaWxsJyk7XG5yZXF1aXJlKCcuLy4uL2dsb2JhbC9wb2x5ZmlsbHMvaXNJbnRlZ2VyJyk7XG5yZXF1aXJlKCcuLy4uL2dsb2JhbC9wb2x5ZmlsbHMvcHJvbWlzZScpO1xuXG5cbi8qKlxuICogIFNpdGUgd2lkZSBmdW5jdGlvbmFsaXR5XG4gKi9cbnJlcXVpcmUoJy4vZ2xvYmFsL2hlbHBlcnMnKTtcbnJlcXVpcmUoJy4vZ2xvYmFsL2Jyb3dzZXJIYW5kbGVyJyk7XG5cblxuLyoqXG4gKiBDb21wb25lbnQgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eVxuICovXG5yZXF1aXJlKCcuL2NvbXBvbmVudHMvY2hvY29sYXRlRmFjdG9yeScpO1xucmVxdWlyZSgnLi9jb21wb25lbnRzL2Nvb2tpZUhhbmRsZXInKTtcbnJlcXVpcmUoJy4vY29tcG9uZW50cy9pbWFnZVJhY2tIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2NvbXBvbmVudHMvaW5wdXRIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2NvbXBvbmVudHMvbWFwc0hhbmRsZXInKTtcbnJlcXVpcmUoJy4vY29tcG9uZW50cy9uYXZpZ2F0aW9uSGFuZGxlcicpO1xucmVxdWlyZSgnLi9jb21wb25lbnRzL3Njcm9sbFRvSGFuZGxlcicpO1xucmVxdWlyZSgnLi9jb21wb25lbnRzL3NsaWRlUHJvamVjdG9ySGFuZGxlcicpO1xucmVxdWlyZSgnLi9jb21wb25lbnRzL2NsaWVudFJldmlld3NIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2NvbXBvbmVudHMvdXNwSW1wcmVzc2lvbnNIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2NvbXBvbmVudHMveW91dHViZUhhbmRsZXInKTsiLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQnJvd3NlciBIYW5kbGVyXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgQnJvd3NlckhhbmRsZXIgPSB7XG5cbiAgICB1c2VyQWdlbnQ6ICcnLFxuICAgIGJyb3dzZXJJbmZvOiAnJyxcblxuXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgICBCcm93c2VySGFuZGxlci51c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICAgICAgQnJvd3NlckhhbmRsZXIuYnJvd3NlckluZm8gPSBCcm93c2VySGFuZGxlci5nZXRCcm93c2VySW5mbygpO1xuICAgICAgICBCcm93c2VySGFuZGxlci5oYW5kbGVJRSgpO1xuICAgICAgICBCcm93c2VySGFuZGxlci5oYW5kbGVTYWZhcmkoKTtcbiAgICB9LFxuXG4gICAgaGFuZGxlSUU6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvLyBEZXRlY3QgdmVyc2lvbnMgYmVsb3cgaWUxMVxuICAgICAgICBsZXQgbXNpZSA9IEJyb3dzZXJIYW5kbGVyLnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFICcpO1xuICAgICAgICBjb25zdCBpZWx0MTEgPSBtc2llID4gMDtcblxuICAgICAgICAvLyBEZXRlY3QgaWUxMVxuICAgICAgICBjb25zdCBpZTExID0gISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9UcmlkZW50LipydlxcOjExXFwuLyk7XG5cbiAgICAgICAgLy8gSWYgSW50ZXJuZXQgRXhwbG9yZXJcbiAgICAgICAgaWYgKGllbHQxMSB8fCBpZTExKSB7XG4gICAgICAgICAgICAvLyBEZWZhdWx0IHZlcnNpb25cbiAgICAgICAgICAgIGxldCB2ZXJzaW9uID0gJzExJztcblxuICAgICAgICAgICAgLy8gV2F5IHRvIGRldGVjdCB2ZXJzaW9uIDwgMTFcbiAgICAgICAgICAgIGlmIChpZWx0MTEpIHZlcnNpb24gPSBwYXJzZUludChCcm93c2VySGFuZGxlci51c2VyQWdlbnQuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgIG1zaWUgKyA1LFxuICAgICAgICAgICAgICAgIEJyb3dzZXJIYW5kbGVyLnVzZXJBZ2VudC5pbmRleE9mKFwiLlwiLCBtc2llKVxuICAgICAgICAgICAgKSk7XG5cbiAgICAgICAgICAgIC8vIEFwcGVuZCBjbGFzc2VzIHRvIEhUTUwgKHdlIGhhdmUgdG8gZG8gdGhpcyBzZXBhcmF0ZWx5IGJlY2F1c2UgZWxzZSBpZSB3aWxsIGZhaWwpXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2llJyk7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3YnK3ZlcnNpb24pO1xuICAgICAgICB9XG5cbiAgICB9LFxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG9sZGVyIHNhZmFyaSB2ZXJzaW9uXG4gICAgaGFuZGxlU2FmYXJpOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaWYoQnJvd3NlckhhbmRsZXIuYnJvd3NlckluZm8ubmFtZSA9PT0gJ1NhZmFyaScgJiYgQnJvd3NlckhhbmRsZXIuYnJvd3NlckluZm8udmVyc2lvbiA8PSAxMCl7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpWzBdLmNsYXNzTGlzdC5hZGQoJ2llJyk7XG4gICAgICAgIH1cblxuICAgIH0sXG5cbiAgICBnZXRCcm93c2VySW5mbzogZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgdWE9bmF2aWdhdG9yLnVzZXJBZ2VudCx0ZW0sTT11YS5tYXRjaCgvKG9wZXJhfGNocm9tZXxzYWZhcml8ZmlyZWZveHxtc2llfHRyaWRlbnQoPz1cXC8pKVxcLz9cXHMqKFxcZCspL2kpIHx8IFtdO1xuICAgICAgICBpZigvdHJpZGVudC9pLnRlc3QoTVsxXSkpe1xuICAgICAgICAgICAgdGVtPS9cXGJydlsgOl0rKFxcZCspL2cuZXhlYyh1YSkgfHwgW107XG4gICAgICAgICAgICByZXR1cm4ge25hbWU6J0lFICcsdmVyc2lvbjoodGVtWzFdfHwnJyl9O1xuICAgICAgICB9XG4gICAgICAgIGlmKE1bMV09PT0nQ2hyb21lJyl7XG4gICAgICAgICAgICB0ZW09dWEubWF0Y2goL1xcYk9QUlxcLyhcXGQrKS8pXG4gICAgICAgICAgICBpZih0ZW0hPW51bGwpICAge3JldHVybiB7bmFtZTonT3BlcmEnLCB2ZXJzaW9uOnRlbVsxXX07fVxuICAgICAgICB9XG4gICAgICAgIE09TVsyXT8gW01bMV0sIE1bMl1dOiBbbmF2aWdhdG9yLmFwcE5hbWUsIG5hdmlnYXRvci5hcHBWZXJzaW9uLCAnLT8nXTtcbiAgICAgICAgaWYoKHRlbT11YS5tYXRjaCgvdmVyc2lvblxcLyhcXGQrKS9pKSkhPW51bGwpIHtNLnNwbGljZSgxLDEsdGVtWzFdKTt9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBNWzBdLFxuICAgICAgICAgICAgdmVyc2lvbjogTVsxXVxuICAgICAgICB9O1xuICAgIH1cbn07XG5cbkJyb3dzZXJIYW5kbGVyLmluaXQoKTsiLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIEhlbHBlciBmdW5jdGlvbnNcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKlxuICogU2ltcGxlIGlzc2V0IG1ldGhvZCBmb3IgdGhpcyBkb2VzIG5vdCBleGlzdCBpbiBqYXZhc2NyaXB0XG4gKi9cbndpbmRvdy5pc3NldCA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqICE9PSBudWxsO1xufTtcblxuLypcbiAqIEVhc2luZyBGdW5jdGlvbnMgLSBpbnNwaXJlZCBmcm9tIGh0dHA6Ly9naXptYS5jb20vZWFzaW5nL1xuICogb25seSBjb25zaWRlcmluZyB0aGUgdCB2YWx1ZSBmb3IgdGhlIHJhbmdlIFswLCAxXSA9PiBbMCwgMV1cbiAqL1xud2luZG93LkVhc2luZ0Z1bmN0aW9ucyA9IHtcbiAgICAvLyBubyBlYXNpbmcsIG5vIGFjY2VsZXJhdGlvblxuICAgIGxpbmVhcjogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHRcbiAgICB9LFxuICAgIC8vIGFjY2VsZXJhdGluZyBmcm9tIHplcm8gdmVsb2NpdHlcbiAgICBlYXNlSW5RdWFkOiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCAqIHRcbiAgICB9LFxuICAgIC8vIGRlY2VsZXJhdGluZyB0byB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZU91dFF1YWQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0ICogKDIgLSB0KVxuICAgIH0sXG4gICAgLy8gYWNjZWxlcmF0aW9uIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0aW9uXG4gICAgZWFzZUluT3V0UXVhZDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgPCAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0XG4gICAgfSxcbiAgICAvLyBhY2NlbGVyYXRpbmcgZnJvbSB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZUluQ3ViaWM6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0ICogdCAqIHRcbiAgICB9LFxuICAgIC8vIGRlY2VsZXJhdGluZyB0byB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZU91dEN1YmljOiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gKC0tdCkgKiB0ICogdCArIDFcbiAgICB9LFxuICAgIC8vIGFjY2VsZXJhdGlvbiB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGlvblxuICAgIGVhc2VJbk91dEN1YmljOiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCA8IC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMVxuICAgIH0sXG4gICAgLy8gYWNjZWxlcmF0aW5nIGZyb20gemVybyB2ZWxvY2l0eVxuICAgIGVhc2VJblF1YXJ0OiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdFxuICAgIH0sXG4gICAgLy8gZGVjZWxlcmF0aW5nIHRvIHplcm8gdmVsb2NpdHlcbiAgICBlYXNlT3V0UXVhcnQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiAxIC0gKC0tdCkgKiB0ICogdCAqIHRcbiAgICB9LFxuICAgIC8vIGFjY2VsZXJhdGlvbiB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGlvblxuICAgIGVhc2VJbk91dFF1YXJ0OiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCA8IC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqICgtLXQpICogdCAqIHQgKiB0XG4gICAgfSxcbiAgICAvLyBhY2NlbGVyYXRpbmcgZnJvbSB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZUluUXVpbnQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdFxuICAgIH0sXG4gICAgLy8gZGVjZWxlcmF0aW5nIHRvIHplcm8gdmVsb2NpdHlcbiAgICBlYXNlT3V0UXVpbnQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiAxICsgKC0tdCkgKiB0ICogdCAqIHQgKiB0XG4gICAgfSxcbiAgICAvLyBhY2NlbGVyYXRpb24gdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRpb25cbiAgICBlYXNlSW5PdXRRdWludDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgPCAuNSA/IDE2ICogdCAqIHQgKiB0ICogdCAqIHQgOiAxICsgMTYgKiAoLS10KSAqIHQgKiB0ICogdCAqIHRcbiAgICB9XG59O1xuXG4vKlxuICogVmFuaWxsYSB2ZXJzaW9uIG9mIHRoZSAkLmdldFNjcmlwdFxuICovXG53aW5kb3cuZ2V0U2NyaXB0ID0gZnVuY3Rpb24gKHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgc2NyaXB0LmFzeW5jID0gMTtcblxuICAgIGNvbnN0IHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7XG4gICAgbGV0IHByaW9yID0gc2NyaXB0c1tzY3JpcHRzLmxlbmd0aCAtIDFdO1xuXG4gICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoXywgaXNBYm9ydCkge1xuICAgICAgICBpZiAoaXNBYm9ydCB8fCAhc2NyaXB0LnJlYWR5U3RhdGUgfHwgL2xvYWRlZHxjb21wbGV0ZS8udGVzdChzY3JpcHQucmVhZHlTdGF0ZSkpIHtcbiAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgIHNjcmlwdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgaWYgKCFpc0Fib3J0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHNjcmlwdC5zcmMgPSBzb3VyY2U7XG4gICAgcHJpb3IucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0LCBwcmlvcik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAqIGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3JcbiAqIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICogbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAqIEBwYXJhbSBmdW5jXG4gKiBAcGFyYW0gd2FpdFxuICogQHBhcmFtIGltbWVkaWF0ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG53aW5kb3cuZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICBsZXQgdGltZW91dDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGxldCBsYXRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGUpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIGxldCBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgICAgaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcbn07XG5cbi8qXG4gKiBDb29raWUgaGVscGVyIGNsYXNzXG4gKi9cbndpbmRvdy5Db29raWUgPSB7XG4gICAgc2V0OiBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIGRheXMpIHtcbiAgICAgICAgbGV0IGRvbWFpbiwgZG9tYWluUGFydHMsIGRhdGUsIGV4cGlyZXMsIGhvc3Q7XG5cbiAgICAgICAgaWYgKGRheXMpIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgKGRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7XG4gICAgICAgICAgICBleHBpcmVzID0gXCI7IGV4cGlyZXM9XCIgKyBkYXRlLnRvR01UU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBleHBpcmVzID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGhvc3QgPSBsb2NhdGlvbi5ob3N0O1xuICAgICAgICBpZiAoaG9zdC5zcGxpdCgnLicpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gbm8gXCIuXCIgaW4gYSBkb21haW4gLSBpdCdzIGxvY2FsaG9zdCBvciBzb21ldGhpbmcgc2ltaWxhclxuICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIFwiPVwiICsgdmFsdWUgKyBleHBpcmVzICsgXCI7IHBhdGg9L1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIGNvb2tpZSBvbiBhbGwgc3ViIGRvbWFpbnMuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gU3RhcnQgd2l0aCB0cnlpbmcgdG8gc2V0IGNvb2tpZSB0byB0aGUgdG9wIGRvbWFpbi5cbiAgICAgICAgICAgIC8vIChleGFtcGxlOiBpZiB1c2VyIGlzIG9uIGZvby5jb20sIHRyeSB0byBzZXRcbiAgICAgICAgICAgIC8vICBjb29raWUgdG8gZG9tYWluIFwiLmNvbVwiKVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIElmIHRoZSBjb29raWUgd2lsbCBub3QgYmUgc2V0LCBpdCBtZWFucyBcIi5jb21cIlxuICAgICAgICAgICAgLy8gaXMgYSB0b3AgbGV2ZWwgZG9tYWluIGFuZCB3ZSBuZWVkIHRvXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGNvb2tpZSB0byBcIi5mb28uY29tXCJcbiAgICAgICAgICAgIGRvbWFpblBhcnRzID0gaG9zdC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgZG9tYWluUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGRvbWFpbiA9ICcuJyArIGRvbWFpblBhcnRzLmpvaW4oJy4nKTtcblxuICAgICAgICAgICAgLy8gRm9yIGRldmVsb3BtZW50IHB1cnBvc2UsIHJlbW92ZSB0aGlzIHdoZW4gbW92aW5nIHRvIHByb2R1Y3Rpb25cbiAgICAgICAgICAgIC8vIGRvbWFpbiA9ICcua29tbWEucHJvJztcblxuICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIFwiPVwiICsgdmFsdWUgKyBleHBpcmVzICsgXCI7IHBhdGg9LzsgZG9tYWluPVwiICsgZG9tYWluO1xuXG4gICAgICAgICAgICAvLyBjaGVjayBpZiBjb29raWUgd2FzIHN1Y2Nlc3NmdWx5IHNldCB0byB0aGUgZ2l2ZW4gZG9tYWluXG4gICAgICAgICAgICAvLyAob3RoZXJ3aXNlIGl0IHdhcyBhIFRvcC1MZXZlbCBEb21haW4pXG4gICAgICAgICAgICBpZiAoQ29va2llLmdldChuYW1lKSA9PSBudWxsIHx8IENvb2tpZS5nZXQobmFtZSkgIT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBhcHBlbmQgXCIuXCIgdG8gY3VycmVudCBkb21haW5cbiAgICAgICAgICAgICAgICBkb21haW4gPSAnLicgKyBob3N0O1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyBcIj1cIiArIHZhbHVlICsgZXhwaXJlcyArIFwiOyBwYXRoPS87IGRvbWFpbj1cIiArIGRvbWFpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGNvbnN0IG5hbWVFUSA9IG5hbWUgKyBcIj1cIjtcbiAgICAgICAgY29uc3QgY2EgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGMgPSBjYVtpXTtcbiAgICAgICAgICAgIHdoaWxlIChjLmNoYXJBdCgwKSA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgYyA9IGMuc3Vic3RyaW5nKDEsIGMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGMuaW5kZXhPZihuYW1lRVEpID09PSAwKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCwgYy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG5cbiAgICBlcmFzZTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgQ29va2llLnNldChuYW1lLCAnJywgLTEpO1xuICAgIH1cbn07XG5cbi8qXG4gKiBKYXZhc2NyaXB0IHZlcnNpb24gb2YgdGhlIG51bWJlcl9mb3JtYXQgbWV0aG9kIG9mIFBIUFxuICovXG53aW5kb3cubnVtYmVyX2Zvcm1hdCA9IGZ1bmN0aW9uIChudW1iZXIsIGRlY2ltYWxzLCBkZWNfcG9pbnQsIHRob3VzYW5kc19zZXApIHtcbiAgICAvLyBTdHJpcCBhbGwgY2hhcmFjdGVycyBidXQgbnVtZXJpY2FsIG9uZXMuXG4gICAgbnVtYmVyID0gKG51bWJlciArICcnKS5yZXBsYWNlKC9bXjAtOStcXC1FZS5dL2csICcnKTtcbiAgICBsZXQgbiA9ICFpc0Zpbml0ZSgrbnVtYmVyKSA/IDAgOiArbnVtYmVyLFxuICAgICAgICBwcmVjID0gIWlzRmluaXRlKCtkZWNpbWFscykgPyAwIDogTWF0aC5hYnMoZGVjaW1hbHMpLFxuICAgICAgICBzZXAgPSAodHlwZW9mIHRob3VzYW5kc19zZXAgPT09ICd1bmRlZmluZWQnKSA/ICcsJyA6IHRob3VzYW5kc19zZXAsXG4gICAgICAgIGRlYyA9ICh0eXBlb2YgZGVjX3BvaW50ID09PSAndW5kZWZpbmVkJykgPyAnLicgOiBkZWNfcG9pbnQsXG4gICAgICAgIHMgPSAnJyxcbiAgICAgICAgdG9GaXhlZEZpeCA9IGZ1bmN0aW9uIChuLCBwcmVjKSB7XG4gICAgICAgICAgICB2YXIgayA9IE1hdGgucG93KDEwLCBwcmVjKTtcbiAgICAgICAgICAgIHJldHVybiAnJyArIE1hdGgucm91bmQobiAqIGspIC8gaztcbiAgICAgICAgfTtcbiAgICAvLyBGaXggZm9yIElFIHBhcnNlRmxvYXQoMC41NSkudG9GaXhlZCgwKSA9IDA7XG4gICAgcyA9IChwcmVjID8gdG9GaXhlZEZpeChuLCBwcmVjKSA6ICcnICsgTWF0aC5yb3VuZChuKSkuc3BsaXQoJy4nKTtcbiAgICBpZiAoc1swXS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNbMF0gPSBzWzBdLnJlcGxhY2UoL1xcQig/PSg/OlxcZHszfSkrKD8hXFxkKSkvZywgc2VwKTtcbiAgICB9XG4gICAgaWYgKChzWzFdIHx8ICcnKS5sZW5ndGggPCBwcmVjKSB7XG4gICAgICAgIHNbMV0gPSBzWzFdIHx8ICcnO1xuICAgICAgICBzWzFdICs9IG5ldyBBcnJheShwcmVjIC0gc1sxXS5sZW5ndGggKyAxKS5qb2luKCcwJyk7XG4gICAgfVxuICAgIHJldHVybiBzLmpvaW4oZGVjKTtcbn07XG5cblxuLyoqXG4gKiBFbGVtZW50LmNsb3Nlc3QoKSBwb2x5ZmlsbFxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvY2xvc2VzdCNQb2x5ZmlsbFxuICovXG5pZiAoIUVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3QpIHtcbiAgICBpZiAoIUVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMpIHtcbiAgICAgICAgRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyA9IEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yIHx8IEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcjtcbiAgICB9XG4gICAgRWxlbWVudC5wcm90b3R5cGUuY2xvc2VzdCA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHZhciBlbCA9IHRoaXM7XG4gICAgICAgIHZhciBhbmNlc3RvciA9IHRoaXM7XG4gICAgICAgIGlmICghZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKGVsKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmIChhbmNlc3Rvci5tYXRjaGVzKHMpKSByZXR1cm4gYW5jZXN0b3I7XG4gICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH0gd2hpbGUgKGFuY2VzdG9yICE9PSBudWxsKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbn1cblxud2luZG93LkFqYXggPSB7XG5cbiAgICAvL1RPRE86IENhbiB3ZSBjcmVhdGUgYSBwcmVwYXJlIHJlcXVlc3QgZnVuY3Rpb24gPz9cblxuICAgIGdldDogZnVuY3Rpb24odXJsLCBjYWxsYmFjaykge1xuICAgICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIGxldCB0b2tlbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKS5jb250ZW50O1xuXG4gICAgICAgIHhoci5vcGVuKCdnZXQnLCB1cmwsIHRydWUpO1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtQ1NSRi1UT0tFTicsIHRva2VuKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtUmVxdWVzdGVkLVdpdGgnLCAnWE1MSHR0cFJlcXVlc3QnKTtcbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soeGhyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9LFxuXG4gICAgcG9zdDogZnVuY3Rpb24odXJsLCBkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIGxldCB0b2tlbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKS5jb250ZW50O1xuXG4gICAgICAgIHhoci5vcGVuKCdwb3N0JywgdXJsLCB0cnVlKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLUNTUkYtVE9LRU4nLCB0b2tlbik7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLVJlcXVlc3RlZC1XaXRoJywgJ1hNTEh0dHBSZXF1ZXN0Jyk7XG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHhocik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHhoci5zZW5kKCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIHN0cmluZ1xuICogQHBhcmFtIHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xud2luZG93LmNhcGl0YWxpemVGaXJzdExldHRlciA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0IHNuYWtlIGNhc2UgaW50byBjYW1lbGNhc2VcbiAqXG4gKiBAcGFyYW0gc3RyaW5nXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xud2luZG93LnNuYWtlVG9DYW1lbCA9IGZ1bmN0aW9uIChzdHJpbmcpe1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFxcLVxcdykvZywgZnVuY3Rpb24obSl7cmV0dXJuIG1bMV0udG9VcHBlckNhc2UoKTt9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGluZGV4IG9mIGFuIGVsZW1lbnQgaW5zaWRlIGl0cyBwYXJlbnRcbiAqL1xud2luZG93LmluZGV4SW5QYXJlbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXM7XG4gICAgbGV0IG51bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY2hpbGRyZW5baV0gPT0gbm9kZSkgcmV0dXJuIG51bTtcbiAgICAgICAgaWYgKGNoaWxkcmVuW2ldLm5vZGVUeXBlID09IDEpIG51bSsrO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogRm9yIHNlY3VyaXR5IHJlYXNvbnMgaU9TIFNhZmFyaSBvbmx5IGFsbG93cyBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpIGZvciB0ZXh0IHdpdGhpbiBhIGNvbnRlbnRFZGl0YWJsZSBjb250YWluZXIuXG4gKiBUaGUgd29ya2Fyb3VuZCBpcyB0byBkZXRlY3QgaU9TIFNhZmFyaSBhbmQgcXVpY2tseSB0b2dnbGUgY29udGVudEVkaXRhYmxlIGJlZm9yZSBleGVjdXRpbmcgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKS5cbiAqIFdoZWIgaW5wdXQgb3IgdGV4dGFyZWEgaXMgUkVBRE9OTFkgeW91IGNhbiBwcmV2ZW50IHRoZSB1bndhbnRlZCBwb3B1cCB3aXRoIGNvcHkvcGFzdGUgZnVuY3Rpb25zIGFuZCB0aGUgaW5wdXQga2V5Ym9hcmRcbiAqIENvZGUgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ2OTgxODQ3XG4gKi9cbndpbmRvdy5jb3B5VG9DbGlwYm9hcmQgPSBmdW5jdGlvbiAoZWwpIHtcblxuICAgIC8vIHJlc29sdmUgdGhlIGVsZW1lbnRcbiAgICBlbCA9ICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpIDogZWw7XG5cbiAgICAvLyBoYW5kbGUgaU9TIGFzIGEgc3BlY2lhbCBjYXNlXG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lwYWR8aXBvZHxpcGhvbmUvaSkpIHtcblxuICAgICAgICAvLyBzYXZlIGN1cnJlbnQgY29udGVudEVkaXRhYmxlL3JlYWRPbmx5IHN0YXR1c1xuICAgICAgICBjb25zdCBlZGl0YWJsZSA9IGVsLmNvbnRlbnRFZGl0YWJsZTtcbiAgICAgICAgY29uc3QgcmVhZE9ubHkgPSBlbC5yZWFkT25seTtcblxuICAgICAgICAvLyBjb252ZXJ0IHRvIGVkaXRhYmxlIHdpdGggcmVhZG9ubHkgdG8gc3RvcCBpT1Mga2V5Ym9hcmQgb3BlbmluZ1xuICAgICAgICBlbC5jb250ZW50RWRpdGFibGUgPSB0cnVlO1xuICAgICAgICBlbC5yZWFkT25seSA9IHRydWU7XG5cbiAgICAgICAgLy8gY3JlYXRlIGEgc2VsZWN0YWJsZSByYW5nZVxuICAgICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWwpO1xuXG4gICAgICAgIC8vIHNlbGVjdCB0aGUgcmFuZ2VcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OTk5OSk7XG5cbiAgICAgICAgLy8gcmVzdG9yZSBjb250ZW50RWRpdGFibGUvcmVhZE9ubHkgdG8gb3JpZ2luYWwgc3RhdGVcbiAgICAgICAgZWwuY29udGVudEVkaXRhYmxlID0gZWRpdGFibGU7XG4gICAgICAgIGVsLnJlYWRPbmx5ID0gcmVhZE9ubHk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBlbC5zZWxlY3QoKTtcbiAgICB9XG5cbiAgICAvLyBleGVjdXRlIGNvcHkgY29tbWFuZFxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCByZWxhdGVkIHRvIHRoZSBib2R5XG4gKlxuICogQHBhcmFtIGVsXG4gKiBAcmV0dXJucyB7e3RvcDogbnVtYmVyLCBsZWZ0OiBudW1iZXJ9fVxuICovXG53aW5kb3cuYm9keU9mZnNldCA9IGZ1bmN0aW9uIChlbCkge1xuICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgc2Nyb2xsTGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG4gICAgcmV0dXJuIHsgdG9wOiByZWN0LnRvcCArIHNjcm9sbFRvcCwgbGVmdDogcmVjdC5sZWZ0ICsgc2Nyb2xsTGVmdCB9XG59IiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENvb2tpZSBoYW5kbGVyXG4gICAtIFByaW1hcnkgdXNhZ2UgZm9yIHRvZ2dsaW5nIHRoZSBjb29raWUgbWVzc2FnZSBhbmQvb3Igc3dpdGNoXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgQ29va2llSGFuZGxlciA9IHtcblxuICAgIGNvb2tpZUJhciA6IG51bGwsXG4gICAgY29va2llT3ZlcmxheSA6IG51bGwsXG4gICAgY29va2llTWVzc2FnZSA6IG51bGwsXG5cbiAgICBjb29raWVTd2l0Y2ggOiBudWxsLFxuXG4gICAgY29va2llRmFkZU91dEFuaW1hdGlvbkR1cmF0aW9uIDogNDAwLFxuICAgIGFjY2VwdFRyYWNraW5nIDogZmFsc2UsXG5cbiAgICAvLyBJbml0aWFsaXplIGNvb2tpZSBoYW5kbGVyXG4gICAgaW5pdCA6IGZ1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIC8vIEJpbmQgY29va2llIGJhciBvciBvdmVybGF5IHRvIGNvb2tpZU1lc3NhZ2VcbiAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVNZXNzYWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWNvb2tpZS1iYXIsIC5qcy1jb29raWUtb3ZlcmxheScpO1xuXG4gICAgICAgIC8vIEJpbmQgY29va2llIGJhciB0byBjb29raWVCYXJcbiAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVCYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtY29va2llLWJhcicpO1xuXG4gICAgICAgIC8vIElmIGlzc2V0IGluaXQgdGhlIGZ1bmN0aW9ucyBmb3IgY29va2llIGJhclxuICAgICAgICBpZihpc3NldChDb29raWVIYW5kbGVyLmNvb2tpZUJhcikpe1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5pbml0Q29va2llQmFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIC8vIEVsc2UgdHJ5IHRvIGNvbm5lY3QgY29va2llIG92ZXJsYXkgd2l0aCB0cmFja2luZyB0byBjb29raWVPdmVybGF5XG4gICAgICAgICAgICBDb29raWVIYW5kbGVyLmNvb2tpZU92ZXJsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtY29va2llLW92ZXJsYXknKTtcblxuICAgICAgICAgICAgLy8gSWYgaXNzZXQgaW5pdCB0aGUgZnVuY3Rpb25zIGZvciBjb29raWUgb3ZlcmxheVxuICAgICAgICAgICAgaWYoaXNzZXQoQ29va2llSGFuZGxlci5jb29raWVPdmVybGF5KSl7XG4gICAgICAgICAgICAgICAgQ29va2llSGFuZGxlci5pbml0Q29va2llT3ZlcmxheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgZWl0aGVyIHR5cGUgb2YgY29va2llIGhhcyBiZWVuIGZvdW5kIGNoZWNrIGlmIHNldHRpbmdzIGFyZSBkZWZpbmVkXG4gICAgICAgIGlmKGlzc2V0KENvb2tpZUhhbmRsZXIuY29va2llTWVzc2FnZSkpe1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5jaGVja0ZvckNvb2tpZVNldHRpbmdzKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCaW5kIGNvb2tpZSBzd2l0Y2ggdG8gSGFuZGxlclxuICAgICAgICBDb29raWVIYW5kbGVyLmNvb2tpZVN3aXRjaCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy1jb29raWUtc3dpdGNoJyk7XG4gICAgICAgIC8vIElmIGlzc2V0IGluaXQgdGhlIGZ1bmN0aW9ucyBmb3IgY29va2llIHN3aXRjaFxuICAgICAgICBpZihpc3NldChDb29raWVIYW5kbGVyLmNvb2tpZVN3aXRjaCkpe1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5pbml0Q29va2llU3dpdGNoKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gSW5pdCB0aGUgY29va2llIGJhciBhY3Rpb25zXG4gICAgaW5pdENvb2tpZUJhcjogZnVuY3Rpb24oKXtcbiAgICAgICAgY29uc3QgY2xvc2VCdXR0b24gPSBDb29raWVIYW5kbGVyLmNvb2tpZUJhci5xdWVyeVNlbGVjdG9yKCcuanMtZGlzYWJsZS1jb29raWUtYmFyJyk7XG4gICAgICAgIGlmKGlzc2V0KGNsb3NlQnV0dG9uKSl7XG4gICAgICAgICAgICBjbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIENvb2tpZUhhbmRsZXIuY2xvc2VDb29raWVNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBJbml0IHRoZSBjb29raWUgb3ZlcmxheSBhY3Rpb25zXG4gICAgaW5pdENvb2tpZU92ZXJsYXk6IGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgLy8gT3BlbiB0aGUgY29va2llIHNldHRpbmdzIGV2ZW50XG4gICAgICAgIGNvbnN0IG9wZW5Db29raWVTZXR0aW5nc0J1dHRvbiA9IENvb2tpZUhhbmRsZXIuY29va2llTWVzc2FnZS5xdWVyeVNlbGVjdG9yKCcuanMtY2hhbmdlLWNvb2tpZXMtc2V0dGluZ3MnKTtcbiAgICAgICAgaWYoaXNzZXQob3BlbkNvb2tpZVNldHRpbmdzQnV0dG9uKSl7XG4gICAgICAgICAgICBvcGVuQ29va2llU2V0dGluZ3NCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBDb29raWVIYW5kbGVyLm9wZW5Db29raWVTZXR0aW5ncyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUb2dnbGUgb2YgdGhlIHRyYWNraW5nIGlucHV0XG4gICAgICAgIGNvbnN0IHRvZ2dsZVRyYWNraW5nSW5wdXQgPSBDb29raWVIYW5kbGVyLmNvb2tpZU1lc3NhZ2UucXVlcnlTZWxlY3RvcignLmMtY29va2llLXR5cGVfX2lucHV0LS10cmFja2luZycpO1xuICAgICAgICBpZihpc3NldCh0b2dnbGVUcmFja2luZ0lucHV0KSl7XG5cbiAgICAgICAgICAgIGlmKHRvZ2dsZVRyYWNraW5nSW5wdXQuY2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuYWNjZXB0VHJhY2tpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b2dnbGVUcmFja2luZ0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIENvb2tpZUhhbmRsZXIudG9nZ2xlVHJhY2tpbmdTZXR0aW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFjY2VwdCAvIFNhdmUgY29va2llcyBidXR0b24gZXZlbnRcbiAgICAgICAgY29uc3QgYWNjZXB0QnV0dG9uID0gQ29va2llSGFuZGxlci5jb29raWVNZXNzYWdlLnF1ZXJ5U2VsZWN0b3IoJy5qcy1hY2NlcHQtY29va2llcycpO1xuICAgICAgICBpZihpc3NldChhY2NlcHRCdXR0b24pKXtcbiAgICAgICAgICAgIGFjY2VwdEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIENvb2tpZUhhbmRsZXIuc2V0Q29va2llU2V0dGluZ3MpO1xuICAgICAgICB9XG5cbiAgICB9LFxuXG4gICAgLy8gSW5pdCB0aGUgY29va2llIHN3aXRjaCBhY3Rpb25zXG4gICAgaW5pdENvb2tpZVN3aXRjaDogZnVuY3Rpb24oKXtcblxuICAgICAgICAvLyBUb2dnbGUgb2YgdGhlIHRyYWNraW5nIGlucHV0XG4gICAgICAgIGNvbnN0IHRvZ2dsZVRyYWNraW5nSW5wdXQgPSBDb29raWVIYW5kbGVyLmNvb2tpZVN3aXRjaC5xdWVyeVNlbGVjdG9yKCcuYy1jb29raWUtdHlwZV9faW5wdXQtLXRyYWNraW5nJyk7XG4gICAgICAgIGlmKGlzc2V0KHRvZ2dsZVRyYWNraW5nSW5wdXQpKXtcblxuICAgICAgICAgICAgLy8gRm9yY2UgdGhlIHN0YXRlIG9mIHRoZSBjb29raWUgc3dpdGNoIGlucHV0IGJlY2F1c2UgdGhlIHBvcC11cCBpcyBmb3JjZWQgb24gY2hlY2tlZFxuICAgICAgICAgICAgLy8gd2hpbGUgdGhlIHN3aXRjaCBjaGVja3MgYnkgcGhwIGlmIHRoZSBjb29raWUgcmVhbGx5IGV4aXN0IG9yIG5vdFxuICAgICAgICAgICAgaWYodG9nZ2xlVHJhY2tpbmdJbnB1dC5jaGVja2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgQ29va2llSGFuZGxlci5hY2NlcHRUcmFja2luZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuYWNjZXB0VHJhY2tpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG9nZ2xlVHJhY2tpbmdJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBDb29raWVIYW5kbGVyLnRvZ2dsZVRyYWNraW5nU2V0dGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTYXZlIGNvb2tpZXMgYnV0dG9uIGV2ZW50XG4gICAgICAgIGNvbnN0IHNhdmVCdXR0b24gPSBDb29raWVIYW5kbGVyLmNvb2tpZVN3aXRjaC5xdWVyeVNlbGVjdG9yKCcuanMtc2F2ZS1jb29raWUtc2V0dGluZ3MnKTtcbiAgICAgICAgaWYoaXNzZXQoc2F2ZUJ1dHRvbikpe1xuICAgICAgICAgICAgc2F2ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVGYWRlT3V0QW5pbWF0aW9uRHVyYXRpb24gPSAwOyAvLyBPbiB0aGUgc3dpdGNoIGNsaWNrIHdlIHdhbnQgbm8gZGVsYXkgOilcbiAgICAgICAgICAgICAgICBDb29raWVIYW5kbGVyLnNldENvb2tpZVNldHRpbmdzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgfSxcblxuICAgIGNoZWNrRm9yQ29va2llU2V0dGluZ3M6IGZ1bmN0aW9uKCl7XG4gICAgICAgIGlmIChDb29raWUuZ2V0KCdjb29raWVNZXNzYWdlJykpIHtcbiAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuY29va2llTWVzc2FnZS5jbGFzc0xpc3QuYWRkKCdpcy1hY2NlcHRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVNZXNzYWdlLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjY2VwdGVkJyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VDb29raWVNZXNzYWdlOiBmdW5jdGlvbiAoKXtcbiAgICAgICAgQ29va2llLnNldCgnY29va2llTWVzc2FnZScsIHRydWUsIDkwKTtcbiAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVNZXNzYWdlLmNsYXNzTGlzdC5hZGQoJ2ZhZGUtb3V0Jyk7XG4gICAgfSxcblxuICAgIG9wZW5Db29raWVTZXR0aW5nczogZnVuY3Rpb24gKCl7XG4gICAgICAgIENvb2tpZUhhbmRsZXIuY29va2llT3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcuanMtY29va2llLXNldHRpbmdzJykuY2xhc3NMaXN0LnJlbW92ZSgnaXMtaGlkZGVuJyk7XG4gICAgICAgIENvb2tpZUhhbmRsZXIuY29va2llT3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcuanMtY29va2llLWluZm8nKS5jbGFzc0xpc3QuYWRkKCdpcy1oaWRkZW4nKTtcbiAgICB9LFxuXG4gICAgdG9nZ2xlVHJhY2tpbmdTZXR0aW5nOiBmdW5jdGlvbigpe1xuICAgICAgICBpZihDb29raWVIYW5kbGVyLmFjY2VwdFRyYWNraW5nKXtcbiAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuYWNjZXB0VHJhY2tpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5hY2NlcHRUcmFja2luZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0Q29va2llU2V0dGluZ3M6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvLyBTZXQgdHJhY2tpbmcgY29va2llIG9yIGRlbGV0ZSBpdCBpZiBpc3NldCBhY2NvcmRpbmcgdG8gdGhlIGRlc2lyZWQgc2V0dGluZ3NcbiAgICAgICAgaWYoQ29va2llSGFuZGxlci5hY2NlcHRUcmFja2luZyl7XG4gICAgICAgICAgICBDb29raWUuc2V0KCd0cmFja2luZ0Nvb2tpZUFjY2VwdGVkJywgJ3RydWUnLCA5MCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGlmKENvb2tpZS5nZXQoJ3RyYWNraW5nQ29va2llQWNjZXB0ZWQnKSl7XG4gICAgICAgICAgICAgICAgQ29va2llLmVyYXNlKCd0cmFja2luZ0Nvb2tpZUFjY2VwdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBDb29raWVIYW5kbGVyLmNsb3NlQ29va2llTWVzc2FnZSgpO1xuXG4gICAgICAgIC8vIFJlbG9hZCBhZnRlciBhbmltYXRpb24gdG8gYXV0b21hdGljYWxseSB0cmlnZ2VyIHRoZSB0cmFja2luZyBhZnRlciBhY2NlcHRpbmcgaXRcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKClcbiAgICAgICAgfSwgQ29va2llSGFuZGxlci5jb29raWVGYWRlT3V0QW5pbWF0aW9uRHVyYXRpb24pO1xuICAgIH0sXG5cbn07XG5cbkNvb2tpZUhhbmRsZXIuaW5pdCgpOyJdLCJzb3VyY2VSb290IjoiIn0=