?AlkantarClanX12
| Current Path : /home/rankinh/villavanille/wp-content/plugins/feeds-for-youtube/js/ |
| Current File : /home/rankinh/villavanille/wp-content/plugins/feeds-for-youtube/js/sb-youtube.min.js |
/*! For license information please see sb-youtube.min.js.LICENSE.txt */
(()=>{function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}var e,i,s,n,a,o,r,l,d=void 0!==d;if(!d){var h=function(){return!!document.createElement("video").canPlayType};if(window.sbyLinkify=("[a-z\\d.-]+://",n="mailto:",a=new RegExp("(?:\\b[a-z\\d.-]+://[^<>\\s]+|\\b(?:(?:(?:[^\\s!@#$%^&*()_=+[\\]{}\\\\|;:'\",.<>/?]+)\\.)+(?:ac|ad|aero|ae|af|ag|ai|al|am|an|ao|aq|arpa|ar|asia|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|biz|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|cat|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|coop|com|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|info|int|in|io|iq|ir|is|it|je|jm|jobs|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mobi|mo|mp|mq|mr|ms|mt|museum|mu|mv|mw|mx|my|mz|name|na|nc|net|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pro|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|travel|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)|(?:(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5]))(?:[;/][^#?<>\\s]*)?(?:\\?[^#<>\\s]*)?(?:#[^<>\\s]*)?(?!\\w)|(?:mailto:)?[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:(?:(?:[^\\s!@#$%^&*()_=+[\\]{}\\\\|;:'\",.<>/?]+)\\.)+(?:ac|ad|aero|ae|af|ag|ai|al|am|an|ao|aq|arpa|ar|asia|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|biz|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|cat|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|coop|com|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|info|int|in|io|iq|ir|is|it|je|jm|jobs|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mobi|mo|mp|mq|mr|ms|mt|museum|mu|mv|mw|mx|my|mz|name|na|nc|net|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pro|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|travel|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)|(?:(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5]))(?:\\?[^#<>\\s]*)?(?:#[^<>\\s]*)?(?!\\w))","ig"),o=new RegExp("^[a-z\\d.-]+://","i"),r={"'":"`",">":"<",")":"(","]":"[","}":"{","B;":"B+","b:":"b9"},l={callback:function(t,e){return e?'<a href="'+e+'" title="'+e+'" target="_blank" rel="noopener">'+t+"</a>":t},punct_regexp:/(?:[!?.,:;'"]|(?:&|&)(?:lt|gt|quot|apos|raquo|laquo|rsaquo|lsaquo);)$/},function(t,e){e=e||{};var i,s,d,h,c,u,y,g,p,b,f,m,_="",v=[];for(s in l)void 0===e[s]&&(e[s]=l[s]);for(;i=a.exec(t);)if(d=i[0],y=(u=a.lastIndex)-d.length,!/[\/:]/.test(t.charAt(y-1))){do{g=d,m=d.substr(-1),(f=r[m])&&(p=d.match(new RegExp("\\"+f+"(?!$)","g")),b=d.match(new RegExp("\\"+m,"g")),(p?p.length:0)<(b?b.length:0)&&(d=d.substr(0,d.length-1),u--)),e.punct_regexp&&(d=d.replace(e.punct_regexp,(function(t){return u-=t.length,""})))}while(d.length&&d!==g);h=d,o.test(h)||(h=(-1!==h.indexOf("@")?h.indexOf(n)?n:"":h.indexOf("irc.")?h.indexOf("ftp.")?"http://":"ftp://":"irc://")+h),c!=y&&(v.push([t.slice(c,y)]),c=u),v.push([d,h])}for(v.push([t.substr(c)]),s=0;s<v.length;s++)_+=e.callback.apply(window,v[s]);return _||t}),function(e,i,s,n){function a(t,i){this.settings=null,this.options=e.extend({},a.Defaults,i),this.$element=e(t),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},e.each(["onResize","onThrottledResize"],e.proxy((function(t,i){this._handlers[i]=e.proxy(this[i],this)}),this)),e.each(a.Plugins,e.proxy((function(t,e){this._plugins[t.charAt(0).toLowerCase()+t.slice(1)]=new e(this)}),this)),e.each(a.Workers,e.proxy((function(t,i){this._pipe.push({filter:i.filter,run:e.proxy(i.run,this)})}),this)),this.setup(),this.initialize()}a.Defaults={items:3,loop:!1,center:!1,rewind:!1,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:i,fallbackEasing:"swing",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"sby-owl-refresh",loadedClass:"sby-owl-loaded",loadingClass:"sby-owl-loading",rtlClass:"sby-owl-rtl",responsiveClass:"sby-owl-responsive",dragClass:"sby-owl-drag",itemClass:"sby-owl-item",stageClass:"sby-owl-stage",stageOuterClass:"sby-owl-stage-outer",grabClass:"sby-owl-grab"},a.Width={Default:"default",Inner:"inner",Outer:"outer"},a.Type={Event:"event",State:"state"},a.Plugins={},a.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(t){t.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(t){var e=this.settings.margin||"",i=!this.settings.autoWidth,s=this.settings.rtl,n={width:"auto","margin-left":s?e:"","margin-right":s?"":e};!i&&this.$stage.children().css(n),t.css=n}},{filter:["width","items","settings"],run:function(t){var e=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,i=null,s=this._items.length,n=!this.settings.autoWidth,a=[];for(t.items={merge:!1,width:e};s--;)i=this._mergers[s],i=this.settings.mergeFit&&Math.min(i,this.settings.items)||i,t.items.merge=i>1||t.items.merge,a[s]=n?e*i:this._items[s].width();this._widths=a}},{filter:["items","settings"],run:function(){var t=[],i=this._items,s=this.settings,n=Math.max(2*s.items,4),a=2*Math.ceil(i.length/2),o=s.loop&&i.length?s.rewind?n:Math.max(n,a):0,r="",l="";for(o/=2;o--;)t.push(this.normalize(t.length/2,!0)),r+=i[t[t.length-1]][0].outerHTML,t.push(this.normalize(i.length-1-(t.length-1)/2,!0)),l=i[t[t.length-1]][0].outerHTML+l;this._clones=t,e(r).addClass("cloned").appendTo(this.$stage),e(l).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var t=this.settings.rtl?1:-1,e=this._clones.length+this._items.length,i=-1,s=0,n=0,a=[];++i<e;)s=a[i-1]||0,n=this._widths[this.relative(i)]+this.settings.margin,a.push(s+n*t);this._coordinates=a}},{filter:["width","items","settings"],run:function(){var t=this.settings.stagePadding,e=this._coordinates,i={width:Math.ceil(Math.abs(e[e.length-1]))+2*t,"padding-left":t||"","padding-right":t||""};this.$stage.css(i)}},{filter:["width","items","settings"],run:function(t){var e=this._coordinates.length,i=!this.settings.autoWidth,s=this.$stage.children();if(i&&t.items.merge)for(;e--;)t.css.width=this._widths[this.relative(e)],s.eq(e).css(t.css);else i&&(t.css.width=t.items.width,s.css(t.css))}},{filter:["items"],run:function(){this._coordinates.length<1&&this.$stage.removeAttr("style")}},{filter:["width","items","settings"],run:function(t){t.current=t.current?this.$stage.children().index(t.current):0,t.current=Math.max(this.minimum(),Math.min(this.maximum(),t.current)),this.reset(t.current)}},{filter:["position"],run:function(){this.animate(this.coordinates(this._current))}},{filter:["width","position","items","settings"],run:function(){var t,e,i,s,n=this.settings.rtl?1:-1,a=2*this.settings.stagePadding,o=this.coordinates(this.current())+a,r=o+this.width()*n,l=[];for(i=0,s=this._coordinates.length;i<s;i++)t=this._coordinates[i-1]||0,e=Math.abs(this._coordinates[i])+a*n,(this.op(t,"<=",o)&&this.op(t,">",r)||this.op(e,"<",o)&&this.op(e,">",r))&&l.push(i);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+l.join("), :eq(")+")").addClass("active"),this.settings.center&&(this.$stage.children(".center").removeClass("center"),this.$stage.children().eq(this.current()).addClass("center"))}}],a.prototype.initialize=function(){var t,i,s;this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")&&(t=this.$element.find("img"),i=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:n,s=this.$element.children(i).width(),t.length&&s<=0&&this.preloadAutoWidthImages(t)),this.$element.addClass(this.options.loadingClass),this.$stage=e("<"+this.settings.stageElement+' class="'+this.settings.stageClass+'"/>').wrap('<div class="'+this.settings.stageOuterClass+'"/>'),this.$element.append(this.$stage.parent()),this.replace(this.$element.children().not(this.$stage.parent())),this.$element.is(":visible")?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},a.prototype.setup=function(){var t=this.viewport(),i=this.options.responsive,s=-1,n=null;i?(e.each(i,(function(e){e<=t&&e>s&&(s=Number(e))})),"function"==typeof(n=e.extend({},this.options,i[s])).stagePadding&&(n.stagePadding=n.stagePadding()),delete n.responsive,n.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+s))):n=e.extend({},this.options),this.trigger("change",{property:{name:"settings",value:n}}),this._breakpoint=s,this.settings=n,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},a.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},a.prototype.prepare=function(t){var i=this.trigger("prepare",{content:t});return i.data||(i.data=e("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(t)),this.trigger("prepared",{content:i.data}),i.data},a.prototype.update=function(){for(var t=0,i=this._pipe.length,s=e.proxy((function(t){return this[t]}),this._invalidated),n={};t<i;)(this._invalidated.all||e.grep(this._pipe[t].filter,s).length>0)&&this._pipe[t].run(n),t++;this._invalidated={},!this.is("valid")&&this.enter("valid")},a.prototype.width=function(t){switch(t=t||a.Width.Default){case a.Width.Inner:case a.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},a.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},a.prototype.onThrottledResize=function(){i.clearTimeout(this.resizeTimer),this.resizeTimer=i.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},a.prototype.onResize=function(){return!!this._items.length&&this._width!==this.$element.width()&&!!this.$element.is(":visible")&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))},a.prototype.registerEventHandlers=function(){e.support.transition&&this.$stage.on(e.support.transition.end+".owl.core",e.proxy(this.onTransitionEnd,this)),!1!==this.settings.responsive&&this.on(i,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",e.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",(function(){return!1}))),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",e.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",e.proxy(this.onDragEnd,this)))},a.prototype.onDragStart=function(t){var i=null;3!==t.which&&(e.support.transform?i={x:(i=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","))[16===i.length?12:4],y:i[16===i.length?13:5]}:(i=this.$stage.position(),i={x:this.settings.rtl?i.left+this.$stage.width()-this.width()+this.settings.margin:i.left,y:i.top}),this.is("animating")&&(e.support.transform?this.animate(i.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===t.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=e(t.target),this._drag.stage.start=i,this._drag.stage.current=i,this._drag.pointer=this.pointer(t),e(s).on("mouseup.owl.core touchend.owl.core",e.proxy(this.onDragEnd,this)),e(s).one("mousemove.owl.core touchmove.owl.core",e.proxy((function(t){var i=this.difference(this._drag.pointer,this.pointer(t));e(s).on("mousemove.owl.core touchmove.owl.core",e.proxy(this.onDragMove,this)),Math.abs(i.x)<Math.abs(i.y)&&this.is("valid")||(t.preventDefault(),this.enter("dragging"),this.trigger("drag"))}),this)))},a.prototype.onDragMove=function(t){var e=null,i=null,s=null,n=this.difference(this._drag.pointer,this.pointer(t)),a=this.difference(this._drag.stage.start,n);this.is("dragging")&&(t.preventDefault(),this.settings.loop?(e=this.coordinates(this.minimum()),i=this.coordinates(this.maximum()+1)-e,a.x=((a.x-e)%i+i)%i+e):(e=this.settings.rtl?this.coordinates(this.maximum()):this.coordinates(this.minimum()),i=this.settings.rtl?this.coordinates(this.minimum()):this.coordinates(this.maximum()),s=this.settings.pullDrag?-1*n.x/5:0,a.x=Math.max(Math.min(a.x,e+s),i+s)),this._drag.stage.current=a,this.animate(a.x))},a.prototype.onDragEnd=function(t){var i=this.difference(this._drag.pointer,this.pointer(t)),n=this._drag.stage.current,a=i.x>0^this.settings.rtl?"left":"right";e(s).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==i.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(n.x,0!==i.x?a:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=a,(Math.abs(i.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",(function(){return!1}))),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},a.prototype.closest=function(t,i){var s=-1,n=this.width(),a=this.coordinates();return this.settings.freeDrag||e.each(a,e.proxy((function(e,o){return"left"===i&&t>o-30&&t<o+30?s=e:"right"===i&&t>o-n-30&&t<o-n+30?s=e+1:this.op(t,"<",o)&&this.op(t,">",a[e+1]||o-n)&&(s="left"===i?e+1:e),-1===s}),this)),this.settings.loop||(this.op(t,">",a[this.minimum()])?s=t=this.minimum():this.op(t,"<",a[this.maximum()])&&(s=t=this.maximum())),s},a.prototype.animate=function(t){var i=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),i&&(this.enter("animating"),this.trigger("translate")),e.support.transform3d&&e.support.transition?this.$stage.css({transform:"translate3d("+t+"px,0px,0px)",transition:this.speed()/1e3+"s"}):i?this.$stage.animate({left:t+"px"},this.speed(),this.settings.fallbackEasing,e.proxy(this.onTransitionEnd,this)):this.$stage.css({left:t+"px"})},a.prototype.is=function(t){return this._states.current[t]&&this._states.current[t]>0},a.prototype.current=function(t){if(t===n)return this._current;if(0===this._items.length)return n;if(t=this.normalize(t),this._current!==t){var e=this.trigger("change",{property:{name:"position",value:t}});e.data!==n&&(t=this.normalize(e.data)),this._current=t,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},a.prototype.invalidate=function(t){return"string"===e.type(t)&&(this._invalidated[t]=!0,this.is("valid")&&this.leave("valid")),e.map(this._invalidated,(function(t,e){return e}))},a.prototype.reset=function(t){(t=this.normalize(t))!==n&&(this._speed=0,this._current=t,this.suppress(["translate","translated"]),this.animate(this.coordinates(t)),this.release(["translate","translated"]))},a.prototype.normalize=function(t,e){var i=this._items.length,s=e?0:this._clones.length;return!this.isNumeric(t)||i<1?t=n:(t<0||t>=i+s)&&(t=((t-s/2)%i+i)%i+s/2),t},a.prototype.relative=function(t){return t-=this._clones.length/2,this.normalize(t,!0)},a.prototype.maximum=function(t){var e,i,s,n=this.settings,a=this._coordinates.length;if(n.loop)a=this._clones.length/2+this._items.length-1;else if(n.autoWidth||n.merge){for(e=this._items.length,i=this._items[--e].width(),s=this.$element.width();e--&&!((i+=this._items[e].width()+this.settings.margin)>s););a=e+1}else a=n.center?this._items.length-1:this._items.length-n.items;return t&&(a-=this._clones.length/2),Math.max(a,0)},a.prototype.minimum=function(t){return t?0:this._clones.length/2},a.prototype.items=function(t){return t===n?this._items.slice():(t=this.normalize(t,!0),this._items[t])},a.prototype.mergers=function(t){return t===n?this._mergers.slice():(t=this.normalize(t,!0),this._mergers[t])},a.prototype.clones=function(t){var i=this._clones.length/2,s=i+this._items.length,a=function(t){return t%2==0?s+t/2:i-(t+1)/2};return t===n?e.map(this._clones,(function(t,e){return a(e)})):e.map(this._clones,(function(e,i){return e===t?a(i):null}))},a.prototype.speed=function(t){return t!==n&&(this._speed=t),this._speed},a.prototype.coordinates=function(t){var i,s=1,a=t-1;return t===n?e.map(this._coordinates,e.proxy((function(t,e){return this.coordinates(e)}),this)):(this.settings.center?(this.settings.rtl&&(s=-1,a=t+1),i=this._coordinates[t],i+=(this.width()-i+(this._coordinates[a]||0))/2*s):i=this._coordinates[a]||0,i=Math.ceil(i))},a.prototype.duration=function(t,e,i){return 0===i?0:Math.min(Math.max(Math.abs(e-t),1),6)*Math.abs(i||this.settings.smartSpeed)},a.prototype.to=function(t,e){var i=this.current(),s=null,n=t-this.relative(i),a=(n>0)-(n<0),o=this._items.length,r=this.minimum(),l=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(n)>o/2&&(n+=-1*a*o),(s=(((t=i+n)-r)%o+o)%o+r)!==t&&s-n<=l&&s-n>0&&(i=s-n,t=s,this.reset(i))):t=this.settings.rewind?(t%(l+=1)+l)%l:Math.max(r,Math.min(l,t)),this.speed(this.duration(i,t,e)),this.current(t),this.$element.is(":visible")&&this.update()},a.prototype.next=function(t){t=t||!1,this.to(this.relative(this.current())+1,t)},a.prototype.prev=function(t){t=t||!1,this.to(this.relative(this.current())-1,t)},a.prototype.onTransitionEnd=function(t){if(t!==n&&(t.stopPropagation(),(t.target||t.srcElement||t.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},a.prototype.viewport=function(){var t;return this.options.responsiveBaseElement!==i?t=e(this.options.responsiveBaseElement).width():i.innerWidth?t=i.innerWidth:s.documentElement&&s.documentElement.clientWidth?t=s.documentElement.clientWidth:console.warn("Can not detect viewport width."),t},a.prototype.replace=function(t){this.$stage.empty(),this._items=[],t&&(t=t instanceof jQuery?t:e(t)),this.settings.nestedItemSelector&&(t=t.find("."+this.settings.nestedItemSelector)),t.filter((function(){return 1===this.nodeType})).each(e.proxy((function(t,e){e=this.prepare(e),this.$stage.append(e),this._items.push(e),this._mergers.push(1*e.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)}),this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},a.prototype.add=function(t,i){var s=this.relative(this._current);i=i===n?this._items.length:this.normalize(i,!0),t=t instanceof jQuery?t:e(t),this.trigger("add",{content:t,position:i}),t=this.prepare(t),0===this._items.length||i===this._items.length?(0===this._items.length&&this.$stage.append(t),0!==this._items.length&&this._items[i-1].after(t),this._items.push(t),this._mergers.push(1*t.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[i].before(t),this._items.splice(i,0,t),this._mergers.splice(i,0,1*t.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[s]&&this.reset(this._items[s].index()),this.invalidate("items"),this.trigger("added",{content:t,position:i})},a.prototype.remove=function(t){(t=this.normalize(t,!0))!==n&&(this.trigger("remove",{content:this._items[t],position:t}),this._items[t].remove(),this._items.splice(t,1),this._mergers.splice(t,1),this.invalidate("items"),this.trigger("removed",{content:null,position:t}))},a.prototype.preloadAutoWidthImages=function(t){t.each(e.proxy((function(t,i){this.enter("pre-loading"),i=e(i),e(new Image).one("load",e.proxy((function(t){i.attr("src",t.target.src),i.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()}),this)).attr("src",i.attr("src")||i.attr("data-src")||i.attr("data-src-retina"))}),this))},a.prototype.destroy=function(){for(var t in this.$element.off(".owl.core"),this.$stage.off(".owl.core"),e(s).off(".owl.core"),!1!==this.settings.responsive&&(i.clearTimeout(this.resizeTimer),this.off(i,"resize",this._handlers.onThrottledResize)),this._plugins)this._plugins[t].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},a.prototype.op=function(t,e,i){var s=this.settings.rtl;switch(e){case"<":return s?t>i:t<i;case">":return s?t<i:t>i;case">=":return s?t<=i:t>=i;case"<=":return s?t>=i:t<=i}},a.prototype.on=function(t,e,i,s){t.addEventListener?t.addEventListener(e,i,s):t.attachEvent&&t.attachEvent("on"+e,i)},a.prototype.off=function(t,e,i,s){t.removeEventListener?t.removeEventListener(e,i,s):t.detachEvent&&t.detachEvent("on"+e,i)},a.prototype.trigger=function(t,i,s,n,o){var r={item:{count:this._items.length,index:this.current()}},l=e.camelCase(e.grep(["on",t,s],(function(t){return t})).join("-").toLowerCase()),d=e.Event([t,"owl",s||"carousel"].join(".").toLowerCase(),e.extend({relatedTarget:this},r,i));return this._supress[t]||(e.each(this._plugins,(function(t,e){e.onTrigger&&e.onTrigger(d)})),this.register({type:a.Type.Event,name:t}),this.$element.trigger(d),this.settings&&"function"==typeof this.settings[l]&&this.settings[l].call(this,d)),d},a.prototype.enter=function(t){e.each([t].concat(this._states.tags[t]||[]),e.proxy((function(t,e){this._states.current[e]===n&&(this._states.current[e]=0),this._states.current[e]++}),this))},a.prototype.leave=function(t){e.each([t].concat(this._states.tags[t]||[]),e.proxy((function(t,e){this._states.current[e]--}),this))},a.prototype.register=function(t){if(t.type===a.Type.Event){if(e.event.special[t.name]||(e.event.special[t.name]={}),!e.event.special[t.name].owl){var i=e.event.special[t.name]._default;e.event.special[t.name]._default=function(t){return!i||!i.apply||t.namespace&&-1!==t.namespace.indexOf("owl")?t.namespace&&t.namespace.indexOf("owl")>-1:i.apply(this,arguments)},e.event.special[t.name].owl=!0}}else t.type===a.Type.State&&(this._states.tags[t.name]?this._states.tags[t.name]=this._states.tags[t.name].concat(t.tags):this._states.tags[t.name]=t.tags,this._states.tags[t.name]=e.grep(this._states.tags[t.name],e.proxy((function(i,s){return e.inArray(i,this._states.tags[t.name])===s}),this)))},a.prototype.suppress=function(t){e.each(t,e.proxy((function(t,e){this._supress[e]=!0}),this))},a.prototype.release=function(t){e.each(t,e.proxy((function(t,e){delete this._supress[e]}),this))},a.prototype.pointer=function(t){var e={x:null,y:null};return(t=(t=t.originalEvent||t||i.event).touches&&t.touches.length?t.touches[0]:t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t).pageX?(e.x=t.pageX,e.y=t.pageY):(e.x=t.clientX,e.y=t.clientY),e},a.prototype.isNumeric=function(t){return!isNaN(parseFloat(t))},a.prototype.difference=function(t,e){return{x:t.x-e.x,y:t.y-e.y}},e.fn.sbyOwlCarousel=function(i){var s=Array.prototype.slice.call(arguments,1);return this.each((function(){var n=e(this),o=n.data("owl.carousel");o||(o=new a(this,"object"==t(i)&&i),n.data("owl.carousel",o),e.each(["next","prev","to","destroy","refresh","replace","add","remove"],(function(t,i){o.register({type:a.Type.Event,name:i}),o.$element.on(i+".owl.carousel.core",e.proxy((function(t){t.namespace&&t.relatedTarget!==this&&(this.suppress([i]),o[i].apply(this,[].slice.call(arguments,1)),this.release([i]))}),o))}))),"string"==typeof i&&"_"!==i.charAt(0)&&o[i].apply(o,s)}))},e.fn.sbyOwlCarousel.Constructor=a}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this._core=i,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.autoRefresh&&this.watch()}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};n.Defaults={autoRefresh:!0,autoRefreshInterval:500},n.prototype.watch=function(){this._interval||(this._visible=this._core.$element.is(":visible"),this._interval=e.setInterval(t.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},n.prototype.refresh=function(){this._core.$element.is(":visible")!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("sby-owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},n.prototype.destroy=function(){var t,i;for(t in e.clearInterval(this._interval),this._handlers)this._core.$element.off(t,this._handlers[t]);for(i in Object.getOwnPropertyNames(this))"function"!=typeof this[i]&&(this[i]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.AutoRefresh=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this._core=i,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":t.proxy((function(e){if(e.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(e.property&&"position"==e.property.name||"initialized"==e.type))for(var i=this._core.settings,s=i.center&&Math.ceil(i.items/2)||i.items,n=i.center&&-1*s||0,a=(e.property&&void 0!==e.property.value?e.property.value:this._core.current())+n,o=this._core.clones().length,r=t.proxy((function(t,e){this.load(e)}),this);n++<s;)this.load(o/2+this._core.relative(a)),o&&t.each(this._core.clones(this._core.relative(a)),r),a++}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};n.Defaults={lazyLoad:!1},n.prototype.load=function(i){var s=this._core.$stage.children().eq(i),n=s&&s.find(".sby-owl-lazy");!n||t.inArray(s.get(0),this._loaded)>-1||(n.each(t.proxy((function(i,s){var n,a=t(s),o=e.devicePixelRatio>1&&a.attr("data-src-retina")||a.attr("data-src");this._core.trigger("load",{element:a,url:o},"lazy"),a.is("img")?a.one("load.owl.lazy",t.proxy((function(){a.css("opacity",1),this._core.trigger("loaded",{element:a,url:o},"lazy")}),this)).attr("src",o):((n=new Image).onload=t.proxy((function(){a.css({"background-image":'url("'+o+'")',opacity:"1"}),this._core.trigger("loaded",{element:a,url:o},"lazy")}),this),n.src=o)}),this)),this._loaded.push(s.get(0)))},n.prototype.destroy=function(){var t,e;for(t in this.handlers)this._core.$element.off(t,this.handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Lazy=n}(window.Zepto||window.jQuery,window,document),i=window.Zepto||window.jQuery,window,document,s=function t(e){this._core=e,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":i.proxy((function(t){t.namespace&&this._core.settings.autoHeight&&this.update()}),this),"changed.owl.carousel":i.proxy((function(t){t.namespace&&this._core.settings.autoHeight&&"position"==t.property.name&&this.update()}),this),"loaded.owl.lazy":i.proxy((function(t){t.namespace&&this._core.settings.autoHeight&&t.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()}),this)},this._core.options=i.extend({},t.Defaults,this._core.options),this._core.$element.on(this._handlers)},s.Defaults={autoHeight:!1,autoHeightClass:"sby-owl-height"},s.prototype.update=function(){var t,e=this._core._current,s=e+this._core.settings.items,n=this._core.$stage.children().toArray().slice(e,s),a=[];i.each(n,(function(t,e){a.push(i(e).height())})),t=Math.max.apply(null,a),this._core.$stage.parent().height(t).addClass(this._core.settings.autoHeightClass)},s.prototype.destroy=function(){var t,e;for(t in this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},i.fn.sbyOwlCarousel.Constructor.Plugins.AutoHeight=s,function(t,e,i,s){var n=function e(i){this._core=i,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":t.proxy((function(t){t.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})}),this),"resize.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.video&&this.isInFullScreen()&&t.preventDefault()}),this),"refreshed.owl.carousel":t.proxy((function(t){t.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .sby-owl-video-frame").remove()}),this),"changed.owl.carousel":t.proxy((function(t){t.namespace&&"position"===t.property.name&&this._playing&&this.stop()}),this),"prepared.owl.carousel":t.proxy((function(e){if(e.namespace){var i=t(e.content).find(".sby-owl-video");i.length&&(i.css("display","none"),this.fetch(i,t(e.content)))}}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".sby-owl-video-play-icon",t.proxy((function(t){this.play(t)}),this))};n.Defaults={video:!1,videoHeight:!1,videoWidth:!1},n.prototype.fetch=function(t,e){var i=t.attr("data-vimeo-id")?"vimeo":t.attr("data-vzaar-id")?"vzaar":"youtube",s=t.attr("data-vimeo-id")||t.attr("data-youtube-id")||t.attr("data-vzaar-id"),n=t.attr("data-width")||this._core.settings.videoWidth,a=t.attr("data-height")||this._core.settings.videoHeight,o=t.attr("href");if(!o)throw new Error("Missing video URL.");if((s=o.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/))[3].indexOf("youtu")>-1)i="youtube";else if(s[3].indexOf("vimeo")>-1)i="vimeo";else{if(!(s[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");i="vzaar"}s=s[6],this._videos[o]={type:i,id:s,width:n,height:a},e.attr("data-video",o),this.thumbnail(t,this._videos[o])},n.prototype.thumbnail=function(e,i){var s,n,a=i.width&&i.height?'style="width:'+i.width+"px;height:"+i.height+'px;"':"",o=e.find("img"),r="src",l="",d=this._core.settings,h=function(t){s=d.lazyLoad?'<div class="sby-owl-video-tn '+l+'" '+r+'="'+t+'"></div>':'<div class="sby-owl-video-tn" style="opacity:1;background-image:url('+t+')"></div>',e.after(s),e.after('<div class="sby-owl-video-play-icon"></div>')};if(e.wrap('<div class="sby-owl-video-wrapper"'+a+"></div>"),this._core.settings.lazyLoad&&(r="data-src",l="sby-owl-lazy"),o.length)return h(o.attr(r)),o.remove(),!1;"youtube"===i.type?(n="//img.youtube.com/vi/"+i.id+"/hqdefault.jpg",h(n)):"vimeo"===i.type?t.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+i.id+".json",jsonp:"callback",dataType:"jsonp",success:function(t){n=t[0].thumbnail_large,h(n)}}):"vzaar"===i.type&&t.ajax({type:"GET",url:"//vzaar.com/api/videos/"+i.id+".json",jsonp:"callback",dataType:"jsonp",success:function(t){n=t.framegrab_url,h(n)}})},n.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".sby-owl-video-frame").remove(),this._playing.removeClass("sby-owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},n.prototype.play=function(e){var i,s=t(e.target).closest("."+this._core.settings.itemClass),n=this._videos[s.attr("data-video")],a=n.width||"100%",o=n.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),s=this._core.items(this._core.relative(s.index())),this._core.reset(s.index()),"youtube"===n.type?i='<iframe width="'+a+'" height="'+o+'" src="//www.youtube.com/embed/'+n.id+"?autoplay=1&rel=0&v="+n.id+'" frameborder="0" allowfullscreen></iframe>':"vimeo"===n.type?i='<iframe src="//player.vimeo.com/video/'+n.id+'?autoplay=1" width="'+a+'" height="'+o+'" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>':"vzaar"===n.type&&(i='<iframe frameborder="0"height="'+o+'"width="'+a+'" allowfullscreen mozallowfullscreen webkitAllowFullScreen src="//view.vzaar.com/'+n.id+'/player?autoplay=true"></iframe>'),t('<div class="sby-owl-video-frame">'+i+"</div>").insertAfter(s.find(".sby-owl-video")),this._playing=s.addClass("sby-owl-video-playing"))},n.prototype.isInFullScreen=function(){var e=i.fullscreenElement||i.mozFullScreenElement||i.webkitFullscreenElement;return e&&t(e).parent().hasClass("sby-owl-video-frame")},n.prototype.destroy=function(){var t,e;for(t in this._core.$element.off("click.owl.video"),this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Video=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this.core=i,this.core.options=t.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=s,this.next=s,this.handlers={"change.owl.carousel":t.proxy((function(t){t.namespace&&"position"==t.property.name&&(this.previous=this.core.current(),this.next=t.property.value)}),this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":t.proxy((function(t){t.namespace&&(this.swapping="translated"==t.type)}),this),"translate.owl.carousel":t.proxy((function(t){t.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()}),this)},this.core.$element.on(this.handlers)};n.Defaults={animateOut:!1,animateIn:!1},n.prototype.swap=function(){if(1===this.core.settings.items&&t.support.animation&&t.support.transition){this.core.speed(0);var e,i=t.proxy(this.clear,this),s=this.core.$stage.children().eq(this.previous),n=this.core.$stage.children().eq(this.next),a=this.core.settings.animateIn,o=this.core.settings.animateOut;this.core.current()!==this.previous&&(o&&(e=this.core.coordinates(this.previous)-this.core.coordinates(this.next),s.one(t.support.animation.end,i).css({left:e+"px"}).addClass("animated sby-owl-animated-out").addClass(o)),a&&n.one(t.support.animation.end,i).addClass("animated sby-owl-animated-in").addClass(a))}},n.prototype.clear=function(e){t(e.target).css({left:""}).removeClass("animated sby-owl-animated-out sby-owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},n.prototype.destroy=function(){var t,e;for(t in this.handlers)this.core.$element.off(t,this.handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Animate=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this._core=i,this._timeout=null,this._paused=!1,this._handlers={"changed.owl.carousel":t.proxy((function(t){t.namespace&&"settings"===t.property.name?this._core.settings.autoplay?this.play():this.stop():t.namespace&&"position"===t.property.name&&this._core.settings.autoplay&&this._setAutoPlayInterval()}),this),"initialized.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.autoplay&&this.play()}),this),"play.owl.autoplay":t.proxy((function(t,e,i){t.namespace&&this.play(e,i)}),this),"stop.owl.autoplay":t.proxy((function(t){t.namespace&&this.stop()}),this),"mouseover.owl.autoplay":t.proxy((function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()}),this),"mouseleave.owl.autoplay":t.proxy((function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()}),this),"touchstart.owl.core":t.proxy((function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()}),this),"touchend.owl.core":t.proxy((function(){this._core.settings.autoplayHoverPause&&this.play()}),this)},this._core.$element.on(this._handlers),this._core.options=t.extend({},e.Defaults,this._core.options)};n.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},n.prototype.play=function(t,e){this._paused=!1,this._core.is("rotating")||(this._core.enter("rotating"),this._setAutoPlayInterval())},n.prototype._getNextTimeout=function(s,n){return this._timeout&&e.clearTimeout(this._timeout),e.setTimeout(t.proxy((function(){this._paused||this._core.is("busy")||this._core.is("interacting")||i.hidden||this._core.next(n||this._core.settings.autoplaySpeed)}),this),s||this._core.settings.autoplayTimeout)},n.prototype._setAutoPlayInterval=function(){this._timeout=this._getNextTimeout()},n.prototype.stop=function(){this._core.is("rotating")&&(e.clearTimeout(this._timeout),this._core.leave("rotating"))},n.prototype.pause=function(){this._core.is("rotating")&&(this._paused=!0)},n.prototype.destroy=function(){var t,e;for(t in this.stop(),this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.autoplay=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){"use strict";var n=function e(i){this._core=i,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":t.proxy((function(e){e.namespace&&this._core.settings.dotsData&&this._templates.push('<div class="'+this._core.settings.dotClass+'">'+t(e.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"</div>")}),this),"added.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.dotsData&&this._templates.splice(t.position,0,this._templates.pop())}),this),"remove.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.dotsData&&this._templates.splice(t.position,1)}),this),"changed.owl.carousel":t.proxy((function(t){t.namespace&&"position"==t.property.name&&this.draw()}),this),"initialized.owl.carousel":t.proxy((function(t){t.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))}),this),"refreshed.owl.carousel":t.proxy((function(t){t.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};n.Defaults={nav:!1,navText:["prev","next"],navSpeed:!1,navElement:"div",navContainer:!1,navContainerClass:"sby-owl-nav",navClass:["sby-owl-prev","sby-owl-next"],slideBy:1,dotClass:"sby-owl-dot",dotsClass:"sby-owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},n.prototype.initialize=function(){var e,i=this._core.settings;for(e in this._controls.$relative=(i.navContainer?t(i.navContainer):t("<div>").addClass(i.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=t("<"+i.navElement+">").addClass(i.navClass[0]).html(i.navText[0]).prependTo(this._controls.$relative).on("click",t.proxy((function(t){this.prev(i.navSpeed)}),this)),this._controls.$next=t("<"+i.navElement+">").addClass(i.navClass[1]).html(i.navText[1]).appendTo(this._controls.$relative).on("click",t.proxy((function(t){this.next(i.navSpeed)}),this)),i.dotsData||(this._templates=[t("<div>").addClass(i.dotClass).append(t("<span>")).prop("outerHTML")]),this._controls.$absolute=(i.dotsContainer?t(i.dotsContainer):t("<div>").addClass(i.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","div",t.proxy((function(e){var s=t(e.target).parent().is(this._controls.$absolute)?t(e.target).index():t(e.target).parent().index();e.preventDefault(),this.to(s,i.dotsSpeed)}),this)),this._overrides)this._core[e]=t.proxy(this[e],this)},n.prototype.destroy=function(){var t,e,i,s;for(t in this._handlers)this.$element.off(t,this._handlers[t]);for(e in this._controls)this._controls[e].remove();for(s in this.overides)this._core[s]=this._overrides[s];for(i in Object.getOwnPropertyNames(this))"function"!=typeof this[i]&&(this[i]=null)},n.prototype.update=function(){var t,e,i=this._core.clones().length/2,s=i+this._core.items().length,n=this._core.maximum(!0),a=this._core.settings,o=a.center||a.autoWidth||a.dotsData?1:a.dotsEach||a.items;if("page"!==a.slideBy&&(a.slideBy=Math.min(a.slideBy,a.items)),a.dots||"page"==a.slideBy)for(this._pages=[],t=i,e=0;t<s;t++){if(e>=o||0===e){if(this._pages.push({start:Math.min(n,t-i),end:t-i+o-1}),Math.min(n,t-i)===n)break;e=0}e+=this._core.mergers(this._core.relative(t))}},n.prototype.draw=function(){var e,i=this._core.settings,s=this._core.items().length<=i.items,n=this._core.relative(this._core.current()),a=i.loop||i.rewind;this._controls.$relative.toggleClass("disabled",!i.nav||s),i.nav&&(this._controls.$previous.toggleClass("disabled",!a&&n<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!a&&n>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!i.dots||s),i.dots&&(e=this._pages.length-this._controls.$absolute.children().length,i.dotsData&&0!==e?this._controls.$absolute.html(this._templates.join("")):e>0?this._controls.$absolute.append(new Array(e+1).join(this._templates[0])):e<0&&this._controls.$absolute.children().slice(e).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(t.inArray(this.current(),this._pages)).addClass("active"))},n.prototype.onTrigger=function(e){var i=this._core.settings;e.page={index:t.inArray(this.current(),this._pages),count:this._pages.length,size:i&&(i.center||i.autoWidth||i.dotsData?1:i.dotsEach||i.items)}},n.prototype.current=function(){var e=this._core.relative(this._core.current());return t.grep(this._pages,t.proxy((function(t,i){return t.start<=e&&t.end>=e}),this)).pop()},n.prototype.getPosition=function(e){var i,s,n=this._core.settings;return"page"==n.slideBy?(i=t.inArray(this.current(),this._pages),s=this._pages.length,e?++i:--i,i=this._pages[(i%s+s)%s].start):(i=this._core.relative(this._core.current()),s=this._core.items().length,e?i+=n.slideBy:i-=n.slideBy),i},n.prototype.next=function(e){t.proxy(this._overrides.to,this._core)(this.getPosition(!0),e)},n.prototype.prev=function(e){t.proxy(this._overrides.to,this._core)(this.getPosition(!1),e)},n.prototype.to=function(e,i,s){var n;!s&&this._pages.length?(n=this._pages.length,t.proxy(this._overrides.to,this._core)(this._pages[(e%n+n)%n].start,i)):t.proxy(this._overrides.to,this._core)(e,i)},t.fn.sbyOwlCarousel.Constructor.Plugins.Navigation=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){"use strict";var n=function i(s){this._core=s,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":t.proxy((function(i){i.namespace&&"URLHash"===this._core.settings.startPosition&&t(e).trigger("hashchange.owl.navigation")}),this),"prepared.owl.carousel":t.proxy((function(e){if(e.namespace){var i=t(e.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!i)return;this._hashes[i]=e.content}}),this),"changed.owl.carousel":t.proxy((function(i){if(i.namespace&&"position"===i.property.name){var s=this._core.items(this._core.relative(this._core.current())),n=t.map(this._hashes,(function(t,e){return t===s?e:null})).join();if(!n||e.location.hash.slice(1)===n)return;e.location.hash=n}}),this)},this._core.options=t.extend({},i.Defaults,this._core.options),this.$element.on(this._handlers),t(e).on("hashchange.owl.navigation",t.proxy((function(t){var i=e.location.hash.substring(1),s=this._core.$stage.children(),n=this._hashes[i]&&s.index(this._hashes[i]);void 0!==n&&n!==this._core.current()&&this._core.to(this._core.relative(n),!1,!0)}),this))};n.Defaults={URLhashListener:!1},n.prototype.destroy=function(){var i,s;for(i in t(e).off("hashchange.owl.navigation"),this._handlers)this._core.$element.off(i,this._handlers[i]);for(s in Object.getOwnPropertyNames(this))"function"!=typeof this[s]&&(this[s]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Hash=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){function n(e,i){var s=!1,n=e.charAt(0).toUpperCase()+e.slice(1);return t.each((e+" "+r.join(n+" ")+n).split(" "),(function(t,e){if(void 0!==o[e])return s=!i||e,!1})),s}function a(t){return n(t,!0)}var o=t("<support>").get(0).style,r="Webkit Moz O ms".split(" "),l={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}};!!n("transition")&&(t.support.transition=new String(a("transition")),t.support.transition.end=l.transition.end[t.support.transition]),!!n("animation")&&(t.support.animation=new String(a("animation")),t.support.animation.end=l.animation.end[t.support.animation]),n("transform")&&(t.support.transform=new String(a("transform")),t.support.transform3d=!!n("perspective"))}(window.Zepto||window.jQuery,window,document),e=window.Zepto||window.jQuery,window,document,Owl2row=function(t){function e(e){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}((function(t){this.owl=t,this.owl.options=e.extend({},Owl2row.Defaults,this.owl.options),this.handlers={"initialize.owl.carousel":e.proxy((function(t){this.owl.settings.owl2row&&this.build2row(this)}),this)},this.owl.$element.on(this.handlers)})),Owl2row.Defaults={owl2row:!1,owl2rowTarget:"sby_item",owl2rowContainer:"sby_owl2row-item",owl2rowDirection:"utd"},Owl2row.prototype.build2row=function(t){var i=e(t.owl.$element),s=i.find("."+t.owl.options.owl2rowTarget),n=[],a=[];e.each(s,(function(t,e){t%2==0?n.push(e):a.push(e)})),"ltr"===t.owl.options.owl2rowDirection?t.leftToright(t,i,s):t.upTodown(t,n,a,i)},Owl2row.prototype.leftToright=function(t,i,s){var n=t.owl.options.owl2rowContainer,a=t.owl.options.margin,o=s.length,r=[],l=[];o%2==1?o=(o-1)/2+1:o/=2,e.each(s,(function(t,e){t<o?r.push(e):l.push(e)})),e.each(r,(function(t,s){var o=e('<div class="'+n+'"/>'),d=r[t];d.style.marginBottom=a+"px",o.append(d).append(l[t]),i.append(o)}))},Owl2row.prototype.upTodown=function(t,i,s,n){var a=t.owl.options.owl2rowContainer,o=t.owl.options.margin;e.each(i,(function(t,r){var l=e('<div class="'+a+'"/>'),d=i[t];d.style.marginBottom=o+"px",l.append(d).append(s[t]),n.append(l)}))},Owl2row.prototype.destroy=function(){},e.fn.sbyOwlCarousel.Constructor.Plugins.owl2row=Owl2row,function(t){function e(){this.feeds={},this.ctas={},this.options=sbyOptions,this.isTouch="ontouchstart"in document.documentElement}function i(t,e,i){this.el=t,this.index=e,this.settings=i,this.placeholderURL=window.sby.options.placeholder,i.narrowPlayer&&(this.placeholderURL=window.sby.options.placeholderNarrow),this.playerAPIReady=!1,this.consentGiven=i.consentGiven,this.players={},this.minImageWidth=0,this.imageResolution=150,this.resizedImages={},this.needsResizing=[],this.outOfPages=!1,this.isInitialized=!1,this.mostRecentlyLoadedPosts=[],this.embedURL="//www.youtube-nocookie.com",i.allowCookies&&(this.embedURL="//www.youtube.com")}function s(e,s,n){i.call(this,e,s,n),this.CTA={},this.initLayout=function(){this.initGalleryLayout(),this.initGrid(),this.initCarousels();var t=jQuery.Event("sbyafterlayoutinit");t.feed=this,jQuery(window).trigger(t)},this.initGrid=function(){if(window.sbySemiEagerLoading&&jQuery("#sby_lightbox").length){var e=this;playerID="sby_lb-player",jQuery("#sby_lightbox").addClass("sby_video_lightbox"),window.sbyOptions.isPro||jQuery("#sby_lightbox").addClass("sby_lightbox_free");var i=t(this.el).find("sby_item").first().attr("data-video-id"),s=sbyOptions.autoplay;if(void 0===window.sbyLightboxPlayer){var n={host:window.location.protocol+e.embedURL,videoId:i,playerVars:{modestbranding:1,rel:0,autoplay:s},events:{onStateChange:function(i){var s=i.target.getVideoData().video_id;e.afterStateChange(playerID,s,i,t("#"+playerID).closest(".sby_video_thumbnail_wrap"))}}};e.maybeAddCTA(playerID),window.sbyLightboxPlayer=new window.YT.Player(playerID,n)}}},this.initCarousels=function(){var e=this,i=t(this.el);if(void 0!==this.settings.general.carousel){var s=this.settings.cols,n=this.settings.colsmobile;i.find(".sby_items_wrap").addClass("sby_carousel"),i.find(".sby_load_btn").remove(),i.find(".sby_item").css({"padding-top":i.find(".sby_items_wrap").css("padding-top"),"padding-right":i.find(".sby_items_wrap").css("padding-top"),"padding-bottom":i.find(".sby_items_wrap").css("padding-top"),"padding-left":i.find(".sby_items_wrap").css("padding-top")}),i.find(".sby_item").each((function(){t(this).attr("style",t(this).attr("style").replace("padding: "+i.find(".sby_items_wrap").css("padding-top"),"padding: "+i.find(".sby_items_wrap").css("padding-top")+" !important"))}));var a=e.settings.general.carousel[0],o=e.settings.general.carousel[1],r=e.settings.general.carousel[2],l=e.settings.general.carousel[3],d=e.settings.general.carousel[4],h=e.settings.general.carousel[5];r||(l=!1);var c=s,u=s,y=(a=a?"onhover":"hide",r=!1!==l,2==h);d=!d,i.hasClass("sby_mob_col_auto")?(c=2,2!=parseInt(s)&&(u=1),2==parseInt(s)&&(u=2)):u=n,this.carouselArgs={items:s,loop:d,rewind:!d,autoplay:r,autoplayTimeout:Math.max(l,2e3),autoplayHoverPause:!0,nav:!0,navText:['<svg class="svg-inline--fa fa-chevron-left fa-w-10" aria-hidden="true" data-fa-processed="" data-prefix="fa" data-icon="chevron-left" role="presentation" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z"></path></svg>','<svg class="svg-inline--fa fa-chevron-right fa-w-10" aria-hidden="true" data-fa-processed="" data-prefix="fa" data-icon="chevron-right" role="presentation" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"></path></svg>'],dots:o,owl2row:y,responsive:{0:{items:u},480:{items:c},640:{items:s}},onChange:function(){setTimeout((function(){e.afterResize()}),1)},onInitialize:function(){var t=jQuery(e.el);t.find(".sby_items_wrap.sby_carousel").fadeIn(),setTimeout((function(){t.find(".sby_items_wrap.sby_carousel .sby_info, .sby_owl2row-item,.sby_items_wrap.sby_carousel").fadeIn()}),1),setTimeout((function(){var e=t.find(".sby-owl-nav");if("onhover"===a);else if("below"===a){var i=t.find(".sby-owl-dots"),s=t.find(".sby-owl-prev"),n=t.find(".sby-owl-next"),o=t.find(".sby-owl-nav"),r=t.find(".sby-owl-dot"),l=r.length*r.innerWidth();t.innerWidth(),s.after(i),o.css("position","relative"),n.css("position","absolute").css("top","-6px").css("right",Math.max(.5*o.innerWidth()-.5*l-n.innerWidth()-6,0)),s.css("position","absolute").css("top","-6px").css("left",Math.max(.5*o.innerWidth()-.5*l-s.innerWidth()-6,0))}else"hide"===a&&e.addClass("hide").hide()}),1)}}}},this.stripEmojihtml=function(e){return e.find(".emoji").each((function(){t(this).replaceWith(t(this).attr("alt"))})),e.html()},this.afterItemRevealed=function(t){var e=this;if(t.find(".sby_caption").length&&!t.find(".sby_caption").hasClass("sby_full_caption")){var i=t.find(".sby_item_caption_wrap .sby_caption"),s=t.find(".sby_item_video_thumbnail .sby_caption"),n=void 0!==e.settings.general.descriptionlength?parseInt(e.settings.general.descriptionlength):150;n<1&&(n=99999);var a=this.stripEmojihtml(t.find(".sby_caption").first()),o=((a.match(/<br>/g)||[]).length,void 0===sbyOptions.brAdjust||"1"===sbyOptions.brAdjust||sbyOptions.brAdjust,a.substring(0,n));if(o=a.length>n?o.substr(0,Math.min(o.length,o.lastIndexOf(" "))):o,i.length&&(i.html(sbyLinkify(o)),o===a&&i.next(".sby_expand").remove()),s.length){var r=o;o!==a&&(r+='<span class="sby_more">...</span>'),s.html(r)}a.length>n&&t.find(".sby_expand").show(),t.find(".sby_expand a").off("click").on("click",(function(s){s.preventDefault(),jQuery(this),i=void 0!==i?i:t.find(".sby_info .sby_caption"),a="undefined"!=typeof captiontext?a:t.find(".sby_item_video_thumbnail").attr("data-title"),t.hasClass("sby_caption_full")&&void 0!==o?(i.html(o),t.removeClass("sby_caption_full")):(i.html(sbyLinkify(a)),t.addClass("sby_caption_full")),e.afterResize()}))}this.setUpCTA(t);var l=void 0!==e.settings.general.disablelightbox&&e.settings.general.disablelightbox,d=void 0!==e.settings.general.captionlinks&&e.settings.general.captionlinks;if(l||d){if(d){var h="";void 0!==t.find("img").attr("alt")?h=t.find("img").attr("alt"):void 0!==t.find("video").attr("alt")&&(h=t.find("video").attr("alt"));var c=h.match(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g);c&&t.find("a").attr("href",c)}t.find(".sby_link").addClass("sby_disable_lightbox")}else{var u=t.find(".sby_photo_wrap"),y=u.find(".sby_link");feedOptions={hovereffect:"true"},"none"==feedOptions.hovereffect?(y.css("background","none").show(),y.find("*").hide().end().find(".sby_link_area").show()):u.on("mouseenter mouseleave",(function(e){switch(e.type){case"mouseenter":t.addClass("sby_animate");break;case"mouseleave":t.removeClass("sby_animate")}}))}var g=void 0!==t.attr("data-video-id")?t.attr("data-video-id"):t.find(".sby_video_thumbnail").attr("data-video-id");this.mostRecentlyLoadedPosts.push(g)},this.afterFeedSet=function(){void 0!==this.carouselArgs&&(t(this.el).find(".sby_carousel").sbyOwlCarousel(this.carouselArgs),2===parseInt(this.settings.general.carousel[5])&&t(this.el).addClass("sby_carousel_2_row"))},this.setUpCTA=function(t,e){e=void 0!==e?e:t.find(".sby_item_video_thumbnail").attr("data-video-id");var i=void 0!==t.find(".sby_item_video_thumbnail").attr("data-title")?t.find(".sby_item_video_thumbnail").attr("data-title"):"",s=window.sby.ctaDetect(i);window.sby.ctas[e]=s||this.getDefaultCTA()},this.getDefaultCTA=function(){return void 0!==this.settings.general.cta&&"default"!==this.settings.general.cta.type&&("link"===this.settings.general.cta.type?{callback:"link",url:this.settings.general.cta.defaultLink,text:this.settings.general.cta.defaultText}:{callback:"related",related:this.settings.general.cta.defaultPosts})},this.afterResize=function(){this.setImageHeight(),this.setImageResolution(),this.maybeRaiseImageResolution(),this.setImageSizeClass(),this.setAllCTADimensions(),this.sizePlayer(),this.sizeItems()},this.setAllCTADimensions=function(){t.each(this.CTA,(function(t,e){e.isInitialized&&e.setCTAStyles()}))},this.afterSendCheckWPPostsToServer=function(e){var i=t(this.el);i.find(".sby_item").each((function(){if(void 0!==e[t(this).attr("data-video-id")]){var i=e[t(this).attr("data-video-id")];t(this).find(".sby_view_count").text(i.sby_view_count),t(this).find(".sby_comment_count").text(i.sby_comment_count),t(this).find(".sby_like_count").text(i.sby_like_count),"none"!==i.sby_live_broadcast.broadcast_type&&(t(this).find(".sby_ls_message").text(i.sby_live_broadcast.live_streaming_string),t(this).find(".sby_date").html(i.sby_live_broadcast.live_streaming_date)),void 0!==i.sby_live_broadcast.live_streaming_timestamp&&t(this).attr("data-live-date",i.sby_live_broadcast.live_streaming_timestamp),void 0!==i.sby_description&&t(this).find(".sby_item_video_thumbnail").attr("data-title",i.sby_description)}})),i.find(".sby_player_item").each((function(){if(void 0!==e[t(this).find(".sby_video_thumbnail").attr("data-video-id")]){var i=e[t(this).find(".sby_video_thumbnail").attr("data-video-id")];t(this).find(".sby_view_count").text(i.sby_view_count),t(this).find(".sby_comment_count").text(i.sby_comment_count),t(this).find(".sby_like_count").text(i.sby_like_count),"none"!==i.sby_live_broadcast.broadcast_type&&(t(this).find(".sby_ls_message").text(i.sby_live_broadcast.live_streaming_string),t(this).find(".sby_date").html(i.sby_live_broadcast.live_streaming_date)),void 0!==i.sby_live_broadcast.live_streaming_timestamp&&t(this).attr("data-live-date",i.sby_live_broadcast.live_streaming_timestamp)}}));var n=jQuery.Event("sbyaftercheckposts");n.feed=window.sby.feeds[s],n.response=e,jQuery(window).trigger(n)},this.afterStateChange=function(t,e,i,s){this.CTA[t].toggleCTA(e,i.data,s)},this.changePlayerInfo=function(e){var i=t(this.el);i.find(".sby_player_item").find(".sby_info").replaceWith(e.find(".sby_info").clone(!0,!0));var s=e.find(".sby_video_title_wrap .sby_video_title").text(),n=e.find(".sby_username_wrap .sby_username").text(),a=e.find(".sby_date_wrap .sby_date").text();i.find(".sby-player-info .sby-video-header-info h5").text(s),i.find(".sby-player-info .sby-video-header-meta .sby-channel-name").text(n),i.find(".sby-player-info .sby-video-header-meta .sby-video-date").text(a)},this.maybeAddCTA=function(t,e){void 0===this.CTA[t]&&(this.CTA[t]=new o(t,this))}}function n(){}function a(){n.call(this);var e=t(".sb_youtube"),i=e.attr("data-channel-subscribers"),s=e.attr("data-subscribe-btn-text"),a=e.attr("data-subscribe-btn");this.getData=function(t){return{feedIndex:parseInt(t.closest(".sb_youtube").attr("data-sby-index")-1),link:t.attr("href"),video:t.attr("data-video-id"),title:t.attr("data-title"),videoTitle:void 0!==t.attr("data-video-title")?t.attr("data-video-title"):"YouTube Video",avatar:t.attr("data-avatar"),user:t.attr("data-user"),channelURL:t.attr("data-url"),channelID:t.attr("data-channel-id"),channelSubscribers:i,subscribeBtn:a,subscribeBtnText:s}},this.template=function(){return"<div id='sby_lightboxOverlay' class='sby_lightboxOverlay'></div><div id='sby_lightbox' class='sby_lightbox'><div class='sby_lb-outerContainer'><div class='sby_lb-container'><div class='sby_lb_video_thumbnail_wrap'><span class='sby_lb_video_thumbnail'><img class='sby_lb-image' alt='Lightbox image placeholder' src='' /><div class='sby_lb-player' id='sby_lb-player'></div></span></div><div class='sby_lb-nav'><a class='sby_lb-prev' href='#' ><p class='sby-screenreader'>Previous Slide</p><span></span></a><a class='sby_lb-next' href='#' ><p class='sby-screenreader'>Next Slide</p><span></span></a></div><div class='sby_lb-loader'><a class='sby_lb-cancel'></a></div></div></div><div class='sby_lb-dataContainer'><div class='sby_lb-data'><div class='sby_lb-details'><div class='sby_lb-caption'></div><div class='sby_lb-info'><div class='sby_lb-number'></div></div></div><div class='sby_lb-closeContainer'><a class='sby_lb-close'></a></div></div></div></div>"},this.beforePlayerSetup=function(e,i,s,n,a){e.find(".sby_cta_items_wraps").length?e.find(".sby_cta_items_wraps").replaceWith(t(a.el).find(".sby_cta_items_wraps").clone()):e.find(".sby_lb_video_thumbnail_wrap").append(t(a.el).find(".sby_cta_items_wraps").clone())},this.afterPlayerSetup=function(t,e,i,n){this.availableAvatarUrls={};var a=e.title;void 0!==a&&""!==a&&(a=a.replace(/(>#)/g,"> #")),a=a?sbyLinkify(a):"","function"==typeof sbyLightboxAction&&setTimeout((function(){sbyLightboxAction()}),100);var o="",r='<div class="sby-lb-channel-header">',l=e.subscribeBtn?'<a class="sby-lb-subscribe-btn" href="http://www.youtube.com/channel/'+e.channelID+'?sub_confirmation=1&feature=subscribe-embed-click" target="_blank" rel="noopener noreferrer"><svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6.66732 10.0634L10.1273 8.0634L6.66732 6.0634V10.0634ZM14.374 4.8434C14.4607 5.15673 14.5207 5.57673 14.5607 6.11006C14.6073 6.6434 14.6273 7.1034 14.6273 7.5034L14.6673 8.0634C14.6673 9.5234 14.5607 10.5967 14.374 11.2834C14.2073 11.8834 13.8207 12.2701 13.2207 12.4367C12.9073 12.5234 12.334 12.5834 11.454 12.6234C10.5873 12.6701 9.79398 12.6901 9.06065 12.6901L8.00065 12.7301C5.20732 12.7301 3.46732 12.6234 2.78065 12.4367C2.18065 12.2701 1.79398 11.8834 1.62732 11.2834C1.54065 10.9701 1.48065 10.5501 1.44065 10.0167C1.39398 9.4834 1.37398 9.0234 1.37398 8.6234L1.33398 8.0634C1.33398 6.6034 1.44065 5.53006 1.62732 4.8434C1.79398 4.2434 2.18065 3.85673 2.78065 3.69006C3.09398 3.6034 3.66732 3.5434 4.54732 3.5034C5.41398 3.45673 6.20732 3.43673 6.94065 3.43673L8.00065 3.39673C10.794 3.39673 12.534 3.5034 13.2207 3.69006C13.8207 3.85673 14.2073 4.2434 14.374 4.8434Z" fill="white"/></svg> '+s+"</a>":"";void 0!==e.avatar&&""!==e.avatar&&void 0!==e.user?(o="undefined"!==e.avatar?'<img src="'+e.avatar+'" />':"",e.subscribeBtn?r+='<a class="sby_lightbox_username" href="'+e.channelURL+'" target="_blank" rel="noopener">'+o+'<p class="sby-lb-channel-name-with-subs"><span>@'+e.user+"</span><span>"+e.channelSubscribers+"</span></p></a> "+l+"</div>":r=""):void 0!==e.user&&jQuery.each(window.sby.feeds,(function(){void 0!==this.availableAvatarUrls&&void 0!==this.availableAvatarUrls[e.user]&&"undefined"!==this.availableAvatarUrls[e.user]&&(o='<img src="'+this.availableAvatarUrls[e.user]+'" />')})),t.find(".sby_lb-caption").html(r+'<span class="sby_caption_text">'+a+"</span>").fadeIn("fast")}}function o(t,e){this.isInitialized=!1,this.videoID=t,this.callback=this.related,this.callbackArgs={},this.feedObjInContext=e,this.state=1,this.numItems=4,this.numItemColumns=2,this.$player=!1}function r(e,i){t.ajax({url:sbyOptions.adminAjaxUrl,type:"post",data:e,success:i})}e.prototype={createPage:function(e,i){void 0!==window.sbyajaxurl&&-1!==window.sbyajaxurl.indexOf(window.location.hostname)||(window.sbyajaxurl=window.location.hostname+"/wp-admin/admin-ajax.php"),t(".sby_no_js_error_message").remove(),t(".sby_no_js").removeClass("sby_no_js"),e(i)},maybeAddYTAPI:function(){var t="sby-youtube-api";if(null===document.getElementById(t)){var e=document.createElement("script"),i=document.getElementsByTagName("script")[0];e.src="https://www.youtube.com/iframe_api",e.id=t,i.parentNode.insertBefore(e,i)}},createLightbox:function(){var e,i=new a,s=(e=0,function(t,i){clearTimeout(e),e=setTimeout(t,i)});jQuery(window).on("resize",(function(){s((function(){i.afterResize()}),200)})),function(){var e=jQuery,s=function(){function t(){this.fadeDuration=500,this.fitImagesInViewport=!0,this.resizeDuration=700,this.positionFromTop=50,this.showImageNumberLabel=!0,this.alwaysShowNavOnTouchDevices=!1,this.wrapAround=!1}return t.prototype.albumLabel=function(t,e){return t+" / "+e},t}(),n=function(){function s(t){this.options=t,this.album=[],this.currentImageIndex=void 0,this.init()}return s.prototype.init=function(){this.enable(),this.build()},s.prototype.enable=function(){var t=this;e("body").on("click","a[data-sby-lightbox]",(function(i){return t.start(e(i.currentTarget)),!1}))},s.prototype.build=function(){var t=this;e(""+i.template()).appendTo(e("body")),this.$lightbox=e("#sby_lightbox"),this.$overlay=e("#sby_lightboxOverlay"),this.$outerContainer=this.$lightbox.find(".sby_lb-outerContainer"),this.$container=this.$lightbox.find(".sby_lb-container"),this.containerTopPadding=parseInt(this.$container.css("padding-top"),10),this.containerRightPadding=parseInt(this.$container.css("padding-right"),10),this.containerBottomPadding=parseInt(this.$container.css("padding-bottom"),10),this.containerLeftPadding=parseInt(this.$container.css("padding-left"),10),this.$overlay.hide().on("click",(function(){return t.end(),!1})),jQuery(document).on("click",(function(t,e,s){jQuery(t.target).closest(".sby_lb-outerContainer").length||jQuery(t.target).closest(".sby_lb-dataContainer").length||(i.pausePlayer(),jQuery("#sby_lightboxOverlay, #sby_lightbox").fadeOut())})),this.$lightbox.hide(),jQuery("#sby_lightboxOverlay").on("click",(function(s){return i.pausePlayer(),"sby_lightbox"===e(s.target).attr("id")&&t.end(),!1})),this.$lightbox.find(".sby_lb-prev").on("click",(function(){return i.pausePlayer(),t.changeImage(0===t.currentImageIndex?t.album.length-1:t.currentImageIndex-1),!1})),this.$lightbox.find(".sby_lb-container").on("swiperight",(function(){return i.pausePlayer(),t.changeImage(0===t.currentImageIndex?t.album.length-1:t.currentImageIndex-1),!1})),this.$lightbox.find(".sby_lb-next").on("click",(function(){return i.pausePlayer(),t.changeImage(t.currentImageIndex===t.album.length-1?0:t.currentImageIndex+1),!1})),this.$lightbox.find(".sby_lb-container").on("swipeleft",(function(){return i.pausePlayer(),t.changeImage(t.currentImageIndex===t.album.length-1?0:t.currentImageIndex+1),!1})),this.$lightbox.find(".sby_lb-loader, .sby_lb-close").on("click",(function(){return i.pausePlayer(),t.end(),!1}))},s.prototype.start=function(t){function s(t){n.album.push(i.getData(t))}var n=this,a=e(window);a.on("resize",e.proxy(this.sizeOverlay,this)),e("select, object, embed").css({visibility:"hidden"}),this.sizeOverlay(),this.album=[];var o,r=0,l=t.attr("data-sby-lightbox");if(l){o=e(t.prop("tagName")+'[data-sby-lightbox="'+l+'"]');for(var d=0;d<o.length;d=++d)s(e(o[d])),o[d]===t[0]&&(r=d)}else if("lightbox"===t.attr("rel"))s(t);else{o=e(t.prop("tagName")+'[rel="'+t.attr("rel")+'"]');for(var h=0;h<o.length;h=++h)s(e(o[h])),o[h]===t[0]&&(r=h)}var c=a.scrollTop()+this.options.positionFromTop,u=a.scrollLeft();this.$lightbox.css({top:c+"px",left:u+"px"}).fadeIn(this.options.fadeDuration),this.changeImage(r)},s.prototype.changeImage=function(t){var i=this;this.disableKeyboardNav();var s=this.$lightbox.find(".sby_lb-image");this.$overlay.fadeIn(this.options.fadeDuration),e(".sby_lb-loader").fadeIn("slow"),this.$lightbox.find(".sby_lb-image, .sby_lb-nav, .sby_lb-prev, .sby_lb-next, .sby_lb-dataContainer, .sby_lb-numbers, .sby_lb-caption").hide(),this.$outerContainer.addClass("animating");var n=new Image;n.onload=function(){var a,o,r,l,d,h;s.attr("src",i.album[t].link),e(n),s.width(n.width),s.height(n.height),i.options.fitImagesInViewport&&(h=e(window).width(),d=e(window).height(),l=h-i.containerLeftPadding-i.containerRightPadding-20-100,r=d-i.containerTopPadding-i.containerBottomPadding-150,(n.width>l||n.height>r)&&(n.width/l>n.height/r?(o=l,a=parseInt(n.height/(n.width/o),10),s.width(o),s.height(a)):(a=r,o=parseInt(n.width/(n.height/a),10),s.width(o),s.height(a)))),i.sizeContainer(s.width(),s.height())},n.src=this.album[t].link,this.currentImageIndex=t},s.prototype.sizeOverlay=function(){this.$overlay.width(e(window).width()).height(e(document).height())},s.prototype.sizeContainer=function(t,e){function i(){s.$lightbox.find(".sby_lb-dataContainer").width(o),s.$lightbox.find(".sby_lb-prevLink").height(r),s.$lightbox.find(".sby_lb-nextLink").height(r),s.showImage()}var s=this,n=this.$outerContainer.outerWidth(),a=this.$outerContainer.outerHeight(),o=t+this.containerLeftPadding+this.containerRightPadding,r=e+this.containerTopPadding+this.containerBottomPadding;n!==o||a!==r?this.$outerContainer.animate({width:o,height:r},this.options.resizeDuration,"swing",(function(){i()})):i()},s.prototype.showImage=function(){this.$lightbox.find(".sby_lb-loader").hide(),this.$lightbox.find(".sby_lb-image").fadeIn("slow"),this.updateNav(),this.updateDetails(),this.preloadNeighboringImages(),this.enableKeyboardNav()},s.prototype.updateNav=function(){var t=!1;try{document.createEvent("TouchEvent"),t=!!this.options.alwaysShowNavOnTouchDevices}catch(t){}this.$lightbox.find(".sby_lb-nav").show(),this.album.length>1&&(this.options.wrapAround?(t&&this.$lightbox.find(".sby_lb-prev, .sby_lb-next").css("opacity","1"),this.$lightbox.find(".sby_lb-prev, .sby_lb-next").show()):(this.currentImageIndex>0&&(this.$lightbox.find(".sby_lb-prev").show(),t&&this.$lightbox.find(".sby_lb-prev").css("opacity","1")),this.currentImageIndex<this.album.length-1&&(this.$lightbox.find(".sby_lb-next").show(),t&&this.$lightbox.find(".sby_lb-next").css("opacity","1"))))},s.prototype.updateDetails=function(){var e=this;jQuery("iframe.sby_lb-player-loaded").length&&(jQuery(".sby_lb-player-placeholder").replaceWith(jQuery("iframe.sby_lb-player-loaded")),jQuery("iframe.sby_lb-player-loaded").removeClass("sby_lb-player-loaded").show());var s=window.sby.feeds[this.album[this.currentImageIndex].feedIndex];if(i.beforePlayerSetup(this.$lightbox,this.album[this.currentImageIndex],this.currentImageIndex,this.album,s),h()){if(jQuery("#sby_lightbox").removeClass("sby_video_lightbox"),s.settings.consentGiven&&this.album[this.currentImageIndex].video.length){jQuery(".sby_gdpr_notice").remove();var n="sby_lb-player";jQuery("#sby_lightbox").addClass("sby_video_lightbox"),window.sbyOptions.isPro||jQuery("#sby_lightbox").addClass("sby_lightbox_free");var a=this.album[this.currentImageIndex].video,o=sbyOptions.autoplay;if(void 0===window.sbyLightboxPlayer){var r={host:window.location.protocol+s.embedURL,videoId:a,playerVars:{modestbranding:1,rel:0,autoplay:o},events:{onStateChange:function(e){var i=e.target.getVideoData().video_id;s.afterStateChange(n,i,e,t("#"+n).closest(".sby_video_thumbnail_wrap"))}}};s.maybeAddCTA(n),window.sbyLightboxPlayer=new window.YT.Player(n,r)}else window.sbyLightboxPlayer.loadVideoById(a);this.$outerContainer.removeClass("animating"),this.$lightbox.find(".sby_lb-dataContainer").fadeIn(this.options.resizeDuration,(function(){return e.sizeOverlay()})),setTimeout((function(){t("#sby_lightbox .sby_lb-player").css({height:t("#sby_lightbox .sby_lb-outerContainer").height()+"px",width:t("#sby_lightbox .sby_lb-outerContainer").width()+"px",top:0})}),1),this.$lightbox.find("iframe").length&&this.$lightbox.find("iframe").attr("title",this.album[this.currentImageIndex].videoTitle)}else{var l=t(".sby_item[data-video-id="+this.album[this.currentImageIndex].video+"]").find(".sby_video_thumbnail").attr("data-full-res");t(".sby_lb-image").attr("src",l),this.$outerContainer.removeClass("animating"),this.$lightbox.find(".sby_lb-dataContainer").fadeIn(this.options.resizeDuration,(function(){return e.sizeOverlay()})),jQuery(".sby_lb-container").prepend('<a href="https://www.youtube.com/watch?v='+this.album[this.currentImageIndex].video+'" target="_blank" rel="noopener noreferrer" class="sby_gdpr_notice"><svg style="color: rgba(255,255,255,1)" class="svg-inline--fa fa-play fa-w-14 sby_playbtn" aria-label="Play" aria-hidden="true" data-fa-processed="" data-prefix="fa" data-icon="play" role="presentation" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"></path></svg></a>')}i.afterPlayerSetup(this.$lightbox,this.album[this.currentImageIndex],this.currentImageIndex,this.album),this.album.length>1&&this.options.showImageNumberLabel?this.$lightbox.find(".sby_lb-number").text(this.options.albumLabel(this.currentImageIndex+1,this.album.length)).fadeIn("fast"):this.$lightbox.find(".sby_lb-number").hide()}},s.prototype.preloadNeighboringImages=function(){this.album.length>this.currentImageIndex+1&&((new Image).src=this.album[this.currentImageIndex+1].link),this.currentImageIndex>0&&((new Image).src=this.album[this.currentImageIndex-1].link)},s.prototype.enableKeyboardNav=function(){e(document).on("keyup.keyboard",e.proxy(this.keyboardAction,this))},s.prototype.disableKeyboardNav=function(){e(document).off(".keyboard")},s.prototype.keyboardAction=function(e){var s=event.keyCode,n=String.fromCharCode(s).toLowerCase();27===s||n.match(/x|o|c/)?(h()&&t("#sby_lightbox video.sby_video")[0].pause(),t("#sby_lightbox iframe").attr("src",""),this.end()):"p"===n||37===s?(0!==this.currentImageIndex?this.changeImage(this.currentImageIndex-1):this.options.wrapAround&&this.album.length>1&&this.changeImage(this.album.length-1),h()&&t("#sby_lightbox video.sby_video")[0].pause(),t("#sby_lightbox iframe").attr("src","")):"n"!==n&&39!==s||(this.currentImageIndex!==this.album.length-1?this.changeImage(this.currentImageIndex+1):this.options.wrapAround&&this.album.length>1&&this.changeImage(0),i.pausePlayer())},s.prototype.end=function(){this.disableKeyboardNav(),e(window).off("resize",this.sizeOverlay),this.$lightbox.fadeOut(this.options.fadeDuration),this.$overlay.fadeOut(this.options.fadeDuration),e("select, object, embed").css({visibility:"visible"})},s}();e((function(){var e=new s;new n(e),t(".sby_lightbox_action a").off().on("click",(function(){t(this).parent().find(".sby_lightbox_tooltip").toggle()}))}))}.call(this),window.sbyOptions.lightboxCreated=!0},createFeeds:function(e){sbyOptions.isAdmin||void 0!==sbyOptions.lightboxCreated||window.sby.createLightbox(),e.whenFeedsCreated(t(".sb_youtube").each((function(e){t(this).attr("data-sby-index",e+1),t(this).find(".sby_player").replaceWith('<div id="sby_player'+e+'"></div>');var i=t(this),n=void 0!==i.attr("data-sby-flags")?i.attr("data-sby-flags").split(","):[],a=void 0!==i.attr("data-options")?JSON.parse(i.attr("data-options")):{};n.indexOf("testAjax")>-1&&(window.sby.triggeredTest=!0,r({action:"sby_on_ajax_test_trigger"},(function(t){console.log("did test")})));var o={cols:i.attr("data-cols"),colsmobile:"same"!==i.attr("data-colsmobile")?i.attr("data-colsmobile"):i.attr("data-cols"),num:i.attr("data-num"),imgRes:i.attr("data-res"),feedID:i.attr("data-feedid"),postID:void 0!==i.attr("data-postid")?i.attr("data-postid"):"unknown",shortCodeAtts:i.attr("data-shortcode-atts"),resizingEnabled:-1===n.indexOf("resizeDisable"),imageLoadEnabled:-1===n.indexOf("imageLoadDisable"),debugEnabled:n.indexOf("debug")>-1,favorLocal:n.indexOf("favorLocal")>-1,ajaxPostLoad:n.indexOf("ajaxPostLoad")>-1,checkWPPosts:n.indexOf("checkWPPosts")>-1,singleCheckPosts:n.indexOf("singleCheckPosts")>-1,narrowPlayer:n.indexOf("narrowPlayer")>-1,gdpr:n.indexOf("gdpr")>-1,consentGiven:-1===n.indexOf("gdpr"),noCDN:n.indexOf("disablecdn")>-1,allowCookies:n.indexOf("allowcookies")>-1,lightboxEnabled:void 0!==i.attr("data-sby-supports-lightbox"),locator:n.indexOf("locator")>-1,autoMinRes:1,general:a,subscribeBarEnabled:!0};window.sby.feeds[e]=function(t,e,i){return new s(t,e,i)}(this,e,o),void 0!==window.sbyAPIReady&&(window.sby.feeds[e].playerAPIReady=!0),window.sby.feeds[e].setResizedImages(),window.sby.feeds[e].init();var l=jQuery.Event("sbyafterfeedcreate");l.feed=window.sby.feeds[e],jQuery(window).trigger(l)})))},afterFeedsCreated:function(){if(t(".sb_youtube_header").each((function(){var e=t(this);e.find(".sby_header_link").on("mouseenter mouseleave",(function(t){switch(t.type){case"mouseenter":e.find(".sby_header_img_hover").addClass("sby_fade_in");break;case"mouseleave":e.find(".sby_header_img_hover").removeClass("sby_fade_in")}}))})),window.sbyAPIReady){var e=jQuery.Event("sbyfeedandytready");jQuery(window).trigger(e)}},encodeHTML:function(t){return void 0===t?"":t.replace(/(>)/g,">").replace(/(<)/g,"<").replace(/(<br\/>)/g,"<br>").replace(/(<br>)/g,"<br>")},urlDetect:function(t){return t.match(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g)},ctaDetect:function(t){var e=t.match(/{Link:(.*)}/g),i=!1;if(null!==e){var s=window.sby.urlDetect(e[0]);if(null!==s){var n=s[0].trim();i={callback:"link",url:n,text:e[0].replace("{Link:","").replace("}","").replace(n,"").replace(" "," ").trim()}}else console.log("CTA found but no URL")}return i},shuffle:function(t){for(var e,i,s=t.length;0!==s;)i=Math.floor(Math.random()*s),e=t[s-=1],t[s]=t[i],t[i]=e;return t}},i.prototype={init:function(){var e=this;e.settings.consentGiven=e.checkConsent(),e.settings.consentGiven&&window.sby.maybeAddYTAPI(),e.settings.noCDN&&!e.settings.consentGiven&&(t(this.el).find(".sb_youtube_header").length?t(this.el).find(".sb_youtube_header").addClass("sby_no_consent"):t(this.el).prev(".sb_youtube_header").length&&t(this.el).prev(".sb_youtube_header").addClass("sby_no_consent")),t(this.el).find("#sby_mod_error").length&&t(this.el).prepend(t(this.el).find("#sby_mod_error")),this.settings.ajaxPostLoad?this.getNewPostSet():this.afterInitialImagesLoaded();var i,s=(i=0,function(t,e){clearTimeout(i),i=setTimeout(t,e)});jQuery(window).on("resize",(function(){s((function(){e.afterResize()}),1)}))},initLayout:function(){this.initGalleryLayout()},initGalleryLayout:function(){var e=t(this.el),i=this;e.hasClass("sby_layout_gallery")&&e.find(".sby_player_outer_wrap").length&&(this.maybeRaiseSingleImageResolution(e.find(".sby_player_outer_wrap"),0,!0),e.find(".sby_player_outer_wrap .sby_video_thumbnail").off().on("click",(function(e){!(!i.settings.lightboxEnabled||i.settings.lightboxEnabled&&i.settings.noCDN)||!i.settings.noCDN&&i.settings.consentGiven?(e.preventDefault(),i.onThumbnailClick(t(this),!0)):t(this).closest(".sby_item").length&&void 0!==t(this).closest(".sby_item").attr("data-video-id")&&t(this).attr("href","https://www.youtube.com/watch?v="+t(this).closest(".sby_item").attr("data-video-id"))})),e.find(".sby_item").first().addClass("sby_current"),e.on("mouseenter",(function(){i.canCreatePlayer()&&(e.find(".sby_player_outer_wrap iframe").length?void 0===i.player&&i.playerEagerLoaded()&&i.createPlayer("sby_player"+i.index):(e.addClass("sby_player_added").find(".sby_player_outer_wrap").addClass("sby_player_loading"),e.find(".sby_player_outer_wrap .sby_video_thumbnail").find(".sby_loader").show().removeClass("sby_hidden"),i.createPlayer("sby_player"+i.index)))})),window.sbySemiEagerLoading&&i.createPlayer("sby_player"+i.index),i.settings.noCDN&&e.find(".sby_player_outer_wrap").append('<div class="sby_play_btn">\n <span class="sby_play_btn_bg"></span>\n <svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="youtube" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" class="svg-inline--fa fa-youtube fa-w-18"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z" class=""></path></svg> </div>'))},createPlayer:function(e,i,s,n){var a=t(this.el),o=this;if(i=void 0!==i?i:this.getVideoID(a.find(".sby_item").first()),s=void 0!==s?s:0,void 0===sbyOptions.isCustomizer||!sbyOptions.isCustomizer){if(void 0===n&&(n={host:window.location.protocol+o.embedURL,videoId:i,playerVars:{modestbranding:1,rel:0,autoplay:s}}),void 0===n.events&&(n.events={onReady:function(){a.find(".sby_player_outer_wrap").removeClass("sby_player_loading").find(".sby_video_thumbnail").css("z-index",-1).find(".sby_loader").hide().addClass("sby_hidden"),t("#"+e).length&&t("#"+e).closest(".sby_video_thumbnail_wrap").find(".sby_video_thumbnail").length&&t("#"+e).closest(".sby_video_thumbnail_wrap").find(".sby_video_thumbnail").fadeTo(0,"slow",(function(){t(this).css("z-index",-1),t(this).find(".sby_loader").hide().addClass("sby_hidden"),t(this).closest(".sby_item").removeClass("sby_player_loading")}));var i=jQuery.Event("sbyafterplayerready");i.feed=o,i.player=this,jQuery(window).trigger(i)},onStateChange:function(s){a.find(".sby_player_outer_wrap").removeClass("sby_player_loading").find(".sby_video_thumbnail").css("z-index",-1).find(".sby_loader").hide().addClass("sby_hidden"),o.afterStateChange(e,i,s,t("#"+e).closest(".sby_video_thumbnail_wrap")),1===s.data&&void 0!==o.players&&a.find(".sby_item").each((function(){var e=o.getVideoID(t(this));t(this).find("iframe").length&&e!==i&&void 0!==o.players[e]&&"function"==typeof o.players[e].pauseVideo&&o.players[e].pauseVideo()}))}}),window.sbyEagerLoading)var r=YT.get(e);else r=new window.YT.Player(e,n);this.maybeAddCTA(e),a.hasClass("sby_layout_list")&&void 0===this.players[i]?this.players[i]=r:void 0===this.player&&(this.player=r);var l=jQuery.Event("sbyafterplayercreated");return l.feed=this,jQuery(window).trigger(l),a.find(".sby_player_outer_wrap .sby_play_btn").remove(),r}},afterStateChange:function(t,e,i,s){},afterInitialImagesLoaded:function(){this.initLayout(),this.loadMoreButtonInit(),this.hideExtraItemsForWidth(),this.beforeNewImagesRevealed(),this.revealNewImages(),this.afterNewImagesRevealed(),this.afterFeedSet(),this.sizePlayer(),this.sizeItems(),this.settings.consentGiven?this.applyFullFeatures():this.removeFeatures()},afterResize:function(){this.setImageHeight(),this.setImageResolution(),this.maybeRaiseImageResolution(),this.setImageSizeClass()},afterLoadMoreClicked:function(t){t.find(".sby_loader").removeClass("sby_hidden"),t.find(".sby_btn_text").addClass("sby_hidden"),t.closest(".sb_youtube").find(".sby_num_diff_hide").addClass("sby_transition").removeClass("sby_num_diff_hide")},afterNewImagesLoaded:function(){var e=t(this.el),i=this;this.beforeNewImagesRevealed(),this.revealNewImages(),this.afterNewImagesRevealed(),this.sizePlayer(),this.sizeItems(),setTimeout((function(){e.find(".sby_loader").addClass("sby_hidden"),e.find(".sby_btn_text").removeClass("sby_hidden"),i.maybeRaiseImageResolution()}),1),this.settings.consentGiven?this.applyFullFeatures():this.removeFeatures()},beforeNewImagesRevealed:function(){this.setImageHeight(),this.maybeRaiseImageResolution(!0),this.setImageSizeClass()},afterFeedSet:function(){},sizePlayer:function(){var e=t(this.el),i=this;if(e.hasClass("sby_layout_gallery")){$playerThumbnail=e.find(".sby_player_item").find(".sby_player_video_thumbnail");var s=$playerThumbnail.innerWidth(),n=Math.floor(9*s/16);i.settings.narrowPlayer&&(n=Math.floor(3*s/4)),$playerThumbnail.css("height",n+"px").css("overflow","hidden")}else e.hasClass("sby_layout_list")&&e.find(".sby_item").each((function(){$playerThumbnail=t(this).find(".sby_item_video_thumbnail");var e=$playerThumbnail.innerWidth(),s=Math.floor(9*e/16);i.settings.narrowPlayer&&(s=Math.floor(3*e/4)),$playerThumbnail.css("height",s+"px").css("overflow","hidden")}))},sizeItems:function(){var e=t(this.el);e.hasClass("sby_layout_list")||e.find(".sby_item").find(".sby_item_video_thumbnail").each((function(){if(t(this).hasClass("sby_imgLiquid_ready")){var e=t(this).innerWidth(),i=Math.floor(9*e/16);t(this).css("height",i+"px").css("overflow","hidden")}}))},revealNewImages:function(){var e=t(this.el),i=this;this.applyImageLiquid(),"function"==typeof sbyCustomJS&&setTimeout((function(){sbyCustomJS()}),100),e.find(".sby-screenreader").find("img").remove(),e.find(".sby_item.sby_new").each((function(e){var s=jQuery(this);videoID=s.attr("data-video-id"),window.sbyEagerLoading&&i.canCreatePlayer()&&t("#sby_player_"+videoID).length&&(player=new YT.Player("sby_player_"+videoID,{height:"100",width:"100",videoId:videoID,playerVars:{modestbranding:1,rel:0,autoplay:0},events:{onStateChange:function(t){t.target.getVideoData().video_id,1===t.data&&s.find(".sby_item").each((function(){var e=jQuery(this).attr("data-video-id");jQuery(this).find("iframe").length&&jQuery(t.target.a).attr("id")!==jQuery(this).find("iframe").attr("id")&&YT.get("sby_player_"+e).pauseVideo()}))}}})),s.find(".sby_video_thumbnail").on("mouseenter",(function(){i.onThumbnailEnter(t(this),!1)})),s.find(".sby_player_wrap").on("mouseleave",(function(){i.onThumbnailLeave(t(this),!1)})),s.find(".sby_video_thumbnail").on("click",(function(e){!(!i.settings.lightboxEnabled||i.settings.lightboxEnabled&&i.settings.noCDN)||!i.settings.noCDN&&i.settings.consentGiven?(e.preventDefault(),i.onThumbnailClick(t(this),!1)):t(this).closest(".sby_item").length&&void 0!==t(this).closest(".sby_item").attr("data-video-id")&&t(this).attr("href","https://www.youtube.com/watch?v="+t(this).closest(".sby_item").attr("data-video-id"))})),i.settings.lightboxEnabled&&(s.find(".sby_video_thumbnail").attr("data-sby-lightbox",i.index),"undefined"!=typeof sbyOptions&&void 0!==sbyOptions.lightboxPlaceholder&&(i.settings.narrowPlayer?s.find(".sby_video_thumbnail").attr("href",sbyOptions.lightboxPlaceholderNarrow):s.find(".sby_video_thumbnail").attr("href",sbyOptions.lightboxPlaceholder))),i.afterItemRevealed(s),""===s.find(".sby_info_item").text().trim()&&s.find(".sby_info_item").addClass("sby_no_space")})),e.find(".sby_player_item").each((function(t){var e=jQuery(this);i.afterItemRevealed(e)})),setTimeout((function(){e.find(".sby_item.sby_new").removeClass("sby_new"),e.find(".sby_transition").length,e.find(".sby_transition").each((function(t){var e=jQuery(this);setTimeout((function(){e.removeClass("sby_transition")}),1)}))}),1)},afterItemRevealed:function(){},afterNewImagesRevealed:function(){this.listenForVisibilityChange(),this.sendNeedsResizingToServer(),this.sendCheckWPPostsToServer(),this.settings.imageLoadEnabled||t(".sby_no_resraise").removeClass("sby_no_resraise");var e=t.Event("sbyafterimagesloaded");e.el=t(this.el),t(window).trigger(e)},setResizedImages:function(){t(this.el).find(".sby_resized_image_data").length&&void 0!==t(this.el).find(".sby_resized_image_data").attr("data-resized")&&0===t(this.el).find(".sby_resized_image_data").attr("data-resized").indexOf('{"')&&(this.resizedImages=JSON.parse(t(this.el).find(".sby_resized_image_data").attr("data-resized")),t(this.el).find(".sby_resized_image_data").remove())},sendNeedsResizingToServer:function(){var e=this;if(e.needsResizing.length>0&&e.settings.resizingEnabled){var i=t(this.el).find(".sby_item").length;r({action:"sby_resized_images_submit",needs_resizing:e.needsResizing,offset:i,feed_id:e.settings.feedID,location:e.locationGuess(),post_id:e.settings.postID,atts:e.settings.shortCodeAtts},(function(t){if(0===t.trim().indexOf("{")){var i=JSON.parse(t);e.settings.debugEnabled&&console.log(i)}}))}},sendCheckWPPostsToServer:function(){var e=this;if(e.settings.checkWPPosts||e.settings.singleCheckPosts){var i=void 0!==e.settings.feedID?e.settings.feedID:"sby_single",s=e.mostRecentlyLoadedPosts;e.mostRecentlyLoadedPosts=[],r({action:"sby_check_wp_submit",feed_id:i,atts:e.settings.shortCodeAtts,location:e.locationGuess(),post_id:e.settings.postID,offset:t(this.el).hasClass("sby_layout_carousel")?Math.floor(t(this.el).find(".sby_item").length/2-1):t(this.el).find(".sby_item").length,posts:s},(function(t){if(0===t.trim().indexOf("{")){var i=JSON.parse(t);e.settings.debugEnabled&&console.log(i),e.afterSendCheckWPPostsToServer(i)}}))}},afterSendCheckWPPostsToServer:function(t){},loadMoreButtonInit:function(){var e=t(this.el),i=this;e.find(".sby_footer .sby_load_btn").off().on("click",(function(){i.afterLoadMoreClicked(jQuery(this)),i.getNewPostSet()}))},getNewPostSet:function(){var e=t(this.el),i=this;r({action:"sby_load_more_clicked",offset:e.find(".sby_item").length,feed_id:i.settings.feedID,atts:i.settings.shortCodeAtts,location:i.locationGuess(),post_id:i.settings.postID,current_resolution:i.imageResolution},(function(s){if(0===s.trim().indexOf("{")){var n=JSON.parse(s),a=void 0!==n.feedStatus.checkWPPosts&&n.feedStatus.checkWPPosts;i.settings.debugEnabled&&console.log(n),i.settings.checkWPPosts=!!a,i.appendNewPosts(n.html),i.addResizedImages(n.resizedImages),i.settings.ajaxPostLoad?(i.settings.ajaxPostLoad=!1,i.afterInitialImagesLoaded()):i.afterNewImagesLoaded(),n.feedStatus.shouldPaginate?i.outOfPages=!1:(i.outOfPages=!0,e.find(".sby_load_btn").hide()),t(".sby_no_js").removeClass("sby_no_js")}}))},appendNewPosts:function(e){var i=t(this.el);i.find(".sby_items_wrap .sby_item").length?i.find(".sby_items_wrap .sby_item").last().after(e):i.find(".sby_items_wrap").append(e)},addResizedImages:function(t){for(var e in t)this.resizedImages[e]=t[e]},setImageHeight:function(){},maybeRaiseSingleImageResolution:function(e,i,s){var n=this,a=n.getImageUrls(e),o=e.find(".sby_video_thumbnail > img").attr("src"),r=150;if(s=void 0!==s&&s,!(e.hasClass("sby_no_resraise")||!n.settings.consentGiven&&n.settings.noCDN)){t.each(a,(function(t,e){e===o&&(r=parseInt(t),s=!1)}));var l=640;switch(n.settings.imgRes){case"thumb":l=120;break;case"medium":l=320;break;case"large":l=480;break;case"full":l=640;break;default:var d=Math.max(n.settings.autoMinRes,e.find(".sby_video_thumbnail").innerWidth());switch(n.getBestResolutionForAuto(d,1,t(this.el).find("sby_item").first())){case 480:l=480;break;case 320:l=320;break;case 120:l=120}}if(l>r||o===n.placeholderURL||s){if(n.settings.debugEnabled){var h=o===n.placeholderURL?"was placeholder":"too small";console.log("rais res for "+o,h)}var c=a[l];e.find(".sby_video_thumbnail > img").attr("src",c),e.find(".sby_video_thumbnail").hasClass("sby_imgLiquid_ready")&&e.find(".sby_video_thumbnail").css("background-image",'url("'+c+'")')}e.find("img").on("error",(function(){if(t(this).hasClass("sby_img_error"))console.log("unfixed error "+t(this).attr("src"));else{if(t(this).addClass("sby_img_error"),t(this).attr("src").indexOf("i.ytimg.com")>-1){n.settings.favorLocal=!0;var e=n.getImageUrls(t(this).closest(".sby_item"));void 0!==e[640]&&(t(this).attr("src",e[640]),t(this).closest(".sby_video_thumbnail").css("background-image","url("+e[640]+")"))}else void 0!==t(this).closest(".sby_video_thumbnail").attr("data-full-res")?(t(this).attr("src",t(this).closest(".sby_video_thumbnail").attr("data-full-res")),t(this).closest(".sby_video_thumbnail").css("background-image","url("+t(this).closest(".sby_video_thumbnail").attr("data-full-res")+")")):"undefined"!==t(this).closest(".sby_video_thumbnail").attr("href")&&(t(this).attr("src",t(this).closest(".sby_video_thumbnail").attr("href")+"media?size=l"),t(this).closest(".sby_video_thumbnail").css("background-image","url("+t(this).closest(".sby_video_thumbnail").attr("href")+"media?size=l)"));setTimeout((function(){n.afterResize()}),1)}}))}},maybeRaiseImageResolution:function(e){var i=this,s=void 0!==e&&!0===e?".sby_item.sby_new":".sby_item",n=!i.isInitialized;t(i.el).find(s).each((function(e){!t(this).hasClass("sby_num_diff_hide")&&t(this).find(".sby_video_thumbnail").length&&void 0!==t(this).find(".sby_video_thumbnail").attr("data-img-src-set")&&i.maybeRaiseSingleImageResolution(t(this),e,n)})),i.isInitialized=!0},getBestResolutionForAuto:function(e,i,s){(isNaN(i)||i<1)&&(i=1);var n=e*i,a=10*Math.ceil(n/10),o=[120,320,480,640];if(s.hasClass("sby_highlighted")&&(a*=2),-1===o.indexOf(parseInt(a))){var r=!1;t.each(o,(function(t,e){e>parseInt(a)&&!r&&(a=e,r=!0)}))}return a},hideExtraItemsForWidth:function(){if("carousel"!==this.layout){var e=t(this.el),i=void 0!==e.attr("data-num")&&""!==e.attr("data-num")?parseInt(e.attr("data-num")):1,s=void 0!==e.attr("data-nummobile")&&""!==e.attr("data-nummobile")?parseInt(e.attr("data-nummobile")):i;e.hasClass(".sby_layout_carousel")||(t(window).width()<480?s<e.find(".sby_item").length&&e.find(".sby_item").slice(s-e.find(".sby_item").length).addClass("sby_num_diff_hide"):i<e.find(".sby_item").length&&e.find(".sby_item").slice(i-e.find(".sby_item").length).addClass("sby_num_diff_hide"))}},setImageSizeClass:function(){var e=t(this.el);e.removeClass("sby_small sby_medium");var i=e.innerWidth(),s=parseInt(e.find(".sby_items_wrap").outerWidth()-e.find(".sby_items_wrap").width())/2,n=this.getColumnCount(),a=(i-s*(n+2))/n;a>140&&a<240?e.addClass("sby_medium"):a<=140&&e.addClass("sby_small")},setMinImageWidth:function(){t(this.el).find(".sby_item .sby_video_thumbnail").first().length?this.minImageWidth=t(this.el).find(".sby_item .sby_video_thumbnail").first().innerWidth():this.minImageWidth=150},setImageResolution:function(){if("auto"===this.settings.imgRes)this.imageResolution="auto";else switch(this.settings.imgRes){case"thumb":this.imageResolution=150;break;case"medium":this.imageResolution=320;break;default:this.imageResolution=640}},getImageUrls:function(t){var e=JSON.parse(t.find(".sby_video_thumbnail").attr("data-img-src-set").replace(/\\\//g,"/")),i=t.attr("id").replace("sby_","").replace("player_","");if(void 0!==this.resizedImages[i]&&"video"!==this.resizedImages[i]&&"pending"!==this.resizedImages[i]&&"error"!==this.resizedImages[i].id&&"video"!==this.resizedImages[i].id&&"pending"!==this.resizedImages[i].id){if(void 0!==this.resizedImages[i].sizes){var s=[];void 0!==this.resizedImages[i].sizes.full&&(s.push(640),e[640]=sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg",t.find(".sby_link_area").attr("href",sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg"),t.find(".sby_video_thumbnail").attr("data-full-res",sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg")),void 0!==this.resizedImages[i].sizes.low&&(s.push(320),e[320]=sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg",this.settings.favorLocal&&void 0===this.resizedImages[i].sizes.full&&(t.find(".sby_link_area").attr("href",sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg"),t.find(".sby_video_thumbnail").attr("data-full-res",sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg"))),void 0!==this.resizedImages[i].sizes.thumb&&(s.push(150),e[150]=sbyOptions.resized_url+this.resizedImages[i].id+"thumb.jpg"),this.settings.favorLocal&&(-1===s.indexOf(640)&&s.indexOf(320)>-1&&(e[640]=sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg"),-1===s.indexOf(320)&&(s.indexOf(640)>-1?e[320]=sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg":s.indexOf(150)>-1&&(e[320]=sbyOptions.resized_url+this.resizedImages[i].id+"thumb.jpg")),-1===s.indexOf(150)&&(s.indexOf(320)>-1?e[150]=sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg":s.indexOf(640)>-1&&(e[150]=sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg")))}}else(void 0===this.resizedImages[i]||void 0!==this.resizedImages[i].id&&"pending"!==this.resizedImages[i].id&&"error"!==this.resizedImages[i].id)&&this.addToNeedsResizing(i);return e},getVideoID:function(e){if(e.hasClass("sby_item")||e.hasClass("sby_player_item")){if(void 0!==e.find(".sby_video_thumbnail").attr("data-video-id"))return e.find(".sby_video_thumbnail").attr("data-video-id")}else if(e.closest("sby_item").length||e.closest("sby_player_item").length){var i=e.closest("sby_item").length?e.closest("sby_item"):e.closest("sby_player_item");if(void 0!==i.find(".sby_video_thumbnail").attr("data-video-id"))return i.find(".sby_video_thumbnail").attr("data-video-id")}else{if(e.hasClass("sb_youtube"))return e.find(".sby_item").first().find(".sby_video_thumbnail").attr("data-video-id");if(t(this.el).find(".sby_video_thumbnail").first().length&&void 0!==t(this.el).find(".sby_video_thumbnail").first().attr("data-video-id"))return t(this.el).find(".sby_video_thumbnail").first().attr("data-video-id")}return""},getAvatarUrl:function(t,e){if(""===t)return"";var i=this.settings.general.avatars;return"local"===(e=void 0!==e?e:"local")?void 0!==i["LCL"+t]&&1===parseInt(i["LCL"+t])?sbyOptions.resized_url+t+".jpg":void 0!==i[t]?i[t]:"":void 0!==i[t]?i[t]:void 0!==i["LCL"+t]&&1===parseInt(i["LCL"+t])?sbyOptions.resized_url+t+".jpg":""},addToNeedsResizing:function(t){-1===this.needsResizing.indexOf(t)&&this.needsResizing.push(t)},applyImageLiquid:function(){var e=t(this.el);(function(){var t,e,i,s,n=n||{VER:"0.9.944"};n.bgs_Available=!1,n.bgs_CheckRunned=!1,(t=jQuery).fn.extend({sby_imgLiquid:function(e){this.defaults={fill:!0,verticalAlign:"center",horizontalAlign:"center",useBackgroundSize:!0,useDataHtmlAttr:!0,responsive:!0,delay:0,fadeInTime:0,removeBoxBackground:!0,hardPixels:!0,responsiveCheckTime:500,timecheckvisibility:500,onStart:null,onFinish:null,onItemStart:null,onItemFinish:null,onItemError:null},function(){if(!n.bgs_CheckRunned){n.bgs_CheckRunned=!0;var e=t('<span style="background-size:cover" />');t("body").append(e),function(){var t=e[0];if(t&&window.getComputedStyle){var i=window.getComputedStyle(t,null);i&&i.backgroundSize&&(n.bgs_Available="cover"===i.backgroundSize)}}(),e.remove()}}();var i=this;return this.options=e,this.settings=t.extend({},this.defaults,this.options),this.settings.onStart&&this.settings.onStart(),this.each((function(e){function s(){(l.responsive||h.data("sby_imgLiquid_oldProcessed"))&&h.data("sby_imgLiquid_settings")&&(l=h.data("sby_imgLiquid_settings"),d.actualSize=d.get(0).offsetWidth+d.get(0).offsetHeight/1e4,d.sizeOld&&d.actualSize!==d.sizeOld&&o(),d.sizeOld=d.actualSize,setTimeout(s,l.responsiveCheckTime))}function a(){h.data("sby_imgLiquid_error",!0),d.addClass("sby_imgLiquid_error"),l.onItemError&&l.onItemError(e,d,h),r()}function o(){var t,i,s,n,a,o,c,u,y=0,g=0,p=d.width(),b=d.height();void 0===h.data("owidth")&&h.data("owidth",h[0].width),void 0===h.data("oheight")&&h.data("oheight",h[0].height),l.fill===p/b>=h.data("owidth")/h.data("oheight")?(t="100%",i="auto",s=Math.floor(p),n=Math.floor(p*(h.data("oheight")/h.data("owidth")))):(t="auto",i="100%",s=Math.floor(b*(h.data("owidth")/h.data("oheight"))),n=Math.floor(b)),c=p-s,"left"===(a=l.horizontalAlign.toLowerCase())&&(g=0),"center"===a&&(g=.5*c),"right"===a&&(g=c),-1!==a.indexOf("%")&&(a=parseInt(a.replace("%",""),10))>0&&(g=c*a*.01),u=b-n,"left"===(o=l.verticalAlign.toLowerCase())&&(y=0),"center"===o&&(y=.5*u),"bottom"===o&&(y=u),-1!==o.indexOf("%")&&(o=parseInt(o.replace("%",""),10))>0&&(y=u*o*.01),l.hardPixels&&(t=s,i=n),h.css({width:t,height:i,"margin-left":Math.floor(g),"margin-top":Math.floor(y)}),h.data("sby_imgLiquid_oldProcessed")||(h.fadeTo(l.fadeInTime,1),h.data("sby_imgLiquid_oldProcessed",!0),l.removeBoxBackground&&d.css("background-image","none"),d.addClass("sby_imgLiquid_nobgSize"),d.addClass("sby_imgLiquid_ready")),l.onItemFinish&&l.onItemFinish(e,d,h),r()}function r(){e===i.length-1&&i.settings.onFinish&&i.settings.onFinish()}var l=i.settings,d=t(this),h=t("img:first",d);return h.length?(h.data("sby_imgLiquid_settings")?(d.removeClass("sby_imgLiquid_error").removeClass("sby_imgLiquid_ready"),l=t.extend({},h.data("sby_imgLiquid_settings"),i.options)):l=t.extend({},i.settings,function(){var t={};if(i.settings.useDataHtmlAttr){var e=d.attr("data-sby_imgLiquid-fill"),s=d.attr("data-sby_imgLiquid-horizontalAlign"),a=d.attr("data-sby_imgLiquid-verticalAlign");("true"===e||"false"===e)&&(t.fill=Boolean("true"===e)),void 0===s||"left"!==s&&"center"!==s&&"right"!==s&&-1===s.indexOf("%")||(t.horizontalAlign=s),void 0===a||"top"!==a&&"bottom"!==a&&"center"!==a&&-1===a.indexOf("%")||(t.verticalAlign=a)}return n.isIE&&i.settings.ieFadeInDisabled&&(t.fadeInTime=0),t}()),h.data("sby_imgLiquid_settings",l),l.onItemStart&&l.onItemStart(e,d,h),void(n.bgs_Available&&l.useBackgroundSize?(-1===d.css("background-image").indexOf(encodeURI(h.attr("src")))&&d.css({"background-image":'url("'+encodeURI(h.attr("src"))+'")'}),d.css({"background-size":l.fill?"cover":"contain","background-position":(l.horizontalAlign+" "+l.verticalAlign).toLowerCase(),"background-repeat":"no-repeat"}),t("a:first",d).css({display:"block",width:"100%",height:"100%"}),t("img",d).css({display:"none"}),l.onItemFinish&&l.onItemFinish(e,d,h),d.addClass("sby_imgLiquid_bgSize"),d.addClass("sby_imgLiquid_ready"),r()):function i(){if(h.data("oldSrc")&&h.data("oldSrc")!==h.attr("src")){var n=h.clone().removeAttr("style");return n.data("sby_imgLiquid_settings",h.data("sby_imgLiquid_settings")),h.parent().prepend(n),h.remove(),(h=n)[0].width=0,void setTimeout(i,10)}return h.data("sby_imgLiquid_oldProcessed")?void o():(h.data("sby_imgLiquid_oldProcessed",!1),h.data("oldSrc",h.attr("src")),t("img:not(:first)",d).css("display","none"),d.css({overflow:"hidden"}),h.fadeTo(0,0).removeAttr("width").removeAttr("height").css({visibility:"visible","max-width":"none","max-height":"none",width:"auto",height:"auto",display:"block"}),h.on("error",a),h[0].onerror=a,function t(){h.data("sby_imgLiquid_error")||h.data("sby_imgLiquid_loaded")||h.data("sby_imgLiquid_oldProcessed")||(d.is(":visible")&&h[0].complete&&h[0].width>0&&h[0].height>0?(h.data("sby_imgLiquid_loaded",!0),setTimeout(o,e*l.delay)):setTimeout(t,l.timecheckvisibility))}(),void s())}())):void a()}))}}),e=n.injectCss,i=document.getElementsByTagName("head")[0],(s=document.createElement("style")).type="text/css",s.styleSheet?s.styleSheet.cssText=e:s.appendChild(document.createTextNode(e)),i.appendChild(s)})(),"function"==typeof e.find(".sby_player_item").sby_imgLiquid&&(e.find(".sby_player_item").length&&e.find(".sby_player_item .sby_player_video_thumbnail").sby_imgLiquid({fill:!0}),e.find(".sby_item .sby_item_video_thumbnail").sby_imgLiquid({fill:!0}))},listenForVisibilityChange:function(){var e=this;!function(t){var e={callback:function(){},runOnLoad:!0,frequency:100,sbyPreviousVisibility:null},i={sbyCheckVisibility:function(t,e){if(jQuery.contains(document,t[0])){var s=e.sbyPreviousVisibility,n=t.is(":visible");e.sbyPreviousVisibility=n,null==s?e.runOnLoad&&e.callback(t,n):s!==n&&e.callback(t,n),setTimeout((function(){i.sbyCheckVisibility(t,e)}),e.frequency)}}};t.fn.sbyVisibilityChanged=function(s){var n=t.extend({},e,s);return this.each((function(){i.sbyCheckVisibility(t(this),n)}))}}(jQuery),"function"==typeof t(this.el).filter(":hidden").sbyVisibilityChanged&&t(this.el).filter(":hidden").sbyVisibilityChanged({callback:function(t,i){e.afterResize()},runOnLoad:!1})},getColumnCount:function(){var e=t(this.el),i=this.settings.cols,s=this.settings.colsmobile,n=i;return sbyWindowWidth=window.innerWidth,e.hasClass("sby_mob_col_auto")?(sbyWindowWidth<640&&parseInt(i)>2&&parseInt(i)<7&&(n=2),sbyWindowWidth<640&&parseInt(i)>6&&parseInt(i)<11&&(n=4),sbyWindowWidth<=480&&parseInt(i)>2&&(n=1)):sbyWindowWidth<=480&&(n=s),parseInt(n)},onThumbnailClick:function(e,i,s){if(this.canCreatePlayer()){var n=t(this.el);if(n.hasClass("sby_layout_gallery")){if(n.find(".sby_current").removeClass("sby_current"),e.closest(".sby_item").addClass("sby_current"),e.closest(".sby_item").addClass("sby_current"),n.addClass("sby_player_added").find(".sby_player_outer_wrap").addClass("sby_player_loading"),n.find(".sby_player_outer_wrap .sby_video_thumbnail").find(".sby_loader").show().removeClass("sby_hidden"),n.find(".sby_player_outer_wrap iframe").length)i?(s=void 0===s?this.getVideoID(n.find(".sby_item").first()):s,this.playVideoInPlayer(s)):(s=void 0===s?this.getVideoID(e.closest(".sby_item")):s,this.changePlayerInfo(e.closest(".sby_item")),this.playVideoInPlayer(s),this.afterVideoChanged());else if(i)this.createPlayer("sby_player"+this.index);else{s=void 0===s?this.getVideoID(e.closest(".sby_item")):s;this.createPlayer("sby_player"+this.index,s)}this.updateGalleryPlayerSubscribeBtn(e)}else if(t(this.el).hasClass("sby_layout_grid")||t(this.el).hasClass("sby_layout_carousel")){var a=e.closest(".sby_item");s=void 0===s?this.getVideoID(a):s,this.playVideoInPlayer(s),this.afterVideoChanged()}else t(this.el).hasClass("sby_layout_list")&&(a=e.closest(".sby_item"),s=void 0===s?this.getVideoID(a):s,a.length&&!a.find("iframe").length?(a.find(".sby_loader").show().removeClass("sby_hidden"),a.addClass("sby_player_loading sby_player_loaded"),this.createPlayer("sby_player_"+s,s)):(this.playVideoInPlayer(s,a.attr("data-video-id")),this.afterVideoChanged()))}},onThumbnailEnter:function(e){if(this.canCreatePlayer()&&t(this.el).hasClass("sby_layout_list")){var i=e.closest(".sby_item"),s=this.getVideoID(i);i.find("iframe").length||(i.find(".sby_loader").show().removeClass("sby_hidden"),i.addClass("sby_player_loading sby_player_loaded"),this.createPlayer("sby_player_"+s,s,0))}},onThumbnailLeave:function(t){},changePlayerInfo:function(t){},playerEagerLoaded:function(){if(void 0!==this.player||t(this.el).hasClass("sby_player_loaded"))return!0},canCreatePlayer:function(){return!t(this.el).find("#sby_blank").length&&(this.playerEagerLoaded()||this.playerAPIReady&&this.settings.consentGiven||window.sbyAPIReady&&this.settings.consentGiven)},playVideoInPlayer:function(t,e){void 0!==this.player&&void 0!==this.player.loadVideoById?this.player.loadVideoById(t):void 0!==window.sbyLightboxPlayer&&void 0!==window.sbyLightboxPlayer.loadVideoById?window.sbyLightboxPlayer.loadVideoById(t):void 0!==e&&void 0!==this.players&&void 0!==this.players[e]&&void 0!==this.players[e].loadVideoById&&this.players[e].loadVideoById(t)},afterVideoChanged:function(){t(this.el).hasClass("sby_layout_gallery")&&(t(this.el).find(".sby_player_outer_wrap").removeClass("sby_player_loading"),t(this.el).find(".sby_player_outer_wrap .sby_video_thumbnail").find(".sby_loader").hide().addClass("sby_hidden"),t("html, body").animate({scrollTop:t(this.el).find(".sby_player_outer_wrap").offset().top},300))},updateGalleryPlayerSubscribeBtn:function(e){var i=e.attr("href").match(/channel\/(.*)$/);if(i){var s="http://www.youtube.com/channel/"+i[1]+"?sub_confirmation=1&feature=subscribe-embed-click";t(".sby-channel-subscribe-btn a").attr("href",s)}},checkConsent:function(){if(this.settings.consentGiven||!this.settings.gdpr)return this.settings.noCDN=!1,!0;if("undefined"!=typeof CLI_Cookie)null!==CLI_Cookie.read(CLI_ACCEPT_COOKIE_NAME)&&("null"!==CLI_Cookie.read("cookielawinfo-checkbox-non-necessary")&&(this.settings.consentGiven="yes"===CLI_Cookie.read("cookielawinfo-checkbox-non-necessary")),"null"!==CLI_Cookie.read("cookielawinfo-checkbox-necessary")&&(this.settings.consentGiven="yes"===CLI_Cookie.read("cookielawinfo-checkbox-necessary")));else if(void 0!==window.cnArgs){var t=("; "+document.cookie).split("; cookie_notice_accepted=");if(2===t.length){var e=t.pop().split(";").shift();this.settings.consentGiven="true"===e}}else void 0!==window.complianz?this.settings.consentGiven="allow"===function(t){for(var e="cmplz_marketing=",i=window.document.cookie.split(";"),s=0;s<i.length;s++){var n=i[s].trim();if(0==n.indexOf(e))return n.substring(e.length,n.length)}return""}()||jQuery("body").hasClass("cmplz-status-marketing"):void 0!==window.Cookiebot?this.settings.consentGiven=Cookiebot.consented:void 0!==window.BorlabsCookie&&(this.settings.consentGiven=window.BorlabsCookie.checkCookieConsent("youtube"));var i=jQuery.Event("sbycheckconsent");return i.feed=this,jQuery(window).trigger(i),this.settings.consentGiven&&(this.settings.noCDN=!1),this.settings.consentGiven},afterConsentToggled:function(){if(this.checkConsent()){var t=this;window.sby.maybeAddYTAPI(),t.maybeRaiseImageResolution(),t.applyFullFeatures(),setTimeout((function(){t.afterResize()}),500)}},removeFeatures:function(){this.settings.noCDN&&t(this.el).find(".sby_video_thumbnail").each((function(){t(this).removeAttr("data-sby-lightbox")}))},applyFullFeatures:function(){var e=this;t(e.el).find(".sby_header_img img").attr("src",t(e.el).find(".sby_header_img").attr("data-avatar-url")),void 0===t(e.el).find(".sby_video_thumbnail").first().attr("data-sby-lightbox")&&e.settings.lightboxEnabled&&t(e.el).find(".sby_video_thumbnail").each((function(){t(this).attr("data-sby-lightbox",e.index)}));var i=t(e.el);if(i.find(".sby_no_consent").removeClass("sby_no_consent"),i.hasClass("sby_layout_gallery")&&i.find(".sby_player_outer_wrap").length){if(this.maybeRaiseSingleImageResolution(i.find(".sby_player_outer_wrap"),0,!0),i.find(".sby_item").first().addClass("sby_current"),!e.canCreatePlayer())return;i.find(".sby_player_outer_wrap iframe").length||e.createPlayer("sby_player"+e.index)}},locationGuess:function(){var e=t(this.el),i="content";return e.closest("footer").length?i="footer":e.closest(".header").length||e.closest("header").length?i="header":(e.closest(".sidebar").length||e.closest("aside").length)&&(i="sidebar"),i}},s.prototype=Object.create(i.prototype),n.prototype={getData:function(t){return{feedIndex:parseInt(t.closest(".sb_youtube").attr("data-sby-index")-1),link:t.attr("href"),videoTitle:void 0!==t.attr("data-video-title")?t.attr("data-video-title"):"YouTube Video",video:t.attr("data-video-id"),channelID:t.attr("data-channel-id")}},template:function(){return"<div id='sby_lightboxOverlay' class='sby_lightboxOverlay'></div><div id='sby_lightbox' class='sby_lightbox'><div class='sby_lb-outerContainer'><div class='sby_lb-container'><img class='sby_lb-image' alt='Lightbox image placeholder' src='' /><div class='sby_lb-player sby_lb-player-placeholder' id='sby_lb-player'></div><div class='sby_lb-nav'><a class='sby_lb-prev' href='#' ><p class='sby-screenreader'>Previous Slide</p><span></span></a><a class='sby_lb-next' href='#' ><p class='sby-screenreader'>Next Slide</p><span></span></a></div><div class='sby_lb-loader'><a class='sby_lb-cancel'></a></div></div></div><div class='sby_lb-dataContainer'><div class='sby_lb-data'><div class='sby_lb-details'><div class='sby_lb-caption'></div><div class='sby_lb-info'><div class='sby_lb-number'></div></div></div><div class='sby_lb-closeContainer'><a class='sby_lb-close'></a></div></div></div></div>"},beforePlayerSetup:function(t,e,i,s,n){},afterPlayerSetup:function(t,e,i,s){},afterResize:function(){var e=t("#sby_lightbox .sby_lb-player").height();if(e>100){var i=t("#sby_lightbox .sby_lb-outerContainer").height()-e;i>10&&t("#sby_lightbox .sby_lb-player").css("top",i/2)}},pausePlayer:function(){void 0===window.sbyLightboxPlayer&&"undefined"==typeof YT||(void 0!==YT.get("sby_lb-player")&&"function"==typeof YT.get("sby_lb-player").pauseVideo?YT.get("sby_lb-player").pauseVideo():void 0!==window.sbyLightboxPlayer&&"function"==typeof window.sbyLightboxPlayer.pauseVideo&&window.sbyLightboxPlayer.pauseVideo())}},a.prototype=Object.create(n.prototype),o.prototype={toggleCTA:function(e,i,s){this.$player=s.length?s:t(".sby_lb-container"),this.state=i,this.videoID=e,this.isInitialized=!0,this.resetCTA(),void 0!==window.sby.ctas[e]&&(this.callbackArgs=window.sby.ctas[e]);var n=this.callbackArgs.callback;if("link"===n)this.callback=this.link;else{if("related"!==n)return;this.callback=this.related}2===i||0===i?(this.$player.find(".sby_cta_items_wraps").addClass("sby_cta_is_open"),2===i?this.$player.find(".sby_cta_items_wraps").addClass("sby_cta_state_paused"):this.$player.find(".sby_cta_items_wraps").addClass("sby_cta_state_ended"),this.$player.find(".sby_cta_items_wraps").show(),this.callback(),this.setCTAStyles()):(this.$player.find(".sby_cta_items_wraps").removeClass("sby_cta_is_open"),this.$player.find(".sby_cta_items_wraps").hide().removeClass("sby_cta_state_paused").removeClass("sby_cta_state_ended").removeClass("sby_cta_is_open"))},related:function(e){var i=this,s=this.feedObjInContext,n=window.sby.shuffle(this.getRelated(s)),a=0,o=this.videoID,r=this.$player;this.$player.find(".sby_cta_items_wraps").removeClass("sby_cta_cols_"+this.numItemColumns),this.numItems=4,this.numItemColumns=2,r.width()<480&&(this.numItems=1,this.numItemColumns=1);var l=this.numItems;t.each(n,(function(t,e){e.videoID!==o&&a<l&&(r.find(".sby_cta_items_wraps .sby_cta_inner_wrap").append('<div class="sby_cta_item"><div class="sby_video_thumbnail_wrap"><a class="sby_video_thumbnail" href="javascript:void(0);" target="_blank" rel="noopener" data-video-id="'+e.videoID+'"><div class="sby_thumbnail_hover"><div class="sby_thumbnail_hover_inner"><span class="sby_video_title">'+e.title+'</span></div></div><span class="sby-screenreader">Play</span><img src="'+e.thumbnail+'" alt="'+e.title+'"><span class="sby_loader sby_hidden" style="background-color: rgb(255, 255, 255);"></span></a></div></div>'),a++)})),r.find(".sby_cta_items_wraps .sby_video_thumbnail").each((function(){t(this).off().on("click",(function(e){e.preventDefault();var n=t(this).attr("data-video-id");s.onThumbnailClick(t(this),!0,n),i.videoID=n}))}))},getRelated:function(e){if(void 0===e.settings.general.cta.defaultPosts[0]){var i=t(e.el),s=[];return i.find(".sby_item").each((function(){if(void 0!==t(this).find(".sby_item_video_thumbnail").attr("data-full-res")){var e={videoID:t(this).attr("data-video-id"),title:t(this).attr("data-video-title"),thumbnail:t(this).find(".sby_item_video_thumbnail").attr("data-full-res")};s.push(e)}})),s}return e.settings.general.cta.defaultPosts},link:function(t){var e=this.$player,i=this.feedObjInContext;this.$player.find(".sby_cta_items_wraps").removeClass("sby_cta_cols_"+this.numItemColumns),this.numItems=1,this.numItemColumns=1;var s="",n="";""===i.settings.general.cta.color&&""===i.settings.general.cta.textColor||(s=' style="',n=" sby_custom",""!==i.settings.general.cta.color&&(s+="background: rgb("+i.settings.general.cta.color+");"),""!==i.settings.general.cta.textColor&&(s+="color: rgb("+i.settings.general.cta.textColor+");"),s+='"');var a="";"newwindow"===i.settings.general.cta.openType&&(a=' target="_blank" rel="noopener"'),e.find(".sby_cta_items_wraps .sby_cta_inner_wrap").append('<div class="sby_cta_item"><div class="sby_btn_wrap"><div class="sby_btn'+n+'"><a class="sby_cta_button" href="'+this.callbackArgs.url+'"'+a+' data-video-id="'+this.videoID+'"'+s+">"+this.callbackArgs.text+"</a></div></div></div>")},setCTAStyles:function(){var t=Math.max(90,this.$player.height()-60-49);this.$player.find(".sby_cta_items_wraps").css("height",t+"px").css("width",this.$player.find("iframe").width()-20+"px").addClass("sby_cta_cols_"+this.numItemColumns);var e=Math.max(1,this.numItems/this.numItemColumns),i=2*parseInt(this.$player.find(".sby_cta_items_wraps").css("padding-top").replace("px","")),s=Math.max(90,(t-i)/e);this.$player.find(".sby_cta_item").css("max-height",s+"px").find("img").css({"max-height":s+"px",width:"auto",margin:"auto"}),this.$player.find(".sby_btn_wrap").css("height",s+"px")},resetCTA:function(){this.$player.find(".sby_cta_items_wraps .sby_cta_inner_wrap").empty()}},window.sby_init=function(){window.sby=new e,window.sby.createPage(window.sby.createFeeds,{whenFeedsCreated:window.sby.afterFeedsCreated})},window.sby_carousel_init=function(){console.log("log")}}(jQuery),void 0===window.sbyEagerLoading){if(window.sbyEagerLoading=void 0!==window.sbyOptions&&window.sbyOptions.eagerload,jQuery(".elementor-widget-video").length){var c=void 0!==jQuery(".elementor-widget-video").attr("data-settings")&&JSON.parse(jQuery(".elementor-widget-video").attr("data-settings"));c&&void 0!==c.youtube_url&&(window.sbyEagerLoading=!0)}jQuery("div[data-vc-video-bg]").length&&(window.sbyEagerLoading=!0)}void 0===window.sbySemiEagerLoading&&(window.sbySemiEagerLoading=void 0!==window.sbyOptions&&window.sbyOptions.semiEagerload,(jQuery("div[data-vc-video-bg]").length||window.sbyEagerLoading)&&(window.sbySemiEagerLoading=!1)),jQuery(document).ready((function(t){window.sbySemiEagerLoading||sby_init(),t("#cookie-notice a").on("click",(function(){setTimeout((function(){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].afterConsentToggled()}))}),1e3)})),t("#cookie-law-info-bar a").on("click",(function(){setTimeout((function(){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].afterConsentToggled()}))}),1e3)})),t(".cli-user-preference-checkbox").on("click",(function(){setTimeout((function(){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!1,window.sby.feeds[t].afterConsentToggled()}))}),1e3)})),t(window).on("CookiebotOnAccept",(function(e){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!0,window.sby.feeds[t].afterConsentToggled()}))})),document.addEventListener("cmplz_status_change",(function(e){"marketing"===e.detail.category&&"allow"===e.detail.value&&t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!0,window.sby.feeds[t].afterConsentToggled()}))})),t(document).on("cmplzFireCategories",(function(e){"marketing"===e.detail.category&&t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!0,window.sby.feeds[t].afterConsentToggled()}))})),t(document).on("borlabs-cookie-consent-saved",(function(e){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!1,window.sby.feeds[t].afterConsentToggled()}))})),t("#sby-frce-hide-license-error").on("click",(function(){t("#sby-fr-ce-license-error").slideUp(),jQuery.ajax({url:sbyOptions.adminAjaxUrl,type:"post",data:{action:"sby_hide_frontend_license_error",nonce:sbyOptions.nonce},success:function(t){console.log(t)}})}))}))}if(window.sbySemiEagerLoading){var u="sby-youtube-api";if(null===document.getElementById(u)){var y=document.createElement("script"),g=document.getElementsByTagName("script")[0];y.src="https://www.youtube.com/iframe_api",y.id=u,g.parentNode.insertBefore(y,g)}}window.onYouTubeIframeAPIReady=function(){var t=document.getElementsByClassName("sb_youtube").length;if(t>0){if(window.sbySemiEagerLoading){if(void 0!==window.sby)for(var e=0;e<t;e++)window.sby.feeds[e].playerAPIReady=!0;else window.sbyAPIReady=!0;sby_init()}else if(window.sbyEagerLoading){var i=!1,s=!1;jQuery(".sb_youtube").each((function(t){var e=jQuery(this);e.hasClass("sby_layout_list")?(jQuery(this).addClass("sby_player_loaded"),e.find(".sby_item").each((function(){videoID=jQuery(this).attr("data-video-id"),player=new YT.Player("sby_player_"+videoID,{height:"100",width:"100",videoId:videoID,playerVars:{modestbranding:1,rel:0,autoplay:s},events:{onStateChange:function(t){t.target.getVideoData().video_id,1===t.data&&e.find(".sby_item").each((function(){var e=jQuery(this).attr("data-video-id");jQuery(this).find("iframe").length&&jQuery(t.target.a).attr("id")!==jQuery(this).find("iframe").attr("id")&&YT.get("sby_player_"+e).pauseVideo()}))}}})}))):e.hasClass("sby_layout_gallery")?(jQuery(this).addClass("sby_player_loaded"),player=new YT.Player("sby_player"+t,{height:"100",width:"100",videoId:jQuery(this).find(".sby_item").first().attr("data-video-id"),playerVars:{modestbranding:1,rel:0,autoplay:s},events:{onStateChange:function(t){t.target.getVideoData().video_id,1===t.data&&e.find(".sby_item").each((function(){var e=jQuery(this).attr("data-video-id");jQuery(this).find("iframe").length&&jQuery(t.target.a).attr("id")!==jQuery(this).find("iframe").attr("id")&&YT.get("sby_player_"+e).pauseVideo()}))}}})):i=!0}))}else if(void 0!==window.sby)for(e=0;e<t;e++)window.sby.feeds[e].playerAPIReady=!0;else window.sbyAPIReady=!0;jQuery(".sb_youtube").each((function(t){var e=jQuery(this);e.find(".sby_live_player").length&&(player=new YT.Player(e.find(".sby_live_player").attr("id"),{events:{onReady:function(){e.find(".sby_live_player").hide(),e.find(".sby_item").remove();var i=YT.get(e.find(".sby_live_player").attr("id")).getVideoData().video_id;e.find(".sby_player_video_thumbnail").attr("data-video-id",i).css("z-index",-1),e.find(".sby_item").length;var s={action:"sby_live_retrieve",video_id:i,feed_id:e.attr("data-feedid"),atts:e.attr("data-shortcode-atts")};jQuery.ajax({url:sbyOptions.adminAjaxUrl,type:"post",data:s,success:function(i){if(0===i.trim().indexOf("{")){var s=window.sby.feeds[t],n=JSON.parse(i),a=void 0!==n.feedStatus.checkWPPosts&&n.feedStatus.checkWPPosts;s.settings.debugEnabled&&console.log(n),s.settings.checkWPPosts=!!a,s.appendNewPosts(n.html),s.addResizedImages(n.resizedImages),s.afterInitialImagesLoaded(),n.feedStatus.shouldPaginate?s.outOfPages=!1:(s.outOfPages=!0,e.find(".sby_load_btn").hide()),jQuery(".sby_no_js").removeClass("sby_no_js"),e.find(".sby_live_player").remove(),e.hasClass("sby_layout_gallery")&&s.createPlayer("sby_player"+s.index),e.find(".sby_player_item").css("opacity",1),e.find(".sby_item").css("opacity",1),e.find(".sby_player_loading").removeClass("sby_player_loading"),e.hasClass("sby_layout_list")&&e.find(".sby_item_video_thumbnail").on("mouseenter",(function(){jQuery(this).css("z-index",-1)}))}}})}}}))})),i&&(jQuery("#sby_lb-player").length||jQuery(".sb_youtube").first().append('<div class="sby_lb-player-loaded sby_lb-player" id="sby_lb-player" style="display: none;"></div>'),player=new YT.Player("sby_lb-player",{height:"100",width:"100",videoId:jQuery(this).find(".sby_item").first().attr("data-video-id"),playerVars:{modestbranding:1,rel:0,autoplay:s}}),window.sbyLightboxPlayer=player)}if(void 0!==window.sby){var n=jQuery.Event("sbyfeedandytready");jQuery(window).trigger(n)}}})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFFBQVNwTyxPQUFPbE0sTUFBTXdILEtBQUssYUFBYXlTLFFBQVE3UixLQUFLLGlCQUNyRG1TLFdBQVksQ0FDUkMsZUFBZ0IsRUFDaEJDLElBQUssRUFDTDNILFNBQVVBLEtBR2xCblYsT0FBT3VjLGtCQUFvQjBQLE9BR2xDLENBRUQsUUFBMEIsSUFBZmpzQixPQUFPMGEsSUFBcUIsQ0FDbkMsSUFBSXNCLEVBQU16TixPQUFPL0csTUFBTSxxQkFDdkIrRyxPQUFPdk8sUUFBUTBKLFFBQVFzUyxFQUMxQixDQUVKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL2pzL3NiLXlvdXR1YmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHNieV9qc19leGlzdHMgPSAodHlwZW9mIHNieV9qc19leGlzdHMgIT09ICd1bmRlZmluZWQnKSA/IHRydWUgOiBmYWxzZTtcbmlmKCFzYnlfanNfZXhpc3RzKSB7XG5cbiAgICBmdW5jdGlvbiBzYnlBZGRJbWdMaXF1aWQoKSB7XG4gICAgICAgIC8qISBpbWdMaXF1aWQgdjAuOS45NDQgLyAwMy0wNS0yMDEzIGh0dHBzOi8vZ2l0aHViLmNvbS9rYXJhY2FzL2ltZ0xpcXVpZCAqL1xuICAgICAgICB2YXIgc2J5X2ltZ0xpcXVpZCA9IHNieV9pbWdMaXF1aWQgfHwge1ZFUjogXCIwLjkuOTQ0XCJ9O1xuICAgICAgICBzYnlfaW1nTGlxdWlkLmJnc19BdmFpbGFibGUgPSAhMSwgc2J5X2ltZ0xpcXVpZC5iZ3NfQ2hlY2tSdW5uZWQgPSAhMSwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHQoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzYnlfaW1nTGlxdWlkLmJnc19DaGVja1J1bm5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzYnlfaW1nTGlxdWlkLmJnc19DaGVja1J1bm5lZCA9ICEwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGkoJzxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZC1zaXplOmNvdmVyXCIgLz4nKTtcbiAgICAgICAgICAgICAgICAgICAgaShcImJvZHlcIikuYXBwZW5kKHQpLCAhZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgJiYgd2luZG93LmdldENvbXB1dGVkU3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGksIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgJiYgZS5iYWNrZ3JvdW5kU2l6ZSAmJiAoc2J5X2ltZ0xpcXVpZC5iZ3NfQXZhaWxhYmxlID0gXCJjb3ZlclwiID09PSBlLmJhY2tncm91bmRTaXplKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KCksIHQucmVtb3ZlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZm4uZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICBzYnlfaW1nTGlxdWlkOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlQmFja2dyb3VuZFNpemU6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRGF0YUh0bWxBdHRyOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpdmU6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWRlSW5UaW1lOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQm94QmFja2dyb3VuZDogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXJkUGl4ZWxzOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpdmVDaGVja1RpbWU6IDUwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVjaGVja3Zpc2liaWxpdHk6IDUwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU3RhcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkZpbmlzaDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uSXRlbVN0YXJ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25JdGVtRmluaXNoOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25JdGVtRXJyb3I6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSwgdCgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMgPSBlLCB0aGlzLnNldHRpbmdzID0gaS5leHRlbmQoe30sIHRoaXMuZGVmYXVsdHMsIHRoaXMub3B0aW9ucyksIHRoaXMuc2V0dGluZ3Mub25TdGFydCAmJiB0aGlzLnNldHRpbmdzLm9uU3RhcnQoKSwgdGhpcy5lYWNoKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xID09PSB1LmNzcyhcImJhY2tncm91bmQtaW1hZ2VcIikuaW5kZXhPZihlbmNvZGVVUkkoYy5hdHRyKFwic3JjXCIpKSkgJiYgdS5jc3Moe1wiYmFja2dyb3VuZC1pbWFnZVwiOiAndXJsKFwiJyArIGVuY29kZVVSSShjLmF0dHIoXCJzcmNcIikpICsgJ1wiKSd9KSwgdS5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJhY2tncm91bmQtc2l6ZVwiOiBnLmZpbGwgPyBcImNvdmVyXCIgOiBcImNvbnRhaW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kLXBvc2l0aW9uXCI6IChnLmhvcml6b250YWxBbGlnbiArIFwiIFwiICsgZy52ZXJ0aWNhbEFsaWduKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJhY2tncm91bmQtcmVwZWF0XCI6IFwibm8tcmVwZWF0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgaShcImE6Zmlyc3RcIiwgdSkuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJibG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgaShcImltZ1wiLCB1KS5jc3Moe2Rpc3BsYXk6IFwibm9uZVwifSksIGcub25JdGVtRmluaXNoICYmIGcub25JdGVtRmluaXNoKHQsIHUsIGMpLCB1LmFkZENsYXNzKFwic2J5X2ltZ0xpcXVpZF9iZ1NpemVcIiksIHUuYWRkQ2xhc3MoXCJzYnlfaW1nTGlxdWlkX3JlYWR5XCIpLCBsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX2Vycm9yXCIpIHx8IGMuZGF0YShcInNieV9pbWdMaXF1aWRfbG9hZGVkXCIpIHx8IGMuZGF0YShcInNieV9pbWdMaXF1aWRfb2xkUHJvY2Vzc2VkXCIpIHx8ICh1LmlzKFwiOnZpc2libGVcIikgJiYgY1swXS5jb21wbGV0ZSAmJiBjWzBdLndpZHRoID4gMCAmJiBjWzBdLmhlaWdodCA+IDAgPyAoYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9sb2FkZWRcIiwgITApLCBzZXRUaW1lb3V0KHIsIHQgKiBnLmRlbGF5KSkgOiBzZXRUaW1lb3V0KGUsIGcudGltZWNoZWNrdmlzaWJpbGl0eSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMuZGF0YShcIm9sZFNyY1wiKSAmJiBjLmRhdGEoXCJvbGRTcmNcIikgIT09IGMuYXR0cihcInNyY1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGMuY2xvbmUoKS5yZW1vdmVBdHRyKFwic3R5bGVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmRhdGEoXCJzYnlfaW1nTGlxdWlkX3NldHRpbmdzXCIsIGMuZGF0YShcInNieV9pbWdMaXF1aWRfc2V0dGluZ3NcIikpLCBjLnBhcmVudCgpLnByZXBlbmQoYSksIGMucmVtb3ZlKCksIGMgPSBhLCBjWzBdLndpZHRoID0gMCwgdm9pZCBzZXRUaW1lb3V0KG8sIDEwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9vbGRQcm9jZXNzZWRcIikgPyB2b2lkIHIoKSA6IChjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX29sZFByb2Nlc3NlZFwiLCAhMSksIGMuZGF0YShcIm9sZFNyY1wiLCBjLmF0dHIoXCJzcmNcIikpLCBpKFwiaW1nOm5vdCg6Zmlyc3QpXCIsIHUpLmNzcyhcImRpc3BsYXlcIiwgXCJub25lXCIpLCB1LmNzcyh7b3ZlcmZsb3c6IFwiaGlkZGVuXCJ9KSwgYy5mYWRlVG8oMCwgMCkucmVtb3ZlQXR0cihcIndpZHRoXCIpLnJlbW92ZUF0dHIoXCJoZWlnaHRcIikuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4LXdpZHRoXCI6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1heC1oZWlnaHRcIjogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcImF1dG9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcImF1dG9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIGMub24oXCJlcnJvclwiLCBuKSwgY1swXS5vbmVycm9yID0gbiwgZSgpLCB2b2lkIGQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZy5yZXNwb25zaXZlIHx8IGMuZGF0YShcInNieV9pbWdMaXF1aWRfb2xkUHJvY2Vzc2VkXCIpKSAmJiBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX3NldHRpbmdzXCIpICYmIChnID0gYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9zZXR0aW5nc1wiKSwgdS5hY3R1YWxTaXplID0gdS5nZXQoMCkub2Zmc2V0V2lkdGggKyB1LmdldCgwKS5vZmZzZXRIZWlnaHQgLyAxZTQsIHUuc2l6ZU9sZCAmJiB1LmFjdHVhbFNpemUgIT09IHUuc2l6ZU9sZCAmJiByKCksIHUuc2l6ZU9sZCA9IHUuYWN0dWFsU2l6ZSwgc2V0VGltZW91dChkLCBnLnJlc3BvbnNpdmVDaGVja1RpbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZGF0YShcInNieV9pbWdMaXF1aWRfZXJyb3JcIiwgITApLCB1LmFkZENsYXNzKFwic2J5X2ltZ0xpcXVpZF9lcnJvclwiKSwgZy5vbkl0ZW1FcnJvciAmJiBnLm9uSXRlbUVycm9yKHQsIHUsIGMpLCBsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLnNldHRpbmdzLnVzZURhdGFIdG1sQXR0cikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHUuYXR0cihcImRhdGEtc2J5X2ltZ0xpcXVpZC1maWxsXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB1LmF0dHIoXCJkYXRhLXNieV9pbWdMaXF1aWQtaG9yaXpvbnRhbEFsaWduXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSB1LmF0dHIoXCJkYXRhLXNieV9pbWdMaXF1aWQtdmVydGljYWxBbGlnblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFwidHJ1ZVwiID09PSB0IHx8IFwiZmFsc2VcIiA9PT0gdCkgJiYgKGkuZmlsbCA9IEJvb2xlYW4oXCJ0cnVlXCIgPT09IHQpKSwgdm9pZCAwID09PSBlIHx8IFwibGVmdFwiICE9PSBlICYmIFwiY2VudGVyXCIgIT09IGUgJiYgXCJyaWdodFwiICE9PSBlICYmIC0xID09PSBlLmluZGV4T2YoXCIlXCIpIHx8IChpLmhvcml6b250YWxBbGlnbiA9IGUpLCB2b2lkIDAgPT09IG8gfHwgXCJ0b3BcIiAhPT0gbyAmJiBcImJvdHRvbVwiICE9PSBvICYmIFwiY2VudGVyXCIgIT09IG8gJiYgLTEgPT09IG8uaW5kZXhPZihcIiVcIikgfHwgKGkudmVydGljYWxBbGlnbiA9IG8pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzYnlfaW1nTGlxdWlkLmlzSUUgJiYgYS5zZXR0aW5ncy5pZUZhZGVJbkRpc2FibGVkICYmIChpLmZhZGVJblRpbWUgPSAwKSwgaVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBlLCBhLCBvLCBkLCBuLCBzLCByLCBtID0gMCwgaCA9IDAsIGYgPSB1LndpZHRoKCksIHYgPSB1LmhlaWdodCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gYy5kYXRhKFwib3dpZHRoXCIpICYmIGMuZGF0YShcIm93aWR0aFwiLCBjWzBdLndpZHRoKSwgdm9pZCAwID09PSBjLmRhdGEoXCJvaGVpZ2h0XCIpICYmIGMuZGF0YShcIm9oZWlnaHRcIiwgY1swXS5oZWlnaHQpLCBnLmZpbGwgPT09IGYgLyB2ID49IGMuZGF0YShcIm93aWR0aFwiKSAvIGMuZGF0YShcIm9oZWlnaHRcIikgPyAoaSA9IFwiMTAwJVwiLCBlID0gXCJhdXRvXCIsIGEgPSBNYXRoLmZsb29yKGYpLCBvID0gTWF0aC5mbG9vcihmICogKGMuZGF0YShcIm9oZWlnaHRcIikgLyBjLmRhdGEoXCJvd2lkdGhcIikpKSkgOiAoaSA9IFwiYXV0b1wiLCBlID0gXCIxMDAlXCIsIGEgPSBNYXRoLmZsb29yKHYgKiAoYy5kYXRhKFwib3dpZHRoXCIpIC8gYy5kYXRhKFwib2hlaWdodFwiKSkpLCBvID0gTWF0aC5mbG9vcih2KSksIGQgPSBnLmhvcml6b250YWxBbGlnbi50b0xvd2VyQ2FzZSgpLCBzID0gZiAtIGEsIFwibGVmdFwiID09PSBkICYmIChoID0gMCksIFwiY2VudGVyXCIgPT09IGQgJiYgKGggPSAuNSAqIHMpLCBcInJpZ2h0XCIgPT09IGQgJiYgKGggPSBzKSwgLTEgIT09IGQuaW5kZXhPZihcIiVcIikgJiYgKGQgPSBwYXJzZUludChkLnJlcGxhY2UoXCIlXCIsIFwiXCIpLCAxMCksIGQgPiAwICYmIChoID0gcyAqIGQgKiAuMDEpKSwgbiA9IGcudmVydGljYWxBbGlnbi50b0xvd2VyQ2FzZSgpLCByID0gdiAtIG8sIFwibGVmdFwiID09PSBuICYmIChtID0gMCksIFwiY2VudGVyXCIgPT09IG4gJiYgKG0gPSAuNSAqIHIpLCBcImJvdHRvbVwiID09PSBuICYmIChtID0gciksIC0xICE9PSBuLmluZGV4T2YoXCIlXCIpICYmIChuID0gcGFyc2VJbnQobi5yZXBsYWNlKFwiJVwiLCBcIlwiKSwgMTApLCBuID4gMCAmJiAobSA9IHIgKiBuICogLjAxKSksIGcuaGFyZFBpeGVscyAmJiAoaSA9IGEsIGUgPSBvKSwgYy5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmdpbi1sZWZ0XCI6IE1hdGguZmxvb3IoaCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFyZ2luLXRvcFwiOiBNYXRoLmZsb29yKG0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIGMuZGF0YShcInNieV9pbWdMaXF1aWRfb2xkUHJvY2Vzc2VkXCIpIHx8IChjLmZhZGVUbyhnLmZhZGVJblRpbWUsIDEpLCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX29sZFByb2Nlc3NlZFwiLCAhMCksIGcucmVtb3ZlQm94QmFja2dyb3VuZCAmJiB1LmNzcyhcImJhY2tncm91bmQtaW1hZ2VcIiwgXCJub25lXCIpLCB1LmFkZENsYXNzKFwic2J5X2ltZ0xpcXVpZF9ub2JnU2l6ZVwiKSwgdS5hZGRDbGFzcyhcInNieV9pbWdMaXF1aWRfcmVhZHlcIikpLCBnLm9uSXRlbUZpbmlzaCAmJiBnLm9uSXRlbUZpbmlzaCh0LCB1LCBjKSwgbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9PT0gYS5sZW5ndGggLSAxICYmIGEuc2V0dGluZ3Mub25GaW5pc2ggJiYgYS5zZXR0aW5ncy5vbkZpbmlzaCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnID0gYS5zZXR0aW5ncywgdSA9IGkodGhpcyksIGMgPSBpKFwiaW1nOmZpcnN0XCIsIHUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMubGVuZ3RoID8gKGMuZGF0YShcInNieV9pbWdMaXF1aWRfc2V0dGluZ3NcIikgPyAodS5yZW1vdmVDbGFzcyhcInNieV9pbWdMaXF1aWRfZXJyb3JcIikucmVtb3ZlQ2xhc3MoXCJzYnlfaW1nTGlxdWlkX3JlYWR5XCIpLCBnID0gaS5leHRlbmQoe30sIGMuZGF0YShcInNieV9pbWdMaXF1aWRfc2V0dGluZ3NcIiksIGEub3B0aW9ucykpIDogZyA9IGkuZXh0ZW5kKHt9LCBhLnNldHRpbmdzLCBzKCkpLCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX3NldHRpbmdzXCIsIGcpLCBnLm9uSXRlbVN0YXJ0ICYmIGcub25JdGVtU3RhcnQodCwgdSwgYyksIHZvaWQgKHNieV9pbWdMaXF1aWQuYmdzX0F2YWlsYWJsZSAmJiBnLnVzZUJhY2tncm91bmRTaXplID8gZSgpIDogbygpKSkgOiB2b2lkIG4oKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0oalF1ZXJ5KTtcblxuICAgICAgICAvLyBVc2UgaW1hZ2VmaWxsIHRvIHNldCB0aGUgaW1hZ2VzIGFzIGJhY2tncm91bmRzIHNvIHRoZXkgY2FuIGJlIHNxdWFyZVxuICAgICAgICAhZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNzcyA9IHNieV9pbWdMaXF1aWQuaW5qZWN0Q3NzLFxuICAgICAgICAgICAgICBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSxcbiAgICAgICAgICAgICAgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICAgICAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICAgICAgICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgICAgICAgICAgICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICAgICAgfSgpO1xuICAgIH1cblxuICAgIC8qIEphdmFTY3JpcHQgTGlua2lmeSAtIHYwLjMgLSA2LzI3LzIwMDkgLSBodHRwOi8vYmVuYWxtYW4uY29tL3Byb2plY3RzL2phdmFzY3JpcHQtbGlua2lmeS8gKi9cbiAgICB3aW5kb3cuc2J5TGlua2lmeSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBrID0gXCJbYS16XFxcXGQuLV0rOi8vXCIsXG4gICAgICAgICAgaCA9IFwiKD86KD86WzAtOV18WzEtOV1cXFxcZHwxXFxcXGR7Mn18MlswLTRdXFxcXGR8MjVbMC01XSlcXFxcLil7M30oPzpbMC05XXxbMS05XVxcXFxkfDFcXFxcZHsyfXwyWzAtNF1cXFxcZHwyNVswLTVdKVwiLFxuICAgICAgICAgIGMgPSBcIig/Oig/OlteXFxcXHMhQCMkJV4mKigpXz0rW1xcXFxde31cXFxcXFxcXHw7OidcXFwiLC48Pi8/XSspXFxcXC4pK1wiLFxuICAgICAgICAgIG4gPSBcIig/OmFjfGFkfGFlcm98YWV8YWZ8YWd8YWl8YWx8YW18YW58YW98YXF8YXJwYXxhcnxhc2lhfGFzfGF0fGF1fGF3fGF4fGF6fGJhfGJifGJkfGJlfGJmfGJnfGJofGJpenxiaXxianxibXxibnxib3xicnxic3xidHxidnxid3xieXxienxjYXR8Y2F8Y2N8Y2R8Y2Z8Y2d8Y2h8Y2l8Y2t8Y2x8Y218Y258Y29vcHxjb218Y298Y3J8Y3V8Y3Z8Y3h8Y3l8Y3p8ZGV8ZGp8ZGt8ZG18ZG98ZHp8ZWN8ZWR1fGVlfGVnfGVyfGVzfGV0fGV1fGZpfGZqfGZrfGZtfGZvfGZyfGdhfGdifGdkfGdlfGdmfGdnfGdofGdpfGdsfGdtfGdufGdvdnxncHxncXxncnxnc3xndHxndXxnd3xneXxoa3xobXxobnxocnxodHxodXxpZHxpZXxpbHxpbXxpbmZvfGludHxpbnxpb3xpcXxpcnxpc3xpdHxqZXxqbXxqb2JzfGpvfGpwfGtlfGtnfGtofGtpfGttfGtufGtwfGtyfGt3fGt5fGt6fGxhfGxifGxjfGxpfGxrfGxyfGxzfGx0fGx1fGx2fGx5fG1hfG1jfG1kfG1lfG1nfG1ofG1pbHxta3xtbHxtbXxtbnxtb2JpfG1vfG1wfG1xfG1yfG1zfG10fG11c2V1bXxtdXxtdnxtd3xteHxteXxtenxuYW1lfG5hfG5jfG5ldHxuZXxuZnxuZ3xuaXxubHxub3xucHxucnxudXxuenxvbXxvcmd8cGF8cGV8cGZ8cGd8cGh8cGt8cGx8cG18cG58cHJvfHByfHBzfHB0fHB3fHB5fHFhfHJlfHJvfHJzfHJ1fHJ3fHNhfHNifHNjfHNkfHNlfHNnfHNofHNpfHNqfHNrfHNsfHNtfHNufHNvfHNyfHN0fHN1fHN2fHN5fHN6fHRjfHRkfHRlbHx0Znx0Z3x0aHx0anx0a3x0bHx0bXx0bnx0b3x0cHx0cmF2ZWx8dHJ8dHR8dHZ8dHd8dHp8dWF8dWd8dWt8dW18dXN8dXl8dXp8dmF8dmN8dmV8dmd8dml8dm58dnV8d2Z8d3N8eG4tLTB6d201NmR8eG4tLTExYjViczNhOWFqNmd8eG4tLTgwYWtoYnlrbmo0Znx4bi0tOXQ0YjExeWk1YXx4bi0tZGViYTBhZHx4bi0tZzZ3MjUxZHx4bi0taGdiazZhajdmNTNiYmF8eG4tLWhsY2o2YXlhOWVzYzdhfHhuLS1qeGFscGRscHx4bi0ta2diZWNodHZ8eG4tLXpja3phaHx5ZXx5dHx5dXx6YXx6bXx6dylcIixcbiAgICAgICAgICBmID0gXCIoPzpcIiArIGMgKyBuICsgXCJ8XCIgKyBoICsgXCIpXCIsIG8gPSBcIig/Ols7L11bXiM/PD5cXFxcc10qKT9cIiwgZSA9IFwiKD86XFxcXD9bXiM8PlxcXFxzXSopPyg/OiNbXjw+XFxcXHNdKik/XCIsXG4gICAgICAgICAgZCA9IFwiXFxcXGJcIiArIGsgKyBcIltePD5cXFxcc10rXCIsIGEgPSBcIlxcXFxiXCIgKyBmICsgbyArIGUgKyBcIig/IVxcXFx3KVwiLCBtID0gXCJtYWlsdG86XCIsXG4gICAgICAgICAgaiA9IFwiKD86XCIgKyBtICsgXCIpP1thLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXFxcLlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkBcIiArIGYgKyBlICsgXCIoPyFcXFxcdylcIixcbiAgICAgICAgICBsID0gbmV3IFJlZ0V4cChcIig/OlwiICsgZCArIFwifFwiICsgYSArIFwifFwiICsgaiArIFwiKVwiLCBcImlnXCIpLCBnID0gbmV3IFJlZ0V4cChcIl5cIiArIGssIFwiaVwiKSxcbiAgICAgICAgICBiID0ge1wiJ1wiOiBcImBcIiwgXCI+XCI6IFwiPFwiLCBcIilcIjogXCIoXCIsIFwiXVwiOiBcIltcIiwgXCJ9XCI6IFwie1wiLCBcIkI7XCI6IFwiQitcIiwgXCJiOlwiOiBcImI5XCJ9LCBpID0ge1xuICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKHEsIHApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwID8gJzxhIGhyZWY9XCInICsgcCArICdcIiB0aXRsZT1cIicgKyBwICsgJ1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyXCI+JyArIHEgKyBcIjwvYT5cIiA6IHFcbiAgICAgICAgICAgICAgfSwgcHVuY3RfcmVnZXhwOiAvKD86WyE/Liw6OydcIl18KD86JnwmYW1wOykoPzpsdHxndHxxdW90fGFwb3N8cmFxdW98bGFxdW98cnNhcXVvfGxzYXF1byk7KSQvXG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh1LCB6KSB7XG4gICAgICAgICAgICB6ID0geiB8fCB7fTtcbiAgICAgICAgICAgIHZhciB3LCB2LCBBLCBwLCB4ID0gXCJcIiwgdCA9IFtdLCBzLCBFLCBDLCB5LCBxLCBELCBCLCByO1xuICAgICAgICAgICAgZm9yICh2IGluIGkpIHtcbiAgICAgICAgICAgICAgICBpZiAoelt2XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHpbdl0gPSBpW3ZdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKHcgPSBsLmV4ZWModSkpIHtcbiAgICAgICAgICAgICAgICBBID0gd1swXTtcbiAgICAgICAgICAgICAgICBFID0gbC5sYXN0SW5kZXg7XG4gICAgICAgICAgICAgICAgQyA9IEUgLSBBLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoL1tcXC86XS8udGVzdCh1LmNoYXJBdChDIC0gMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgeSA9IEE7XG4gICAgICAgICAgICAgICAgICAgIHIgPSBBLnN1YnN0cigtMSk7XG4gICAgICAgICAgICAgICAgICAgIEIgPSBiW3JdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoQikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcSA9IEEubWF0Y2gobmV3IFJlZ0V4cChcIlxcXFxcIiArIEIgKyBcIig/ISQpXCIsIFwiZ1wiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBEID0gQS5tYXRjaChuZXcgUmVnRXhwKFwiXFxcXFwiICsgciwgXCJnXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocSA/IHEubGVuZ3RoIDogMCkgPCAoRCA/IEQubGVuZ3RoIDogMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gQS5zdWJzdHIoMCwgQS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoei5wdW5jdF9yZWdleHApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBBLnJlcGxhY2Uoei5wdW5jdF9yZWdleHAsIGZ1bmN0aW9uIChGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRSAtPSBGLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKEEubGVuZ3RoICYmIEEgIT09IHkpO1xuICAgICAgICAgICAgICAgIHAgPSBBO1xuICAgICAgICAgICAgICAgIGlmICghZy50ZXN0KHApKSB7XG4gICAgICAgICAgICAgICAgICAgIHAgPSAocC5pbmRleE9mKFwiQFwiKSAhPT0gLTEgPyAoIXAuaW5kZXhPZihtKSA/IFwiXCIgOiBtKSA6ICFwLmluZGV4T2YoXCJpcmMuXCIpID8gXCJpcmM6Ly9cIiA6ICFwLmluZGV4T2YoXCJmdHAuXCIpID8gXCJmdHA6Ly9cIiA6IFwiaHR0cDovL1wiKSArIHBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHMgIT0gQykge1xuICAgICAgICAgICAgICAgICAgICB0LnB1c2goW3Uuc2xpY2UocywgQyldKTtcbiAgICAgICAgICAgICAgICAgICAgcyA9IEVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdC5wdXNoKFtBLCBwXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQucHVzaChbdS5zdWJzdHIocyldKTtcbiAgICAgICAgICAgIGZvciAodiA9IDA7IHYgPCB0Lmxlbmd0aDsgdisrKSB7XG4gICAgICAgICAgICAgICAgeCArPSB6LmNhbGxiYWNrLmFwcGx5KHdpbmRvdywgdFt2XSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB4IHx8IHVcbiAgICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICAvL0NoZWNrcyB3aGV0aGVyIGJyb3dzZXIgc3VwcG9ydCBIVE1MNSB2aWRlbyBlbGVtZW50XG4gICAgZnVuY3Rpb24gc2J5X3N1cHBvcnRzX3ZpZGVvKCkge1xuICAgICAgICByZXR1cm4gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpLmNhblBsYXlUeXBlO1xuICAgIH1cblxuICAgIC8vIENhcm91c2VsXG4gICAgIWZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgIGZ1bmN0aW9uIGUoYiwgYykge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncyA9IG51bGwsIHRoaXMub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCBjKSwgdGhpcy4kZWxlbWVudCA9IGEoYiksIHRoaXMuX2hhbmRsZXJzID0ge30sIHRoaXMuX3BsdWdpbnMgPSB7fSwgdGhpcy5fc3VwcmVzcyA9IHt9LCB0aGlzLl9jdXJyZW50ID0gbnVsbCwgdGhpcy5fc3BlZWQgPSBudWxsLCB0aGlzLl9jb29yZGluYXRlcyA9IFtdLCB0aGlzLl9icmVha3BvaW50ID0gbnVsbCwgdGhpcy5fd2lkdGggPSBudWxsLCB0aGlzLl9pdGVtcyA9IFtdLCB0aGlzLl9jbG9uZXMgPSBbXSwgdGhpcy5fbWVyZ2VycyA9IFtdLCB0aGlzLl93aWR0aHMgPSBbXSwgdGhpcy5faW52YWxpZGF0ZWQgPSB7fSwgdGhpcy5fcGlwZSA9IFtdLCB0aGlzLl9kcmFnID0ge1xuICAgICAgICAgICAgICAgIHRpbWU6IG51bGwsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBudWxsLFxuICAgICAgICAgICAgICAgIHBvaW50ZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgc3RhZ2U6IHtzdGFydDogbnVsbCwgY3VycmVudDogbnVsbH0sXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBudWxsXG4gICAgICAgICAgICB9LCB0aGlzLl9zdGF0ZXMgPSB7XG4gICAgICAgICAgICAgICAgY3VycmVudDoge30sXG4gICAgICAgICAgICAgICAgdGFnczoge2luaXRpYWxpemluZzogW1wiYnVzeVwiXSwgYW5pbWF0aW5nOiBbXCJidXN5XCJdLCBkcmFnZ2luZzogW1wiaW50ZXJhY3RpbmdcIl19XG4gICAgICAgICAgICB9LCBhLmVhY2goW1wib25SZXNpemVcIiwgXCJvblRocm90dGxlZFJlc2l6ZVwiXSwgYS5wcm94eShmdW5jdGlvbiAoYiwgYykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZXJzW2NdID0gYS5wcm94eSh0aGlzW2NdLCB0aGlzKVxuICAgICAgICAgICAgfSwgdGhpcykpLCBhLmVhY2goZS5QbHVnaW5zLCBhLnByb3h5KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGx1Z2luc1thLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgYS5zbGljZSgxKV0gPSBuZXcgYih0aGlzKVxuICAgICAgICAgICAgfSwgdGhpcykpLCBhLmVhY2goZS5Xb3JrZXJzLCBhLnByb3h5KGZ1bmN0aW9uIChiLCBjKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGlwZS5wdXNoKHtmaWx0ZXI6IGMuZmlsdGVyLCBydW46IGEucHJveHkoYy5ydW4sIHRoaXMpfSlcbiAgICAgICAgICAgIH0sIHRoaXMpKSwgdGhpcy5zZXR1cCgpLCB0aGlzLmluaXRpYWxpemUoKVxuICAgICAgICB9XG5cbiAgICAgICAgZS5EZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIGl0ZW1zOiAzLFxuICAgICAgICAgICAgbG9vcDogITEsXG4gICAgICAgICAgICBjZW50ZXI6ICExLFxuICAgICAgICAgICAgcmV3aW5kOiAhMSxcbiAgICAgICAgICAgIG1vdXNlRHJhZzogITAsXG4gICAgICAgICAgICB0b3VjaERyYWc6ICEwLFxuICAgICAgICAgICAgcHVsbERyYWc6ICEwLFxuICAgICAgICAgICAgZnJlZURyYWc6ICExLFxuICAgICAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgICAgICAgc3RhZ2VQYWRkaW5nOiAwLFxuICAgICAgICAgICAgbWVyZ2U6ICExLFxuICAgICAgICAgICAgbWVyZ2VGaXQ6ICEwLFxuICAgICAgICAgICAgYXV0b1dpZHRoOiAhMSxcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb246IDAsXG4gICAgICAgICAgICBydGw6ICExLFxuICAgICAgICAgICAgc21hcnRTcGVlZDogMjUwLFxuICAgICAgICAgICAgZmx1aWRTcGVlZDogITEsXG4gICAgICAgICAgICBkcmFnRW5kU3BlZWQ6ICExLFxuICAgICAgICAgICAgcmVzcG9uc2l2ZToge30sXG4gICAgICAgICAgICByZXNwb25zaXZlUmVmcmVzaFJhdGU6IDIwMCxcbiAgICAgICAgICAgIHJlc3BvbnNpdmVCYXNlRWxlbWVudDogYixcbiAgICAgICAgICAgIGZhbGxiYWNrRWFzaW5nOiBcInN3aW5nXCIsXG4gICAgICAgICAgICBpbmZvOiAhMSxcbiAgICAgICAgICAgIG5lc3RlZEl0ZW1TZWxlY3RvcjogITEsXG4gICAgICAgICAgICBpdGVtRWxlbWVudDogXCJkaXZcIixcbiAgICAgICAgICAgIHN0YWdlRWxlbWVudDogXCJkaXZcIixcbiAgICAgICAgICAgIHJlZnJlc2hDbGFzczogXCJzYnktb3dsLXJlZnJlc2hcIixcbiAgICAgICAgICAgIGxvYWRlZENsYXNzOiBcInNieS1vd2wtbG9hZGVkXCIsXG4gICAgICAgICAgICBsb2FkaW5nQ2xhc3M6IFwic2J5LW93bC1sb2FkaW5nXCIsXG4gICAgICAgICAgICBydGxDbGFzczogXCJzYnktb3dsLXJ0bFwiLFxuICAgICAgICAgICAgcmVzcG9uc2l2ZUNsYXNzOiBcInNieS1vd2wtcmVzcG9uc2l2ZVwiLFxuICAgICAgICAgICAgZHJhZ0NsYXNzOiBcInNieS1vd2wtZHJhZ1wiLFxuICAgICAgICAgICAgaXRlbUNsYXNzOiBcInNieS1vd2wtaXRlbVwiLFxuICAgICAgICAgICAgc3RhZ2VDbGFzczogXCJzYnktb3dsLXN0YWdlXCIsXG4gICAgICAgICAgICBzdGFnZU91dGVyQ2xhc3M6IFwic2J5LW93bC1zdGFnZS1vdXRlclwiLFxuICAgICAgICAgICAgZ3JhYkNsYXNzOiBcInNieS1vd2wtZ3JhYlwiXG4gICAgICAgIH0sIGUuV2lkdGggPSB7RGVmYXVsdDogXCJkZWZhdWx0XCIsIElubmVyOiBcImlubmVyXCIsIE91dGVyOiBcIm91dGVyXCJ9LCBlLlR5cGUgPSB7XG4gICAgICAgICAgICBFdmVudDogXCJldmVudFwiLFxuICAgICAgICAgICAgU3RhdGU6IFwic3RhdGVcIlxuICAgICAgICB9LCBlLlBsdWdpbnMgPSB7fSwgZS5Xb3JrZXJzID0gW3tcbiAgICAgICAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJzZXR0aW5nc1wiXSwgcnVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB0aGlzLiRlbGVtZW50LndpZHRoKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZmlsdGVyOiBbXCJ3aWR0aFwiLCBcIml0ZW1zXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICBhLmN1cnJlbnQgPSB0aGlzLl9pdGVtcyAmJiB0aGlzLl9pdGVtc1t0aGlzLnJlbGF0aXZlKHRoaXMuX2N1cnJlbnQpXVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWx0ZXI6IFtcIml0ZW1zXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHN0YWdlLmNoaWxkcmVuKFwiLmNsb25lZFwiKS5yZW1vdmUoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWx0ZXI6IFtcIndpZHRoXCIsIFwiaXRlbXNcIiwgXCJzZXR0aW5nc1wiXSwgcnVuOiBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgIHZhciBiID0gdGhpcy5zZXR0aW5ncy5tYXJnaW4gfHwgXCJcIiwgYyA9ICF0aGlzLnNldHRpbmdzLmF1dG9XaWR0aCwgZCA9IHRoaXMuc2V0dGluZ3MucnRsLFxuICAgICAgICAgICAgICAgICAgZSA9IHt3aWR0aDogXCJhdXRvXCIsIFwibWFyZ2luLWxlZnRcIjogZCA/IGIgOiBcIlwiLCBcIm1hcmdpbi1yaWdodFwiOiBkID8gXCJcIiA6IGJ9O1xuICAgICAgICAgICAgICAgICFjICYmIHRoaXMuJHN0YWdlLmNoaWxkcmVuKCkuY3NzKGUpLCBhLmNzcyA9IGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZmlsdGVyOiBbXCJ3aWR0aFwiLCBcIml0ZW1zXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgYiA9ICh0aGlzLndpZHRoKCkgLyB0aGlzLnNldHRpbmdzLml0ZW1zKS50b0ZpeGVkKDMpIC0gdGhpcy5zZXR0aW5ncy5tYXJnaW4sIGMgPSBudWxsLFxuICAgICAgICAgICAgICAgICAgZCA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgZSA9ICF0aGlzLnNldHRpbmdzLmF1dG9XaWR0aCwgZiA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoYS5pdGVtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2U6ICExLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogYlxuICAgICAgICAgICAgICAgIH07IGQtLTspIGMgPSB0aGlzLl9tZXJnZXJzW2RdLCBjID0gdGhpcy5zZXR0aW5ncy5tZXJnZUZpdCAmJiBNYXRoLm1pbihjLCB0aGlzLnNldHRpbmdzLml0ZW1zKSB8fCBjLCBhLml0ZW1zLm1lcmdlID0gYyA+IDEgfHwgYS5pdGVtcy5tZXJnZSwgZltkXSA9IGUgPyBiICogYyA6IHRoaXMuX2l0ZW1zW2RdLndpZHRoKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2lkdGhzID0gZlxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWx0ZXI6IFtcIml0ZW1zXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBiID0gW10sIGMgPSB0aGlzLl9pdGVtcywgZCA9IHRoaXMuc2V0dGluZ3MsIGUgPSBNYXRoLm1heCgyICogZC5pdGVtcywgNCksXG4gICAgICAgICAgICAgICAgICBmID0gMiAqIE1hdGguY2VpbChjLmxlbmd0aCAvIDIpLCBnID0gZC5sb29wICYmIGMubGVuZ3RoID8gZC5yZXdpbmQgPyBlIDogTWF0aC5tYXgoZSwgZikgOiAwLCBoID0gXCJcIixcbiAgICAgICAgICAgICAgICAgIGkgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGZvciAoZyAvPSAyOyBnLS07KSBiLnB1c2godGhpcy5ub3JtYWxpemUoYi5sZW5ndGggLyAyLCAhMCkpLCBoICs9IGNbYltiLmxlbmd0aCAtIDFdXVswXS5vdXRlckhUTUwsIGIucHVzaCh0aGlzLm5vcm1hbGl6ZShjLmxlbmd0aCAtIDEgLSAoYi5sZW5ndGggLSAxKSAvIDIsICEwKSksIGkgPSBjW2JbYi5sZW5ndGggLSAxXV1bMF0ub3V0ZXJIVE1MICsgaTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbG9uZXMgPSBiLCBhKGgpLmFkZENsYXNzKFwiY2xvbmVkXCIpLmFwcGVuZFRvKHRoaXMuJHN0YWdlKSwgYShpKS5hZGRDbGFzcyhcImNsb25lZFwiKS5wcmVwZW5kVG8odGhpcy4kc3RhZ2UpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gdGhpcy5zZXR0aW5ncy5ydGwgPyAxIDogLTEsIGIgPSB0aGlzLl9jbG9uZXMubGVuZ3RoICsgdGhpcy5faXRlbXMubGVuZ3RoLCBjID0gLTEsIGQgPSAwLCBlID0gMCwgZiA9IFtdOyArK2MgPCBiOykgZCA9IGZbYyAtIDFdIHx8IDAsIGUgPSB0aGlzLl93aWR0aHNbdGhpcy5yZWxhdGl2ZShjKV0gKyB0aGlzLnNldHRpbmdzLm1hcmdpbiwgZi5wdXNoKGQgKyBlICogYSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29vcmRpbmF0ZXMgPSBmXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXMuc2V0dGluZ3Muc3RhZ2VQYWRkaW5nLCBiID0gdGhpcy5fY29vcmRpbmF0ZXMsIGMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBNYXRoLmNlaWwoTWF0aC5hYnMoYltiLmxlbmd0aCAtIDFdKSkgKyAyICogYSxcbiAgICAgICAgICAgICAgICAgICAgXCJwYWRkaW5nLWxlZnRcIjogYSB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBcInBhZGRpbmctcmlnaHRcIjogYSB8fCBcIlwiXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLiRzdGFnZS5jc3MoYylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZmlsdGVyOiBbXCJ3aWR0aFwiLCBcIml0ZW1zXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgYiA9IHRoaXMuX2Nvb3JkaW5hdGVzLmxlbmd0aCwgYyA9ICF0aGlzLnNldHRpbmdzLmF1dG9XaWR0aCwgZCA9IHRoaXMuJHN0YWdlLmNoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgaWYgKGMgJiYgYS5pdGVtcy5tZXJnZSkgZm9yICg7IGItLTspIGEuY3NzLndpZHRoID0gdGhpcy5fd2lkdGhzW3RoaXMucmVsYXRpdmUoYildLCBkLmVxKGIpLmNzcyhhLmNzcyk7IGVsc2UgYyAmJiAoYS5jc3Mud2lkdGggPSBhLml0ZW1zLndpZHRoLCBkLmNzcyhhLmNzcykpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpbHRlcjogW1wiaXRlbXNcIl0sIHJ1bjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nvb3JkaW5hdGVzLmxlbmd0aCA8IDEgJiYgdGhpcy4kc3RhZ2UucmVtb3ZlQXR0cihcInN0eWxlXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgYS5jdXJyZW50ID0gYS5jdXJyZW50ID8gdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKS5pbmRleChhLmN1cnJlbnQpIDogMCwgYS5jdXJyZW50ID0gTWF0aC5tYXgodGhpcy5taW5pbXVtKCksIE1hdGgubWluKHRoaXMubWF4aW11bSgpLCBhLmN1cnJlbnQpKSwgdGhpcy5yZXNldChhLmN1cnJlbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpbHRlcjogW1wicG9zaXRpb25cIl0sIHJ1bjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0ZSh0aGlzLmNvb3JkaW5hdGVzKHRoaXMuX2N1cnJlbnQpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWx0ZXI6IFtcIndpZHRoXCIsIFwicG9zaXRpb25cIiwgXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgYSwgYiwgYywgZCwgZSA9IHRoaXMuc2V0dGluZ3MucnRsID8gMSA6IC0xLCBmID0gMiAqIHRoaXMuc2V0dGluZ3Muc3RhZ2VQYWRkaW5nLFxuICAgICAgICAgICAgICAgICAgZyA9IHRoaXMuY29vcmRpbmF0ZXModGhpcy5jdXJyZW50KCkpICsgZiwgaCA9IGcgKyB0aGlzLndpZHRoKCkgKiBlLCBpID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjID0gMCwgZCA9IHRoaXMuX2Nvb3JkaW5hdGVzLmxlbmd0aDsgYyA8IGQ7IGMrKykgYSA9IHRoaXMuX2Nvb3JkaW5hdGVzW2MgLSAxXSB8fCAwLCBiID0gTWF0aC5hYnModGhpcy5fY29vcmRpbmF0ZXNbY10pICsgZiAqIGUsICh0aGlzLm9wKGEsIFwiPD1cIiwgZykgJiYgdGhpcy5vcChhLCBcIj5cIiwgaCkgfHwgdGhpcy5vcChiLCBcIjxcIiwgZykgJiYgdGhpcy5vcChiLCBcIj5cIiwgaCkpICYmIGkucHVzaChjKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRzdGFnZS5jaGlsZHJlbihcIi5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksIHRoaXMuJHN0YWdlLmNoaWxkcmVuKFwiOmVxKFwiICsgaS5qb2luKFwiKSwgOmVxKFwiKSArIFwiKVwiKS5hZGRDbGFzcyhcImFjdGl2ZVwiKSwgdGhpcy5zZXR0aW5ncy5jZW50ZXIgJiYgKHRoaXMuJHN0YWdlLmNoaWxkcmVuKFwiLmNlbnRlclwiKS5yZW1vdmVDbGFzcyhcImNlbnRlclwiKSwgdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKS5lcSh0aGlzLmN1cnJlbnQoKSkuYWRkQ2xhc3MoXCJjZW50ZXJcIikpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1dLCBlLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZW50ZXIoXCJpbml0aWFsaXppbmdcIiksIHRoaXMudHJpZ2dlcihcImluaXRpYWxpemVcIiksIHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3ModGhpcy5zZXR0aW5ncy5ydGxDbGFzcywgdGhpcy5zZXR0aW5ncy5ydGwpLCB0aGlzLnNldHRpbmdzLmF1dG9XaWR0aCAmJiAhdGhpcy5pcyhcInByZS1sb2FkaW5nXCIpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGIsIGMsIGU7XG4gICAgICAgICAgICAgICAgYiA9IHRoaXMuJGVsZW1lbnQuZmluZChcImltZ1wiKSwgYyA9IHRoaXMuc2V0dGluZ3MubmVzdGVkSXRlbVNlbGVjdG9yID8gXCIuXCIgKyB0aGlzLnNldHRpbmdzLm5lc3RlZEl0ZW1TZWxlY3RvciA6IGQsIGUgPSB0aGlzLiRlbGVtZW50LmNoaWxkcmVuKGMpLndpZHRoKCksIGIubGVuZ3RoICYmIGUgPD0gMCAmJiB0aGlzLnByZWxvYWRBdXRvV2lkdGhJbWFnZXMoYilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmxvYWRpbmdDbGFzcyksIHRoaXMuJHN0YWdlID0gYShcIjxcIiArIHRoaXMuc2V0dGluZ3Muc3RhZ2VFbGVtZW50ICsgJyBjbGFzcz1cIicgKyB0aGlzLnNldHRpbmdzLnN0YWdlQ2xhc3MgKyAnXCIvPicpLndyYXAoJzxkaXYgY2xhc3M9XCInICsgdGhpcy5zZXR0aW5ncy5zdGFnZU91dGVyQ2xhc3MgKyAnXCIvPicpLCB0aGlzLiRlbGVtZW50LmFwcGVuZCh0aGlzLiRzdGFnZS5wYXJlbnQoKSksIHRoaXMucmVwbGFjZSh0aGlzLiRlbGVtZW50LmNoaWxkcmVuKCkubm90KHRoaXMuJHN0YWdlLnBhcmVudCgpKSksIHRoaXMuJGVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSA/IHRoaXMucmVmcmVzaCgpIDogdGhpcy5pbnZhbGlkYXRlKFwid2lkdGhcIiksIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmxvYWRpbmdDbGFzcykuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmxvYWRlZENsYXNzKSwgdGhpcy5yZWdpc3RlckV2ZW50SGFuZGxlcnMoKSwgdGhpcy5sZWF2ZShcImluaXRpYWxpemluZ1wiKSwgdGhpcy50cmlnZ2VyKFwiaW5pdGlhbGl6ZWRcIilcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuc2V0dXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYiA9IHRoaXMudmlld3BvcnQoKSwgYyA9IHRoaXMub3B0aW9ucy5yZXNwb25zaXZlLCBkID0gLTEsIGUgPSBudWxsO1xuICAgICAgICAgICAgYyA/IChhLmVhY2goYywgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICBhIDw9IGIgJiYgYSA+IGQgJiYgKGQgPSBOdW1iZXIoYSkpXG4gICAgICAgICAgICB9KSwgZSA9IGEuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIGNbZF0pLCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUuc3RhZ2VQYWRkaW5nICYmIChlLnN0YWdlUGFkZGluZyA9IGUuc3RhZ2VQYWRkaW5nKCkpLCBkZWxldGUgZS5yZXNwb25zaXZlLCBlLnJlc3BvbnNpdmVDbGFzcyAmJiB0aGlzLiRlbGVtZW50LmF0dHIoXCJjbGFzc1wiLCB0aGlzLiRlbGVtZW50LmF0dHIoXCJjbGFzc1wiKS5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXCIgKyB0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZUNsYXNzICsgXCItKVxcXFxTK1xcXFxzXCIsIFwiZ1wiKSwgXCIkMVwiICsgZCkpKSA6IGUgPSBhLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zKSwgdGhpcy50cmlnZ2VyKFwiY2hhbmdlXCIsIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNldHRpbmdzXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksIHRoaXMuX2JyZWFrcG9pbnQgPSBkLCB0aGlzLnNldHRpbmdzID0gZSwgdGhpcy5pbnZhbGlkYXRlKFwic2V0dGluZ3NcIiksIHRoaXMudHJpZ2dlcihcImNoYW5nZWRcIiwge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2V0dGluZ3NcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0dGluZ3NcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5vcHRpb25zTG9naWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLmF1dG9XaWR0aCAmJiAodGhpcy5zZXR0aW5ncy5zdGFnZVBhZGRpbmcgPSAhMSwgdGhpcy5zZXR0aW5ncy5tZXJnZSA9ICExKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5wcmVwYXJlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHZhciBjID0gdGhpcy50cmlnZ2VyKFwicHJlcGFyZVwiLCB7Y29udGVudDogYn0pO1xuICAgICAgICAgICAgcmV0dXJuIGMuZGF0YSB8fCAoYy5kYXRhID0gYShcIjxcIiArIHRoaXMuc2V0dGluZ3MuaXRlbUVsZW1lbnQgKyBcIi8+XCIpLmFkZENsYXNzKHRoaXMub3B0aW9ucy5pdGVtQ2xhc3MpLmFwcGVuZChiKSksIHRoaXMudHJpZ2dlcihcInByZXBhcmVkXCIsIHtjb250ZW50OiBjLmRhdGF9KSwgYy5kYXRhXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGIgPSAwLCBjID0gdGhpcy5fcGlwZS5sZW5ndGgsIGQgPSBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbYV1cbiAgICAgICAgICAgIH0sIHRoaXMuX2ludmFsaWRhdGVkKSwgZSA9IHt9OyBiIDwgYzspICh0aGlzLl9pbnZhbGlkYXRlZC5hbGwgfHwgYS5ncmVwKHRoaXMuX3BpcGVbYl0uZmlsdGVyLCBkKS5sZW5ndGggPiAwKSAmJiB0aGlzLl9waXBlW2JdLnJ1bihlKSwgYisrO1xuICAgICAgICAgICAgdGhpcy5faW52YWxpZGF0ZWQgPSB7fSwgIXRoaXMuaXMoXCJ2YWxpZFwiKSAmJiB0aGlzLmVudGVyKFwidmFsaWRcIilcbiAgICAgICAgfSwgZS5wcm90b3R5cGUud2lkdGggPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgc3dpdGNoIChhID0gYSB8fCBlLldpZHRoLkRlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIGUuV2lkdGguSW5uZXI6XG4gICAgICAgICAgICAgICAgY2FzZSBlLldpZHRoLk91dGVyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoIC0gMiAqIHRoaXMuc2V0dGluZ3Muc3RhZ2VQYWRkaW5nICsgdGhpcy5zZXR0aW5ncy5tYXJnaW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuZW50ZXIoXCJyZWZyZXNoaW5nXCIpLCB0aGlzLnRyaWdnZXIoXCJyZWZyZXNoXCIpLCB0aGlzLnNldHVwKCksIHRoaXMub3B0aW9uc0xvZ2ljKCksIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLnJlZnJlc2hDbGFzcyksIHRoaXMudXBkYXRlKCksIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLnJlZnJlc2hDbGFzcyksIHRoaXMubGVhdmUoXCJyZWZyZXNoaW5nXCIpLCB0aGlzLnRyaWdnZXIoXCJyZWZyZXNoZWRcIilcbiAgICAgICAgfSwgZS5wcm90b3R5cGUub25UaHJvdHRsZWRSZXNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiLmNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZVRpbWVyKSwgdGhpcy5yZXNpemVUaW1lciA9IGIuc2V0VGltZW91dCh0aGlzLl9oYW5kbGVycy5vblJlc2l6ZSwgdGhpcy5zZXR0aW5ncy5yZXNwb25zaXZlUmVmcmVzaFJhdGUpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLm9uUmVzaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5faXRlbXMubGVuZ3RoICYmICh0aGlzLl93aWR0aCAhPT0gdGhpcy4kZWxlbWVudC53aWR0aCgpICYmICghIXRoaXMuJGVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSAmJiAodGhpcy5lbnRlcihcInJlc2l6aW5nXCIpLCB0aGlzLnRyaWdnZXIoXCJyZXNpemVcIikuaXNEZWZhdWx0UHJldmVudGVkKCkgPyAodGhpcy5sZWF2ZShcInJlc2l6aW5nXCIpLCAhMSkgOiAodGhpcy5pbnZhbGlkYXRlKFwid2lkdGhcIiksIHRoaXMucmVmcmVzaCgpLCB0aGlzLmxlYXZlKFwicmVzaXppbmdcIiksIHZvaWQgdGhpcy50cmlnZ2VyKFwicmVzaXplZFwiKSkpKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUucmVnaXN0ZXJFdmVudEhhbmRsZXJzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYS5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kc3RhZ2Uub24oYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kICsgXCIub3dsLmNvcmVcIiwgYS5wcm94eSh0aGlzLm9uVHJhbnNpdGlvbkVuZCwgdGhpcykpLCB0aGlzLnNldHRpbmdzLnJlc3BvbnNpdmUgIT09ICExICYmIHRoaXMub24oYiwgXCJyZXNpemVcIiwgdGhpcy5faGFuZGxlcnMub25UaHJvdHRsZWRSZXNpemUpLCB0aGlzLnNldHRpbmdzLm1vdXNlRHJhZyAmJiAodGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuZHJhZ0NsYXNzKSwgdGhpcy4kc3RhZ2Uub24oXCJtb3VzZWRvd24ub3dsLmNvcmVcIiwgYS5wcm94eSh0aGlzLm9uRHJhZ1N0YXJ0LCB0aGlzKSksIHRoaXMuJHN0YWdlLm9uKFwiZHJhZ3N0YXJ0Lm93bC5jb3JlIHNlbGVjdHN0YXJ0Lm93bC5jb3JlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gITFcbiAgICAgICAgICAgIH0pKSwgdGhpcy5zZXR0aW5ncy50b3VjaERyYWcgJiYgKHRoaXMuJHN0YWdlLm9uKFwidG91Y2hzdGFydC5vd2wuY29yZVwiLCBhLnByb3h5KHRoaXMub25EcmFnU3RhcnQsIHRoaXMpKSwgdGhpcy4kc3RhZ2Uub24oXCJ0b3VjaGNhbmNlbC5vd2wuY29yZVwiLCBhLnByb3h5KHRoaXMub25EcmFnRW5kLCB0aGlzKSkpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLm9uRHJhZ1N0YXJ0ID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHZhciBkID0gbnVsbDtcbiAgICAgICAgICAgIDMgIT09IGIud2hpY2ggJiYgKGEuc3VwcG9ydC50cmFuc2Zvcm0gPyAoZCA9IHRoaXMuJHN0YWdlLmNzcyhcInRyYW5zZm9ybVwiKS5yZXBsYWNlKC8uKlxcKHxcXCl8IC9nLCBcIlwiKS5zcGxpdChcIixcIiksIGQgPSB7XG4gICAgICAgICAgICAgICAgeDogZFsxNiA9PT0gZC5sZW5ndGggPyAxMiA6IDRdLFxuICAgICAgICAgICAgICAgIHk6IGRbMTYgPT09IGQubGVuZ3RoID8gMTMgOiA1XVxuICAgICAgICAgICAgfSkgOiAoZCA9IHRoaXMuJHN0YWdlLnBvc2l0aW9uKCksIGQgPSB7XG4gICAgICAgICAgICAgICAgeDogdGhpcy5zZXR0aW5ncy5ydGwgPyBkLmxlZnQgKyB0aGlzLiRzdGFnZS53aWR0aCgpIC0gdGhpcy53aWR0aCgpICsgdGhpcy5zZXR0aW5ncy5tYXJnaW4gOiBkLmxlZnQsXG4gICAgICAgICAgICAgICAgeTogZC50b3BcbiAgICAgICAgICAgIH0pLCB0aGlzLmlzKFwiYW5pbWF0aW5nXCIpICYmIChhLnN1cHBvcnQudHJhbnNmb3JtID8gdGhpcy5hbmltYXRlKGQueCkgOiB0aGlzLiRzdGFnZS5zdG9wKCksIHRoaXMuaW52YWxpZGF0ZShcInBvc2l0aW9uXCIpKSwgdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcyh0aGlzLm9wdGlvbnMuZ3JhYkNsYXNzLCBcIm1vdXNlZG93blwiID09PSBiLnR5cGUpLCB0aGlzLnNwZWVkKDApLCB0aGlzLl9kcmFnLnRpbWUgPSAobmV3IERhdGUpLmdldFRpbWUoKSwgdGhpcy5fZHJhZy50YXJnZXQgPSBhKGIudGFyZ2V0KSwgdGhpcy5fZHJhZy5zdGFnZS5zdGFydCA9IGQsIHRoaXMuX2RyYWcuc3RhZ2UuY3VycmVudCA9IGQsIHRoaXMuX2RyYWcucG9pbnRlciA9IHRoaXMucG9pbnRlcihiKSwgYShjKS5vbihcIm1vdXNldXAub3dsLmNvcmUgdG91Y2hlbmQub3dsLmNvcmVcIiwgYS5wcm94eSh0aGlzLm9uRHJhZ0VuZCwgdGhpcykpLCBhKGMpLm9uZShcIm1vdXNlbW92ZS5vd2wuY29yZSB0b3VjaG1vdmUub3dsLmNvcmVcIiwgYS5wcm94eShmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgICAgIHZhciBkID0gdGhpcy5kaWZmZXJlbmNlKHRoaXMuX2RyYWcucG9pbnRlciwgdGhpcy5wb2ludGVyKGIpKTtcbiAgICAgICAgICAgICAgICBhKGMpLm9uKFwibW91c2Vtb3ZlLm93bC5jb3JlIHRvdWNobW92ZS5vd2wuY29yZVwiLCBhLnByb3h5KHRoaXMub25EcmFnTW92ZSwgdGhpcykpLCBNYXRoLmFicyhkLngpIDwgTWF0aC5hYnMoZC55KSAmJiB0aGlzLmlzKFwidmFsaWRcIikgfHwgKGIucHJldmVudERlZmF1bHQoKSwgdGhpcy5lbnRlcihcImRyYWdnaW5nXCIpLCB0aGlzLnRyaWdnZXIoXCJkcmFnXCIpKVxuICAgICAgICAgICAgfSwgdGhpcykpKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5vbkRyYWdNb3ZlID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVsbCwgYyA9IG51bGwsIGQgPSBudWxsLCBlID0gdGhpcy5kaWZmZXJlbmNlKHRoaXMuX2RyYWcucG9pbnRlciwgdGhpcy5wb2ludGVyKGEpKSxcbiAgICAgICAgICAgICAgZiA9IHRoaXMuZGlmZmVyZW5jZSh0aGlzLl9kcmFnLnN0YWdlLnN0YXJ0LCBlKTtcbiAgICAgICAgICAgIHRoaXMuaXMoXCJkcmFnZ2luZ1wiKSAmJiAoYS5wcmV2ZW50RGVmYXVsdCgpLCB0aGlzLnNldHRpbmdzLmxvb3AgPyAoYiA9IHRoaXMuY29vcmRpbmF0ZXModGhpcy5taW5pbXVtKCkpLCBjID0gdGhpcy5jb29yZGluYXRlcyh0aGlzLm1heGltdW0oKSArIDEpIC0gYiwgZi54ID0gKChmLnggLSBiKSAlIGMgKyBjKSAlIGMgKyBiKSA6IChiID0gdGhpcy5zZXR0aW5ncy5ydGwgPyB0aGlzLmNvb3JkaW5hdGVzKHRoaXMubWF4aW11bSgpKSA6IHRoaXMuY29vcmRpbmF0ZXModGhpcy5taW5pbXVtKCkpLCBjID0gdGhpcy5zZXR0aW5ncy5ydGwgPyB0aGlzLmNvb3JkaW5hdGVzKHRoaXMubWluaW11bSgpKSA6IHRoaXMuY29vcmRpbmF0ZXModGhpcy5tYXhpbXVtKCkpLCBkID0gdGhpcy5zZXR0aW5ncy5wdWxsRHJhZyA/IC0xICogZS54IC8gNSA6IDAsIGYueCA9IE1hdGgubWF4KE1hdGgubWluKGYueCwgYiArIGQpLCBjICsgZCkpLCB0aGlzLl9kcmFnLnN0YWdlLmN1cnJlbnQgPSBmLCB0aGlzLmFuaW1hdGUoZi54KSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUub25EcmFnRW5kID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHZhciBkID0gdGhpcy5kaWZmZXJlbmNlKHRoaXMuX2RyYWcucG9pbnRlciwgdGhpcy5wb2ludGVyKGIpKSwgZSA9IHRoaXMuX2RyYWcuc3RhZ2UuY3VycmVudCxcbiAgICAgICAgICAgICAgZiA9IGQueCA+IDAgXiB0aGlzLnNldHRpbmdzLnJ0bCA/IFwibGVmdFwiIDogXCJyaWdodFwiO1xuICAgICAgICAgICAgYShjKS5vZmYoXCIub3dsLmNvcmVcIiksIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmdyYWJDbGFzcyksICgwICE9PSBkLnggJiYgdGhpcy5pcyhcImRyYWdnaW5nXCIpIHx8ICF0aGlzLmlzKFwidmFsaWRcIikpICYmICh0aGlzLnNwZWVkKHRoaXMuc2V0dGluZ3MuZHJhZ0VuZFNwZWVkIHx8IHRoaXMuc2V0dGluZ3Muc21hcnRTcGVlZCksIHRoaXMuY3VycmVudCh0aGlzLmNsb3Nlc3QoZS54LCAwICE9PSBkLnggPyBmIDogdGhpcy5fZHJhZy5kaXJlY3Rpb24pKSwgdGhpcy5pbnZhbGlkYXRlKFwicG9zaXRpb25cIiksIHRoaXMudXBkYXRlKCksIHRoaXMuX2RyYWcuZGlyZWN0aW9uID0gZiwgKE1hdGguYWJzKGQueCkgPiAzIHx8IChuZXcgRGF0ZSkuZ2V0VGltZSgpIC0gdGhpcy5fZHJhZy50aW1lID4gMzAwKSAmJiB0aGlzLl9kcmFnLnRhcmdldC5vbmUoXCJjbGljay5vd2wuY29yZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICExXG4gICAgICAgICAgICB9KSksIHRoaXMuaXMoXCJkcmFnZ2luZ1wiKSAmJiAodGhpcy5sZWF2ZShcImRyYWdnaW5nXCIpLCB0aGlzLnRyaWdnZXIoXCJkcmFnZ2VkXCIpKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5jbG9zZXN0ID0gZnVuY3Rpb24gKGIsIGMpIHtcbiAgICAgICAgICAgIHZhciBkID0gLTEsIGUgPSAzMCwgZiA9IHRoaXMud2lkdGgoKSwgZyA9IHRoaXMuY29vcmRpbmF0ZXMoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmZyZWVEcmFnIHx8IGEuZWFjaChnLCBhLnByb3h5KGZ1bmN0aW9uIChhLCBoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibGVmdFwiID09PSBjICYmIGIgPiBoIC0gZSAmJiBiIDwgaCArIGUgPyBkID0gYSA6IFwicmlnaHRcIiA9PT0gYyAmJiBiID4gaCAtIGYgLSBlICYmIGIgPCBoIC0gZiArIGUgPyBkID0gYSArIDEgOiB0aGlzLm9wKGIsIFwiPFwiLCBoKSAmJiB0aGlzLm9wKGIsIFwiPlwiLCBnW2EgKyAxXSB8fCBoIC0gZikgJiYgKGQgPSBcImxlZnRcIiA9PT0gYyA/IGEgKyAxIDogYSksIGQgPT09IC0xXG4gICAgICAgICAgICB9LCB0aGlzKSksIHRoaXMuc2V0dGluZ3MubG9vcCB8fCAodGhpcy5vcChiLCBcIj5cIiwgZ1t0aGlzLm1pbmltdW0oKV0pID8gZCA9IGIgPSB0aGlzLm1pbmltdW0oKSA6IHRoaXMub3AoYiwgXCI8XCIsIGdbdGhpcy5tYXhpbXVtKCldKSAmJiAoZCA9IGIgPSB0aGlzLm1heGltdW0oKSkpLCBkXG4gICAgICAgIH0sIGUucHJvdG90eXBlLmFuaW1hdGUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgdmFyIGMgPSB0aGlzLnNwZWVkKCkgPiAwO1xuICAgICAgICAgICAgdGhpcy5pcyhcImFuaW1hdGluZ1wiKSAmJiB0aGlzLm9uVHJhbnNpdGlvbkVuZCgpLCBjICYmICh0aGlzLmVudGVyKFwiYW5pbWF0aW5nXCIpLCB0aGlzLnRyaWdnZXIoXCJ0cmFuc2xhdGVcIikpLCBhLnN1cHBvcnQudHJhbnNmb3JtM2QgJiYgYS5zdXBwb3J0LnRyYW5zaXRpb24gPyB0aGlzLiRzdGFnZS5jc3Moe1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUzZChcIiArIGIgKyBcInB4LDBweCwwcHgpXCIsXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogdGhpcy5zcGVlZCgpIC8gMWUzICsgXCJzXCJcbiAgICAgICAgICAgIH0pIDogYyA/IHRoaXMuJHN0YWdlLmFuaW1hdGUoe2xlZnQ6IGIgKyBcInB4XCJ9LCB0aGlzLnNwZWVkKCksIHRoaXMuc2V0dGluZ3MuZmFsbGJhY2tFYXNpbmcsIGEucHJveHkodGhpcy5vblRyYW5zaXRpb25FbmQsIHRoaXMpKSA6IHRoaXMuJHN0YWdlLmNzcyh7bGVmdDogYiArIFwicHhcIn0pXG4gICAgICAgIH0sIGUucHJvdG90eXBlLmlzID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZXMuY3VycmVudFthXSAmJiB0aGlzLl9zdGF0ZXMuY3VycmVudFthXSA+IDBcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICBpZiAoYSA9PT0gZCkgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gICAgICAgICAgICBpZiAoMCA9PT0gdGhpcy5faXRlbXMubGVuZ3RoKSByZXR1cm4gZDtcbiAgICAgICAgICAgIGlmIChhID0gdGhpcy5ub3JtYWxpemUoYSksIHRoaXMuX2N1cnJlbnQgIT09IGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgYiA9IHRoaXMudHJpZ2dlcihcImNoYW5nZVwiLCB7cHJvcGVydHk6IHtuYW1lOiBcInBvc2l0aW9uXCIsIHZhbHVlOiBhfX0pO1xuICAgICAgICAgICAgICAgIGIuZGF0YSAhPT0gZCAmJiAoYSA9IHRoaXMubm9ybWFsaXplKGIuZGF0YSkpLCB0aGlzLl9jdXJyZW50ID0gYSwgdGhpcy5pbnZhbGlkYXRlKFwicG9zaXRpb25cIiksIHRoaXMudHJpZ2dlcihcImNoYW5nZWRcIiwge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJwb3NpdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2N1cnJlbnRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFxuICAgICAgICB9LCBlLnByb3RvdHlwZS5pbnZhbGlkYXRlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiID09PSBhLnR5cGUoYikgJiYgKHRoaXMuX2ludmFsaWRhdGVkW2JdID0gITAsIHRoaXMuaXMoXCJ2YWxpZFwiKSAmJiB0aGlzLmxlYXZlKFwidmFsaWRcIikpLCBhLm1hcCh0aGlzLl9pbnZhbGlkYXRlZCwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgYSA9IHRoaXMubm9ybWFsaXplKGEpLCBhICE9PSBkICYmICh0aGlzLl9zcGVlZCA9IDAsIHRoaXMuX2N1cnJlbnQgPSBhLCB0aGlzLnN1cHByZXNzKFtcInRyYW5zbGF0ZVwiLCBcInRyYW5zbGF0ZWRcIl0pLCB0aGlzLmFuaW1hdGUodGhpcy5jb29yZGluYXRlcyhhKSksIHRoaXMucmVsZWFzZShbXCJ0cmFuc2xhdGVcIiwgXCJ0cmFuc2xhdGVkXCJdKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUubm9ybWFsaXplID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHZhciBjID0gdGhpcy5faXRlbXMubGVuZ3RoLCBlID0gYiA/IDAgOiB0aGlzLl9jbG9uZXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzTnVtZXJpYyhhKSB8fCBjIDwgMSA/IGEgPSBkIDogKGEgPCAwIHx8IGEgPj0gYyArIGUpICYmIChhID0gKChhIC0gZSAvIDIpICUgYyArIGMpICUgYyArIGUgLyAyKSwgYVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5yZWxhdGl2ZSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICByZXR1cm4gYSAtPSB0aGlzLl9jbG9uZXMubGVuZ3RoIC8gMiwgdGhpcy5ub3JtYWxpemUoYSwgITApXG4gICAgICAgIH0sIGUucHJvdG90eXBlLm1heGltdW0gPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgdmFyIGIsIGMsIGQsIGUgPSB0aGlzLnNldHRpbmdzLCBmID0gdGhpcy5fY29vcmRpbmF0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGUubG9vcCkgZiA9IHRoaXMuX2Nsb25lcy5sZW5ndGggLyAyICsgdGhpcy5faXRlbXMubGVuZ3RoIC0gMTsgZWxzZSBpZiAoZS5hdXRvV2lkdGggfHwgZS5tZXJnZSkge1xuICAgICAgICAgICAgICAgIGZvciAoYiA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgYyA9IHRoaXMuX2l0ZW1zWy0tYl0ud2lkdGgoKSwgZCA9IHRoaXMuJGVsZW1lbnQud2lkdGgoKTsgYi0tICYmIChjICs9IHRoaXMuX2l0ZW1zW2JdLndpZHRoKCkgKyB0aGlzLnNldHRpbmdzLm1hcmdpbiwgIShjID4gZCkpOykgO1xuICAgICAgICAgICAgICAgIGYgPSBiICsgMVxuICAgICAgICAgICAgfSBlbHNlIGYgPSBlLmNlbnRlciA/IHRoaXMuX2l0ZW1zLmxlbmd0aCAtIDEgOiB0aGlzLl9pdGVtcy5sZW5ndGggLSBlLml0ZW1zO1xuICAgICAgICAgICAgcmV0dXJuIGEgJiYgKGYgLT0gdGhpcy5fY2xvbmVzLmxlbmd0aCAvIDIpLCBNYXRoLm1heChmLCAwKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5taW5pbXVtID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIHJldHVybiBhID8gMCA6IHRoaXMuX2Nsb25lcy5sZW5ndGggLyAyXG4gICAgICAgIH0sIGUucHJvdG90eXBlLml0ZW1zID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIHJldHVybiBhID09PSBkID8gdGhpcy5faXRlbXMuc2xpY2UoKSA6IChhID0gdGhpcy5ub3JtYWxpemUoYSwgITApLCB0aGlzLl9pdGVtc1thXSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUubWVyZ2VycyA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICByZXR1cm4gYSA9PT0gZCA/IHRoaXMuX21lcmdlcnMuc2xpY2UoKSA6IChhID0gdGhpcy5ub3JtYWxpemUoYSwgITApLCB0aGlzLl9tZXJnZXJzW2FdKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5jbG9uZXMgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgdmFyIGMgPSB0aGlzLl9jbG9uZXMubGVuZ3RoIC8gMiwgZSA9IGMgKyB0aGlzLl9pdGVtcy5sZW5ndGgsIGYgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhICUgMiA9PT0gMCA/IGUgKyBhIC8gMiA6IGMgLSAoYSArIDEpIC8gMlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBiID09PSBkID8gYS5tYXAodGhpcy5fY2xvbmVzLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmKGIpXG4gICAgICAgICAgICB9KSA6IGEubWFwKHRoaXMuX2Nsb25lcywgZnVuY3Rpb24gKGEsIGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYSA9PT0gYiA/IGYoYykgOiBudWxsXG4gICAgICAgICAgICB9KVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5zcGVlZCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICByZXR1cm4gYSAhPT0gZCAmJiAodGhpcy5fc3BlZWQgPSBhKSwgdGhpcy5fc3BlZWRcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuY29vcmRpbmF0ZXMgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgdmFyIGMsIGUgPSAxLCBmID0gYiAtIDE7XG4gICAgICAgICAgICByZXR1cm4gYiA9PT0gZCA/IGEubWFwKHRoaXMuX2Nvb3JkaW5hdGVzLCBhLnByb3h5KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29vcmRpbmF0ZXMoYilcbiAgICAgICAgICAgIH0sIHRoaXMpKSA6ICh0aGlzLnNldHRpbmdzLmNlbnRlciA/ICh0aGlzLnNldHRpbmdzLnJ0bCAmJiAoZSA9IC0xLCBmID0gYiArIDEpLCBjID0gdGhpcy5fY29vcmRpbmF0ZXNbYl0sIGMgKz0gKHRoaXMud2lkdGgoKSAtIGMgKyAodGhpcy5fY29vcmRpbmF0ZXNbZl0gfHwgMCkpIC8gMiAqIGUpIDogYyA9IHRoaXMuX2Nvb3JkaW5hdGVzW2ZdIHx8IDAsIGMgPSBNYXRoLmNlaWwoYykpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLmR1cmF0aW9uID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgICAgIHJldHVybiAwID09PSBjID8gMCA6IE1hdGgubWluKE1hdGgubWF4KE1hdGguYWJzKGIgLSBhKSwgMSksIDYpICogTWF0aC5hYnMoYyB8fCB0aGlzLnNldHRpbmdzLnNtYXJ0U3BlZWQpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnRvID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHZhciBjID0gdGhpcy5jdXJyZW50KCksIGQgPSBudWxsLCBlID0gYSAtIHRoaXMucmVsYXRpdmUoYyksIGYgPSAoZSA+IDApIC0gKGUgPCAwKSwgZyA9IHRoaXMuX2l0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgaCA9IHRoaXMubWluaW11bSgpLCBpID0gdGhpcy5tYXhpbXVtKCk7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLmxvb3AgPyAoIXRoaXMuc2V0dGluZ3MucmV3aW5kICYmIE1hdGguYWJzKGUpID4gZyAvIDIgJiYgKGUgKz0gZiAqIC0xICogZyksIGEgPSBjICsgZSwgZCA9ICgoYSAtIGgpICUgZyArIGcpICUgZyArIGgsIGQgIT09IGEgJiYgZCAtIGUgPD0gaSAmJiBkIC0gZSA+IDAgJiYgKGMgPSBkIC0gZSwgYSA9IGQsIHRoaXMucmVzZXQoYykpKSA6IHRoaXMuc2V0dGluZ3MucmV3aW5kID8gKGkgKz0gMSwgYSA9IChhICUgaSArIGkpICUgaSkgOiBhID0gTWF0aC5tYXgoaCwgTWF0aC5taW4oaSwgYSkpLCB0aGlzLnNwZWVkKHRoaXMuZHVyYXRpb24oYywgYSwgYikpLCB0aGlzLmN1cnJlbnQoYSksIHRoaXMuJGVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSAmJiB0aGlzLnVwZGF0ZSgpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgYSA9IGEgfHwgITEsIHRoaXMudG8odGhpcy5yZWxhdGl2ZSh0aGlzLmN1cnJlbnQoKSkgKyAxLCBhKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5wcmV2ID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIGEgPSBhIHx8ICExLCB0aGlzLnRvKHRoaXMucmVsYXRpdmUodGhpcy5jdXJyZW50KCkpIC0gMSwgYSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUub25UcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIGlmIChhICE9PSBkICYmIChhLnN0b3BQcm9wYWdhdGlvbigpLCAoYS50YXJnZXQgfHwgYS5zcmNFbGVtZW50IHx8IGEub3JpZ2luYWxUYXJnZXQpICE9PSB0aGlzLiRzdGFnZS5nZXQoMCkpKSByZXR1cm4gITE7XG4gICAgICAgICAgICB0aGlzLmxlYXZlKFwiYW5pbWF0aW5nXCIpLCB0aGlzLnRyaWdnZXIoXCJ0cmFuc2xhdGVkXCIpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnZpZXdwb3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGQ7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJlc3BvbnNpdmVCYXNlRWxlbWVudCAhPT0gYiA/IGQgPSBhKHRoaXMub3B0aW9ucy5yZXNwb25zaXZlQmFzZUVsZW1lbnQpLndpZHRoKCkgOiBiLmlubmVyV2lkdGggPyBkID0gYi5pbm5lcldpZHRoIDogYy5kb2N1bWVudEVsZW1lbnQgJiYgYy5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggPyBkID0gYy5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggOiBjb25zb2xlLndhcm4oXCJDYW4gbm90IGRldGVjdCB2aWV3cG9ydCB3aWR0aC5cIiksIGRcbiAgICAgICAgfSwgZS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICB0aGlzLiRzdGFnZS5lbXB0eSgpLCB0aGlzLl9pdGVtcyA9IFtdLCBiICYmIChiID0gYiBpbnN0YW5jZW9mIGpRdWVyeSA/IGIgOiBhKGIpKSwgdGhpcy5zZXR0aW5ncy5uZXN0ZWRJdGVtU2VsZWN0b3IgJiYgKGIgPSBiLmZpbmQoXCIuXCIgKyB0aGlzLnNldHRpbmdzLm5lc3RlZEl0ZW1TZWxlY3RvcikpLCBiLmZpbHRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDEgPT09IHRoaXMubm9kZVR5cGVcbiAgICAgICAgICAgIH0pLmVhY2goYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIGIgPSB0aGlzLnByZXBhcmUoYiksIHRoaXMuJHN0YWdlLmFwcGVuZChiKSwgdGhpcy5faXRlbXMucHVzaChiKSwgdGhpcy5fbWVyZ2Vycy5wdXNoKDEgKiBiLmZpbmQoXCJbZGF0YS1tZXJnZV1cIikuYWRkQmFjayhcIltkYXRhLW1lcmdlXVwiKS5hdHRyKFwiZGF0YS1tZXJnZVwiKSB8fCAxKVxuICAgICAgICAgICAgfSwgdGhpcykpLCB0aGlzLnJlc2V0KHRoaXMuaXNOdW1lcmljKHRoaXMuc2V0dGluZ3Muc3RhcnRQb3NpdGlvbikgPyB0aGlzLnNldHRpbmdzLnN0YXJ0UG9zaXRpb24gOiAwKSwgdGhpcy5pbnZhbGlkYXRlKFwiaXRlbXNcIilcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGIsIGMpIHtcbiAgICAgICAgICAgIHZhciBlID0gdGhpcy5yZWxhdGl2ZSh0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICAgIGMgPSBjID09PSBkID8gdGhpcy5faXRlbXMubGVuZ3RoIDogdGhpcy5ub3JtYWxpemUoYywgITApLCBiID0gYiBpbnN0YW5jZW9mIGpRdWVyeSA/IGIgOiBhKGIpLCB0aGlzLnRyaWdnZXIoXCJhZGRcIiwge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGIsXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGNcbiAgICAgICAgICAgIH0pLCBiID0gdGhpcy5wcmVwYXJlKGIpLCAwID09PSB0aGlzLl9pdGVtcy5sZW5ndGggfHwgYyA9PT0gdGhpcy5faXRlbXMubGVuZ3RoID8gKDAgPT09IHRoaXMuX2l0ZW1zLmxlbmd0aCAmJiB0aGlzLiRzdGFnZS5hcHBlbmQoYiksIDAgIT09IHRoaXMuX2l0ZW1zLmxlbmd0aCAmJiB0aGlzLl9pdGVtc1tjIC0gMV0uYWZ0ZXIoYiksIHRoaXMuX2l0ZW1zLnB1c2goYiksIHRoaXMuX21lcmdlcnMucHVzaCgxICogYi5maW5kKFwiW2RhdGEtbWVyZ2VdXCIpLmFkZEJhY2soXCJbZGF0YS1tZXJnZV1cIikuYXR0cihcImRhdGEtbWVyZ2VcIikgfHwgMSkpIDogKHRoaXMuX2l0ZW1zW2NdLmJlZm9yZShiKSwgdGhpcy5faXRlbXMuc3BsaWNlKGMsIDAsIGIpLCB0aGlzLl9tZXJnZXJzLnNwbGljZShjLCAwLCAxICogYi5maW5kKFwiW2RhdGEtbWVyZ2VdXCIpLmFkZEJhY2soXCJbZGF0YS1tZXJnZV1cIikuYXR0cihcImRhdGEtbWVyZ2VcIikgfHwgMSkpLCB0aGlzLl9pdGVtc1tlXSAmJiB0aGlzLnJlc2V0KHRoaXMuX2l0ZW1zW2VdLmluZGV4KCkpLCB0aGlzLmludmFsaWRhdGUoXCJpdGVtc1wiKSwgdGhpcy50cmlnZ2VyKFwiYWRkZWRcIiwge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGIsXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGNcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICBhID0gdGhpcy5ub3JtYWxpemUoYSwgITApLCBhICE9PSBkICYmICh0aGlzLnRyaWdnZXIoXCJyZW1vdmVcIiwge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuX2l0ZW1zW2FdLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhXG4gICAgICAgICAgICB9KSwgdGhpcy5faXRlbXNbYV0ucmVtb3ZlKCksIHRoaXMuX2l0ZW1zLnNwbGljZShhLCAxKSwgdGhpcy5fbWVyZ2Vycy5zcGxpY2UoYSwgMSksIHRoaXMuaW52YWxpZGF0ZShcIml0ZW1zXCIpLCB0aGlzLnRyaWdnZXIoXCJyZW1vdmVkXCIsIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBudWxsLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUucHJlbG9hZEF1dG9XaWR0aEltYWdlcyA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICBiLmVhY2goYS5wcm94eShmdW5jdGlvbiAoYiwgYykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50ZXIoXCJwcmUtbG9hZGluZ1wiKSwgYyA9IGEoYyksIGEobmV3IEltYWdlKS5vbmUoXCJsb2FkXCIsIGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYy5hdHRyKFwic3JjXCIsIGEudGFyZ2V0LnNyYyksIGMuY3NzKFwib3BhY2l0eVwiLCAxKSwgdGhpcy5sZWF2ZShcInByZS1sb2FkaW5nXCIpLCAhdGhpcy5pcyhcInByZS1sb2FkaW5nXCIpICYmICF0aGlzLmlzKFwiaW5pdGlhbGl6aW5nXCIpICYmIHRoaXMucmVmcmVzaCgpXG4gICAgICAgICAgICAgICAgfSwgdGhpcykpLmF0dHIoXCJzcmNcIiwgYy5hdHRyKFwic3JjXCIpIHx8IGMuYXR0cihcImRhdGEtc3JjXCIpIHx8IGMuYXR0cihcImRhdGEtc3JjLXJldGluYVwiKSlcbiAgICAgICAgICAgIH0sIHRoaXMpKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5vZmYoXCIub3dsLmNvcmVcIiksIHRoaXMuJHN0YWdlLm9mZihcIi5vd2wuY29yZVwiKSwgYShjKS5vZmYoXCIub3dsLmNvcmVcIiksIHRoaXMuc2V0dGluZ3MucmVzcG9uc2l2ZSAhPT0gITEgJiYgKGIuY2xlYXJUaW1lb3V0KHRoaXMucmVzaXplVGltZXIpLCB0aGlzLm9mZihiLCBcInJlc2l6ZVwiLCB0aGlzLl9oYW5kbGVycy5vblRocm90dGxlZFJlc2l6ZSkpO1xuICAgICAgICAgICAgZm9yICh2YXIgZCBpbiB0aGlzLl9wbHVnaW5zKSB0aGlzLl9wbHVnaW5zW2RdLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuJHN0YWdlLmNoaWxkcmVuKFwiLmNsb25lZFwiKS5yZW1vdmUoKSwgdGhpcy4kc3RhZ2UudW53cmFwKCksIHRoaXMuJHN0YWdlLmNoaWxkcmVuKCkuY29udGVudHMoKS51bndyYXAoKSwgdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKS51bndyYXAoKSwgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMucmVmcmVzaENsYXNzKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMubG9hZGluZ0NsYXNzKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMubG9hZGVkQ2xhc3MpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ydGxDbGFzcykucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmRyYWdDbGFzcykucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmdyYWJDbGFzcykuYXR0cihcImNsYXNzXCIsIHRoaXMuJGVsZW1lbnQuYXR0cihcImNsYXNzXCIpLnJlcGxhY2UobmV3IFJlZ0V4cCh0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZUNsYXNzICsgXCItXFxcXFMrXFxcXHNcIiwgXCJnXCIpLCBcIlwiKSkucmVtb3ZlRGF0YShcIm93bC5jYXJvdXNlbFwiKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5vcCA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgICAgICB2YXIgZCA9IHRoaXMuc2V0dGluZ3MucnRsO1xuICAgICAgICAgICAgc3dpdGNoIChiKSB7XG4gICAgICAgICAgICAgICAgY2FzZVwiPFwiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZCA/IGEgPiBjIDogYSA8IGM7XG4gICAgICAgICAgICAgICAgY2FzZVwiPlwiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZCA/IGEgPCBjIDogYSA+IGM7XG4gICAgICAgICAgICAgICAgY2FzZVwiPj1cIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQgPyBhIDw9IGMgOiBhID49IGM7XG4gICAgICAgICAgICAgICAgY2FzZVwiPD1cIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQgPyBhID49IGMgOiBhIDw9IGNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgYS5hZGRFdmVudExpc3RlbmVyID8gYS5hZGRFdmVudExpc3RlbmVyKGIsIGMsIGQpIDogYS5hdHRhY2hFdmVudCAmJiBhLmF0dGFjaEV2ZW50KFwib25cIiArIGIsIGMpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICBhLnJlbW92ZUV2ZW50TGlzdGVuZXIgPyBhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYiwgYywgZCkgOiBhLmRldGFjaEV2ZW50ICYmIGEuZGV0YWNoRXZlbnQoXCJvblwiICsgYiwgYylcbiAgICAgICAgfSwgZS5wcm90b3R5cGUudHJpZ2dlciA9IGZ1bmN0aW9uIChiLCBjLCBkLCBmLCBnKSB7XG4gICAgICAgICAgICB2YXIgaCA9IHtpdGVtOiB7Y291bnQ6IHRoaXMuX2l0ZW1zLmxlbmd0aCwgaW5kZXg6IHRoaXMuY3VycmVudCgpfX0sXG4gICAgICAgICAgICAgIGkgPSBhLmNhbWVsQ2FzZShhLmdyZXAoW1wib25cIiwgYiwgZF0sIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYVxuICAgICAgICAgICAgICB9KS5qb2luKFwiLVwiKS50b0xvd2VyQ2FzZSgpKSxcbiAgICAgICAgICAgICAgaiA9IGEuRXZlbnQoW2IsIFwib3dsXCIsIGQgfHwgXCJjYXJvdXNlbFwiXS5qb2luKFwiLlwiKS50b0xvd2VyQ2FzZSgpLCBhLmV4dGVuZCh7cmVsYXRlZFRhcmdldDogdGhpc30sIGgsIGMpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdXByZXNzW2JdIHx8IChhLmVhY2godGhpcy5fcGx1Z2lucywgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICBiLm9uVHJpZ2dlciAmJiBiLm9uVHJpZ2dlcihqKVxuICAgICAgICAgICAgfSksIHRoaXMucmVnaXN0ZXIoe1xuICAgICAgICAgICAgICAgIHR5cGU6IGUuVHlwZS5FdmVudCxcbiAgICAgICAgICAgICAgICBuYW1lOiBiXG4gICAgICAgICAgICB9KSwgdGhpcy4kZWxlbWVudC50cmlnZ2VyKGopLCB0aGlzLnNldHRpbmdzICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdGhpcy5zZXR0aW5nc1tpXSAmJiB0aGlzLnNldHRpbmdzW2ldLmNhbGwodGhpcywgaikpLCBqXG4gICAgICAgIH0sIGUucHJvdG90eXBlLmVudGVyID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIGEuZWFjaChbYl0uY29uY2F0KHRoaXMuX3N0YXRlcy50YWdzW2JdIHx8IFtdKSwgYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlcy5jdXJyZW50W2JdID09PSBkICYmICh0aGlzLl9zdGF0ZXMuY3VycmVudFtiXSA9IDApLCB0aGlzLl9zdGF0ZXMuY3VycmVudFtiXSsrXG4gICAgICAgICAgICB9LCB0aGlzKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUubGVhdmUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgYS5lYWNoKFtiXS5jb25jYXQodGhpcy5fc3RhdGVzLnRhZ3NbYl0gfHwgW10pLCBhLnByb3h5KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVzLmN1cnJlbnRbYl0tLVxuICAgICAgICAgICAgfSwgdGhpcykpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIGlmIChiLnR5cGUgPT09IGUuVHlwZS5FdmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChhLmV2ZW50LnNwZWNpYWxbYi5uYW1lXSB8fCAoYS5ldmVudC5zcGVjaWFsW2IubmFtZV0gPSB7fSksICFhLmV2ZW50LnNwZWNpYWxbYi5uYW1lXS5vd2wpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBhLmV2ZW50LnNwZWNpYWxbYi5uYW1lXS5fZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgICAgYS5ldmVudC5zcGVjaWFsW2IubmFtZV0uX2RlZmF1bHQgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFjIHx8ICFjLmFwcGx5IHx8IGEubmFtZXNwYWNlICYmIGEubmFtZXNwYWNlLmluZGV4T2YoXCJvd2xcIikgIT09IC0xID8gYS5uYW1lc3BhY2UgJiYgYS5uYW1lc3BhY2UuaW5kZXhPZihcIm93bFwiKSA+IC0xIDogYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICAgICAgICAgIH0sIGEuZXZlbnQuc3BlY2lhbFtiLm5hbWVdLm93bCA9ICEwXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGIudHlwZSA9PT0gZS5UeXBlLlN0YXRlICYmICh0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdID8gdGhpcy5fc3RhdGVzLnRhZ3NbYi5uYW1lXSA9IHRoaXMuX3N0YXRlcy50YWdzW2IubmFtZV0uY29uY2F0KGIudGFncykgOiB0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdID0gYi50YWdzLCB0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdID0gYS5ncmVwKHRoaXMuX3N0YXRlcy50YWdzW2IubmFtZV0sIGEucHJveHkoZnVuY3Rpb24gKGMsIGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5pbkFycmF5KGMsIHRoaXMuX3N0YXRlcy50YWdzW2IubmFtZV0pID09PSBkXG4gICAgICAgICAgICB9LCB0aGlzKSkpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnN1cHByZXNzID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIGEuZWFjaChiLCBhLnByb3h5KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3VwcmVzc1tiXSA9ICEwXG4gICAgICAgICAgICB9LCB0aGlzKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICBhLmVhY2goYiwgYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zdXByZXNzW2JdXG4gICAgICAgICAgICB9LCB0aGlzKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUucG9pbnRlciA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICB2YXIgYyA9IHt4OiBudWxsLCB5OiBudWxsfTtcbiAgICAgICAgICAgIHJldHVybiBhID0gYS5vcmlnaW5hbEV2ZW50IHx8IGEgfHwgYi5ldmVudCwgYSA9IGEudG91Y2hlcyAmJiBhLnRvdWNoZXMubGVuZ3RoID8gYS50b3VjaGVzWzBdIDogYS5jaGFuZ2VkVG91Y2hlcyAmJiBhLmNoYW5nZWRUb3VjaGVzLmxlbmd0aCA/IGEuY2hhbmdlZFRvdWNoZXNbMF0gOiBhLCBhLnBhZ2VYID8gKGMueCA9IGEucGFnZVgsIGMueSA9IGEucGFnZVkpIDogKGMueCA9IGEuY2xpZW50WCwgYy55ID0gYS5jbGllbnRZKSwgY1xuICAgICAgICB9LCBlLnByb3RvdHlwZS5pc051bWVyaWMgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KGEpKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5kaWZmZXJlbmNlID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiB7eDogYS54IC0gYi54LCB5OiBhLnkgLSBiLnl9XG4gICAgICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgdmFyIGMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBhKHRoaXMpLCBmID0gZC5kYXRhKFwib3dsLmNhcm91c2VsXCIpO1xuICAgICAgICAgICAgICAgIGYgfHwgKGYgPSBuZXcgZSh0aGlzLCBcIm9iamVjdFwiID09IHR5cGVvZiBiICYmIGIpLCBkLmRhdGEoXCJvd2wuY2Fyb3VzZWxcIiwgZiksIGEuZWFjaChbXCJuZXh0XCIsIFwicHJldlwiLCBcInRvXCIsIFwiZGVzdHJveVwiLCBcInJlZnJlc2hcIiwgXCJyZXBsYWNlXCIsIFwiYWRkXCIsIFwicmVtb3ZlXCJdLCBmdW5jdGlvbiAoYiwgYykge1xuICAgICAgICAgICAgICAgICAgICBmLnJlZ2lzdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGUuVHlwZS5FdmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGNcbiAgICAgICAgICAgICAgICAgICAgfSksIGYuJGVsZW1lbnQub24oYyArIFwiLm93bC5jYXJvdXNlbC5jb3JlXCIsIGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIGEucmVsYXRlZFRhcmdldCAhPT0gdGhpcyAmJiAodGhpcy5zdXBwcmVzcyhbY10pLCBmW2NdLmFwcGx5KHRoaXMsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSksIHRoaXMucmVsZWFzZShbY10pKVxuICAgICAgICAgICAgICAgICAgICB9LCBmKSlcbiAgICAgICAgICAgICAgICB9KSksIFwic3RyaW5nXCIgPT0gdHlwZW9mIGIgJiYgXCJfXCIgIT09IGIuY2hhckF0KDApICYmIGZbYl0uYXBwbHkoZiwgYylcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IgPSBlXG4gICAgfSh3aW5kb3cuWmVwdG8gfHwgd2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCksIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgIHZhciBlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvcmUgPSBiLCB0aGlzLl9pbnRlcnZhbCA9IG51bGwsIHRoaXMuX3Zpc2libGUgPSBudWxsLCB0aGlzLl9oYW5kbGVycyA9IHtcbiAgICAgICAgICAgICAgICBcImluaXRpYWxpemVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b1JlZnJlc2ggJiYgdGhpcy53YXRjaCgpXG4gICAgICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICAgIH0sIHRoaXMuX2NvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLl9jb3JlLm9wdGlvbnMpLCB0aGlzLl9jb3JlLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKVxuICAgICAgICB9O1xuICAgICAgICBlLkRlZmF1bHRzID0ge2F1dG9SZWZyZXNoOiAhMCwgYXV0b1JlZnJlc2hJbnRlcnZhbDogNTAwfSwgZS5wcm90b3R5cGUud2F0Y2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbCB8fCAodGhpcy5fdmlzaWJsZSA9IHRoaXMuX2NvcmUuJGVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSwgdGhpcy5faW50ZXJ2YWwgPSBiLnNldEludGVydmFsKGEucHJveHkodGhpcy5yZWZyZXNoLCB0aGlzKSwgdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvUmVmcmVzaEludGVydmFsKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvcmUuJGVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSAhPT0gdGhpcy5fdmlzaWJsZSAmJiAodGhpcy5fdmlzaWJsZSA9ICF0aGlzLl92aXNpYmxlLCB0aGlzLl9jb3JlLiRlbGVtZW50LnRvZ2dsZUNsYXNzKFwic2J5LW93bC1oaWRkZW5cIiwgIXRoaXMuX3Zpc2libGUpLCB0aGlzLl92aXNpYmxlICYmIHRoaXMuX2NvcmUuaW52YWxpZGF0ZShcIndpZHRoXCIpICYmIHRoaXMuX2NvcmUucmVmcmVzaCgpKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGEsIGM7XG4gICAgICAgICAgICBiLmNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgICAgICAgICAgZm9yIChhIGluIHRoaXMuX2hhbmRsZXJzKSB0aGlzLl9jb3JlLiRlbGVtZW50Lm9mZihhLCB0aGlzLl9oYW5kbGVyc1thXSk7XG4gICAgICAgICAgICBmb3IgKGMgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdGhpc1tjXSAmJiAodGhpc1tjXSA9IG51bGwpXG4gICAgICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5BdXRvUmVmcmVzaCA9IGVcbiAgICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgdmFyIGUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgdGhpcy5fY29yZSA9IGIsIHRoaXMuX2xvYWRlZCA9IFtdLCB0aGlzLl9oYW5kbGVycyA9IHtcbiAgICAgICAgICAgICAgICBcImluaXRpYWxpemVkLm93bC5jYXJvdXNlbCBjaGFuZ2Uub3dsLmNhcm91c2VsIHJlc2l6ZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGIubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5sYXp5TG9hZCAmJiAoYi5wcm9wZXJ0eSAmJiBcInBvc2l0aW9uXCIgPT0gYi5wcm9wZXJ0eS5uYW1lIHx8IFwiaW5pdGlhbGl6ZWRcIiA9PSBiLnR5cGUpKSBmb3IgKHZhciBjID0gdGhpcy5fY29yZS5zZXR0aW5ncywgZSA9IGMuY2VudGVyICYmIE1hdGguY2VpbChjLml0ZW1zIC8gMikgfHwgYy5pdGVtcywgZiA9IGMuY2VudGVyICYmIGUgKiAtMSB8fCAwLCBnID0gKGIucHJvcGVydHkgJiYgYi5wcm9wZXJ0eS52YWx1ZSAhPT0gZCA/IGIucHJvcGVydHkudmFsdWUgOiB0aGlzLl9jb3JlLmN1cnJlbnQoKSkgKyBmLCBoID0gdGhpcy5fY29yZS5jbG9uZXMoKS5sZW5ndGgsIGkgPSBhLnByb3h5KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWQoYilcbiAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7IGYrKyA8IGU7KSB0aGlzLmxvYWQoaCAvIDIgKyB0aGlzLl9jb3JlLnJlbGF0aXZlKGcpKSwgaCAmJiBhLmVhY2godGhpcy5fY29yZS5jbG9uZXModGhpcy5fY29yZS5yZWxhdGl2ZShnKSksIGkpLCBnKytcbiAgICAgICAgICAgICAgICB9LCB0aGlzKVxuICAgICAgICAgICAgfSwgdGhpcy5fY29yZS5vcHRpb25zID0gYS5leHRlbmQoe30sIGUuRGVmYXVsdHMsIHRoaXMuX2NvcmUub3B0aW9ucyksIHRoaXMuX2NvcmUuJGVsZW1lbnQub24odGhpcy5faGFuZGxlcnMpXG4gICAgICAgIH07XG4gICAgICAgIGUuRGVmYXVsdHMgPSB7bGF6eUxvYWQ6ICExfSwgZS5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICB2YXIgZCA9IHRoaXMuX2NvcmUuJHN0YWdlLmNoaWxkcmVuKCkuZXEoYyksIGUgPSBkICYmIGQuZmluZChcIi5zYnktb3dsLWxhenlcIik7XG4gICAgICAgICAgICAhZSB8fCBhLmluQXJyYXkoZC5nZXQoMCksIHRoaXMuX2xvYWRlZCkgPiAtMSB8fCAoZS5lYWNoKGEucHJveHkoZnVuY3Rpb24gKGMsIGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSwgZiA9IGEoZCksIGcgPSBiLmRldmljZVBpeGVsUmF0aW8gPiAxICYmIGYuYXR0cihcImRhdGEtc3JjLXJldGluYVwiKSB8fCBmLmF0dHIoXCJkYXRhLXNyY1wiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb3JlLnRyaWdnZXIoXCJsb2FkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZixcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBnXG4gICAgICAgICAgICAgICAgfSwgXCJsYXp5XCIpLCBmLmlzKFwiaW1nXCIpID8gZi5vbmUoXCJsb2FkLm93bC5sYXp5XCIsIGEucHJveHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBmLmNzcyhcIm9wYWNpdHlcIiwgMSksIHRoaXMuX2NvcmUudHJpZ2dlcihcImxvYWRlZFwiLCB7ZWxlbWVudDogZiwgdXJsOiBnfSwgXCJsYXp5XCIpXG4gICAgICAgICAgICAgICAgfSwgdGhpcykpLmF0dHIoXCJzcmNcIiwgZykgOiAoZSA9IG5ldyBJbWFnZSwgZS5vbmxvYWQgPSBhLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZi5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kLWltYWdlXCI6ICd1cmwoXCInICsgZyArICdcIiknLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogXCIxXCJcbiAgICAgICAgICAgICAgICAgICAgfSksIHRoaXMuX2NvcmUudHJpZ2dlcihcImxvYWRlZFwiLCB7ZWxlbWVudDogZiwgdXJsOiBnfSwgXCJsYXp5XCIpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIGUuc3JjID0gZylcbiAgICAgICAgICAgIH0sIHRoaXMpKSwgdGhpcy5fbG9hZGVkLnB1c2goZC5nZXQoMCkpKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGEsIGI7XG4gICAgICAgICAgICBmb3IgKGEgaW4gdGhpcy5oYW5kbGVycykgdGhpcy5fY29yZS4kZWxlbWVudC5vZmYoYSwgdGhpcy5oYW5kbGVyc1thXSk7XG4gICAgICAgICAgICBmb3IgKGIgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdGhpc1tiXSAmJiAodGhpc1tiXSA9IG51bGwpXG4gICAgICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5MYXp5ID0gZVxuICAgIH0od2luZG93LlplcHRvIHx8IHdpbmRvdy5qUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpLCBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICB2YXIgZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICB0aGlzLl9jb3JlID0gYiwgdGhpcy5faGFuZGxlcnMgPSB7XG4gICAgICAgICAgICAgICAgXCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWwgcmVmcmVzaGVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b0hlaWdodCAmJiB0aGlzLnVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwiY2hhbmdlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICBhLm5hbWVzcGFjZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9IZWlnaHQgJiYgXCJwb3NpdGlvblwiID09IGEucHJvcGVydHkubmFtZSAmJiB0aGlzLnVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwibG9hZGVkLm93bC5sYXp5XCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvSGVpZ2h0ICYmIGEuZWxlbWVudC5jbG9zZXN0KFwiLlwiICsgdGhpcy5fY29yZS5zZXR0aW5ncy5pdGVtQ2xhc3MpLmluZGV4KCkgPT09IHRoaXMuX2NvcmUuY3VycmVudCgpICYmIHRoaXMudXBkYXRlKClcbiAgICAgICAgICAgICAgICB9LCB0aGlzKVxuICAgICAgICAgICAgfSwgdGhpcy5fY29yZS5vcHRpb25zID0gYS5leHRlbmQoe30sIGUuRGVmYXVsdHMsIHRoaXMuX2NvcmUub3B0aW9ucyksIHRoaXMuX2NvcmUuJGVsZW1lbnQub24odGhpcy5faGFuZGxlcnMpXG4gICAgICAgIH07XG4gICAgICAgIGUuRGVmYXVsdHMgPSB7YXV0b0hlaWdodDogITEsIGF1dG9IZWlnaHRDbGFzczogXCJzYnktb3dsLWhlaWdodFwifSwgZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGIgPSB0aGlzLl9jb3JlLl9jdXJyZW50LCBjID0gYiArIHRoaXMuX2NvcmUuc2V0dGluZ3MuaXRlbXMsXG4gICAgICAgICAgICAgIGQgPSB0aGlzLl9jb3JlLiRzdGFnZS5jaGlsZHJlbigpLnRvQXJyYXkoKS5zbGljZShiLCBjKSwgZSA9IFtdLCBmID0gMDtcbiAgICAgICAgICAgIGEuZWFjaChkLCBmdW5jdGlvbiAoYiwgYykge1xuICAgICAgICAgICAgICAgIGUucHVzaChhKGMpLmhlaWdodCgpKVxuICAgICAgICAgICAgfSksIGYgPSBNYXRoLm1heC5hcHBseShudWxsLCBlKSwgdGhpcy5fY29yZS4kc3RhZ2UucGFyZW50KCkuaGVpZ2h0KGYpLmFkZENsYXNzKHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b0hlaWdodENsYXNzKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGEsIGI7XG4gICAgICAgICAgICBmb3IgKGEgaW4gdGhpcy5faGFuZGxlcnMpIHRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsIHRoaXMuX2hhbmRsZXJzW2FdKTtcbiAgICAgICAgICAgIGZvciAoYiBpbiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkgXCJmdW5jdGlvblwiICE9IHR5cGVvZiB0aGlzW2JdICYmICh0aGlzW2JdID0gbnVsbClcbiAgICAgICAgfSwgYS5mbi5zYnlPd2xDYXJvdXNlbC5Db25zdHJ1Y3Rvci5QbHVnaW5zLkF1dG9IZWlnaHQgPSBlXG4gICAgfSh3aW5kb3cuWmVwdG8gfHwgd2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCksIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgIHZhciBlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvcmUgPSBiLCB0aGlzLl92aWRlb3MgPSB7fSwgdGhpcy5fcGxheWluZyA9IG51bGwsIHRoaXMuX2hhbmRsZXJzID0ge1xuICAgICAgICAgICAgICAgIFwiaW5pdGlhbGl6ZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5yZWdpc3Rlcih7dHlwZTogXCJzdGF0ZVwiLCBuYW1lOiBcInBsYXlpbmdcIiwgdGFnczogW1wiaW50ZXJhY3RpbmdcIl19KVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpLCBcInJlc2l6ZS5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICBhLm5hbWVzcGFjZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzLnZpZGVvICYmIHRoaXMuaXNJbkZ1bGxTY3JlZW4oKSAmJiBhLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJyZWZyZXNoZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5pcyhcInJlc2l6aW5nXCIpICYmIHRoaXMuX2NvcmUuJHN0YWdlLmZpbmQoXCIuY2xvbmVkIC5zYnktb3dsLXZpZGVvLWZyYW1lXCIpLnJlbW92ZSgpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwiY2hhbmdlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICBhLm5hbWVzcGFjZSAmJiBcInBvc2l0aW9uXCIgPT09IGEucHJvcGVydHkubmFtZSAmJiB0aGlzLl9wbGF5aW5nICYmIHRoaXMuc3RvcCgpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwicHJlcGFyZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGIubmFtZXNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGEoYi5jb250ZW50KS5maW5kKFwiLnNieS1vd2wtdmlkZW9cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLmxlbmd0aCAmJiAoYy5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKSwgdGhpcy5mZXRjaChjLCBhKGIuY29udGVudCkpKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICAgIH0sIHRoaXMuX2NvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLl9jb3JlLm9wdGlvbnMpLCB0aGlzLl9jb3JlLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKSwgdGhpcy5fY29yZS4kZWxlbWVudC5vbihcImNsaWNrLm93bC52aWRlb1wiLCBcIi5zYnktb3dsLXZpZGVvLXBsYXktaWNvblwiLCBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5KGEpXG4gICAgICAgICAgICB9LCB0aGlzKSlcbiAgICAgICAgfTtcbiAgICAgICAgZS5EZWZhdWx0cyA9IHt2aWRlbzogITEsIHZpZGVvSGVpZ2h0OiAhMSwgdmlkZW9XaWR0aDogITF9LCBlLnByb3RvdHlwZS5mZXRjaCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICB2YXIgYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhLmF0dHIoXCJkYXRhLXZpbWVvLWlkXCIpID8gXCJ2aW1lb1wiIDogYS5hdHRyKFwiZGF0YS12emFhci1pZFwiKSA/IFwidnphYXJcIiA6IFwieW91dHViZVwiXG4gICAgICAgICAgICAgIH0oKSwgZCA9IGEuYXR0cihcImRhdGEtdmltZW8taWRcIikgfHwgYS5hdHRyKFwiZGF0YS15b3V0dWJlLWlkXCIpIHx8IGEuYXR0cihcImRhdGEtdnphYXItaWRcIiksXG4gICAgICAgICAgICAgIGUgPSBhLmF0dHIoXCJkYXRhLXdpZHRoXCIpIHx8IHRoaXMuX2NvcmUuc2V0dGluZ3MudmlkZW9XaWR0aCxcbiAgICAgICAgICAgICAgZiA9IGEuYXR0cihcImRhdGEtaGVpZ2h0XCIpIHx8IHRoaXMuX2NvcmUuc2V0dGluZ3MudmlkZW9IZWlnaHQsIGcgPSBhLmF0dHIoXCJocmVmXCIpO1xuICAgICAgICAgICAgaWYgKCFnKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHZpZGVvIFVSTC5cIik7XG4gICAgICAgICAgICBpZiAoZCA9IGcubWF0Y2goLyhodHRwOnxodHRwczp8KVxcL1xcLyhwbGF5ZXIufHd3dy58YXBwLik/KHZpbWVvXFwuY29tfHlvdXR1KGJlXFwuY29tfFxcLmJlfGJlXFwuZ29vZ2xlYXBpc1xcLmNvbSl8dnphYXJcXC5jb20pXFwvKHZpZGVvXFwvfHZpZGVvc1xcL3xlbWJlZFxcL3xjaGFubmVsc1xcLy4rXFwvfGdyb3Vwc1xcLy4rXFwvfHdhdGNoXFw/dj18dlxcLyk/KFtBLVphLXowLTkuXyUtXSopKFxcJlxcUyspPy8pLCBkWzNdLmluZGV4T2YoXCJ5b3V0dVwiKSA+IC0xKSBjID0gXCJ5b3V0dWJlXCI7IGVsc2UgaWYgKGRbM10uaW5kZXhPZihcInZpbWVvXCIpID4gLTEpIGMgPSBcInZpbWVvXCI7IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghKGRbM10uaW5kZXhPZihcInZ6YWFyXCIpID4gLTEpKSB0aHJvdyBuZXcgRXJyb3IoXCJWaWRlbyBVUkwgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgICAgICAgICAgICAgYyA9IFwidnphYXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZCA9IGRbNl0sIHRoaXMuX3ZpZGVvc1tnXSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBjLFxuICAgICAgICAgICAgICAgIGlkOiBkLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBlLFxuICAgICAgICAgICAgICAgIGhlaWdodDogZlxuICAgICAgICAgICAgfSwgYi5hdHRyKFwiZGF0YS12aWRlb1wiLCBnKSwgdGhpcy50aHVtYm5haWwoYSwgdGhpcy5fdmlkZW9zW2ddKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS50aHVtYm5haWwgPSBmdW5jdGlvbiAoYiwgYykge1xuICAgICAgICAgICAgdmFyIGQsIGUsIGYsIGcgPSBjLndpZHRoICYmIGMuaGVpZ2h0ID8gJ3N0eWxlPVwid2lkdGg6JyArIGMud2lkdGggKyBcInB4O2hlaWdodDpcIiArIGMuaGVpZ2h0ICsgJ3B4O1wiJyA6IFwiXCIsXG4gICAgICAgICAgICAgIGggPSBiLmZpbmQoXCJpbWdcIiksIGkgPSBcInNyY1wiLCBqID0gXCJcIiwgayA9IHRoaXMuX2NvcmUuc2V0dGluZ3MsIGwgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgZSA9ICc8ZGl2IGNsYXNzPVwic2J5LW93bC12aWRlby1wbGF5LWljb25cIj48L2Rpdj4nLCBkID0gay5sYXp5TG9hZCA/ICc8ZGl2IGNsYXNzPVwic2J5LW93bC12aWRlby10biAnICsgaiArICdcIiAnICsgaSArICc9XCInICsgYSArICdcIj48L2Rpdj4nIDogJzxkaXYgY2xhc3M9XCJzYnktb3dsLXZpZGVvLXRuXCIgc3R5bGU9XCJvcGFjaXR5OjE7YmFja2dyb3VuZC1pbWFnZTp1cmwoJyArIGEgKyAnKVwiPjwvZGl2PicsIGIuYWZ0ZXIoZCksIGIuYWZ0ZXIoZSlcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChiLndyYXAoJzxkaXYgY2xhc3M9XCJzYnktb3dsLXZpZGVvLXdyYXBwZXJcIicgKyBnICsgXCI+PC9kaXY+XCIpLCB0aGlzLl9jb3JlLnNldHRpbmdzLmxhenlMb2FkICYmIChpID0gXCJkYXRhLXNyY1wiLCBqID0gXCJzYnktb3dsLWxhenlcIiksIGgubGVuZ3RoKSByZXR1cm4gbChoLmF0dHIoaSkpLCBoLnJlbW92ZSgpLCAhMTtcbiAgICAgICAgICAgIFwieW91dHViZVwiID09PSBjLnR5cGUgPyAoZiA9IFwiLy9pbWcueW91dHViZS5jb20vdmkvXCIgKyBjLmlkICsgXCIvaHFkZWZhdWx0LmpwZ1wiLCBsKGYpKSA6IFwidmltZW9cIiA9PT0gYy50eXBlID8gYS5hamF4KHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgIHVybDogXCIvL3ZpbWVvLmNvbS9hcGkvdjIvdmlkZW8vXCIgKyBjLmlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICAgIGpzb25wOiBcImNhbGxiYWNrXCIsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICBmID0gYVswXS50aHVtYm5haWxfbGFyZ2UsIGwoZilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSA6IFwidnphYXJcIiA9PT0gYy50eXBlICYmIGEuYWpheCh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJHRVRcIixcbiAgICAgICAgICAgICAgICB1cmw6IFwiLy92emFhci5jb20vYXBpL3ZpZGVvcy9cIiArIGMuaWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgICAganNvbnA6IFwiY2FsbGJhY2tcIixcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogXCJqc29ucFwiLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGYgPSBhLmZyYW1lZ3JhYl91cmwsIGwoZilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5fY29yZS50cmlnZ2VyKFwic3RvcFwiLCBudWxsLCBcInZpZGVvXCIpLCB0aGlzLl9wbGF5aW5nLmZpbmQoXCIuc2J5LW93bC12aWRlby1mcmFtZVwiKS5yZW1vdmUoKSwgdGhpcy5fcGxheWluZy5yZW1vdmVDbGFzcyhcInNieS1vd2wtdmlkZW8tcGxheWluZ1wiKSwgdGhpcy5fcGxheWluZyA9IG51bGwsIHRoaXMuX2NvcmUubGVhdmUoXCJwbGF5aW5nXCIpLCB0aGlzLl9jb3JlLnRyaWdnZXIoXCJzdG9wcGVkXCIsIG51bGwsIFwidmlkZW9cIilcbiAgICAgICAgfSwgZS5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICB2YXIgYywgZCA9IGEoYi50YXJnZXQpLCBlID0gZC5jbG9zZXN0KFwiLlwiICsgdGhpcy5fY29yZS5zZXR0aW5ncy5pdGVtQ2xhc3MpLFxuICAgICAgICAgICAgICBmID0gdGhpcy5fdmlkZW9zW2UuYXR0cihcImRhdGEtdmlkZW9cIildLCBnID0gZi53aWR0aCB8fCBcIjEwMCVcIixcbiAgICAgICAgICAgICAgaCA9IGYuaGVpZ2h0IHx8IHRoaXMuX2NvcmUuJHN0YWdlLmhlaWdodCgpO1xuICAgICAgICAgICAgdGhpcy5fcGxheWluZyB8fCAodGhpcy5fY29yZS5lbnRlcihcInBsYXlpbmdcIiksIHRoaXMuX2NvcmUudHJpZ2dlcihcInBsYXlcIiwgbnVsbCwgXCJ2aWRlb1wiKSwgZSA9IHRoaXMuX2NvcmUuaXRlbXModGhpcy5fY29yZS5yZWxhdGl2ZShlLmluZGV4KCkpKSwgdGhpcy5fY29yZS5yZXNldChlLmluZGV4KCkpLCBcInlvdXR1YmVcIiA9PT0gZi50eXBlID8gYyA9ICc8aWZyYW1lIHdpZHRoPVwiJyArIGcgKyAnXCIgaGVpZ2h0PVwiJyArIGggKyAnXCIgc3JjPVwiLy93d3cueW91dHViZS5jb20vZW1iZWQvJyArIGYuaWQgKyBcIj9hdXRvcGxheT0xJnJlbD0wJnY9XCIgKyBmLmlkICsgJ1wiIGZyYW1lYm9yZGVyPVwiMFwiIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT4nIDogXCJ2aW1lb1wiID09PSBmLnR5cGUgPyBjID0gJzxpZnJhbWUgc3JjPVwiLy9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLycgKyBmLmlkICsgJz9hdXRvcGxheT0xXCIgd2lkdGg9XCInICsgZyArICdcIiBoZWlnaHQ9XCInICsgaCArICdcIiBmcmFtZWJvcmRlcj1cIjBcIiB3ZWJraXRhbGxvd2Z1bGxzY3JlZW4gbW96YWxsb3dmdWxsc2NyZWVuIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT4nIDogXCJ2emFhclwiID09PSBmLnR5cGUgJiYgKGMgPSAnPGlmcmFtZSBmcmFtZWJvcmRlcj1cIjBcImhlaWdodD1cIicgKyBoICsgJ1wid2lkdGg9XCInICsgZyArICdcIiBhbGxvd2Z1bGxzY3JlZW4gbW96YWxsb3dmdWxsc2NyZWVuIHdlYmtpdEFsbG93RnVsbFNjcmVlbiBzcmM9XCIvL3ZpZXcudnphYXIuY29tLycgKyBmLmlkICsgJy9wbGF5ZXI/YXV0b3BsYXk9dHJ1ZVwiPjwvaWZyYW1lPicpLCBhKCc8ZGl2IGNsYXNzPVwic2J5LW93bC12aWRlby1mcmFtZVwiPicgKyBjICsgXCI8L2Rpdj5cIikuaW5zZXJ0QWZ0ZXIoZS5maW5kKFwiLnNieS1vd2wtdmlkZW9cIikpLCB0aGlzLl9wbGF5aW5nID0gZS5hZGRDbGFzcyhcInNieS1vd2wtdmlkZW8tcGxheWluZ1wiKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuaXNJbkZ1bGxTY3JlZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYiA9IGMuZnVsbHNjcmVlbkVsZW1lbnQgfHwgYy5tb3pGdWxsU2NyZWVuRWxlbWVudCB8fCBjLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50O1xuICAgICAgICAgICAgcmV0dXJuIGIgJiYgYShiKS5wYXJlbnQoKS5oYXNDbGFzcyhcInNieS1vd2wtdmlkZW8tZnJhbWVcIilcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhLCBiO1xuICAgICAgICAgICAgdGhpcy5fY29yZS4kZWxlbWVudC5vZmYoXCJjbGljay5vd2wudmlkZW9cIik7XG4gICAgICAgICAgICBmb3IgKGEgaW4gdGhpcy5faGFuZGxlcnMpIHRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsIHRoaXMuX2hhbmRsZXJzW2FdKTtcbiAgICAgICAgICAgIGZvciAoYiBpbiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkgXCJmdW5jdGlvblwiICE9IHR5cGVvZiB0aGlzW2JdICYmICh0aGlzW2JdID0gbnVsbClcbiAgICAgICAgfSwgYS5mbi5zYnlPd2xDYXJvdXNlbC5Db25zdHJ1Y3Rvci5QbHVnaW5zLlZpZGVvID0gZVxuICAgIH0od2luZG93LlplcHRvIHx8IHdpbmRvdy5qUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpLCBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICB2YXIgZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICB0aGlzLmNvcmUgPSBiLCB0aGlzLmNvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLmNvcmUub3B0aW9ucyksIHRoaXMuc3dhcHBpbmcgPSAhMCwgdGhpcy5wcmV2aW91cyA9IGQsIHRoaXMubmV4dCA9IGQsIHRoaXMuaGFuZGxlcnMgPSB7XG4gICAgICAgICAgICAgICAgXCJjaGFuZ2Uub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lc3BhY2UgJiYgXCJwb3NpdGlvblwiID09IGEucHJvcGVydHkubmFtZSAmJiAodGhpcy5wcmV2aW91cyA9IHRoaXMuY29yZS5jdXJyZW50KCksIHRoaXMubmV4dCA9IGEucHJvcGVydHkudmFsdWUpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwiZHJhZy5vd2wuY2Fyb3VzZWwgZHJhZ2dlZC5vd2wuY2Fyb3VzZWwgdHJhbnNsYXRlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICBhLm5hbWVzcGFjZSAmJiAodGhpcy5zd2FwcGluZyA9IFwidHJhbnNsYXRlZFwiID09IGEudHlwZSlcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJ0cmFuc2xhdGUub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5zd2FwcGluZyAmJiAodGhpcy5jb3JlLm9wdGlvbnMuYW5pbWF0ZU91dCB8fCB0aGlzLmNvcmUub3B0aW9ucy5hbmltYXRlSW4pICYmIHRoaXMuc3dhcCgpXG4gICAgICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICAgIH0sIHRoaXMuY29yZS4kZWxlbWVudC5vbih0aGlzLmhhbmRsZXJzKVxuICAgICAgICB9O1xuICAgICAgICBlLkRlZmF1bHRzID0ge2FuaW1hdGVPdXQ6ICExLCBhbmltYXRlSW46ICExfSwgZS5wcm90b3R5cGUuc3dhcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICgxID09PSB0aGlzLmNvcmUuc2V0dGluZ3MuaXRlbXMgJiYgYS5zdXBwb3J0LmFuaW1hdGlvbiAmJiBhLnN1cHBvcnQudHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuY29yZS5zcGVlZCgwKTtcbiAgICAgICAgICAgICAgICB2YXIgYiwgYyA9IGEucHJveHkodGhpcy5jbGVhciwgdGhpcyksIGQgPSB0aGlzLmNvcmUuJHN0YWdlLmNoaWxkcmVuKCkuZXEodGhpcy5wcmV2aW91cyksXG4gICAgICAgICAgICAgICAgICBlID0gdGhpcy5jb3JlLiRzdGFnZS5jaGlsZHJlbigpLmVxKHRoaXMubmV4dCksIGYgPSB0aGlzLmNvcmUuc2V0dGluZ3MuYW5pbWF0ZUluLFxuICAgICAgICAgICAgICAgICAgZyA9IHRoaXMuY29yZS5zZXR0aW5ncy5hbmltYXRlT3V0O1xuICAgICAgICAgICAgICAgIHRoaXMuY29yZS5jdXJyZW50KCkgIT09IHRoaXMucHJldmlvdXMgJiYgKGcgJiYgKGIgPSB0aGlzLmNvcmUuY29vcmRpbmF0ZXModGhpcy5wcmV2aW91cykgLSB0aGlzLmNvcmUuY29vcmRpbmF0ZXModGhpcy5uZXh0KSwgZC5vbmUoYS5zdXBwb3J0LmFuaW1hdGlvbi5lbmQsIGMpLmNzcyh7bGVmdDogYiArIFwicHhcIn0pLmFkZENsYXNzKFwiYW5pbWF0ZWQgc2J5LW93bC1hbmltYXRlZC1vdXRcIikuYWRkQ2xhc3MoZykpLCBmICYmIGUub25lKGEuc3VwcG9ydC5hbmltYXRpb24uZW5kLCBjKS5hZGRDbGFzcyhcImFuaW1hdGVkIHNieS1vd2wtYW5pbWF0ZWQtaW5cIikuYWRkQ2xhc3MoZikpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIGEoYi50YXJnZXQpLmNzcyh7bGVmdDogXCJcIn0pLnJlbW92ZUNsYXNzKFwiYW5pbWF0ZWQgc2J5LW93bC1hbmltYXRlZC1vdXQgc2J5LW93bC1hbmltYXRlZC1pblwiKS5yZW1vdmVDbGFzcyh0aGlzLmNvcmUuc2V0dGluZ3MuYW5pbWF0ZUluKS5yZW1vdmVDbGFzcyh0aGlzLmNvcmUuc2V0dGluZ3MuYW5pbWF0ZU91dCksIHRoaXMuY29yZS5vblRyYW5zaXRpb25FbmQoKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGEsIGI7XG4gICAgICAgICAgICBmb3IgKGEgaW4gdGhpcy5oYW5kbGVycykgdGhpcy5jb3JlLiRlbGVtZW50Lm9mZihhLCB0aGlzLmhhbmRsZXJzW2FdKTtcbiAgICAgICAgICAgIGZvciAoYiBpbiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkgXCJmdW5jdGlvblwiICE9IHR5cGVvZiB0aGlzW2JdICYmICh0aGlzW2JdID0gbnVsbClcbiAgICAgICAgfSxcbiAgICAgICAgICBhLmZuLnNieU93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuQW5pbWF0ZSA9IGVcbiAgICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgdmFyIGUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgdGhpcy5fY29yZSA9IGIsIHRoaXMuX3RpbWVvdXQgPSBudWxsLCB0aGlzLl9wYXVzZWQgPSAhMSwgdGhpcy5faGFuZGxlcnMgPSB7XG4gICAgICAgICAgICAgICAgXCJjaGFuZ2VkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIFwic2V0dGluZ3NcIiA9PT0gYS5wcm9wZXJ0eS5uYW1lID8gdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvcGxheSA/IHRoaXMucGxheSgpIDogdGhpcy5zdG9wKCkgOiBhLm5hbWVzcGFjZSAmJiBcInBvc2l0aW9uXCIgPT09IGEucHJvcGVydHkubmFtZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5ICYmIHRoaXMuX3NldEF1dG9QbGF5SW50ZXJ2YWwoKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpLCBcImluaXRpYWxpemVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXkgJiYgdGhpcy5wbGF5KClcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJwbGF5Lm93bC5hdXRvcGxheVwiOiBhLnByb3h5KGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMucGxheShiLCBjKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpLCBcInN0b3Aub3dsLmF1dG9wbGF5XCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5zdG9wKClcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJtb3VzZW92ZXIub3dsLmF1dG9wbGF5XCI6IGEucHJveHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5SG92ZXJQYXVzZSAmJiB0aGlzLl9jb3JlLmlzKFwicm90YXRpbmdcIikgJiYgdGhpcy5wYXVzZSgpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwibW91c2VsZWF2ZS5vd2wuYXV0b3BsYXlcIjogYS5wcm94eShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXlIb3ZlclBhdXNlICYmIHRoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSAmJiB0aGlzLnBsYXkoKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpLCBcInRvdWNoc3RhcnQub3dsLmNvcmVcIjogYS5wcm94eShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXlIb3ZlclBhdXNlICYmIHRoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSAmJiB0aGlzLnBhdXNlKClcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJ0b3VjaGVuZC5vd2wuY29yZVwiOiBhLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvcGxheUhvdmVyUGF1c2UgJiYgdGhpcy5wbGF5KClcbiAgICAgICAgICAgICAgICB9LCB0aGlzKVxuICAgICAgICAgICAgfSwgdGhpcy5fY29yZS4kZWxlbWVudC5vbih0aGlzLl9oYW5kbGVycyksIHRoaXMuX2NvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLl9jb3JlLm9wdGlvbnMpXG4gICAgICAgIH07XG4gICAgICAgIGUuRGVmYXVsdHMgPSB7XG4gICAgICAgICAgICBhdXRvcGxheTogITEsXG4gICAgICAgICAgICBhdXRvcGxheVRpbWVvdXQ6IDVlMyxcbiAgICAgICAgICAgIGF1dG9wbGF5SG92ZXJQYXVzZTogITEsXG4gICAgICAgICAgICBhdXRvcGxheVNwZWVkOiAhMVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5wbGF5ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlZCA9ICExLCB0aGlzLl9jb3JlLmlzKFwicm90YXRpbmdcIikgfHwgKHRoaXMuX2NvcmUuZW50ZXIoXCJyb3RhdGluZ1wiKSwgdGhpcy5fc2V0QXV0b1BsYXlJbnRlcnZhbCgpKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5fZ2V0TmV4dFRpbWVvdXQgPSBmdW5jdGlvbiAoZCwgZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVvdXQgJiYgYi5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCksIGIuc2V0VGltZW91dChhLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXVzZWQgfHwgdGhpcy5fY29yZS5pcyhcImJ1c3lcIikgfHwgdGhpcy5fY29yZS5pcyhcImludGVyYWN0aW5nXCIpIHx8IGMuaGlkZGVuIHx8IHRoaXMuX2NvcmUubmV4dChlIHx8IHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXlTcGVlZClcbiAgICAgICAgICAgIH0sIHRoaXMpLCBkIHx8IHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXlUaW1lb3V0KVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5fc2V0QXV0b1BsYXlJbnRlcnZhbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVvdXQgPSB0aGlzLl9nZXROZXh0VGltZW91dCgpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9jb3JlLmlzKFwicm90YXRpbmdcIikgJiYgKGIuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLCB0aGlzLl9jb3JlLmxlYXZlKFwicm90YXRpbmdcIikpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5fY29yZS5pcyhcInJvdGF0aW5nXCIpICYmICh0aGlzLl9wYXVzZWQgPSAhMClcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhLCBiO1xuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICBmb3IgKGEgaW4gdGhpcy5faGFuZGxlcnMpIHRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsIHRoaXMuX2hhbmRsZXJzW2FdKTtcbiAgICAgICAgICAgIGZvciAoYiBpbiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkgXCJmdW5jdGlvblwiICE9IHR5cGVvZiB0aGlzW2JdICYmICh0aGlzW2JdID0gbnVsbClcbiAgICAgICAgfSwgYS5mbi5zYnlPd2xDYXJvdXNlbC5Db25zdHJ1Y3Rvci5QbHVnaW5zLmF1dG9wbGF5ID0gZVxuICAgIH0od2luZG93LlplcHRvIHx8IHdpbmRvdy5qUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpLCBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIGUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgdGhpcy5fY29yZSA9IGIsIHRoaXMuX2luaXRpYWxpemVkID0gITEsIHRoaXMuX3BhZ2VzID0gW10sIHRoaXMuX2NvbnRyb2xzID0ge30sIHRoaXMuX3RlbXBsYXRlcyA9IFtdLCB0aGlzLiRlbGVtZW50ID0gdGhpcy5fY29yZS4kZWxlbWVudCwgdGhpcy5fb3ZlcnJpZGVzID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IHRoaXMuX2NvcmUubmV4dCxcbiAgICAgICAgICAgICAgICBwcmV2OiB0aGlzLl9jb3JlLnByZXYsXG4gICAgICAgICAgICAgICAgdG86IHRoaXMuX2NvcmUudG9cbiAgICAgICAgICAgIH0sIHRoaXMuX2hhbmRsZXJzID0ge1xuICAgICAgICAgICAgICAgIFwicHJlcGFyZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgICAgICAgICAgYi5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5kb3RzRGF0YSAmJiB0aGlzLl90ZW1wbGF0ZXMucHVzaCgnPGRpdiBjbGFzcz1cIicgKyB0aGlzLl9jb3JlLnNldHRpbmdzLmRvdENsYXNzICsgJ1wiPicgKyBhKGIuY29udGVudCkuZmluZChcIltkYXRhLWRvdF1cIikuYWRkQmFjayhcIltkYXRhLWRvdF1cIikuYXR0cihcImRhdGEtZG90XCIpICsgXCI8L2Rpdj5cIilcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJhZGRlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICBhLm5hbWVzcGFjZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzLmRvdHNEYXRhICYmIHRoaXMuX3RlbXBsYXRlcy5zcGxpY2UoYS5wb3NpdGlvbiwgMCwgdGhpcy5fdGVtcGxhdGVzLnBvcCgpKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpLCBcInJlbW92ZS5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICBhLm5hbWVzcGFjZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzLmRvdHNEYXRhICYmIHRoaXMuX3RlbXBsYXRlcy5zcGxpY2UoYS5wb3NpdGlvbiwgMSlcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJjaGFuZ2VkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIFwicG9zaXRpb25cIiA9PSBhLnByb3BlcnR5Lm5hbWUgJiYgdGhpcy5kcmF3KClcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICBhLm5hbWVzcGFjZSAmJiAhdGhpcy5faW5pdGlhbGl6ZWQgJiYgKHRoaXMuX2NvcmUudHJpZ2dlcihcImluaXRpYWxpemVcIiwgbnVsbCwgXCJuYXZpZ2F0aW9uXCIpLCB0aGlzLmluaXRpYWxpemUoKSwgdGhpcy51cGRhdGUoKSwgdGhpcy5kcmF3KCksIHRoaXMuX2luaXRpYWxpemVkID0gITAsIHRoaXMuX2NvcmUudHJpZ2dlcihcImluaXRpYWxpemVkXCIsIG51bGwsIFwibmF2aWdhdGlvblwiKSlcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJyZWZyZXNoZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5faW5pdGlhbGl6ZWQgJiYgKHRoaXMuX2NvcmUudHJpZ2dlcihcInJlZnJlc2hcIiwgbnVsbCwgXCJuYXZpZ2F0aW9uXCIpLCB0aGlzLnVwZGF0ZSgpLCB0aGlzLmRyYXcoKSwgdGhpcy5fY29yZS50cmlnZ2VyKFwicmVmcmVzaGVkXCIsIG51bGwsIFwibmF2aWdhdGlvblwiKSlcbiAgICAgICAgICAgICAgICB9LCB0aGlzKVxuICAgICAgICAgICAgfSwgdGhpcy5fY29yZS5vcHRpb25zID0gYS5leHRlbmQoe30sIGUuRGVmYXVsdHMsIHRoaXMuX2NvcmUub3B0aW9ucyksIHRoaXMuJGVsZW1lbnQub24odGhpcy5faGFuZGxlcnMpXG4gICAgICAgIH07XG4gICAgICAgIGUuRGVmYXVsdHMgPSB7XG4gICAgICAgICAgICBuYXY6ICExLFxuICAgICAgICAgICAgbmF2VGV4dDogW1wicHJldlwiLCBcIm5leHRcIl0sXG4gICAgICAgICAgICBuYXZTcGVlZDogITEsXG4gICAgICAgICAgICBuYXZFbGVtZW50OiBcImRpdlwiLFxuICAgICAgICAgICAgbmF2Q29udGFpbmVyOiAhMSxcbiAgICAgICAgICAgIG5hdkNvbnRhaW5lckNsYXNzOiBcInNieS1vd2wtbmF2XCIsXG4gICAgICAgICAgICBuYXZDbGFzczogW1wic2J5LW93bC1wcmV2XCIsIFwic2J5LW93bC1uZXh0XCJdLFxuICAgICAgICAgICAgc2xpZGVCeTogMSxcbiAgICAgICAgICAgIGRvdENsYXNzOiBcInNieS1vd2wtZG90XCIsXG4gICAgICAgICAgICBkb3RzQ2xhc3M6IFwic2J5LW93bC1kb3RzXCIsXG4gICAgICAgICAgICBkb3RzOiAhMCxcbiAgICAgICAgICAgIGRvdHNFYWNoOiAhMSxcbiAgICAgICAgICAgIGRvdHNEYXRhOiAhMSxcbiAgICAgICAgICAgIGRvdHNTcGVlZDogITEsXG4gICAgICAgICAgICBkb3RzQ29udGFpbmVyOiAhMVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGIsIGMgPSB0aGlzLl9jb3JlLnNldHRpbmdzO1xuICAgICAgICAgICAgdGhpcy5fY29udHJvbHMuJHJlbGF0aXZlID0gKGMubmF2Q29udGFpbmVyID8gYShjLm5hdkNvbnRhaW5lcikgOiBhKFwiPGRpdj5cIikuYWRkQ2xhc3MoYy5uYXZDb250YWluZXJDbGFzcykuYXBwZW5kVG8odGhpcy4kZWxlbWVudCkpLmFkZENsYXNzKFwiZGlzYWJsZWRcIiksIHRoaXMuX2NvbnRyb2xzLiRwcmV2aW91cyA9IGEoXCI8XCIgKyBjLm5hdkVsZW1lbnQgKyBcIj5cIikuYWRkQ2xhc3MoYy5uYXZDbGFzc1swXSkuaHRtbChjLm5hdlRleHRbMF0pLnByZXBlbmRUbyh0aGlzLl9jb250cm9scy4kcmVsYXRpdmUpLm9uKFwiY2xpY2tcIiwgYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldihjLm5hdlNwZWVkKVxuICAgICAgICAgICAgfSwgdGhpcykpLCB0aGlzLl9jb250cm9scy4kbmV4dCA9IGEoXCI8XCIgKyBjLm5hdkVsZW1lbnQgKyBcIj5cIikuYWRkQ2xhc3MoYy5uYXZDbGFzc1sxXSkuaHRtbChjLm5hdlRleHRbMV0pLmFwcGVuZFRvKHRoaXMuX2NvbnRyb2xzLiRyZWxhdGl2ZSkub24oXCJjbGlja1wiLCBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KGMubmF2U3BlZWQpXG4gICAgICAgICAgICB9LCB0aGlzKSksIGMuZG90c0RhdGEgfHwgKHRoaXMuX3RlbXBsYXRlcyA9IFthKFwiPGRpdj5cIikuYWRkQ2xhc3MoYy5kb3RDbGFzcykuYXBwZW5kKGEoXCI8c3Bhbj5cIikpLnByb3AoXCJvdXRlckhUTUxcIildKSwgdGhpcy5fY29udHJvbHMuJGFic29sdXRlID0gKGMuZG90c0NvbnRhaW5lciA/IGEoYy5kb3RzQ29udGFpbmVyKSA6IGEoXCI8ZGl2PlwiKS5hZGRDbGFzcyhjLmRvdHNDbGFzcykuYXBwZW5kVG8odGhpcy4kZWxlbWVudCkpLmFkZENsYXNzKFwiZGlzYWJsZWRcIiksIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS5vbihcImNsaWNrXCIsIFwiZGl2XCIsIGEucHJveHkoZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgICAgICB2YXIgZCA9IGEoYi50YXJnZXQpLnBhcmVudCgpLmlzKHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZSkgPyBhKGIudGFyZ2V0KS5pbmRleCgpIDogYShiLnRhcmdldCkucGFyZW50KCkuaW5kZXgoKTtcbiAgICAgICAgICAgICAgICBiLnByZXZlbnREZWZhdWx0KCksIHRoaXMudG8oZCwgYy5kb3RzU3BlZWQpXG4gICAgICAgICAgICB9LCB0aGlzKSk7XG4gICAgICAgICAgICBmb3IgKGIgaW4gdGhpcy5fb3ZlcnJpZGVzKSB0aGlzLl9jb3JlW2JdID0gYS5wcm94eSh0aGlzW2JdLCB0aGlzKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGEsIGIsIGMsIGQ7XG4gICAgICAgICAgICBmb3IgKGEgaW4gdGhpcy5faGFuZGxlcnMpIHRoaXMuJGVsZW1lbnQub2ZmKGEsIHRoaXMuX2hhbmRsZXJzW2FdKTtcbiAgICAgICAgICAgIGZvciAoYiBpbiB0aGlzLl9jb250cm9scykgdGhpcy5fY29udHJvbHNbYl0ucmVtb3ZlKCk7XG4gICAgICAgICAgICBmb3IgKGQgaW4gdGhpcy5vdmVyaWRlcykgdGhpcy5fY29yZVtkXSA9IHRoaXMuX292ZXJyaWRlc1tkXTtcbiAgICAgICAgICAgIGZvciAoYyBpbiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkgXCJmdW5jdGlvblwiICE9IHR5cGVvZiB0aGlzW2NdICYmICh0aGlzW2NdID0gbnVsbClcbiAgICAgICAgfSwgZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGEsIGIsIGMsIGQgPSB0aGlzLl9jb3JlLmNsb25lcygpLmxlbmd0aCAvIDIsIGUgPSBkICsgdGhpcy5fY29yZS5pdGVtcygpLmxlbmd0aCxcbiAgICAgICAgICAgICAgZiA9IHRoaXMuX2NvcmUubWF4aW11bSghMCksIGcgPSB0aGlzLl9jb3JlLnNldHRpbmdzLFxuICAgICAgICAgICAgICBoID0gZy5jZW50ZXIgfHwgZy5hdXRvV2lkdGggfHwgZy5kb3RzRGF0YSA/IDEgOiBnLmRvdHNFYWNoIHx8IGcuaXRlbXM7XG4gICAgICAgICAgICBpZiAoXCJwYWdlXCIgIT09IGcuc2xpZGVCeSAmJiAoZy5zbGlkZUJ5ID0gTWF0aC5taW4oZy5zbGlkZUJ5LCBnLml0ZW1zKSksIGcuZG90cyB8fCBcInBhZ2VcIiA9PSBnLnNsaWRlQnkpIGZvciAodGhpcy5fcGFnZXMgPSBbXSwgYSA9IGQsIGIgPSAwLCBjID0gMDsgYSA8IGU7IGErKykge1xuICAgICAgICAgICAgICAgIGlmIChiID49IGggfHwgMCA9PT0gYikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFnZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogTWF0aC5taW4oZiwgYSAtIGQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBhIC0gZCArIGggLSAxXG4gICAgICAgICAgICAgICAgICAgIH0pLCBNYXRoLm1pbihmLCBhIC0gZCkgPT09IGYpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBiID0gMCwgKytjXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGIgKz0gdGhpcy5fY29yZS5tZXJnZXJzKHRoaXMuX2NvcmUucmVsYXRpdmUoYSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGUucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYiwgYyA9IHRoaXMuX2NvcmUuc2V0dGluZ3MsIGQgPSB0aGlzLl9jb3JlLml0ZW1zKCkubGVuZ3RoIDw9IGMuaXRlbXMsXG4gICAgICAgICAgICAgIGUgPSB0aGlzLl9jb3JlLnJlbGF0aXZlKHRoaXMuX2NvcmUuY3VycmVudCgpKSwgZiA9IGMubG9vcCB8fCBjLnJld2luZDtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xzLiRyZWxhdGl2ZS50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsICFjLm5hdiB8fCBkKSwgYy5uYXYgJiYgKHRoaXMuX2NvbnRyb2xzLiRwcmV2aW91cy50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsICFmICYmIGUgPD0gdGhpcy5fY29yZS5taW5pbXVtKCEwKSksIHRoaXMuX2NvbnRyb2xzLiRuZXh0LnRvZ2dsZUNsYXNzKFwiZGlzYWJsZWRcIiwgIWYgJiYgZSA+PSB0aGlzLl9jb3JlLm1heGltdW0oITApKSksIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsICFjLmRvdHMgfHwgZCksIGMuZG90cyAmJiAoYiA9IHRoaXMuX3BhZ2VzLmxlbmd0aCAtIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS5jaGlsZHJlbigpLmxlbmd0aCwgYy5kb3RzRGF0YSAmJiAwICE9PSBiID8gdGhpcy5fY29udHJvbHMuJGFic29sdXRlLmh0bWwodGhpcy5fdGVtcGxhdGVzLmpvaW4oXCJcIikpIDogYiA+IDAgPyB0aGlzLl9jb250cm9scy4kYWJzb2x1dGUuYXBwZW5kKG5ldyBBcnJheShiICsgMSkuam9pbih0aGlzLl90ZW1wbGF0ZXNbMF0pKSA6IGIgPCAwICYmIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS5jaGlsZHJlbigpLnNsaWNlKGIpLnJlbW92ZSgpLCB0aGlzLl9jb250cm9scy4kYWJzb2x1dGUuZmluZChcIi5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS5jaGlsZHJlbigpLmVxKGEuaW5BcnJheSh0aGlzLmN1cnJlbnQoKSwgdGhpcy5fcGFnZXMpKS5hZGRDbGFzcyhcImFjdGl2ZVwiKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUub25UcmlnZ2VyID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHZhciBjID0gdGhpcy5fY29yZS5zZXR0aW5ncztcbiAgICAgICAgICAgIGIucGFnZSA9IHtcbiAgICAgICAgICAgICAgICBpbmRleDogYS5pbkFycmF5KHRoaXMuY3VycmVudCgpLCB0aGlzLl9wYWdlcyksXG4gICAgICAgICAgICAgICAgY291bnQ6IHRoaXMuX3BhZ2VzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBzaXplOiBjICYmIChjLmNlbnRlciB8fCBjLmF1dG9XaWR0aCB8fCBjLmRvdHNEYXRhID8gMSA6IGMuZG90c0VhY2ggfHwgYy5pdGVtcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZS5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBiID0gdGhpcy5fY29yZS5yZWxhdGl2ZSh0aGlzLl9jb3JlLmN1cnJlbnQoKSk7XG4gICAgICAgICAgICByZXR1cm4gYS5ncmVwKHRoaXMuX3BhZ2VzLCBhLnByb3h5KGZ1bmN0aW9uIChhLCBjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuc3RhcnQgPD0gYiAmJiBhLmVuZCA+PSBiXG4gICAgICAgICAgICB9LCB0aGlzKSkucG9wKClcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgdmFyIGMsIGQsIGUgPSB0aGlzLl9jb3JlLnNldHRpbmdzO1xuICAgICAgICAgICAgcmV0dXJuIFwicGFnZVwiID09IGUuc2xpZGVCeSA/IChjID0gYS5pbkFycmF5KHRoaXMuY3VycmVudCgpLCB0aGlzLl9wYWdlcyksIGQgPSB0aGlzLl9wYWdlcy5sZW5ndGgsIGIgPyArK2MgOiAtLWMsIGMgPSB0aGlzLl9wYWdlc1soYyAlIGQgKyBkKSAlIGRdLnN0YXJ0KSA6IChjID0gdGhpcy5fY29yZS5yZWxhdGl2ZSh0aGlzLl9jb3JlLmN1cnJlbnQoKSksIGQgPSB0aGlzLl9jb3JlLml0ZW1zKCkubGVuZ3RoLCBiID8gYyArPSBlLnNsaWRlQnkgOiBjIC09IGUuc2xpZGVCeSksIGNcbiAgICAgICAgfSwgZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICBhLnByb3h5KHRoaXMuX292ZXJyaWRlcy50bywgdGhpcy5fY29yZSkodGhpcy5nZXRQb3NpdGlvbighMCksIGIpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnByZXYgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgYS5wcm94eSh0aGlzLl9vdmVycmlkZXMudG8sIHRoaXMuX2NvcmUpKHRoaXMuZ2V0UG9zaXRpb24oITEpLCBiKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS50byA9IGZ1bmN0aW9uIChiLCBjLCBkKSB7XG4gICAgICAgICAgICB2YXIgZTtcbiAgICAgICAgICAgICFkICYmIHRoaXMuX3BhZ2VzLmxlbmd0aCA/IChlID0gdGhpcy5fcGFnZXMubGVuZ3RoLCBhLnByb3h5KHRoaXMuX292ZXJyaWRlcy50bywgdGhpcy5fY29yZSkodGhpcy5fcGFnZXNbKGIgJSBlICsgZSkgJSBlXS5zdGFydCwgYykpIDogYS5wcm94eSh0aGlzLl9vdmVycmlkZXMudG8sIHRoaXMuX2NvcmUpKGIsIGMpXG4gICAgICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5OYXZpZ2F0aW9uID0gZVxuICAgIH0od2luZG93LlplcHRvIHx8IHdpbmRvdy5qUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpLCBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIGUgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgdGhpcy5fY29yZSA9IGMsIHRoaXMuX2hhc2hlcyA9IHt9LCB0aGlzLiRlbGVtZW50ID0gdGhpcy5fY29yZS4kZWxlbWVudCwgdGhpcy5faGFuZGxlcnMgPSB7XG4gICAgICAgICAgICAgICAgXCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgICAgICAgICBjLm5hbWVzcGFjZSAmJiBcIlVSTEhhc2hcIiA9PT0gdGhpcy5fY29yZS5zZXR0aW5ncy5zdGFydFBvc2l0aW9uICYmIGEoYikudHJpZ2dlcihcImhhc2hjaGFuZ2Uub3dsLm5hdmlnYXRpb25cIilcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJwcmVwYXJlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYi5uYW1lc3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gYShiLmNvbnRlbnQpLmZpbmQoXCJbZGF0YS1oYXNoXVwiKS5hZGRCYWNrKFwiW2RhdGEtaGFzaF1cIikuYXR0cihcImRhdGEtaGFzaFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYykgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFzaGVzW2NdID0gYi5jb250ZW50XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJjaGFuZ2VkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLm5hbWVzcGFjZSAmJiBcInBvc2l0aW9uXCIgPT09IGMucHJvcGVydHkubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSB0aGlzLl9jb3JlLml0ZW1zKHRoaXMuX2NvcmUucmVsYXRpdmUodGhpcy5fY29yZS5jdXJyZW50KCkpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IGEubWFwKHRoaXMuX2hhc2hlcywgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhID09PSBkID8gYiA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlIHx8IGIubG9jYXRpb24uaGFzaC5zbGljZSgxKSA9PT0gZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgYi5sb2NhdGlvbi5oYXNoID0gZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICAgIH0sIHRoaXMuX2NvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLl9jb3JlLm9wdGlvbnMpLCB0aGlzLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKSwgYShiKS5vbihcImhhc2hjaGFuZ2Uub3dsLm5hdmlnYXRpb25cIiwgYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgIHZhciBjID0gYi5sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKSwgZSA9IHRoaXMuX2NvcmUuJHN0YWdlLmNoaWxkcmVuKCksXG4gICAgICAgICAgICAgICAgICBmID0gdGhpcy5faGFzaGVzW2NdICYmIGUuaW5kZXgodGhpcy5faGFzaGVzW2NdKTtcbiAgICAgICAgICAgICAgICBmICE9PSBkICYmIGYgIT09IHRoaXMuX2NvcmUuY3VycmVudCgpICYmIHRoaXMuX2NvcmUudG8odGhpcy5fY29yZS5yZWxhdGl2ZShmKSwgITEsICEwKVxuICAgICAgICAgICAgfSwgdGhpcykpXG4gICAgICAgIH07XG4gICAgICAgIGUuRGVmYXVsdHMgPSB7VVJMaGFzaExpc3RlbmVyOiAhMX0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYywgZDtcbiAgICAgICAgICAgIGEoYikub2ZmKFwiaGFzaGNoYW5nZS5vd2wubmF2aWdhdGlvblwiKTtcbiAgICAgICAgICAgIGZvciAoYyBpbiB0aGlzLl9oYW5kbGVycykgdGhpcy5fY29yZS4kZWxlbWVudC5vZmYoYywgdGhpcy5faGFuZGxlcnNbY10pO1xuICAgICAgICAgICAgZm9yIChkIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHRoaXNbZF0gJiYgKHRoaXNbZF0gPSBudWxsKVxuICAgICAgICB9LCBhLmZuLnNieU93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuSGFzaCA9IGVcbiAgICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgZnVuY3Rpb24gZShiLCBjKSB7XG4gICAgICAgICAgICB2YXIgZSA9ICExLCBmID0gYi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGIuc2xpY2UoMSk7XG4gICAgICAgICAgICByZXR1cm4gYS5lYWNoKChiICsgXCIgXCIgKyBoLmpvaW4oZiArIFwiIFwiKSArIGYpLnNwbGl0KFwiIFwiKSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ1tiXSAhPT0gZCkgcmV0dXJuIGUgPSAhYyB8fCBiLCAhMVxuICAgICAgICAgICAgfSksIGVcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGYoYSkge1xuICAgICAgICAgICAgcmV0dXJuIGUoYSwgITApXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZyA9IGEoXCI8c3VwcG9ydD5cIikuZ2V0KDApLnN0eWxlLCBoID0gXCJXZWJraXQgTW96IE8gbXNcIi5zcGxpdChcIiBcIiksIGkgPSB7XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgICAgICAgIFdlYmtpdFRyYW5zaXRpb246IFwid2Via2l0VHJhbnNpdGlvbkVuZFwiLFxuICAgICAgICAgICAgICAgICAgICBNb3pUcmFuc2l0aW9uOiBcInRyYW5zaXRpb25lbmRcIixcbiAgICAgICAgICAgICAgICAgICAgT1RyYW5zaXRpb246IFwib1RyYW5zaXRpb25FbmRcIixcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogXCJ0cmFuc2l0aW9uZW5kXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYW5pbWF0aW9uOiB7XG4gICAgICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgICAgICAgIFdlYmtpdEFuaW1hdGlvbjogXCJ3ZWJraXRBbmltYXRpb25FbmRcIixcbiAgICAgICAgICAgICAgICAgICAgTW96QW5pbWF0aW9uOiBcImFuaW1hdGlvbmVuZFwiLFxuICAgICAgICAgICAgICAgICAgICBPQW5pbWF0aW9uOiBcIm9BbmltYXRpb25FbmRcIixcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBcImFuaW1hdGlvbmVuZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBqID0ge1xuICAgICAgICAgICAgY3NzdHJhbnNmb3JtczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWUoXCJ0cmFuc2Zvcm1cIilcbiAgICAgICAgICAgIH0sIGNzc3RyYW5zZm9ybXMzZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWUoXCJwZXJzcGVjdGl2ZVwiKVxuICAgICAgICAgICAgfSwgY3NzdHJhbnNpdGlvbnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFlKFwidHJhbnNpdGlvblwiKVxuICAgICAgICAgICAgfSwgY3NzYW5pbWF0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWUoXCJhbmltYXRpb25cIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgai5jc3N0cmFuc2l0aW9ucygpICYmIChhLnN1cHBvcnQudHJhbnNpdGlvbiA9IG5ldyBTdHJpbmcoZihcInRyYW5zaXRpb25cIikpLCBhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQgPSBpLnRyYW5zaXRpb24uZW5kW2Euc3VwcG9ydC50cmFuc2l0aW9uXSksIGouY3NzYW5pbWF0aW9ucygpICYmIChhLnN1cHBvcnQuYW5pbWF0aW9uID0gbmV3IFN0cmluZyhmKFwiYW5pbWF0aW9uXCIpKSwgYS5zdXBwb3J0LmFuaW1hdGlvbi5lbmQgPSBpLmFuaW1hdGlvbi5lbmRbYS5zdXBwb3J0LmFuaW1hdGlvbl0pLCBqLmNzc3RyYW5zZm9ybXMoKSAmJiAoYS5zdXBwb3J0LnRyYW5zZm9ybSA9IG5ldyBTdHJpbmcoZihcInRyYW5zZm9ybVwiKSksIGEuc3VwcG9ydC50cmFuc2Zvcm0zZCA9IGouY3NzdHJhbnNmb3JtczNkKCkpXG4gICAgfSh3aW5kb3cuWmVwdG8gfHwgd2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCk7XG5cbiAgICAvLyBUd28gUm93IENhcm91c2VsXG4gICAgOyhmdW5jdGlvbiAoJCwgd2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKSB7XG4gICAgICAgIE93bDJyb3cgPSBmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICAgICAgICAgIHRoaXMub3dsID0gc2NvcGU7XG4gICAgICAgICAgICB0aGlzLm93bC5vcHRpb25zID0gJC5leHRlbmQoe30sIE93bDJyb3cuRGVmYXVsdHMsIHRoaXMub3dsLm9wdGlvbnMpO1xuICAgICAgICAgICAgLy9saW5rIGNhbGxiYWNrIGV2ZW50cyB3aXRoIG93bCBjYXJvdXNlbCBoZXJlXG5cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ2luaXRpYWxpemUub3dsLmNhcm91c2VsJzogJC5wcm94eShmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vd2wuc2V0dGluZ3Mub3dsMnJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZDJyb3codGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB0aGlzKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5vd2wuJGVsZW1lbnQub24odGhpcy5oYW5kbGVycyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgT3dsMnJvdy5EZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIG93bDJyb3c6IGZhbHNlLFxuICAgICAgICAgICAgb3dsMnJvd1RhcmdldDogJ3NieV9pdGVtJyxcbiAgICAgICAgICAgIG93bDJyb3dDb250YWluZXI6ICdzYnlfb3dsMnJvdy1pdGVtJyxcbiAgICAgICAgICAgIG93bDJyb3dEaXJlY3Rpb246ICd1dGQnIC8vIGx0clxuICAgICAgICB9O1xuXG4gICAgICAgIC8vbWVodG9kczpcbiAgICAgICAgT3dsMnJvdy5wcm90b3R5cGUuYnVpbGQycm93ID0gZnVuY3Rpb24gKHRoaXNTY29wZSkge1xuXG4gICAgICAgICAgICB2YXIgY2Fyb3VzZWwgPSAkKHRoaXNTY29wZS5vd2wuJGVsZW1lbnQpO1xuICAgICAgICAgICAgdmFyIGNhcm91c2VsSXRlbXMgPSBjYXJvdXNlbC5maW5kKCcuJyArIHRoaXNTY29wZS5vd2wub3B0aW9ucy5vd2wycm93VGFyZ2V0KTtcblxuICAgICAgICAgICAgdmFyIGFFdmVuRWxlbWVudHMgPSBbXTtcbiAgICAgICAgICAgIHZhciBhT2RkRWxlbWVudHMgPSBbXTtcblxuICAgICAgICAgICAgJC5lYWNoKGNhcm91c2VsSXRlbXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCAlIDIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYUV2ZW5FbGVtZW50cy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFPZGRFbGVtZW50cy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvL2Nhcm91c2VsLmVtcHR5KCk7XG5cbiAgICAgICAgICAgIHN3aXRjaCAodGhpc1Njb3BlLm93bC5vcHRpb25zLm93bDJyb3dEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBjYXNlICdsdHInOlxuICAgICAgICAgICAgICAgICAgICB0aGlzU2NvcGUubGVmdFRvcmlnaHQodGhpc1Njb3BlLCBjYXJvdXNlbCwgY2Fyb3VzZWxJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdCA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXNTY29wZS51cFRvZG93bih0aGlzU2NvcGUsIGFFdmVuRWxlbWVudHMsIGFPZGRFbGVtZW50cywgY2Fyb3VzZWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH07XG5cbiAgICAgICAgT3dsMnJvdy5wcm90b3R5cGUubGVmdFRvcmlnaHQgPSBmdW5jdGlvbiAodGhpc1Njb3BlLCBjYXJvdXNlbCwgY2Fyb3VzZWxJdGVtcykge1xuXG4gICAgICAgICAgICB2YXIgbzJ3Q29udGFpbmVyQ2xhc3MgPSB0aGlzU2NvcGUub3dsLm9wdGlvbnMub3dsMnJvd0NvbnRhaW5lcjtcbiAgICAgICAgICAgIHZhciBvd2xNYXJnaW4gPSB0aGlzU2NvcGUub3dsLm9wdGlvbnMubWFyZ2luO1xuICAgICAgICAgICAgdmFyIGNhcm91c2VsSXRlbXNMZW5ndGggPSBjYXJvdXNlbEl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBmaXJzQXJyID0gW107XG4gICAgICAgICAgICB2YXIgc2Vjb25kQXJyID0gW107XG5cbiAgICAgICAgICAgIGlmIChjYXJvdXNlbEl0ZW1zTGVuZ3RoICUgMiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNhcm91c2VsSXRlbXNMZW5ndGggPSAoKGNhcm91c2VsSXRlbXNMZW5ndGggLSAxKSAvIDIpICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2Fyb3VzZWxJdGVtc0xlbmd0aCA9IGNhcm91c2VsSXRlbXNMZW5ndGggLyAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAkLmVhY2goY2Fyb3VzZWxJdGVtcywgZnVuY3Rpb24gKGluZGV4LCBpdGVtKSB7XG5cblxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGNhcm91c2VsSXRlbXNMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc0Fyci5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlY29uZEFyci5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAkLmVhY2goZmlyc0FyciwgZnVuY3Rpb24gKGluZGV4LCBpdGVtKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJvd0NvbnRhaW5lciA9ICQoJzxkaXYgY2xhc3M9XCInICsgbzJ3Q29udGFpbmVyQ2xhc3MgKyAnXCIvPicpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGZpcnN0Um93RWxlbWVudCA9IGZpcnNBcnJbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGZpcnN0Um93RWxlbWVudC5zdHlsZS5tYXJnaW5Cb3R0b20gPSBvd2xNYXJnaW4gKyAncHgnO1xuXG4gICAgICAgICAgICAgICAgcm93Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAuYXBwZW5kKGZpcnN0Um93RWxlbWVudClcbiAgICAgICAgICAgICAgICAgIC5hcHBlbmQoc2Vjb25kQXJyW2luZGV4XSk7XG5cbiAgICAgICAgICAgICAgICBjYXJvdXNlbC5hcHBlbmQocm93Q29udGFpbmVyKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH07XG5cbiAgICAgICAgT3dsMnJvdy5wcm90b3R5cGUudXBUb2Rvd24gPSBmdW5jdGlvbiAodGhpc1Njb3BlLCBhRXZlbkVsZW1lbnRzLCBhT2RkRWxlbWVudHMsIGNhcm91c2VsKSB7XG5cbiAgICAgICAgICAgIHZhciBvMndDb250YWluZXJDbGFzcyA9IHRoaXNTY29wZS5vd2wub3B0aW9ucy5vd2wycm93Q29udGFpbmVyO1xuICAgICAgICAgICAgdmFyIG93bE1hcmdpbiA9IHRoaXNTY29wZS5vd2wub3B0aW9ucy5tYXJnaW47XG5cbiAgICAgICAgICAgICQuZWFjaChhRXZlbkVsZW1lbnRzLCBmdW5jdGlvbiAoaW5kZXgsIGl0ZW0pIHtcblxuICAgICAgICAgICAgICAgIHZhciByb3dDb250YWluZXIgPSAkKCc8ZGl2IGNsYXNzPVwiJyArIG8yd0NvbnRhaW5lckNsYXNzICsgJ1wiLz4nKTtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbkVsZW1lbnQgPSBhRXZlbkVsZW1lbnRzW2luZGV4XTtcblxuICAgICAgICAgICAgICAgIGV2ZW5FbGVtZW50LnN0eWxlLm1hcmdpbkJvdHRvbSA9IG93bE1hcmdpbiArICdweCc7XG5cbiAgICAgICAgICAgICAgICByb3dDb250YWluZXJcbiAgICAgICAgICAgICAgICAgIC5hcHBlbmQoZXZlbkVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAuYXBwZW5kKGFPZGRFbGVtZW50c1tpbmRleF0pO1xuXG4gICAgICAgICAgICAgICAgY2Fyb3VzZWwuYXBwZW5kKHJvd0NvbnRhaW5lcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogRGVzdHJveXMgdGhlIHBsdWdpbi5cbiAgICAgICAgICovXG4gICAgICAgIE93bDJyb3cucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlciwgcHJvcGVydHk7XG4gICAgICAgIH07XG5cbiAgICAgICAgJC5mbi5zYnlPd2xDYXJvdXNlbC5Db25zdHJ1Y3Rvci5QbHVnaW5zWydvd2wycm93J10gPSBPd2wycm93O1xuICAgIH0pKHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KTtcblxuICAgIChmdW5jdGlvbigkKXtcblxuICAgICAgICBmdW5jdGlvbiBzYnlBZGRWaXNpYmlsaXR5TGlzdGVuZXIoKSB7XG4gICAgICAgICAgICAvKiBEZXRlY3Qgd2hlbiBlbGVtZW50IGJlY29tZXMgdmlzaWJsZS4gVXNlZCBmb3Igd2hlbiB0aGUgZmVlZCBpcyBpbml0aWFsbHkgaGlkZGVuLCBpbiBhIHRhYiBmb3IgZXhhbXBsZS4gaHR0cHM6Ly9naXRodWIuY29tL3NoYXVuYm93ZS9qcXVlcnkudmlzaWJpbGl0eUNoYW5nZWQgKi9cbiAgICAgICAgICAgICFmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIHZhciBuID0ge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB9LCBydW5PbkxvYWQ6ICEwLCBmcmVxdWVuY3k6IDEwMCwgc2J5UHJldmlvdXNWaXNpYmlsaXR5OiBudWxsXG4gICAgICAgICAgICAgICAgfSwgYyA9IHt9O1xuICAgICAgICAgICAgICAgIGMuc2J5Q2hlY2tWaXNpYmlsaXR5ID0gZnVuY3Rpb24gKGksIG4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpRdWVyeS5jb250YWlucyhkb2N1bWVudCwgaVswXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gbi5zYnlQcmV2aW91c1Zpc2liaWxpdHksIHQgPSBpLmlzKFwiOnZpc2libGVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBuLnNieVByZXZpb3VzVmlzaWJpbGl0eSA9IHQsIG51bGwgPT0gZSA/IG4ucnVuT25Mb2FkICYmIG4uY2FsbGJhY2soaSwgdCkgOiBlICE9PSB0ICYmIG4uY2FsbGJhY2soaSwgdCksIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuc2J5Q2hlY2tWaXNpYmlsaXR5KGksIG4pXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBuLmZyZXF1ZW5jeSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGkuZm4uc2J5VmlzaWJpbGl0eUNoYW5nZWQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGkuZXh0ZW5kKHt9LCBuLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLnNieUNoZWNrVmlzaWJpbGl0eShpKHRoaXMpLCB0KVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0oalF1ZXJ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIFNieSgpIHtcbiAgICAgICAgICAgIHRoaXMuZmVlZHMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuY3RhcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gc2J5T3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMuaXNUb3VjaCA9IHNieUlzVG91Y2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFNieS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICBjcmVhdGVQYWdlOiBmdW5jdGlvbiAoY3JlYXRlRmVlZHMsIGNyZWF0ZUZlZWRzQXJncykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNieWFqYXh1cmwgPT09ICd1bmRlZmluZWQnIHx8IHdpbmRvdy5zYnlhamF4dXJsLmluZGV4T2Yod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNieWFqYXh1cmwgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAnL3dwLWFkbWluL2FkbWluLWFqYXgucGhwJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkKCcuc2J5X25vX2pzX2Vycm9yX21lc3NhZ2UnKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAkKCcuc2J5X25vX2pzJykucmVtb3ZlQ2xhc3MoJ3NieV9ub19qcycpO1xuXG4gICAgICAgICAgICAgICAgY3JlYXRlRmVlZHMoY3JlYXRlRmVlZHNBcmdzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXliZUFkZFlUQVBJOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgeW91dHViZVNjcmlwdElkID0gXCJzYnkteW91dHViZS1hcGlcIjtcbiAgICAgICAgICAgICAgICB2YXIgeW91dHViZVNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHlvdXR1YmVTY3JpcHRJZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoeW91dHViZVNjcmlwdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0U2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIilbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgdGFnLnNyYyA9IFwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vaWZyYW1lX2FwaVwiO1xuICAgICAgICAgICAgICAgICAgICB0YWcuaWQgPSB5b3V0dWJlU2NyaXB0SWQ7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0U2NyaXB0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRhZywgZmlyc3RTY3JpcHQpO1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNyZWF0ZUxpZ2h0Ym94OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGJCdWlsZGVyID0gc2J5R2V0bGlnaHRib3hCdWlsZGVyKCk7XG4gICAgICAgICAgICAgICAgdmFyIHNieV9sYl9kZWxheSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYnlfdGltZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHNieV9jYWxsYmFjaywgc2J5X21zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoc2J5X3RpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNieV90aW1lciA9IHNldFRpbWVvdXQoc2J5X2NhbGxiYWNrLCBzYnlfbXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBzYnlfbGJfZGVsYXkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLmFmdGVyUmVzaXplKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLyogTGlnaHRib3ggdjIuNy4xIGJ5IExva2VzaCBEaGFrYXIgLSBodHRwOi8vbG9rZXNoZGhha2FyLmNvbS9wcm9qZWN0cy9saWdodGJveDIvIC0gSGVhdmlseSBtb2RpZmllZCBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgcGx1Z2luICovXG4gICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGpRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICBiID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGEoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZhZGVEdXJhdGlvbiA9IDUwMCwgdGhpcy5maXRJbWFnZXNJblZpZXdwb3J0ID0gITAsIHRoaXMucmVzaXplRHVyYXRpb24gPSA3MDAsIHRoaXMucG9zaXRpb25Gcm9tVG9wID0gNTAsIHRoaXMuc2hvd0ltYWdlTnVtYmVyTGFiZWwgPSAhMCwgdGhpcy5hbHdheXNTaG93TmF2T25Ub3VjaERldmljZXMgPSAhMSwgdGhpcy53cmFwQXJvdW5kID0gITFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5wcm90b3R5cGUuYWxidW1MYWJlbCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhICsgXCIgLyBcIiArIGJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYVxuICAgICAgICAgICAgICAgICAgICAgIH0oKSxcbiAgICAgICAgICAgICAgICAgICAgICBjID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGIoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gYSwgdGhpcy5hbGJ1bSA9IFtdLCB0aGlzLmN1cnJlbnRJbWFnZUluZGV4ID0gdm9pZCAwLCB0aGlzLmluaXQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZSgpLCB0aGlzLmJ1aWxkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKFwiYm9keVwiKS5vbihcImNsaWNrXCIsIFwiYVtkYXRhLXNieS1saWdodGJveF1cIiwgZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiLnN0YXJ0KGEoYy5jdXJyZW50VGFyZ2V0KSksICExXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYShcIlwiK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIudGVtcGxhdGUoKSkuYXBwZW5kVG8oYShcImJvZHlcIikpLCB0aGlzLiRsaWdodGJveCA9IGEoXCIjc2J5X2xpZ2h0Ym94XCIpLCB0aGlzLiRvdmVybGF5ID0gYShcIiNzYnlfbGlnaHRib3hPdmVybGF5XCIpLCB0aGlzLiRvdXRlckNvbnRhaW5lciA9IHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLW91dGVyQ29udGFpbmVyXCIpLCB0aGlzLiRjb250YWluZXIgPSB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1jb250YWluZXJcIiksIHRoaXMuY29udGFpbmVyVG9wUGFkZGluZyA9IHBhcnNlSW50KHRoaXMuJGNvbnRhaW5lci5jc3MoXCJwYWRkaW5nLXRvcFwiKSwgMTApLCB0aGlzLmNvbnRhaW5lclJpZ2h0UGFkZGluZyA9IHBhcnNlSW50KHRoaXMuJGNvbnRhaW5lci5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIpLCAxMCksIHRoaXMuY29udGFpbmVyQm90dG9tUGFkZGluZyA9IHBhcnNlSW50KHRoaXMuJGNvbnRhaW5lci5jc3MoXCJwYWRkaW5nLWJvdHRvbVwiKSwgMTApLCB0aGlzLmNvbnRhaW5lckxlZnRQYWRkaW5nID0gcGFyc2VJbnQodGhpcy4kY29udGFpbmVyLmNzcyhcInBhZGRpbmctbGVmdFwiKSwgMTApLCB0aGlzLiRvdmVybGF5LmhpZGUoKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiLmVuZCgpLCAhMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIGpRdWVyeShkb2N1bWVudCkub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQsIGIsIGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0ZhZGUgb3V0IHRoZSBsaWdodGJveCBpZiBjbGljayBhbnl3aGVyZSBvdXRzaWRlIG9mIHRoZSB0d28gZWxlbWVudHMgZGVmaW5lZCBiZWxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghalF1ZXJ5KGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnLnNieV9sYi1vdXRlckNvbnRhaW5lcicpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWpRdWVyeShldmVudC50YXJnZXQpLmNsb3Nlc3QoJy5zYnlfbGItZGF0YUNvbnRhaW5lcicpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GYWRlIG91dCBsaWdodGJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLnBhdXNlUGxheWVyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NieV9saWdodGJveE92ZXJsYXksICNzYnlfbGlnaHRib3gnKS5mYWRlT3V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgdGhpcy4kbGlnaHRib3guaGlkZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJyNzYnlfbGlnaHRib3hPdmVybGF5Jykub24oXCJjbGlja1wiLCBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIucGF1c2VQbGF5ZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwic2J5X2xpZ2h0Ym94XCIgPT09IGEoYy50YXJnZXQpLmF0dHIoXCJpZFwiKSAmJiBiLmVuZCgpLCAhMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItcHJldlwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxiQnVpbGRlci5wYXVzZVBsYXllcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIuY2hhbmdlSW1hZ2UoMCA9PT0gYi5jdXJyZW50SW1hZ2VJbmRleCA/IGIuYWxidW0ubGVuZ3RoIC0gMSA6IGIuY3VycmVudEltYWdlSW5kZXggLSAxKSwgITFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1jb250YWluZXJcIikub24oXCJzd2lwZXJpZ2h0XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxiQnVpbGRlci5wYXVzZVBsYXllcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIuY2hhbmdlSW1hZ2UoMCA9PT0gYi5jdXJyZW50SW1hZ2VJbmRleCA/IGIuYWxidW0ubGVuZ3RoIC0gMSA6IGIuY3VycmVudEltYWdlSW5kZXggLSAxKSwgITFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1uZXh0XCIpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLnBhdXNlUGxheWVyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYi5jaGFuZ2VJbWFnZShiLmN1cnJlbnRJbWFnZUluZGV4ID09PSBiLmFsYnVtLmxlbmd0aCAtIDEgPyAwIDogYi5jdXJyZW50SW1hZ2VJbmRleCArIDEpLCAhMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWNvbnRhaW5lclwiKS5vbihcInN3aXBlbGVmdFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIucGF1c2VQbGF5ZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiLmNoYW5nZUltYWdlKGIuY3VycmVudEltYWdlSW5kZXggPT09IGIuYWxidW0ubGVuZ3RoIC0gMSA/IDAgOiBiLmN1cnJlbnRJbWFnZUluZGV4ICsgMSksICExXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItbG9hZGVyLCAuc2J5X2xiLWNsb3NlXCIpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIucGF1c2VQbGF5ZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiLmVuZCgpLCAhMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbihiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmFsYnVtLnB1c2gobGJCdWlsZGVyLmdldERhdGEoYSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBhKHdpbmRvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm9uKFwicmVzaXplXCIsIGEucHJveHkodGhpcy5zaXplT3ZlcmxheSwgdGhpcykpLCBhKFwic2VsZWN0LCBvYmplY3QsIGVtYmVkXCIpLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIHRoaXMuc2l6ZU92ZXJsYXkoKSwgdGhpcy5hbGJ1bSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGYsIGcgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gYi5hdHRyKFwiZGF0YS1zYnktbGlnaHRib3hcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBhKGIucHJvcChcInRhZ05hbWVcIikgKyAnW2RhdGEtc2J5LWxpZ2h0Ym94PVwiJyArIGggKyAnXCJdJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmLmxlbmd0aDsgaSA9ICsraSkgYyhhKGZbaV0pKSwgZltpXSA9PT0gYlswXSAmJiAoZyA9IGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFwibGlnaHRib3hcIiA9PT0gYi5hdHRyKFwicmVsXCIpKSBjKGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGEoYi5wcm9wKFwidGFnTmFtZVwiKSArICdbcmVsPVwiJyArIGIuYXR0cihcInJlbFwiKSArICdcIl0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGYubGVuZ3RoOyBqID0gKytqKSBjKGEoZltqXSkpLCBmW2pdID09PSBiWzBdICYmIChnID0gailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrID0gZS5zY3JvbGxUb3AoKSArIHRoaXMub3B0aW9ucy5wb3NpdGlvbkZyb21Ub3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBlLnNjcm9sbExlZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBrICsgXCJweFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGwgKyBcInB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmZhZGVJbih0aGlzLm9wdGlvbnMuZmFkZUR1cmF0aW9uKSwgdGhpcy5jaGFuZ2VJbWFnZShnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5jaGFuZ2VJbWFnZSA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUtleWJvYXJkTmF2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWltYWdlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kb3ZlcmxheS5mYWRlSW4odGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiksIGEoXCIuc2J5X2xiLWxvYWRlclwiKS5mYWRlSW4oXCJzbG93XCIpLCB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1pbWFnZSwgLnNieV9sYi1uYXYsIC5zYnlfbGItcHJldiwgLnNieV9sYi1uZXh0LCAuc2J5X2xiLWRhdGFDb250YWluZXIsIC5zYnlfbGItbnVtYmVycywgLnNieV9sYi1jYXB0aW9uXCIpLmhpZGUoKSwgdGhpcy4kb3V0ZXJDb250YWluZXIuYWRkQ2xhc3MoXCJhbmltYXRpbmdcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IG5ldyBJbWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGYsIGcsIGgsIGksIGosIGssIGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNieUFycm93V2lkdGggPSAxMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5hdHRyKFwic3JjXCIsIGMuYWxidW1bYl0ubGluayksIGYgPSBhKGUpLCBkLndpZHRoKGUud2lkdGgpLCBkLmhlaWdodChlLmhlaWdodCksIGMub3B0aW9ucy5maXRJbWFnZXNJblZpZXdwb3J0ICYmIChsID0gYSh3aW5kb3cpLndpZHRoKCksIGsgPSBhKHdpbmRvdykuaGVpZ2h0KCksIGogPSBsIC0gYy5jb250YWluZXJMZWZ0UGFkZGluZyAtIGMuY29udGFpbmVyUmlnaHRQYWRkaW5nIC0gMjAgLSBzYnlBcnJvd1dpZHRoLCBpID0gayAtIGMuY29udGFpbmVyVG9wUGFkZGluZyAtIGMuY29udGFpbmVyQm90dG9tUGFkZGluZyAtIDE1MCwgKGUud2lkdGggPiBqIHx8IGUuaGVpZ2h0ID4gaSkgJiYgKGUud2lkdGggLyBqID4gZS5oZWlnaHQgLyBpID8gKGggPSBqLCBnID0gcGFyc2VJbnQoZS5oZWlnaHQgLyAoZS53aWR0aCAvIGgpLCAxMCksIGQud2lkdGgoaCksIGQuaGVpZ2h0KGcpKSA6IChnID0gaSwgaCA9IHBhcnNlSW50KGUud2lkdGggLyAoZS5oZWlnaHQgLyBnKSwgMTApLCBkLndpZHRoKGgpLCBkLmhlaWdodChnKSkpKSwgYy5zaXplQ29udGFpbmVyKGQud2lkdGgoKSwgZC5oZWlnaHQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGUuc3JjID0gdGhpcy5hbGJ1bVtiXS5saW5rLCB0aGlzLmN1cnJlbnRJbWFnZUluZGV4ID0gYlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5zaXplT3ZlcmxheSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kb3ZlcmxheS53aWR0aChhKHdpbmRvdykud2lkdGgoKSkuaGVpZ2h0KGEoZG9jdW1lbnQpLmhlaWdodCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5zaXplQ29udGFpbmVyID0gZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1kYXRhQ29udGFpbmVyXCIpLndpZHRoKGcpLCBkLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1wcmV2TGlua1wiKS5oZWlnaHQoaCksIGQuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLW5leHRMaW5rXCIpLmhlaWdodChoKSwgZC5zaG93SW1hZ2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gdGhpcy4kb3V0ZXJDb250YWluZXIub3V0ZXJXaWR0aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gdGhpcy4kb3V0ZXJDb250YWluZXIub3V0ZXJIZWlnaHQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGEgKyB0aGlzLmNvbnRhaW5lckxlZnRQYWRkaW5nICsgdGhpcy5jb250YWluZXJSaWdodFBhZGRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBiICsgdGhpcy5jb250YWluZXJUb3BQYWRkaW5nICsgdGhpcy5jb250YWluZXJCb3R0b21QYWRkaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSAhPT0gZyB8fCBmICE9PSBoID8gdGhpcy4kb3V0ZXJDb250YWluZXIuYW5pbWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLm9wdGlvbnMucmVzaXplRHVyYXRpb24sIFwic3dpbmdcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSA6IGMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5zaG93SW1hZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWxvYWRlclwiKS5oaWRlKCksIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWltYWdlXCIpLmZhZGVJbihcInNsb3dcIiksIHRoaXMudXBkYXRlTmF2KCksIHRoaXMudXBkYXRlRGV0YWlscygpLCB0aGlzLnByZWxvYWROZWlnaGJvcmluZ0ltYWdlcygpLCB0aGlzLmVuYWJsZUtleWJvYXJkTmF2KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUudXBkYXRlTmF2ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9ICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFdmVudChcIlRvdWNoRXZlbnRcIiksIGEgPSB0aGlzLm9wdGlvbnMuYWx3YXlzU2hvd05hdk9uVG91Y2hEZXZpY2VzID8gITAgOiAhMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoYikge31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLW5hdlwiKS5zaG93KCksIHRoaXMuYWxidW0ubGVuZ3RoID4gMSAmJiAodGhpcy5vcHRpb25zLndyYXBBcm91bmQgPyAoYSAmJiB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1wcmV2LCAuc2J5X2xiLW5leHRcIikuY3NzKFwib3BhY2l0eVwiLCBcIjFcIiksIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLXByZXYsIC5zYnlfbGItbmV4dFwiKS5zaG93KCkpIDogKHRoaXMuY3VycmVudEltYWdlSW5kZXggPiAwICYmICh0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1wcmV2XCIpLnNob3coKSwgYSAmJiB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1wcmV2XCIpLmNzcyhcIm9wYWNpdHlcIiwgXCIxXCIpKSwgdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA8IHRoaXMuYWxidW0ubGVuZ3RoIC0gMSAmJiAodGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItbmV4dFwiKS5zaG93KCksIGEgJiYgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItbmV4dFwiKS5jc3MoXCJvcGFjaXR5XCIsIFwiMVwiKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS51cGRhdGVEZXRhaWxzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBORVcgUEhPVE8gQUNUSU9OICoqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoalF1ZXJ5KCdpZnJhbWUuc2J5X2xiLXBsYXllci1sb2FkZWQnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJy5zYnlfbGItcGxheWVyLXBsYWNlaG9sZGVyJykucmVwbGFjZVdpdGgoalF1ZXJ5KCdpZnJhbWUuc2J5X2xiLXBsYXllci1sb2FkZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCdpZnJhbWUuc2J5X2xiLXBsYXllci1sb2FkZWQnKS5yZW1vdmVDbGFzcygnc2J5X2xiLXBsYXllci1sb2FkZWQnKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1N3aXRjaCB2aWRlbyB3aGVuIGVpdGhlciBhIG5ldyBwb3B1cCBvciBuYXZpZ2F0aW5nIHRvIG5ldyBvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkID0gd2luZG93LnNieS5mZWVkc1t0aGlzLmFsYnVtW3RoaXMuY3VycmVudEltYWdlSW5kZXhdLmZlZWRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIuYmVmb3JlUGxheWVyU2V0dXAodGhpcy4kbGlnaHRib3gsdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XSx0aGlzLmN1cnJlbnRJbWFnZUluZGV4LHRoaXMuYWxidW0sZmVlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBzYnlfc3VwcG9ydHNfdmlkZW8oKSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NieV9saWdodGJveCcpLnJlbW92ZUNsYXNzKCdzYnlfdmlkZW9fbGlnaHRib3gnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5jb25zZW50R2l2ZW4gJiYgdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XS52aWRlby5sZW5ndGgpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJy5zYnlfZ2Rwcl9ub3RpY2UnKS5yZW1vdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGxheWVySUQgPSAnc2J5X2xiLXBsYXllcic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NieV9saWdodGJveCcpLmFkZENsYXNzKCdzYnlfdmlkZW9fbGlnaHRib3gnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHdpbmRvdy5zYnlPcHRpb25zLmlzUHJvICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjc2J5X2xpZ2h0Ym94JykuYWRkQ2xhc3MoJ3NieV9saWdodGJveF9mcmVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkZW9JRCA9IHRoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleF0udmlkZW8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXkgPSBzYnlPcHRpb25zLmF1dG9wbGF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Q6IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIGZlZWQuZW1iZWRVUkwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9JZDogdmlkZW9JRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXJWYXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVzdGJyYW5kaW5nOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWw6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5OiBhdXRvcGxheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvblN0YXRlQ2hhbmdlJzogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSBkYXRhLnRhcmdldC5nZXRWaWRlb0RhdGEoKVsndmlkZW9faWQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuYWZ0ZXJTdGF0ZUNoYW5nZShwbGF5ZXJJRCx2aWRlb0lELGRhdGEsJCgnIycgKyBwbGF5ZXJJRCkuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWxfd3JhcCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLm1heWJlQWRkQ1RBKHBsYXllcklEKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNieUxpZ2h0Ym94UGxheWVyID0gbmV3IHdpbmRvdy5ZVC5QbGF5ZXIocGxheWVySUQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNieUxpZ2h0Ym94UGxheWVyLmxvYWRWaWRlb0J5SWQodmlkZW9JRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRvdXRlckNvbnRhaW5lci5yZW1vdmVDbGFzcyhcImFuaW1hdGluZ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItZGF0YUNvbnRhaW5lclwiKS5mYWRlSW4odGhpcy5vcHRpb25zLnJlc2l6ZUR1cmF0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiLnNpemVPdmVybGF5KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNzYnlfbGlnaHRib3ggLnNieV9sYi1wbGF5ZXInKS5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQnIDogJCgnI3NieV9saWdodGJveCAuc2J5X2xiLW91dGVyQ29udGFpbmVyJykuaGVpZ2h0KCkrJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkdGgnIDogJCgnI3NieV9saWdodGJveCAuc2J5X2xiLW91dGVyQ29udGFpbmVyJykud2lkdGgoKSsncHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0b3AnOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4kbGlnaHRib3guZmluZCgnaWZyYW1lJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsaWdodGJveC5maW5kKCdpZnJhbWUnKS5hdHRyKCd0aXRsZScsdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XS52aWRlb1RpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnVsbEltYWdlID0gJCgnLnNieV9pdGVtW2RhdGEtdmlkZW8taWQ9JyArIHRoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleF0udmlkZW8rJ10nKS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtZnVsbC1yZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLnNieV9sYi1pbWFnZScpLmF0dHIoJ3NyYycsZnVsbEltYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kb3V0ZXJDb250YWluZXIucmVtb3ZlQ2xhc3MoXCJhbmltYXRpbmdcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWRhdGFDb250YWluZXJcIikuZmFkZUluKHRoaXMub3B0aW9ucy5yZXNpemVEdXJhdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYi5zaXplT3ZlcmxheSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoXCIuc2J5X2xiLWNvbnRhaW5lclwiKS5wcmVwZW5kKCc8YSBocmVmPVwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0nK3RoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleF0udmlkZW8rJ1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiBjbGFzcz1cInNieV9nZHByX25vdGljZVwiPjxzdmcgc3R5bGU9XCJjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwxKVwiIGNsYXNzPVwic3ZnLWlubGluZS0tZmEgZmEtcGxheSBmYS13LTE0IHNieV9wbGF5YnRuXCIgYXJpYS1sYWJlbD1cIlBsYXlcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBkYXRhLWZhLXByb2Nlc3NlZD1cIlwiIGRhdGEtcHJlZml4PVwiZmFcIiBkYXRhLWljb249XCJwbGF5XCIgcm9sZT1cInByZXNlbnRhdGlvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDQ0OCA1MTJcIj48cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00MjQuNCAyMTQuN0w3Mi40IDYuNkM0My44LTEwLjMgMCA2LjEgMCA0Ny45VjQ2NGMwIDM3LjUgNDAuNyA2MC4xIDcyLjQgNDEuM2wzNTItMjA4YzMxLjQtMTguNSAzMS41LTY0LjEgMC04Mi42elwiPjwvcGF0aD48L3N2Zz48L2E+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxiQnVpbGRlci5hZnRlclBsYXllclNldHVwKHRoaXMuJGxpZ2h0Ym94LHRoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleF0sdGhpcy5jdXJyZW50SW1hZ2VJbmRleCx0aGlzLmFsYnVtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsYnVtLmxlbmd0aCA+IDEgJiYgdGhpcy5vcHRpb25zLnNob3dJbWFnZU51bWJlckxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLW51bWJlclwiKS50ZXh0KHRoaXMub3B0aW9ucy5hbGJ1bUxhYmVsKHRoaXMuY3VycmVudEltYWdlSW5kZXggKyAxLCB0aGlzLmFsYnVtLmxlbmd0aCkpLmZhZGVJbihcImZhc3RcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItbnVtYmVyXCIpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUucHJlbG9hZE5laWdoYm9yaW5nSW1hZ2VzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbGJ1bS5sZW5ndGggPiB0aGlzLmN1cnJlbnRJbWFnZUluZGV4ICsgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gbmV3IEltYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuc3JjID0gdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4ICsgMV0ubGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEltYWdlSW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBuZXcgSW1hZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5zcmMgPSB0aGlzLmFsYnVtW3RoaXMuY3VycmVudEltYWdlSW5kZXggLSAxXS5saW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLmVuYWJsZUtleWJvYXJkTmF2ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKGRvY3VtZW50KS5vbihcImtleXVwLmtleWJvYXJkXCIsIGEucHJveHkodGhpcy5rZXlib2FyZEFjdGlvbiwgdGhpcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLmRpc2FibGVLZXlib2FyZE5hdiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYShkb2N1bWVudCkub2ZmKFwiLmtleWJvYXJkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLmtleWJvYXJkQWN0aW9uID0gZnVuY3Rpb24oYSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgS0VZQ09ERV9FU0MgICAgICAgID0gMjc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgS0VZQ09ERV9MRUZUQVJST1cgID0gMzc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgS0VZQ09ERV9SSUdIVEFSUk9XID0gMzk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXljb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgICAgID0gU3RyaW5nLmZyb21DaGFyQ29kZShrZXljb2RlKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleWNvZGUgPT09IEtFWUNPREVfRVNDIHx8IGtleS5tYXRjaCgveHxvfGMvKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBzYnlfc3VwcG9ydHNfdmlkZW8oKSApICQoJyNzYnlfbGlnaHRib3ggdmlkZW8uc2J5X3ZpZGVvJylbMF0ucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjc2J5X2xpZ2h0Ym94IGlmcmFtZScpLmF0dHIoJ3NyYycsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdwJyB8fCBrZXljb2RlID09PSBLRVlDT0RFX0xFRlRBUlJPVykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbWFnZUluZGV4ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlSW1hZ2UodGhpcy5jdXJyZW50SW1hZ2VJbmRleCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLndyYXBBcm91bmQgJiYgdGhpcy5hbGJ1bS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlSW1hZ2UodGhpcy5hbGJ1bS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggc2J5X3N1cHBvcnRzX3ZpZGVvKCkgKSAkKCcjc2J5X2xpZ2h0Ym94IHZpZGVvLnNieV92aWRlbycpWzBdLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3NieV9saWdodGJveCBpZnJhbWUnKS5hdHRyKCdzcmMnLCAnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbicgfHwga2V5Y29kZSA9PT0gS0VZQ09ERV9SSUdIVEFSUk9XKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEltYWdlSW5kZXggIT09IHRoaXMuYWxidW0ubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUltYWdlKHRoaXMuY3VycmVudEltYWdlSW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy53cmFwQXJvdW5kICYmIHRoaXMuYWxidW0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUltYWdlKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIucGF1c2VQbGF5ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUtleWJvYXJkTmF2KCksIGEod2luZG93KS5vZmYoXCJyZXNpemVcIiwgdGhpcy5zaXplT3ZlcmxheSksIHRoaXMuJGxpZ2h0Ym94LmZhZGVPdXQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiksIHRoaXMuJG92ZXJsYXkuZmFkZU91dCh0aGlzLm9wdGlvbnMuZmFkZUR1cmF0aW9uKSwgYShcInNlbGVjdCwgb2JqZWN0LCBlbWJlZFwiKS5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IFwidmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBiXG4gICAgICAgICAgICAgICAgICAgICAgfSgpO1xuICAgICAgICAgICAgICAgICAgICBhKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gbmV3IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGMoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9MaWdodGJveCBoaWRlIHBob3RvIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLnNieV9saWdodGJveF9hY3Rpb24gYScpLm9mZigpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50KCkuZmluZCgnLnNieV9saWdodGJveF90b29sdGlwJykudG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSkuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2J5T3B0aW9ucy5saWdodGJveENyZWF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNyZWF0ZUZlZWRzOiBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgICAgICAgIGlmICggIXNieU9wdGlvbnMuaXNBZG1pbiAmJiBzYnlPcHRpb25zLmxpZ2h0Ym94Q3JlYXRlZCA9PT0gdW5kZWZpbmVkICkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmNyZWF0ZUxpZ2h0Ym94KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFyZ3Mud2hlbkZlZWRzQ3JlYXRlZChcbiAgICAgICAgICAgICAgICAgICQoJy5zYl95b3V0dWJlJykuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2RhdGEtc2J5LWluZGV4JywgaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJy5zYnlfcGxheWVyJykucmVwbGFjZVdpdGgoJzxkaXYgaWQ9XCJzYnlfcGxheWVyJytpbmRleCsnXCI+PC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gdHlwZW9mICRzZWxmLmF0dHIoJ2RhdGEtc2J5LWZsYWdzJykgIT09ICd1bmRlZmluZWQnID8gJHNlbGYuYXR0cignZGF0YS1zYnktZmxhZ3MnKS5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmFsID0gdHlwZW9mICRzZWxmLmF0dHIoJ2RhdGEtb3B0aW9ucycpICE9PSAndW5kZWZpbmVkJyA/IEpTT04ucGFyc2UoJHNlbGYuYXR0cignZGF0YS1vcHRpb25zJykpIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzLmluZGV4T2YoJ3Rlc3RBamF4JykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LnRyaWdnZXJlZFRlc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VibWl0RGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbicgOiAnc2J5X29uX2FqYXhfdGVzdF90cmlnZ2VyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TdWNjZXNzID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZGlkIHRlc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzYnlBamF4KHN1Ym1pdERhdGEsb25TdWNjZXNzKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHMgOiAkc2VsZi5hdHRyKCdkYXRhLWNvbHMnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sc21vYmlsZSA6ICRzZWxmLmF0dHIoJ2RhdGEtY29sc21vYmlsZScpICE9PSAnc2FtZScgPyAkc2VsZi5hdHRyKCdkYXRhLWNvbHNtb2JpbGUnKSA6ICRzZWxmLmF0dHIoJ2RhdGEtY29scycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBudW0gOiAkc2VsZi5hdHRyKCdkYXRhLW51bScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdSZXMgOiAkc2VsZi5hdHRyKCdkYXRhLXJlcycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkSUQgOiAkc2VsZi5hdHRyKCdkYXRhLWZlZWRpZCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0SUQgOiB0eXBlb2YgJHNlbGYuYXR0ciggJ2RhdGEtcG9zdGlkJyApICE9PSAndW5kZWZpbmVkJyA/ICRzZWxmLmF0dHIoICdkYXRhLXBvc3RpZCcgKSA6ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRDb2RlQXR0cyA6ICRzZWxmLmF0dHIoJ2RhdGEtc2hvcnRjb2RlLWF0dHMnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXppbmdFbmFibGVkIDogKGZsYWdzLmluZGV4T2YoJ3Jlc2l6ZURpc2FibGUnKSA9PT0gLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUxvYWRFbmFibGVkIDogKGZsYWdzLmluZGV4T2YoJ2ltYWdlTG9hZERpc2FibGUnKSA9PT0gLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0VuYWJsZWQgOiAoZmxhZ3MuaW5kZXhPZignZGVidWcnKSA+IC0xKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmF2b3JMb2NhbCA6IChmbGFncy5pbmRleE9mKCdmYXZvckxvY2FsJykgPiAtMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhQb3N0TG9hZCA6IChmbGFncy5pbmRleE9mKCdhamF4UG9zdExvYWQnKSA+IC0xKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tXUFBvc3RzIDogKGZsYWdzLmluZGV4T2YoJ2NoZWNrV1BQb3N0cycpID4gLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVDaGVja1Bvc3RzIDogKGZsYWdzLmluZGV4T2YoJ3NpbmdsZUNoZWNrUG9zdHMnKSA+IC0xKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFycm93UGxheWVyIDogKGZsYWdzLmluZGV4T2YoJ25hcnJvd1BsYXllcicpID4gLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnZHByIDogKGZsYWdzLmluZGV4T2YoJ2dkcHInKSA+IC0xKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VudEdpdmVuIDogKGZsYWdzLmluZGV4T2YoJ2dkcHInKSA9PT0gLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBub0NETiA6IChmbGFncy5pbmRleE9mKCdkaXNhYmxlY2RuJykgPiAtMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93Q29va2llczogKGZsYWdzLmluZGV4T2YoJ2FsbG93Y29va2llcycpID4gLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodGJveEVuYWJsZWQgOiB0eXBlb2YgJHNlbGYuYXR0cignZGF0YS1zYnktc3VwcG9ydHMtbGlnaHRib3gnKSAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0b3IgOiAoZmxhZ3MuaW5kZXhPZignbG9jYXRvcicpID4gLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvTWluUmVzIDogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbCA6IGdlbmVyYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZUJhckVuYWJsZWQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNieS5mZWVkc1tpbmRleF0gPSBzYnlHZXROZXdGZWVkKHRoaXMsIGluZGV4LCBmZWVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5QVBJUmVhZHkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdLnBsYXllckFQSVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNieS5mZWVkc1tpbmRleF0uc2V0UmVzaXplZEltYWdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdLmluaXQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ3NieWFmdGVyZmVlZGNyZWF0ZScpO1xuICAgICAgICAgICAgICAgICAgICAgIGV2dC5mZWVkID0gd2luZG93LnNieS5mZWVkc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KHdpbmRvdykudHJpZ2dlcihldnQpO1xuXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJGZWVkc0NyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvLyBlbmFibGUgaGVhZGVyIGhvdmVyIGFjdGlvblxuICAgICAgICAgICAgICAgICQoJy5zYl95b3V0dWJlX2hlYWRlcicpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJHRoaXNIZWFkZXIgPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAkdGhpc0hlYWRlci5maW5kKCcuc2J5X2hlYWRlcl9saW5rJykub24oJ21vdXNlZW50ZXIgbW91c2VsZWF2ZScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtb3VzZWVudGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXNIZWFkZXIuZmluZCgnLnNieV9oZWFkZXJfaW1nX2hvdmVyJykuYWRkQ2xhc3MoJ3NieV9mYWRlX2luJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21vdXNlbGVhdmUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpc0hlYWRlci5maW5kKCcuc2J5X2hlYWRlcl9pbWdfaG92ZXInKS5yZW1vdmVDbGFzcygnc2J5X2ZhZGVfaW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5zYnlBUElSZWFkeSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdzYnlmZWVkYW5keXRyZWFkeScpO1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkod2luZG93KS50cmlnZ2VyKGV2dCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jb2RlSFRNTDogZnVuY3Rpb24ocmF3KSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHBhc3NlZCB2YXJpYWJsZSBpcyBkZWZpbmVkXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByYXcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBncmVhdGVyIHRoYW4gYW5kIGxlc3MgdGhhbiBzeW1ib2xzIHdpdGggaHRtbCBlbnRpdHkgdG8gZGlzYWxsb3cgaHRtbCBpbiBjb21tZW50c1xuICAgICAgICAgICAgICAgIHZhciBlbmNvZGVkID0gcmF3LnJlcGxhY2UoLyg+KS9nLCcmZ3Q7JyksXG4gICAgICAgICAgICAgICAgICBlbmNvZGVkID0gZW5jb2RlZC5yZXBsYWNlKC8oPCkvZywnJmx0OycpO1xuICAgICAgICAgICAgICAgIGVuY29kZWQgPSBlbmNvZGVkLnJlcGxhY2UoLygmbHQ7YnJcXC8mZ3Q7KS9nLCc8YnI+Jyk7XG4gICAgICAgICAgICAgICAgZW5jb2RlZCA9IGVuY29kZWQucmVwbGFjZSgvKCZsdDticiZndDspL2csJzxicj4nKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVybERldGVjdDogZnVuY3Rpb24odGV4dCkge1xuICAgICAgICAgICAgICAgIHZhciB1cmxSZWdleCA9IC9odHRwcz86XFwvXFwvKHd3d1xcLik/Wy1hLXpBLVowLTlAOiUuX1xcK34jPV17MiwyNTZ9XFwuW2Etel17Miw2fVxcYihbLWEtekEtWjAtOUA6JV9cXCsufiM/Ji8vPV0qKS9nO1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0Lm1hdGNoKHVybFJlZ2V4KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjdGFEZXRlY3Q6IGZ1bmN0aW9uKHRleHQpIHtcblxuICAgICAgICAgICAgICAgIHZhciBjdGFNYXRjaGVzID0gdGV4dC5tYXRjaCgve0xpbms6KC4qKX0vZyksXG4gICAgICAgICAgICAgICAgICBjdGEgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChjdGFNYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1cmxNYXRjaGVzID0gd2luZG93LnNieS51cmxEZXRlY3QoY3RhTWF0Y2hlc1swXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybE1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSB1cmxNYXRjaGVzWzBdLnRyaW0oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2J5QnV0dG9uVGV4dCA9IGN0YU1hdGNoZXNbMF0ucmVwbGFjZSgne0xpbms6JywnJykucmVwbGFjZSgnfScsJycpLnJlcGxhY2UodXJsLCcnKS5yZXBsYWNlKCcgICcsJyAnKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6ICdsaW5rJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzYnlCdXR0b25UZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0NUQSBmb3VuZCBidXQgbm8gVVJMJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY3RhO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNodWZmbGU6IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeVZhbHVlLFxuICAgICAgICAgICAgICAgICAgcmFuZG9tSW5kZXg7XG5cbiAgICAgICAgICAgICAgICAvLyBXaGlsZSB0aGVyZSByZW1haW4gZWxlbWVudHMgdG8gc2h1ZmZsZS4uLlxuICAgICAgICAgICAgICAgIHdoaWxlICgwICE9PSBjdXJyZW50SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUGljayBhIHJlbWFpbmluZyBlbGVtZW50Li4uXG4gICAgICAgICAgICAgICAgICAgIHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY3VycmVudEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEluZGV4IC09IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQW5kIHN3YXAgaXQgd2l0aCB0aGUgY3VycmVudCBlbGVtZW50LlxuICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnlWYWx1ZSA9IGFycmF5W2N1cnJlbnRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2N1cnJlbnRJbmRleF0gPSBhcnJheVtyYW5kb21JbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W3JhbmRvbUluZGV4XSA9IHRlbXBvcmFyeVZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBTYnlGZWVkKGVsLCBpbmRleCwgc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuZWwgPSBlbDtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJVUkwgPSB3aW5kb3cuc2J5Lm9wdGlvbnMucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MubmFycm93UGxheWVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclVSTCA9IHdpbmRvdy5zYnkub3B0aW9ucy5wbGFjZWhvbGRlck5hcnJvd1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wbGF5ZXJBUElSZWFkeSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jb25zZW50R2l2ZW4gPSBzZXR0aW5ncy5jb25zZW50R2l2ZW47XG4gICAgICAgICAgICB0aGlzLnBsYXllcnMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMubWluSW1hZ2VXaWR0aCA9IDA7XG4gICAgICAgICAgICB0aGlzLmltYWdlUmVzb2x1dGlvbiA9IDE1MDtcbiAgICAgICAgICAgIHRoaXMucmVzaXplZEltYWdlcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5uZWVkc1Jlc2l6aW5nID0gW107XG4gICAgICAgICAgICB0aGlzLm91dE9mUGFnZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5tb3N0UmVjZW50bHlMb2FkZWRQb3N0cyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5lbWJlZFVSTCA9ICcvL3d3dy55b3V0dWJlLW5vY29va2llLmNvbSc7XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuYWxsb3dDb29raWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWJlZFVSTCA9ICcvL3d3dy55b3V0dWJlLmNvbSdcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgU2J5RmVlZC5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmVlZCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgZmVlZC5zZXR0aW5ncy5jb25zZW50R2l2ZW4gPSBmZWVkLmNoZWNrQ29uc2VudCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZlZWQuc2V0dGluZ3MuY29uc2VudEdpdmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkubWF5YmVBZGRZVEFQSSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLm5vQ0ROICYmICFmZWVkLnNldHRpbmdzLmNvbnNlbnRHaXZlbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzLmVsKS5maW5kKCcuc2JfeW91dHViZV9oZWFkZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcy5lbCkuZmluZCgnLnNiX3lvdXR1YmVfaGVhZGVyJykuYWRkQ2xhc3MoJ3NieV9ub19jb25zZW50JylcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMuZWwpLnByZXYoJy5zYl95b3V0dWJlX2hlYWRlcicpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzLmVsKS5wcmV2KCcuc2JfeW91dHViZV9oZWFkZXInKS5hZGRDbGFzcygnc2J5X25vX2NvbnNlbnQnKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMuZWwpLmZpbmQoJyNzYnlfbW9kX2Vycm9yJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcy5lbCkucHJlcGVuZCgkKHRoaXMuZWwpLmZpbmQoJyNzYnlfbW9kX2Vycm9yJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5hamF4UG9zdExvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXROZXdQb3N0U2V0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZnRlckluaXRpYWxJbWFnZXNMb2FkZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgLy9Pbmx5IGNoZWNrIHRoZSB3aWR0aCBvbmNlIHRoZSByZXNpemUgZXZlbnQgaXMgb3ZlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgc2J5X2RlbGF5ID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNieV90aW1lciA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoc2J5X2NhbGxiYWNrLCBzYnlfbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChzYnlfdGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2J5X3RpbWVyID0gc2V0VGltZW91dChzYnlfY2FsbGJhY2ssIHNieV9tcyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICBqUXVlcnkod2luZG93KS5vbigncmVzaXplJyxmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNieV9kZWxheShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVyUmVzaXplKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluaXRMYXlvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdEdhbGxlcnlMYXlvdXQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbml0R2FsbGVyeUxheW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9nYWxsZXJ5JykgJiYgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1heWJlUmFpc2VTaW5nbGVJbWFnZVJlc29sdXRpb24oJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLCAwLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCAuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLm9mZigpLm9uKCdjbGljaycsZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCFmZWVkLnNldHRpbmdzLmxpZ2h0Ym94RW5hYmxlZCB8fCAoZmVlZC5zZXR0aW5ncy5saWdodGJveEVuYWJsZWQgJiYgZmVlZC5zZXR0aW5ncy5ub0NETikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmIChmZWVkLnNldHRpbmdzLm5vQ0ROIHx8ICFmZWVkLnNldHRpbmdzLmNvbnNlbnRHaXZlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5jbG9zZXN0KCcuc2J5X2l0ZW0nKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfaXRlbScpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdocmVmJywnaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0nKyQodGhpcykuY2xvc2VzdCgnLnNieV9pdGVtJykuYXR0cignZGF0YS12aWRlby1pZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQub25UaHVtYm5haWxDbGljaygkKHRoaXMpLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5maXJzdCgpLmFkZENsYXNzKCdzYnlfY3VycmVudCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICRzZWxmLm9uKCdtb3VzZWVudGVyJyxmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmVlZC5jYW5DcmVhdGVQbGF5ZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCBpZnJhbWUnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5hZGRDbGFzcygnc2J5X3BsYXllcl9hZGRlZCcpLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAnKS5hZGRDbGFzcygnc2J5X3BsYXllcl9sb2FkaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCAuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpbmQoJy5zYnlfbG9hZGVyJykuc2hvdygpLnJlbW92ZUNsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5jcmVhdGVQbGF5ZXIoJ3NieV9wbGF5ZXInK2ZlZWQuaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmVlZC5wbGF5ZXIgPT09ICd1bmRlZmluZWQnICYmIGZlZWQucGxheWVyRWFnZXJMb2FkZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyJytmZWVkLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5zYnlTZW1pRWFnZXJMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmNyZWF0ZVBsYXllcignc2J5X3BsYXllcicrZmVlZC5pbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5ub0NETikge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLmFwcGVuZCgnPGRpdiBjbGFzcz1cInNieV9wbGF5X2J0blwiPlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYnlfcGxheV9idG5fYmdcIj48L3NwYW4+XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIDxzdmcgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZm9jdXNhYmxlPVwiZmFsc2VcIiBkYXRhLXByZWZpeD1cImZhYlwiIGRhdGEtaWNvbj1cInlvdXR1YmVcIiByb2xlPVwiaW1nXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTc2IDUxMlwiIGNsYXNzPVwic3ZnLWlubGluZS0tZmEgZmEteW91dHViZSBmYS13LTE4XCI+PHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNNTQ5LjY1NSAxMjQuMDgzYy02LjI4MS0yMy42NS0yNC43ODctNDIuMjc2LTQ4LjI4NC00OC41OTdDNDU4Ljc4MSA2NCAyODggNjQgMjg4IDY0UzExNy4yMiA2NCA3NC42MjkgNzUuNDg2Yy0yMy40OTcgNi4zMjItNDIuMDAzIDI0Ljk0Ny00OC4yODQgNDguNTk3LTExLjQxMiA0Mi44NjctMTEuNDEyIDEzMi4zMDUtMTEuNDEyIDEzMi4zMDVzMCA4OS40MzggMTEuNDEyIDEzMi4zMDVjNi4yODEgMjMuNjUgMjQuNzg3IDQxLjUgNDguMjg0IDQ3LjgyMUMxMTcuMjIgNDQ4IDI4OCA0NDggMjg4IDQ0OHMxNzAuNzggMCAyMTMuMzcxLTExLjQ4NmMyMy40OTctNi4zMjEgNDIuMDAzLTI0LjE3MSA0OC4yODQtNDcuODIxIDExLjQxMi00Mi44NjcgMTEuNDEyLTEzMi4zMDUgMTEuNDEyLTEzMi4zMDVzMC04OS40MzgtMTEuNDEyLTEzMi4zMDV6bS0zMTcuNTEgMjEzLjUwOFYxNzUuMTg1bDE0Mi43MzkgODEuMjA1LTE0Mi43MzkgODEuMjAxelwiIGNsYXNzPVwiXCI+PC9wYXRoPjwvc3ZnPiAgICAgICAgICAgICAgICAgICAgPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjcmVhdGVQbGF5ZXI6IGZ1bmN0aW9uKHBsYXllcklELHZpZGVvSUQsYXV0b3BsYXksYXJncykge1xuICAgICAgICAgICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCksXG4gICAgICAgICAgICAgICAgICBmZWVkID0gdGhpcztcbiAgICAgICAgICAgICAgICB2aWRlb0lEID0gdHlwZW9mIHZpZGVvSUQgIT09ICd1bmRlZmluZWQnID8gdmlkZW9JRCA6IHRoaXMuZ2V0VmlkZW9JRCgkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5maXJzdCgpKTtcbiAgICAgICAgICAgICAgICBhdXRvcGxheSA9IHR5cGVvZiBhdXRvcGxheSAhPT0gJ3VuZGVmaW5lZCcgPyBhdXRvcGxheSA6IDA7XG5cbiAgICAgICAgICAgICAgICAvLyBkbyBub3QgY3JlYXRlIHBsYXllciBpbiBjdXN0b21pemVyIHByZXZpZXdcbiAgICAgICAgICAgICAgICBpZiAoIHNieU9wdGlvbnMuaXNDdXN0b21pemVyICE9PSB1bmRlZmluZWQgJiYgc2J5T3B0aW9ucy5pc0N1c3RvbWl6ZXIgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBob3N0OiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBmZWVkLmVtYmVkVVJMLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9JZDogdmlkZW9JRCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXllclZhcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rlc3RicmFuZGluZzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWw6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXk6IGF1dG9wbGF5XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJncy5ldmVudHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MuZXZlbnRzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ29uUmVhZHknOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLnJlbW92ZUNsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmNzcygnei1pbmRleCcsIC0xKS5maW5kKCcuc2J5X2xvYWRlcicpLmhpZGUoKS5hZGRDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKCcjJyArIHBsYXllcklEKS5sZW5ndGggJiYgJCgnIycgKyBwbGF5ZXJJRCkuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWxfd3JhcCcpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyMnICsgcGxheWVySUQpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsX3dyYXAnKS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZhZGVUbygwLCAnc2xvdycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuY3NzKCd6LWluZGV4JywgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2xvYWRlcicpLmhpZGUoKS5hZGRDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuc2J5X2l0ZW0nKS5yZW1vdmVDbGFzcygnc2J5X3BsYXllcl9sb2FkaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdzYnlhZnRlcnBsYXllcnJlYWR5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LmZlZWQgPSBmZWVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5wbGF5ZXIgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnb25TdGF0ZUNoYW5nZSc6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJykucmVtb3ZlQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGluZycpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuY3NzKCd6LWluZGV4JywgLTEpLmZpbmQoJy5zYnlfbG9hZGVyJykuaGlkZSgpLmFkZENsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5hZnRlclN0YXRlQ2hhbmdlKHBsYXllcklELHZpZGVvSUQsZGF0YSwkKCcjJyArIHBsYXllcklEKS5jbG9zZXN0KCcuc2J5X3ZpZGVvX3RodW1ibmFpbF93cmFwJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRhdGEgIT09IDEpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZlZWQucGxheWVycyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtVmlkSUQgPSBmZWVkLmdldFZpZGVvSUQoJCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5maW5kKCdpZnJhbWUnKS5sZW5ndGggJiYgKGl0ZW1WaWRJRCAhPT0gdmlkZW9JRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZlZWQucGxheWVyc1tpdGVtVmlkSURdICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZmVlZC5wbGF5ZXJzW2l0ZW1WaWRJRF0ucGF1c2VWaWRlbyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLnBsYXllcnNbaXRlbVZpZElEXS5wYXVzZVZpZGVvKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5zYnlFYWdlckxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1BsYXllciA9IFlULmdldChwbGF5ZXJJRCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1BsYXllciA9IG5ldyB3aW5kb3cuWVQuUGxheWVyKHBsYXllcklELCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm1heWJlQWRkQ1RBKHBsYXllcklEKTtcblxuICAgICAgICAgICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9saXN0JykgJiYgdHlwZW9mIHRoaXMucGxheWVyc1t2aWRlb0lEXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXJzW3ZpZGVvSURdID0gbmV3UGxheWVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucGxheWVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXllciA9IG5ld1BsYXllcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdzYnlhZnRlcnBsYXllcmNyZWF0ZWQnKTtcbiAgICAgICAgICAgICAgICBldnQuZmVlZCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgalF1ZXJ5KHdpbmRvdykudHJpZ2dlcihldnQpO1xuXG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCAuc2J5X3BsYXlfYnRuJykucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3UGxheWVyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFmdGVyU3RhdGVDaGFuZ2U6IGZ1bmN0aW9uKHBsYXllcklELHZpZGVvSUQsZGF0YSwkcGxheWVyKSB7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJJbml0aWFsSW1hZ2VzTG9hZGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRMYXlvdXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb3JlQnV0dG9uSW5pdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZUV4dHJhSXRlbXNGb3JXaWR0aCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmVmb3JlTmV3SW1hZ2VzUmV2ZWFsZWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJldmVhbE5ld0ltYWdlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJOZXdJbWFnZXNSZXZlYWxlZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJGZWVkU2V0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaXplUGxheWVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaXplSXRlbXMoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseUZ1bGxGZWF0dXJlcygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRmVhdHVyZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJSZXNpemU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW1hZ2VIZWlnaHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEltYWdlUmVzb2x1dGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMubWF5YmVSYWlzZUltYWdlUmVzb2x1dGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW1hZ2VTaXplQ2xhc3MoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZnRlckxvYWRNb3JlQ2xpY2tlZDogZnVuY3Rpb24oJGJ1dHRvbikge1xuICAgICAgICAgICAgICAgICRidXR0b24uZmluZCgnLnNieV9sb2FkZXInKS5yZW1vdmVDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICRidXR0b24uZmluZCgnLnNieV9idG5fdGV4dCcpLmFkZENsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgJGJ1dHRvbi5jbG9zZXN0KCcuc2JfeW91dHViZScpLmZpbmQoJy5zYnlfbnVtX2RpZmZfaGlkZScpLmFkZENsYXNzKCdzYnlfdHJhbnNpdGlvbicpLnJlbW92ZUNsYXNzKCdzYnlfbnVtX2RpZmZfaGlkZScpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFmdGVyTmV3SW1hZ2VzTG9hZGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgICAgICAgICAgZmVlZCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVOZXdJbWFnZXNSZXZlYWxlZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmV2ZWFsTmV3SW1hZ2VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlck5ld0ltYWdlc1JldmVhbGVkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaXplUGxheWVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaXplSXRlbXMoKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9IaWRlIHRoZSBsb2FkZXIgaW4gdGhlIGxvYWQgbW9yZSBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9sb2FkZXInKS5hZGRDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2J0bl90ZXh0JykucmVtb3ZlQ2xhc3MoJ3NieV9oaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgZmVlZC5tYXliZVJhaXNlSW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlGdWxsRmVhdHVyZXMoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZlYXR1cmVzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJlZm9yZU5ld0ltYWdlc1JldmVhbGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEltYWdlSGVpZ2h0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXliZVJhaXNlSW1hZ2VSZXNvbHV0aW9uKHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW1hZ2VTaXplQ2xhc3MoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZnRlckZlZWRTZXQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2l6ZVBsYXllcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9nYWxsZXJ5JykpIHtcbiAgICAgICAgICAgICAgICAgICAgJHBsYXllclRodW1ibmFpbCA9ICRzZWxmLmZpbmQoJy5zYnlfcGxheWVyX2l0ZW0nKS5maW5kKCcuc2J5X3BsYXllcl92aWRlb190aHVtYm5haWwnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXllcldpZHRoID0gJHBsYXllclRodW1ibmFpbC5pbm5lcldpZHRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgbmV3UGxheWVySGVpZ2h0ID0gTWF0aC5mbG9vcihwbGF5ZXJXaWR0aCAqIDkgLyAxNik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLm5hcnJvd1BsYXllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGxheWVySGVpZ2h0ID0gTWF0aC5mbG9vcihwbGF5ZXJXaWR0aCAqIDMgLyA0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkcGxheWVyVGh1bWJuYWlsLmNzcygnaGVpZ2h0JyxuZXdQbGF5ZXJIZWlnaHQrJ3B4JykuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9saXN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgJHBsYXllclRodW1ibmFpbCA9ICQodGhpcykuZmluZCgnLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXllcldpZHRoID0gJHBsYXllclRodW1ibmFpbC5pbm5lcldpZHRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BsYXllckhlaWdodCA9IE1hdGguZmxvb3IocGxheWVyV2lkdGggKiA5IC8gMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZlZWQuc2V0dGluZ3MubmFycm93UGxheWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGxheWVySGVpZ2h0ID0gTWF0aC5mbG9vcihwbGF5ZXJXaWR0aCAqIDMgLyA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICRwbGF5ZXJUaHVtYm5haWwuY3NzKCdoZWlnaHQnLG5ld1BsYXllckhlaWdodCsncHgnKS5jc3MoJ292ZXJmbG93JywnaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaXplSXRlbXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCksXG4gICAgICAgICAgICAgICAgICBmZWVkID0gdGhpcztcbiAgICAgICAgICAgICAgICBpZiAoISRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2xpc3QnKSkge1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5maW5kKCcuc2J5X2l0ZW1fdmlkZW9fdGh1bWJuYWlsJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdzYnlfaW1nTGlxdWlkX3JlYWR5JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGh1bWJXaWR0aCA9ICQodGhpcykuaW5uZXJXaWR0aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGh1bWJIZWlnaHQgPSBNYXRoLmZsb29yKHRodW1iV2lkdGggKiA5IC8gMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuY3NzKCdoZWlnaHQnLG5ld1RodW1iSGVpZ2h0KydweCcpLmNzcygnb3ZlcmZsb3cnLCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmV2ZWFsTmV3SW1hZ2VzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgICAgICAgICAgZmVlZCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUltYWdlTGlxdWlkKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBDYWxsIEN1c3RvbSBKUyBpZiBpdCBleGlzdHNcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNieUN1c3RvbUpTID09ICdmdW5jdGlvbicpIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgc2J5Q3VzdG9tSlMoKTsgfSwgMTAwKTtcblxuICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnktc2NyZWVucmVhZGVyJykuZmluZCgnaW1nJykucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0uc2J5X25ldycpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkc2VsZiA9IGpRdWVyeSh0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICAvL1Bob3RvIGxpbmtzXG4gICAgICAgICAgICAgICAgICAgIC8vSWYgbGlnaHRib3ggaXMgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9JRCA9ICRzZWxmLmF0dHIoJ2RhdGEtdmlkZW8taWQnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LnNieUVhZ2VyTG9hZGluZyAmJiBmZWVkLmNhbkNyZWF0ZVBsYXllcigpICYmICQoJyNzYnlfcGxheWVyXycrdmlkZW9JRCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXIgPSBuZXcgWVQuUGxheWVyKCdzYnlfcGxheWVyXycrdmlkZW9JRCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvSWQ6IHZpZGVvSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyVmFyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rlc3RicmFuZGluZzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvcGxheTogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvblN0YXRlQ2hhbmdlJzogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSBkYXRhLnRhcmdldC5nZXRWaWRlb0RhdGEoKVsndmlkZW9faWQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRhdGEgIT09IDEpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1WaWRJRCA9IGpRdWVyeSh0aGlzKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoalF1ZXJ5KHRoaXMpLmZpbmQoJ2lmcmFtZScpLmxlbmd0aCAmJiBqUXVlcnkoZGF0YS50YXJnZXQuYSkuYXR0cignaWQnKSAhPT0galF1ZXJ5KHRoaXMpLmZpbmQoJ2lmcmFtZScpLmF0dHIoJ2lkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVQuZ2V0KCdzYnlfcGxheWVyXycraXRlbVZpZElEKS5wYXVzZVZpZGVvKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykub24oJ21vdXNlZW50ZXInLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5vblRodW1ibmFpbEVudGVyKCQodGhpcyksIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfcGxheWVyX3dyYXAnKS5vbignbW91c2VsZWF2ZScsZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZWVkLm9uVGh1bWJuYWlsTGVhdmUoJCh0aGlzKSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy9pbml0IGNsaWNrXG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykub24oJ2NsaWNrJyxmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCghZmVlZC5zZXR0aW5ncy5saWdodGJveEVuYWJsZWQgfHwgKGZlZWQuc2V0dGluZ3MubGlnaHRib3hFbmFibGVkICYmIGZlZWQuc2V0dGluZ3Mubm9DRE4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoZmVlZC5zZXR0aW5ncy5ub0NETiB8fCAhZmVlZC5zZXR0aW5ncy5jb25zZW50R2l2ZW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuY2xvc2VzdCgnLnNieV9pdGVtJykubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0eXBlb2YgJCh0aGlzKS5jbG9zZXN0KCcuc2J5X2l0ZW0nKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignaHJlZicsJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9JyskKHRoaXMpLmNsb3Nlc3QoJy5zYnlfaXRlbScpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZWVkLm9uVGh1bWJuYWlsQ2xpY2soJCh0aGlzKSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsaWdodGJveFxuICAgICAgICAgICAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5saWdodGJveEVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS1zYnktbGlnaHRib3gnLGZlZWQuaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzYnlPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygc2J5T3B0aW9ucy5saWdodGJveFBsYWNlaG9sZGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLm5hcnJvd1BsYXllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2hyZWYnLHNieU9wdGlvbnMubGlnaHRib3hQbGFjZWhvbGRlck5hcnJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdocmVmJyxzYnlPcHRpb25zLmxpZ2h0Ym94UGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVySXRlbVJldmVhbGVkKCRzZWxmKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBubyBpbmZvXG4gICAgICAgICAgICAgICAgICAgIGlmICgkc2VsZi5maW5kKCcuc2J5X2luZm9faXRlbScpLnRleHQoKS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2luZm9faXRlbScpLmFkZENsYXNzKCdzYnlfbm9fc3BhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pOyAvL0VuZCAuc2J5X2l0ZW0gZWFjaFxuXG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfaXRlbScpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkc2VsZiA9IGpRdWVyeSh0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVySXRlbVJldmVhbGVkKCRzZWxmKTtcbiAgICAgICAgICAgICAgICB9KTsgLy9FbmQgLnNieV9pdGVtIGVhY2hcblxuICAgICAgICAgICAgICAgIC8vUmVtb3ZlIHRoZSBuZXcgY2xhc3MgYWZ0ZXIgNTAwbXMsIG9uY2UgdGhlIHNvcnRpbmcgaXMgZG9uZVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0uc2J5X25ldycpLnJlbW92ZUNsYXNzKCdzYnlfbmV3Jyk7XG4gICAgICAgICAgICAgICAgICAgIC8vTG9vcCB0aHJvdWdoIGl0ZW1zIGFuZCByZW1vdmUgY2xhc3MgdG8gcmV2ZWFsIHRoZW1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWUgPSAxLFxuICAgICAgICAgICAgICAgICAgICAgIG51bSA9ICRzZWxmLmZpbmQoJy5zYnlfdHJhbnNpdGlvbicpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV90cmFuc2l0aW9uJykuZWFjaChmdW5jdGlvbihpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRzYnlfaXRlbV90cmFuc2l0aW9uX2VsID0galF1ZXJ5KHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzYnlfaXRlbV90cmFuc2l0aW9uX2VsLnJlbW92ZUNsYXNzKCdzYnlfdHJhbnNpdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RpbWUgKz0gMTA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIDEpO1xuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJJdGVtUmV2ZWFsZWQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJOZXdJbWFnZXNSZXZlYWxlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5Gb3JWaXNpYmlsaXR5Q2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kTmVlZHNSZXNpemluZ1RvU2VydmVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kQ2hlY2tXUFBvc3RzVG9TZXJ2ZXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2V0dGluZ3MuaW1hZ2VMb2FkRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAkKCcuc2J5X25vX3Jlc3JhaXNlJykucmVtb3ZlQ2xhc3MoJ3NieV9ub19yZXNyYWlzZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBldnQgPSAkLkV2ZW50KCdzYnlhZnRlcmltYWdlc2xvYWRlZCcpO1xuICAgICAgICAgICAgICAgIGV2dC5lbCA9ICQodGhpcy5lbCk7XG4gICAgICAgICAgICAgICAgJCh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRSZXNpemVkSW1hZ2VzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQodGhpcy5lbCkuZmluZCgnLnNieV9yZXNpemVkX2ltYWdlX2RhdGEnKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcmVzaXplZF9pbWFnZV9kYXRhJykuYXR0cignZGF0YS1yZXNpemVkJykgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAmJiAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcmVzaXplZF9pbWFnZV9kYXRhJykuYXR0cignZGF0YS1yZXNpemVkJykuaW5kZXhPZigne1wiJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemVkSW1hZ2VzID0gSlNPTi5wYXJzZSgkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcmVzaXplZF9pbWFnZV9kYXRhJykuYXR0cignZGF0YS1yZXNpemVkJykpO1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcmVzaXplZF9pbWFnZV9kYXRhJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbmROZWVkc1Jlc2l6aW5nVG9TZXJ2ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBmZWVkID0gdGhpcztcbiAgICAgICAgICAgICAgICBpZiAoZmVlZC5uZWVkc1Jlc2l6aW5nLmxlbmd0aCA+IDAgJiYgZmVlZC5zZXR0aW5ncy5yZXNpemluZ0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1PZmZzZXQgPSAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfaXRlbScpLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgc3VibWl0RGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ3NieV9yZXNpemVkX2ltYWdlc19zdWJtaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHNfcmVzaXppbmc6IGZlZWQubmVlZHNSZXNpemluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogaXRlbU9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRfaWQ6IGZlZWQuc2V0dGluZ3MuZmVlZElELFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGZlZWQubG9jYXRpb25HdWVzcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zdF9pZDogZmVlZC5zZXR0aW5ncy5wb3N0SUQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRzOiBmZWVkLnNldHRpbmdzLnNob3J0Q29kZUF0dHMsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBvblN1Y2Nlc3MgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS50cmltKCkuaW5kZXhPZigneycpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5kZWJ1Z0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgc2J5QWpheChzdWJtaXREYXRhLG9uU3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbmRDaGVja1dQUG9zdHNUb1NlcnZlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmNoZWNrV1BQb3N0cyB8fCBmZWVkLnNldHRpbmdzLnNpbmdsZUNoZWNrUG9zdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWRJRCA9IHR5cGVvZiBmZWVkLnNldHRpbmdzLmZlZWRJRCAhPT0gJ3VuZGVmaW5lZCcgPyBmZWVkLnNldHRpbmdzLmZlZWRJRCA6ICdzYnlfc2luZ2xlJyxcbiAgICAgICAgICAgICAgICAgICAgICBwb3N0cyA9IGZlZWQubW9zdFJlY2VudGx5TG9hZGVkUG9zdHM7XG4gICAgICAgICAgICAgICAgICAgIGZlZWQubW9zdFJlY2VudGx5TG9hZGVkUG9zdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN1Ym1pdERhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdzYnlfY2hlY2tfd3Bfc3VibWl0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRfaWQ6IGZlZWRJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHM6IGZlZWQuc2V0dGluZ3Muc2hvcnRDb2RlQXR0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBmZWVkLmxvY2F0aW9uR3Vlc3MoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RfaWQ6IGZlZWQuc2V0dGluZ3MucG9zdElELFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAhICQodGhpcy5lbCkuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfY2Fyb3VzZWwnKSA/ICQodGhpcy5lbCkuZmluZCgnLnNieV9pdGVtJykubGVuZ3RoIDogTWF0aC5mbG9vcigoJCh0aGlzLmVsKS5maW5kKCcuc2J5X2l0ZW0nKS5sZW5ndGggLyAyKSAtMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3N0czogcG9zdHNcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9uU3VjY2VzcyA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnRyaW0oKS5pbmRleE9mKCd7JykgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuYWZ0ZXJTZW5kQ2hlY2tXUFBvc3RzVG9TZXJ2ZXIocmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHNieUFqYXgoc3VibWl0RGF0YSxvblN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZnRlclNlbmRDaGVja1dQUG9zdHNUb1NlcnZlcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2FkTW9yZUJ1dHRvbkluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgICAgICAgICAgZmVlZCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9mb290ZXIgLnNieV9sb2FkX2J0bicpLm9mZigpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZmVlZC5hZnRlckxvYWRNb3JlQ2xpY2tlZChqUXVlcnkodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICBmZWVkLmdldE5ld1Bvc3RTZXQoKTtcbiAgICAgICAgICAgICAgICB9KTsgLy9FbmQgY2xpY2sgZXZlbnRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXROZXdQb3N0U2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBpdGVtT2Zmc2V0ID0gJHNlbGYuZmluZCgnLnNieV9pdGVtJykubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgc3VibWl0RGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdzYnlfbG9hZF9tb3JlX2NsaWNrZWQnLFxuICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogaXRlbU9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICBmZWVkX2lkOiBmZWVkLnNldHRpbmdzLmZlZWRJRCxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRzOiBmZWVkLnNldHRpbmdzLnNob3J0Q29kZUF0dHMsXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGZlZWQubG9jYXRpb25HdWVzcygpLFxuICAgICAgICAgICAgICAgICAgICAgIHBvc3RfaWQ6IGZlZWQuc2V0dGluZ3MucG9zdElELFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcmVzb2x1dGlvbjogZmVlZC5pbWFnZVJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdmFyIG9uU3VjY2VzcyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnRyaW0oKS5pbmRleE9mKCd7JykgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrV1BQb3N0cyA9IHR5cGVvZiByZXNwb25zZS5mZWVkU3RhdHVzLmNoZWNrV1BQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgPyByZXNwb25zZS5mZWVkU3RhdHVzLmNoZWNrV1BQb3N0cyA6IGZhbHNlOztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja1dQUG9zdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLnNldHRpbmdzLmNoZWNrV1BQb3N0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuc2V0dGluZ3MuY2hlY2tXUFBvc3RzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFwcGVuZE5ld1Bvc3RzKHJlc3BvbnNlLmh0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5hZGRSZXNpemVkSW1hZ2VzKHJlc3BvbnNlLnJlc2l6ZWRJbWFnZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZlZWQuc2V0dGluZ3MuYWpheFBvc3RMb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5zZXR0aW5ncy5hamF4UG9zdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVySW5pdGlhbEltYWdlc0xvYWRlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVyTmV3SW1hZ2VzTG9hZGVkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZmVlZFN0YXR1cy5zaG91bGRQYWdpbmF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQub3V0T2ZQYWdlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9sb2FkX2J0bicpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5vdXRPZlBhZ2VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5zYnlfbm9fanMnKS5yZW1vdmVDbGFzcygnc2J5X25vX2pzJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgc2J5QWpheChzdWJtaXREYXRhLCBvblN1Y2Nlc3MpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFwcGVuZE5ld1Bvc3RzOiBmdW5jdGlvbiAobmV3UG9zdHNIdG1sKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGlmICgkc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAgLnNieV9pdGVtJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCAuc2J5X2l0ZW0nKS5sYXN0KCkuYWZ0ZXIobmV3UG9zdHNIdG1sKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAnKS5hcHBlbmQobmV3UG9zdHNIdG1sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkUmVzaXplZEltYWdlczogZnVuY3Rpb24gKHJlc2l6ZWRJbWFnZXNUb0FkZCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGltYWdlSUQgaW4gcmVzaXplZEltYWdlc1RvQWRkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXplZEltYWdlc1tpbWFnZUlEXSA9IHJlc2l6ZWRJbWFnZXNUb0FkZFtpbWFnZUlEXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0SW1hZ2VIZWlnaHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heWJlUmFpc2VTaW5nbGVJbWFnZVJlc29sdXRpb246IGZ1bmN0aW9uICgkaXRlbSwgaW5kZXgsIGZvcmNlQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZlZWQgPSB0aGlzLFxuICAgICAgICAgICAgICAgICAgaW1nU3JjU2V0ID0gZmVlZC5nZXRJbWFnZVVybHMoJGl0ZW0pLFxuICAgICAgICAgICAgICAgICAgY3VycmVudFVybCA9ICRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsID4gaW1nJykuYXR0cignc3JjJyksXG4gICAgICAgICAgICAgICAgICBjdXJyZW50UmVzID0gMTUwLFxuICAgICAgICAgICAgICAgICAgYXNwZWN0UmF0aW8gPSAxLCAvLyBhbGwgdGh1bWJuYWlscyBhcmUgb3JpZW50ZWQgdGhlIHNhbWUgc28gdGhlIGJlc3QgY2FsY3VsYXRpb24gdXNlcyAxXG4gICAgICAgICAgICAgICAgICBmb3JjZUNoYW5nZSA9IHR5cGVvZiBmb3JjZUNoYW5nZSAhPT0gJ3VuZGVmaW5lZCcgPyBmb3JjZUNoYW5nZSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgaWYgKCRpdGVtLmhhc0NsYXNzKCdzYnlfbm9fcmVzcmFpc2UnKSAgIHx8XG4gICAgICAgICAgICAgICAgICAoIWZlZWQuc2V0dGluZ3MuY29uc2VudEdpdmVuICYmIGZlZWQuc2V0dGluZ3Mubm9DRE4pICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJC5lYWNoKGltZ1NyY1NldCwgZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IGN1cnJlbnRVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXMgPSBwYXJzZUludChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgaW1hZ2UgaGFzIGFscmVhZHkgYmVlbiBjaGFuZ2VkIHRvIGFuIGV4aXN0aW5nIHJlYWwgc291cmNlLCBkb24ndCBmb3JjZSB0aGUgY2hhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUNoYW5nZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy9JbWFnZSByZXNcbiAgICAgICAgICAgICAgICB2YXIgbmV3UmVzID0gNjQwO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZmVlZC5zZXR0aW5ncy5pbWdSZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndGh1bWInOlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmVzID0gMTIwO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ21lZGl1bSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdSZXMgPSAzMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGFyZ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmVzID0gNDgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmVzID0gNjQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluSW1hZ2VXaWR0aCA9IE1hdGgubWF4KGZlZWQuc2V0dGluZ3MuYXV0b01pblJlcywkaXRlbS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmlubmVyV2lkdGgoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNJbWFnZVJlcGxhY2UgPSBmZWVkLmdldEJlc3RSZXNvbHV0aW9uRm9yQXV0byhtaW5JbWFnZVdpZHRoLCBhc3BlY3RSYXRpbywgJCh0aGlzLmVsKS5maW5kKCdzYnlfaXRlbScpLmZpcnN0KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzSW1hZ2VSZXBsYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0ODA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JlcyA9IDQ4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzMjA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JlcyA9IDMyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JlcyA9IDEyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobmV3UmVzID4gY3VycmVudFJlcyB8fCBjdXJyZW50VXJsID09PSBmZWVkLnBsYWNlaG9sZGVyVVJMIHx8IGZvcmNlQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYXNvbiA9IGN1cnJlbnRVcmwgPT09IGZlZWQucGxhY2Vob2xkZXJVUkwgPyAnd2FzIHBsYWNlaG9sZGVyJyA6ICd0b28gc21hbGwnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3JhaXMgcmVzIGZvciAnICsgY3VycmVudFVybCwgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3VXJsID0gaW1nU3JjU2V0W25ld1Jlc107XG4gICAgICAgICAgICAgICAgICAgICRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsID4gaW1nJykuYXR0cignc3JjJywgbmV3VXJsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuaGFzQ2xhc3MoJ3NieV9pbWdMaXF1aWRfcmVhZHknKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0uZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKFwiJyArIG5ld1VybCArICdcIiknKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICRpdGVtLmZpbmQoJ2ltZycpLm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEkKHRoaXMpLmhhc0NsYXNzKCdzYnlfaW1nX2Vycm9yJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ3NieV9pbWdfZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VGcm9tQVBJID0gKCQodGhpcykuYXR0cignc3JjJykuaW5kZXhPZignaS55dGltZy5jb20nKSA+IC0xKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzb3VyY2VGcm9tQVBJKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS1mdWxsLXJlcycpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ3NyYycsICQodGhpcykuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLWZ1bGwtcmVzJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuY3NzKCdiYWNrZ3JvdW5kLWltYWdlJywgJ3VybCgnICsgJCh0aGlzKS5jbG9zZXN0KCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtZnVsbC1yZXMnKSArICcpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignaHJlZicpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ3NyYycsICQodGhpcykuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdocmVmJykgKyAnbWVkaWE/c2l6ZT1sJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWwnKS5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignaHJlZicpICsgJ21lZGlhP3NpemU9bCknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuc2V0dGluZ3MuZmF2b3JMb2NhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyY1NldCA9IGZlZWQuZ2V0SW1hZ2VVcmxzKCQodGhpcykuY2xvc2VzdCgnLnNieV9pdGVtJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3JjU2V0WzY0MF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignc3JjJywgc3JjU2V0WzY0MF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuY3NzKCdiYWNrZ3JvdW5kLWltYWdlJywgJ3VybCgnICsgc3JjU2V0WzY0MF0gKyAnKScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5hZnRlclJlc2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd1bmZpeGVkIGVycm9yICcgKyAkKHRoaXMpLmF0dHIoJ3NyYycpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heWJlUmFpc2VJbWFnZVJlc29sdXRpb246IGZ1bmN0aW9uIChqdXN0TmV3KSB7XG4gICAgICAgICAgICAgICAgdmFyIGZlZWQgPSB0aGlzLFxuICAgICAgICAgICAgICAgICAgaXRlbXNTZWxlY3RvciA9IHR5cGVvZiBqdXN0TmV3ICE9PSAndW5kZWZpbmVkJyAmJiBqdXN0TmV3ID09PSB0cnVlID8gJy5zYnlfaXRlbS5zYnlfbmV3JyA6ICcuc2J5X2l0ZW0nLFxuICAgICAgICAgICAgICAgICAgZm9yY2VDaGFuZ2UgPSAhZmVlZC5pc0luaXRpYWxpemVkID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICQoZmVlZC5lbCkuZmluZChpdGVtc1NlbGVjdG9yKS5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoISQodGhpcykuaGFzQ2xhc3MoJ3NieV9udW1fZGlmZl9oaWRlJylcbiAgICAgICAgICAgICAgICAgICAgICAmJiAkKHRoaXMpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgJiYgdHlwZW9mICQodGhpcykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLWltZy1zcmMtc2V0JykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZWVkLm1heWJlUmFpc2VTaW5nbGVJbWFnZVJlc29sdXRpb24oJCh0aGlzKSxpbmRleCxmb3JjZUNoYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTsgLy9FbmQgLnNieV9pdGVtIGVhY2hcbiAgICAgICAgICAgICAgICBmZWVkLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldEJlc3RSZXNvbHV0aW9uRm9yQXV0bzogZnVuY3Rpb24oY29sV2lkdGgsIGFzcGVjdFJhdGlvLCAkaXRlbSkge1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihhc3BlY3RSYXRpbykgfHwgYXNwZWN0UmF0aW8gPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzcGVjdFJhdGlvID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGJlc3RXaWR0aCA9IGNvbFdpZHRoICogYXNwZWN0UmF0aW8sXG4gICAgICAgICAgICAgICAgICBiZXN0V2lkdGhSb3VuZGVkID0gTWF0aC5jZWlsKGJlc3RXaWR0aCAvIDEwKSAqIDEwLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tU2l6ZXMgPSBbMTIwLCAzMjAsIDQ4MCwgNjQwXTtcblxuICAgICAgICAgICAgICAgIGlmICgkaXRlbS5oYXNDbGFzcygnc2J5X2hpZ2hsaWdodGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgYmVzdFdpZHRoUm91bmRlZCA9IGJlc3RXaWR0aFJvdW5kZWQgKjI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGN1c3RvbVNpemVzLmluZGV4T2YocGFyc2VJbnQoYmVzdFdpZHRoUm91bmRlZCkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAkLmVhY2goY3VzdG9tU2l6ZXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gPiBwYXJzZUludChiZXN0V2lkdGhSb3VuZGVkKSAmJiAhZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RXaWR0aFJvdW5kZWQgPSBpdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYmVzdFdpZHRoUm91bmRlZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoaWRlRXh0cmFJdGVtc0ZvcldpZHRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXlvdXQgPT09ICdjYXJvdXNlbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgICAgICAgICAgbnVtID0gdHlwZW9mICRzZWxmLmF0dHIoJ2RhdGEtbnVtJykgIT09ICd1bmRlZmluZWQnICYmICRzZWxmLmF0dHIoJ2RhdGEtbnVtJykgIT09ICcnID8gcGFyc2VJbnQoJHNlbGYuYXR0cignZGF0YS1udW0nKSkgOiAxLFxuICAgICAgICAgICAgICAgICAgbnVtbW9iaWxlID0gdHlwZW9mICRzZWxmLmF0dHIoJ2RhdGEtbnVtbW9iaWxlJykgIT09ICd1bmRlZmluZWQnICYmICRzZWxmLmF0dHIoJ2RhdGEtbnVtbW9iaWxlJykgIT09ICcnID8gcGFyc2VJbnQoJHNlbGYuYXR0cignZGF0YS1udW1tb2JpbGUnKSkgOiBudW07XG5cbiAgICAgICAgICAgICAgICBpZiAoISRzZWxmLmhhc0NsYXNzKCcuc2J5X2xheW91dF9jYXJvdXNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkKHdpbmRvdykud2lkdGgoKSA8IDQ4MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bW1vYmlsZSA8ICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLnNsaWNlKG51bW1vYmlsZSAtICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmxlbmd0aCkuYWRkQ2xhc3MoJ3NieV9udW1fZGlmZl9oaWRlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtIDwgJHNlbGYuZmluZCgnLnNieV9pdGVtJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuc2xpY2UobnVtIC0gJHNlbGYuZmluZCgnLnNieV9pdGVtJykubGVuZ3RoKS5hZGRDbGFzcygnc2J5X251bV9kaWZmX2hpZGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldEltYWdlU2l6ZUNsYXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKTtcbiAgICAgICAgICAgICAgICAkc2VsZi5yZW1vdmVDbGFzcygnc2J5X3NtYWxsIHNieV9tZWRpdW0nKTtcbiAgICAgICAgICAgICAgICB2YXIgZmVlZFdpZHRoID0gJHNlbGYuaW5uZXJXaWR0aCgpLFxuICAgICAgICAgICAgICAgICAgcGhvdG9QYWRkaW5nID0gcGFyc2VJbnQoKCRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLm91dGVyV2lkdGgoKSAtICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLndpZHRoKCkpKSAvIDIsXG4gICAgICAgICAgICAgICAgICBjb2xzID0gdGhpcy5nZXRDb2x1bW5Db3VudCgpLFxuICAgICAgICAgICAgICAgICAgZmVlZFdpZHRoU2Fuc1BhZGRpbmcgPSBmZWVkV2lkdGggLSAocGhvdG9QYWRkaW5nICogKGNvbHMrMikpLFxuICAgICAgICAgICAgICAgICAgY29sV2lkdGggPSAoZmVlZFdpZHRoU2Fuc1BhZGRpbmcgLyBjb2xzKTtcblxuICAgICAgICAgICAgICAgIGlmIChjb2xXaWR0aCA+IDE0MCAmJiBjb2xXaWR0aCA8IDI0MCkge1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5hZGRDbGFzcygnc2J5X21lZGl1bScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sV2lkdGggPD0gMTQwKSB7XG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmFkZENsYXNzKCdzYnlfc21hbGwnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0TWluSW1hZ2VXaWR0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMuZWwpLmZpbmQoJy5zYnlfaXRlbSAuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpcnN0KCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWluSW1hZ2VXaWR0aCA9ICQodGhpcy5lbCkuZmluZCgnLnNieV9pdGVtIC5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZmlyc3QoKS5pbm5lcldpZHRoKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW5JbWFnZVdpZHRoID0gMTUwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRJbWFnZVJlc29sdXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5pbWdSZXMgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlUmVzb2x1dGlvbiA9ICdhdXRvJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuc2V0dGluZ3MuaW1nUmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0aHVtYic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZVJlc29sdXRpb24gPSAxNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtZWRpdW0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VSZXNvbHV0aW9uID0gMzIwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlUmVzb2x1dGlvbiA9IDY0MDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRJbWFnZVVybHM6IGZ1bmN0aW9uICgkaXRlbSkge1xuICAgICAgICAgICAgICAgIHZhciBzcmNTZXQgPSBKU09OLnBhcnNlKCRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS1pbWctc3JjLXNldCcpLnJlcGxhY2UoL1xcXFxcXC8vZywgJy8nKSksXG4gICAgICAgICAgICAgICAgICBpZCA9ICRpdGVtLmF0dHIoJ2lkJykucmVwbGFjZSgnc2J5XycsICcnKS5yZXBsYWNlKCdwbGF5ZXJfJywnJyk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgJiYgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXSAhPT0gJ3ZpZGVvJ1xuICAgICAgICAgICAgICAgICAgJiYgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXSAhPT0gJ3BlbmRpbmcnXG4gICAgICAgICAgICAgICAgICAmJiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICE9PSAnZXJyb3InXG4gICAgICAgICAgICAgICAgICAmJiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICE9PSAndmlkZW8nXG4gICAgICAgICAgICAgICAgICAmJiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICE9PSAncGVuZGluZycpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVzaXplZEltYWdlc1tpZF1bJ3NpemVzJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmRTaXplcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdWydzaXplcyddWydmdWxsJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTaXplcy5wdXNoKDY0MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjU2V0WzY0MF0gPSBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICdmdWxsLmpwZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0uZmluZCgnLnNieV9saW5rX2FyZWEnKS5hdHRyKCAnaHJlZicsIHNieU9wdGlvbnMucmVzaXplZF91cmwgKyB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICsgJ2Z1bGwuanBnJyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0ciggJ2RhdGEtZnVsbC1yZXMnLCBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICdmdWxsLmpwZycgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXVsnc2l6ZXMnXVsnbG93J10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTaXplcy5wdXNoKDMyMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjU2V0WzMyMF0gPSBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICdsb3cuanBnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5mYXZvckxvY2FsICYmIHR5cGVvZiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdWydzaXplcyddWydmdWxsJ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtLmZpbmQoJy5zYnlfbGlua19hcmVhJykuYXR0ciggJ2hyZWYnLCBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICdsb3cuanBnJyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoICdkYXRhLWZ1bGwtcmVzJywgc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAnbG93LmpwZycgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVzaXplZEltYWdlc1tpZF1bJ3NpemVzJ11bJ3RodW1iJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTaXplcy5wdXNoKDE1MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjU2V0WzE1MF0gPSBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICd0aHVtYi5qcGcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZmF2b3JMb2NhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZFNpemVzLmluZGV4T2YoNjQwKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kU2l6ZXMuaW5kZXhPZigzMjApID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1NldFs2NDBdID0gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAnbG93LmpwZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kU2l6ZXMuaW5kZXhPZigzMjApID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRTaXplcy5pbmRleE9mKDY0MCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjU2V0WzMyMF0gPSBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICdmdWxsLmpwZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm91bmRTaXplcy5pbmRleE9mKDE1MCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjU2V0WzMyMF0gPSBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICd0aHVtYi5qcGcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZFNpemVzLmluZGV4T2YoMTUwKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kU2l6ZXMuaW5kZXhPZigzMjApID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1NldFsxNTBdID0gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAnbG93LmpwZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm91bmRTaXplcy5pbmRleE9mKDY0MCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjU2V0WzE1MF0gPSBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICdmdWxsLmpwZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgfHwgKHR5cGVvZiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdWydpZCddICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdWydpZCddICE9PSAncGVuZGluZycgJiYgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXVsnaWQnXSAhPT0gJ2Vycm9yJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRUb05lZWRzUmVzaXppbmcoaWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBzcmNTZXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0VmlkZW9JRDogZnVuY3Rpb24gKCRlbCkge1xuICAgICAgICAgICAgICAgIGlmICgkZWwuaGFzQ2xhc3MoJ3NieV9pdGVtJykgfHwgJGVsLmhhc0NsYXNzKCdzYnlfcGxheWVyX2l0ZW0nKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICRlbC5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkZWwuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRlbC5jbG9zZXN0KCdzYnlfaXRlbScpLmxlbmd0aCB8fCAkZWwuY2xvc2VzdCgnc2J5X3BsYXllcl9pdGVtJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkdGFyZ2VFbCA9ICRlbC5jbG9zZXN0KCdzYnlfaXRlbScpLmxlbmd0aCA/ICRlbC5jbG9zZXN0KCdzYnlfaXRlbScpIDogJGVsLmNsb3Nlc3QoJ3NieV9wbGF5ZXJfaXRlbScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICR0YXJnZUVsLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS12aWRlby1pZCcpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0YXJnZUVsLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkZWwuaGFzQ2xhc3MoJ3NiX3lvdXR1YmUnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGVsLmZpbmQoJy5zYnlfaXRlbScpLmZpcnN0KCkuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMuZWwpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZmlyc3QoKS5sZW5ndGggJiYgdHlwZW9mICQodGhpcy5lbCkuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5maXJzdCgpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCh0aGlzLmVsKS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpcnN0KCkuYXR0cignZGF0YS12aWRlby1pZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0QXZhdGFyVXJsOiBmdW5jdGlvbiAodXNlcm5hbWUsZmF2b3JUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZXJuYW1lID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGF2YWlsYWJsZUF2YXRhcnMgPSB0aGlzLnNldHRpbmdzLmdlbmVyYWwuYXZhdGFycyxcbiAgICAgICAgICAgICAgICAgIGZhdm9yVHlwZSA9IHR5cGVvZiBmYXZvclR5cGUgIT09ICd1bmRlZmluZWQnID8gZmF2b3JUeXBlIDogJ2xvY2FsJztcblxuICAgICAgICAgICAgICAgIGlmIChmYXZvclR5cGUgPT09ICdsb2NhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhdmFpbGFibGVBdmF0YXJzWydMQ0wnK3VzZXJuYW1lXSAhPT0gJ3VuZGVmaW5lZCcgJiYgcGFyc2VJbnQoYXZhaWxhYmxlQXZhdGFyc1snTENMJyt1c2VybmFtZV0pID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHVzZXJuYW1lICsgJy5qcGcnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhdmFpbGFibGVBdmF0YXJzW3VzZXJuYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdmFpbGFibGVBdmF0YXJzW3VzZXJuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXZhaWxhYmxlQXZhdGFyc1t1c2VybmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXZhaWxhYmxlQXZhdGFyc1t1c2VybmFtZV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGF2YWlsYWJsZUF2YXRhcnNbJ0xDTCcrdXNlcm5hbWVdICE9PSAndW5kZWZpbmVkJyAmJiBwYXJzZUludChhdmFpbGFibGVBdmF0YXJzWydMQ0wnK3VzZXJuYW1lXSkgPT09IDEpICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHVzZXJuYW1lICsgJy5qcGcnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFkZFRvTmVlZHNSZXNpemluZzogZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmVlZHNSZXNpemluZy5pbmRleE9mKGlkKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZWVkc1Jlc2l6aW5nLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcHBseUltYWdlTGlxdWlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHNieUFkZEltZ0xpcXVpZCgpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgJHNlbGYuZmluZChcIi5zYnlfcGxheWVyX2l0ZW1cIikuc2J5X2ltZ0xpcXVpZCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9pdGVtJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKFwiLnNieV9wbGF5ZXJfaXRlbSAuc2J5X3BsYXllcl92aWRlb190aHVtYm5haWxcIikuc2J5X2ltZ0xpcXVpZCh7ZmlsbDogdHJ1ZX0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoXCIuc2J5X2l0ZW0gLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbFwiKS5zYnlfaW1nTGlxdWlkKHtmaWxsOiB0cnVlfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpc3RlbkZvclZpc2liaWxpdHlDaGFuZ2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBmZWVkID0gdGhpcztcbiAgICAgICAgICAgICAgICBzYnlBZGRWaXNpYmlsaXR5TGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mICQodGhpcy5lbCkuZmlsdGVyKCc6aGlkZGVuJykuc2J5VmlzaWJpbGl0eUNoYW5nZWQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZSBmZWVkIGlzIGluaXRpYWxseSBoaWRkZW4gKGluIGEgdGFiIGZvciBleGFtcGxlKSB0aGVuIGNoZWNrIGZvciB3aGVuIGl0IGJlY29tZXMgdmlzaWJsZSBhbmQgc2V0IHRoZW4gc2V0IHRoZSBoZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzLmVsKS5maWx0ZXIoJzpoaWRkZW4nKS5zYnlWaXNpYmlsaXR5Q2hhbmdlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKGVsZW1lbnQsIHZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVyUmVzaXplKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuT25Mb2FkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0Q29sdW1uQ291bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCksXG4gICAgICAgICAgICAgICAgICBjb2xzID0gdGhpcy5zZXR0aW5ncy5jb2xzLFxuICAgICAgICAgICAgICAgICAgY29sc21vYmlsZSA9IHRoaXMuc2V0dGluZ3MuY29sc21vYmlsZSxcbiAgICAgICAgICAgICAgICAgIHJldHVybkNvbHMgPSBjb2xzO1xuXG4gICAgICAgICAgICAgICAgc2J5V2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcblxuICAgICAgICAgICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X21vYl9jb2xfYXV0bycpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzYnlXaW5kb3dXaWR0aCA8IDY0MCAmJiAocGFyc2VJbnQoY29scykgPiAyICYmIHBhcnNlSW50KGNvbHMpIDwgNykpIHJldHVybkNvbHMgPSAyO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2J5V2luZG93V2lkdGggPCA2NDAgJiYgKHBhcnNlSW50KGNvbHMpID4gNiAmJiBwYXJzZUludChjb2xzKSA8IDExKSkgcmV0dXJuQ29scyA9IDQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzYnlXaW5kb3dXaWR0aCA8PSA0ODAgJiYgcGFyc2VJbnQoY29scykgPiAyKSByZXR1cm5Db2xzID0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNieVdpbmRvd1dpZHRoIDw9IDQ4MCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5Db2xzID0gY29sc21vYmlsZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQocmV0dXJuQ29scyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25UaHVtYm5haWxDbGljazogZnVuY3Rpb24oJGNsaWNrZWQsaXNQbGF5ZXIsdmlkZW9JRCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jYW5DcmVhdGVQbGF5ZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCk7XG4gICAgICAgICAgICAgICAgaWYgKCRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dhbGxlcnknKSkge1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2N1cnJlbnQnKS5yZW1vdmVDbGFzcygnc2J5X2N1cnJlbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgJGNsaWNrZWQuY2xvc2VzdCgnLnNieV9pdGVtJykuYWRkQ2xhc3MoJ3NieV9jdXJyZW50Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgJGNsaWNrZWQuY2xvc2VzdCgnLnNieV9pdGVtJykuYWRkQ2xhc3MoJ3NieV9jdXJyZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmFkZENsYXNzKCdzYnlfcGxheWVyX2FkZGVkJykuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLmFkZENsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCAuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpbmQoJy5zYnlfbG9hZGVyJykuc2hvdygpLnJlbW92ZUNsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCBpZnJhbWUnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1BsYXllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyJyt0aGlzLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSB0eXBlb2YgdmlkZW9JRCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLmdldFZpZGVvSUQoJGNsaWNrZWQuY2xvc2VzdCgnLnNieV9pdGVtJykpIDogdmlkZW9JRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVBsYXllcignc2J5X3BsYXllcicrdGhpcy5pbmRleCx2aWRlb0lEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1BsYXllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gdHlwZW9mIHZpZGVvSUQgPT09ICd1bmRlZmluZWQnID8gdGhpcy5nZXRWaWRlb0lEKCRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmZpcnN0KCkpIDogdmlkZW9JRDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxheVZpZGVvSW5QbGF5ZXIodmlkZW9JRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gdHlwZW9mIHZpZGVvSUQgPT09ICd1bmRlZmluZWQnID8gdGhpcy5nZXRWaWRlb0lEKCRjbGlja2VkLmNsb3Nlc3QoJy5zYnlfaXRlbScpKSA6IHZpZGVvSUQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVBsYXllckluZm8oJGNsaWNrZWQuY2xvc2VzdCgnLnNieV9pdGVtJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxheVZpZGVvSW5QbGF5ZXIodmlkZW9JRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZnRlclZpZGVvQ2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlR2FsbGVyeVBsYXllclN1YnNjcmliZUJ0bigkY2xpY2tlZCk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQodGhpcy5lbCkuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfZ3JpZCcpIHx8ICQodGhpcy5lbCkuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfY2Fyb3VzZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJHNieUl0ZW0gPSAkY2xpY2tlZC5jbG9zZXN0KCcuc2J5X2l0ZW0nKSxcbiAgICAgICAgICAgICAgICAgICAgICB2aWRlb0lEID0gdHlwZW9mIHZpZGVvSUQgPT09ICd1bmRlZmluZWQnID8gdGhpcy5nZXRWaWRlb0lEKCRzYnlJdGVtKSA6IHZpZGVvSUQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxheVZpZGVvSW5QbGF5ZXIodmlkZW9JRCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJWaWRlb0NoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQodGhpcy5lbCkuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfbGlzdCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkc2J5SXRlbSA9ICRjbGlja2VkLmNsb3Nlc3QoJy5zYnlfaXRlbScpLFxuICAgICAgICAgICAgICAgICAgICAgIHZpZGVvSUQgPSB0eXBlb2YgdmlkZW9JRCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLmdldFZpZGVvSUQoJHNieUl0ZW0pIDogdmlkZW9JRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRzYnlJdGVtLmxlbmd0aCAmJiAhJHNieUl0ZW0uZmluZCgnaWZyYW1lJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkc2J5SXRlbS5maW5kKCcuc2J5X2xvYWRlcicpLnNob3coKS5yZW1vdmVDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJHNieUl0ZW0uYWRkQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGluZyBzYnlfcGxheWVyX2xvYWRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVQbGF5ZXIoJ3NieV9wbGF5ZXJfJyt2aWRlb0lELHZpZGVvSUQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF5VmlkZW9JblBsYXllcih2aWRlb0lELCRzYnlJdGVtLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFmdGVyVmlkZW9DaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25UaHVtYm5haWxFbnRlcjogZnVuY3Rpb24oJGhvdmVyZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FuQ3JlYXRlUGxheWVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpO1xuICAgICAgICAgICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9saXN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRzYnlJdGVtID0gJGhvdmVyZWQuY2xvc2VzdCgnLnNieV9pdGVtJyksXG4gICAgICAgICAgICAgICAgICAgICAgdmlkZW9JRCA9IHRoaXMuZ2V0VmlkZW9JRCgkc2J5SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghJHNieUl0ZW0uZmluZCgnaWZyYW1lJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkc2J5SXRlbS5maW5kKCcuc2J5X2xvYWRlcicpLnNob3coKS5yZW1vdmVDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJHNieUl0ZW0uYWRkQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGluZyBzYnlfcGxheWVyX2xvYWRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVQbGF5ZXIoJ3NieV9wbGF5ZXJfJyt2aWRlb0lELHZpZGVvSUQsMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25UaHVtYm5haWxMZWF2ZTogZnVuY3Rpb24oJGhvdmVyZWQpIHtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaGFuZ2VQbGF5ZXJJbmZvOiBmdW5jdGlvbigkbmV3SXRlbSkge1xuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGxheWVyRWFnZXJMb2FkZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wbGF5ZXIgIT09ICd1bmRlZmluZWQnIHx8ICQodGhpcy5lbCkuaGFzQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhbkNyZWF0ZVBsYXllcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQodGhpcy5lbCkuZmluZCgnI3NieV9ibGFuaycpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBsYXllckVhZ2VyTG9hZGVkKCkgfHwgKHRoaXMucGxheWVyQVBJUmVhZHkgJiYgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4pIHx8ICh3aW5kb3cuc2J5QVBJUmVhZHkgJiYgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBsYXlWaWRlb0luUGxheWVyOiBmdW5jdGlvbih2aWRlb0lELHBsYXllcklEKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBsYXllciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXMucGxheWVyLmxvYWRWaWRlb0J5SWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxheWVyLmxvYWRWaWRlb0J5SWQodmlkZW9JRCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LnNieUxpZ2h0Ym94UGxheWVyICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgJiYgdHlwZW9mIHdpbmRvdy5zYnlMaWdodGJveFBsYXllci5sb2FkVmlkZW9CeUlkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5TGlnaHRib3hQbGF5ZXIubG9hZFZpZGVvQnlJZCh2aWRlb0lEKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbGF5ZXJJRCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiB0aGlzLnBsYXllcnMgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAmJiB0eXBlb2YgdGhpcy5wbGF5ZXJzW3BsYXllcklEXSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiB0aGlzLnBsYXllcnNbcGxheWVySURdLmxvYWRWaWRlb0J5SWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxheWVyc1twbGF5ZXJJRF0ubG9hZFZpZGVvQnlJZCh2aWRlb0lEKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJWaWRlb0NoYW5nZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMuZWwpLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dhbGxlcnknKSkge1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAnKS5yZW1vdmVDbGFzcygnc2J5X3BsYXllcl9sb2FkaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcy5lbCkuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCAuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpbmQoJy5zYnlfbG9hZGVyJykuaGlkZSgpLmFkZENsYXNzKCdzYnlfaGlkZGVuJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgJCgnaHRtbCwgYm9keScpLmFuaW1hdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wOiAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAnKS5vZmZzZXQoKS50b3BcbiAgICAgICAgICAgICAgICAgICAgfSwgMzAwKTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGVHYWxsZXJ5UGxheWVyU3Vic2NyaWJlQnRuOiBmdW5jdGlvbigkY2xpY2tlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1VUkwgPSAkY2xpY2tlZC5hdHRyKCdocmVmJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSAvY2hhbm5lbFxcLyguKikkLztcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IGl0ZW1VUkwubWF0Y2gocmVnZXgpO1xuICAgICAgICAgICAgICAgIGlmICggISBtYXRjaCApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjaGFubmVsSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJzY3JpYmVCdG5VUkwgPSAnaHR0cDovL3d3dy55b3V0dWJlLmNvbS9jaGFubmVsLycrIGNoYW5uZWxJZCArJz9zdWJfY29uZmlybWF0aW9uPTEmZmVhdHVyZT1zdWJzY3JpYmUtZW1iZWQtY2xpY2snO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICQoJy5zYnktY2hhbm5lbC1zdWJzY3JpYmUtYnRuIGEnKS5hdHRyKCdocmVmJywgc3Vic2NyaWJlQnRuVVJMKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaGVja0NvbnNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmNvbnNlbnRHaXZlbiB8fCAhdGhpcy5zZXR0aW5ncy5nZHByKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3Mubm9DRE4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQ0xJX0Nvb2tpZSAhPT0gXCJ1bmRlZmluZWRcIikgeyAvLyBHRFBSIENvb2tpZSBDb25zZW50IGJ5IFdlYlRvZmZlZVxuICAgICAgICAgICAgICAgICAgICBpZiAoQ0xJX0Nvb2tpZS5yZWFkKENMSV9BQ0NFUFRfQ09PS0lFX05BTUUpICE9PSBudWxsKSAge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWJUb2ZmZWUgbm8gbG9uZ2VyIHVzZXMgdGhpcyBjb29raWUgYnV0IGJlaW5nIGxlZnQgaGVyZSB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKENMSV9Db29raWUucmVhZCgnY29va2llbGF3aW5mby1jaGVja2JveC1ub24tbmVjZXNzYXJ5JykgIT09ICdudWxsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuID0gQ0xJX0Nvb2tpZS5yZWFkKCdjb29raWVsYXdpbmZvLWNoZWNrYm94LW5vbi1uZWNlc3NhcnknKSA9PT0gJ3llcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDTElfQ29va2llLnJlYWQoJ2Nvb2tpZWxhd2luZm8tY2hlY2tib3gtbmVjZXNzYXJ5JykgIT09ICdudWxsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuID0gQ0xJX0Nvb2tpZS5yZWFkKCdjb29raWVsYXdpbmZvLWNoZWNrYm94LW5lY2Vzc2FyeScpID09PSAneWVzJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LmNuQXJncyAhPT0gXCJ1bmRlZmluZWRcIikgeyAvLyBDb29raWUgTm90aWNlIGJ5IGRGYWN0b3J5XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IFwiOyBcIiArIGRvY3VtZW50LmNvb2tpZSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IHZhbHVlLnNwbGl0KCAnOyBjb29raWVfbm90aWNlX2FjY2VwdGVkPScgKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcnRzLmxlbmd0aCA9PT0gMiApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBwYXJ0cy5wb3AoKS5zcGxpdCggJzsnICkuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4gPSAodmFsID09PSAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LmNvbXBsaWFueiAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gQ29tcGxpYW56IGJ5IFJlYWxseSBTaW1wbGUgUGx1Z2luc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9ICggc2J5Q21wbHpHZXRDb29raWUoJ2NtcGx6X21hcmtldGluZycpID09PSAnYWxsb3cnIHx8IGpRdWVyeSgnYm9keScpLmhhc0NsYXNzKCdjbXBsei1zdGF0dXMtbWFya2V0aW5nJykgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cuQ29va2llYm90ICE9PSBcInVuZGVmaW5lZFwiKSB7IC8vIENvb2tpZWJvdCBieSBDeWJvdCBBL1NcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4gPSBDb29raWVib3QuY29uc2VudGVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5Cb3JsYWJzQ29va2llICE9PSAndW5kZWZpbmVkJykgeyAvLyBCb3JsYWJzIENvb2tpZSBieSBCb3JsYWJzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuID0gd2luZG93LkJvcmxhYnNDb29raWUuY2hlY2tDb29raWVDb25zZW50KCd5b3V0dWJlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnc2J5Y2hlY2tjb25zZW50Jyk7XG4gICAgICAgICAgICAgICAgZXZ0LmZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGpRdWVyeSh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmNvbnNlbnRHaXZlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLm5vQ0ROID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuOyAvLyBHRFBSIG5vdCBlbmFibGVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJDb25zZW50VG9nZ2xlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tDb25zZW50KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5Lm1heWJlQWRkWVRBUEkoKTtcbiAgICAgICAgICAgICAgICAgICAgZmVlZC5tYXliZVJhaXNlSW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGZlZWQuYXBwbHlGdWxsRmVhdHVyZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuYWZ0ZXJSZXNpemUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSw1MDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1vdmVGZWF0dXJlczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLm5vQ0ROKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZmVlZC5lbCkuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVBdHRyKCdkYXRhLXNieS1saWdodGJveCcpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXBwbHlGdWxsRmVhdHVyZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBmZWVkID0gdGhpcztcblxuICAgICAgICAgICAgICAgICQoZmVlZC5lbCkuZmluZCgnLnNieV9oZWFkZXJfaW1nIGltZycpLmF0dHIoJ3NyYycsJChmZWVkLmVsKS5maW5kKCcuc2J5X2hlYWRlcl9pbWcnKS5hdHRyKCdkYXRhLWF2YXRhci11cmwnKSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAkKGZlZWQuZWwpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZmlyc3QoKS5hdHRyKCdkYXRhLXNieS1saWdodGJveCcpID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgJiYgZmVlZC5zZXR0aW5ncy5saWdodGJveEVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgJChmZWVkLmVsKS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2RhdGEtc2J5LWxpZ2h0Ym94JyxmZWVkLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciAkc2VsZiA9ICQoZmVlZC5lbCk7XG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9ub19jb25zZW50JykucmVtb3ZlQ2xhc3MoJ3NieV9ub19jb25zZW50Jyk7XG4gICAgICAgICAgICAgICAgaWYgKCRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dhbGxlcnknKSAmJiAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF5YmVSYWlzZVNpbmdsZUltYWdlUmVzb2x1dGlvbigkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJyksIDAsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5maXJzdCgpLmFkZENsYXNzKCdzYnlfY3VycmVudCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmVlZC5jYW5DcmVhdGVQbGF5ZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCBpZnJhbWUnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyJytmZWVkLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvY2F0aW9uR3Vlc3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciAkZmVlZCA9ICQodGhpcy5lbCksXG4gICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9ICdjb250ZW50JztcblxuICAgICAgICAgICAgICAgIGlmICgkZmVlZC5jbG9zZXN0KCdmb290ZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSAnZm9vdGVyJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRmZWVkLmNsb3Nlc3QoJy5oZWFkZXInKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgIHx8ICRmZWVkLmNsb3Nlc3QoJ2hlYWRlcicpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9ICdoZWFkZXInO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJGZlZWQuY2xvc2VzdCgnLnNpZGViYXInKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgIHx8ICRmZWVkLmNsb3Nlc3QoJ2FzaWRlJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gJ3NpZGViYXInO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBTYnlGZWVkUHJvKGVsLCBpbmRleCwgc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIFNieUZlZWQuY2FsbCh0aGlzLCBlbCwgaW5kZXgsIHNldHRpbmdzKTtcblxuICAgICAgICAgICAgdGhpcy5DVEEgPSB7fTtcblxuICAgICAgICAgICAgdGhpcy5pbml0TGF5b3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0R2FsbGVyeUxheW91dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdEdyaWQoKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdENhcm91c2VscygpO1xuICAgICAgICAgICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ3NieWFmdGVybGF5b3V0aW5pdCcpO1xuICAgICAgICAgICAgICAgIGV2dC5mZWVkID0gdGhpcztcbiAgICAgICAgICAgICAgICBqUXVlcnkod2luZG93KS50cmlnZ2VyKGV2dCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmluaXRHcmlkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5zYnlTZW1pRWFnZXJMb2FkaW5nICYmIGpRdWVyeSgnI3NieV9saWdodGJveCcpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIHBsYXllcklEID0gJ3NieV9sYi1wbGF5ZXInO1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJyNzYnlfbGlnaHRib3gnKS5hZGRDbGFzcygnc2J5X3ZpZGVvX2xpZ2h0Ym94Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICggISB3aW5kb3cuc2J5T3B0aW9ucy5pc1BybyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NieV9saWdodGJveCcpLmFkZENsYXNzKCdzYnlfbGlnaHRib3hfZnJlZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSAkKHRoaXMuZWwpLmZpbmQoJ3NieV9pdGVtJykuZmlyc3QoKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyksXG4gICAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXkgPSBzYnlPcHRpb25zLmF1dG9wbGF5O1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Q6IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIGZlZWQuZW1iZWRVUkwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9JZDogdmlkZW9JRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXJWYXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVzdGJyYW5kaW5nOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWw6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5OiBhdXRvcGxheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvblN0YXRlQ2hhbmdlJzogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gZGF0YS50YXJnZXQuZ2V0VmlkZW9EYXRhKClbJ3ZpZGVvX2lkJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVyU3RhdGVDaGFuZ2UocGxheWVySUQsIHZpZGVvSUQsIGRhdGEsICQoJyMnICsgcGxheWVySUQpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsX3dyYXAnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5tYXliZUFkZENUQShwbGF5ZXJJRCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciA9IG5ldyB3aW5kb3cuWVQuUGxheWVyKHBsYXllcklELCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuaW5pdENhcm91c2VscyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBmZWVkID0gdGhpcyxcbiAgICAgICAgICAgICAgICAgICRzZWxmID0gJCh0aGlzLmVsKTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBjb2xzID0gdGhpcy5zZXR0aW5ncy5jb2xzLFxuICAgICAgICAgICAgICAgICAgY29sc21vYmlsZSA9IHRoaXMuc2V0dGluZ3MuY29sc21vYmlsZTtcblxuICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLmFkZENsYXNzKCdzYnlfY2Fyb3VzZWwnKTtcbiAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xvYWRfYnRuJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wJyA6ICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLmNzcygncGFkZGluZy10b3AnKSxcbiAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctcmlnaHQnIDogJHNlbGYuZmluZCgnLnNieV9pdGVtc193cmFwJykuY3NzKCdwYWRkaW5nLXRvcCcpLFxuICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b20nIDogJHNlbGYuZmluZCgnLnNieV9pdGVtc193cmFwJykuY3NzKCdwYWRkaW5nLXRvcCcpLFxuICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1sZWZ0JyA6ICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLmNzcygncGFkZGluZy10b3AnKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignc3R5bGUnLCQodGhpcykuYXR0cignc3R5bGUnKS5yZXBsYWNlKCdwYWRkaW5nOiAnKyRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLmNzcygncGFkZGluZy10b3AnKSwncGFkZGluZzogJyskc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAnKS5jc3MoJ3BhZGRpbmctdG9wJykgKyAnICFpbXBvcnRhbnQnKSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYXJyb3dzID0gZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzBdLFxuICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbiA9IGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5jYXJvdXNlbFsxXSxcbiAgICAgICAgICAgICAgICAgIGF1dG9wbGF5ID0gZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzJdLFxuICAgICAgICAgICAgICAgICAgdGltZSA9IGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5jYXJvdXNlbFszXSxcbiAgICAgICAgICAgICAgICAgIGxvb3AgPSBmZWVkLnNldHRpbmdzLmdlbmVyYWwuY2Fyb3VzZWxbNF0sXG4gICAgICAgICAgICAgICAgICByb3dzID0gZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzVdO1xuICAgICAgICAgICAgICAgIC8vSW5pdGlhdGUgY2Fyb3VzZWxcbiAgICAgICAgICAgICAgICBpZiggIWF1dG9wbGF5ICkgdGltZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLy9TZXQgZGVmYXVsdHMgZm9yIHJlc3BvbnNpdmUgYnJlYWtwb2ludHNcbiAgICAgICAgICAgICAgICB2YXIgaXRlbXNUYWJsZXRTbWFsbCA9IGNvbHMsXG4gICAgICAgICAgICAgICAgICBpdGVtc01vYmlsZSA9IGNvbHMsXG4gICAgICAgICAgICAgICAgICBhcnJvd3MgPSBhcnJvd3MgPyAnb25ob3ZlcicgOiAnaGlkZScsXG4gICAgICAgICAgICAgICAgICBhdXRvcGxheSA9IHRpbWUgIT09IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgaGFzMnJvd3MgPSAocm93cyA9PSAyKSxcbiAgICAgICAgICAgICAgICAgIGxvb3AgPSAoIWxvb3ApLFxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuYWZ0ZXJSZXNpemUoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBhZnRlckluaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgJHNlbGYgPSBqUXVlcnkoZmVlZC5lbCk7XG4gICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtc193cmFwLnNieV9jYXJvdXNlbCcpLmZhZGVJbigpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtc193cmFwLnNieV9jYXJvdXNlbCAuc2J5X2luZm8sIC5zYnlfb3dsMnJvdy1pdGVtLC5zYnlfaXRlbXNfd3JhcC5zYnlfY2Fyb3VzZWwnKS5mYWRlSW4oKTtcblxuICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkbmF2RWxlbWVudHNXcmFwcGVyID0gJHNlbGYuZmluZCgnLnNieS1vd2wtbmF2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJvd3MgPT09ICdvbmhvdmVyJykge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJyb3dzID09PSAnYmVsb3cnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGRvdHMgPSAkc2VsZi5maW5kKCcuc2J5LW93bC1kb3RzJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcmV2ID0gJHNlbGYuZmluZCgnLnNieS1vd2wtcHJldicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV4dCA9ICRzZWxmLmZpbmQoJy5zYnktb3dsLW5leHQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5hdiA9ICRzZWxmLmZpbmQoJy5zYnktb3dsLW5hdicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZG90ID0gJHNlbGYuZmluZCgnLnNieS1vd2wtZG90JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoRG90cyA9ICRkb3QubGVuZ3RoICogJGRvdC5pbm5lcldpZHRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoID0gJHNlbGYuaW5uZXJXaWR0aCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJldi5hZnRlcigkZG90cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYXYuY3NzKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5leHQuY3NzKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpLmNzcygndG9wJywgJy02cHgnKS5jc3MoJ3JpZ2h0JywgTWF0aC5tYXgoKC41ICogJG5hdi5pbm5lcldpZHRoKCkgLSAuNSAqICh3aWR0aERvdHMpIC0gJG5leHQuaW5uZXJXaWR0aCgpIC0gNiksIDApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcmV2LmNzcygncG9zaXRpb24nLCAnYWJzb2x1dGUnKS5jc3MoJ3RvcCcsICctNnB4JykuY3NzKCdsZWZ0JywgTWF0aC5tYXgoKC41ICogJG5hdi5pbm5lcldpZHRoKCkgLSAuNSAqICh3aWR0aERvdHMpIC0gJHByZXYuaW5uZXJXaWR0aCgpIC0gNiksIDApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcnJvd3MgPT09ICdoaWRlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5hdkVsZW1lbnRzV3JhcHBlci5hZGRDbGFzcygnaGlkZScpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLy9EaXNhYmxlIG1vYmlsZSBsYXlvdXRcbiAgICAgICAgICAgICAgICBpZiggJHNlbGYuaGFzQ2xhc3MoJ3NieV9tb2JfY29sX2F1dG8nKSApIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNUYWJsZXRTbWFsbCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIGlmKCBwYXJzZUludChjb2xzKSAhPSAyICkgaXRlbXNNb2JpbGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICBpZiggcGFyc2VJbnQoY29scykgPT0gMiApIGl0ZW1zTW9iaWxlID0gMjsgLy9JZiB0aGUgY29scyBhcmUgc2V0IHRvIDIgdGhlbiBkb24ndCBjaGFuZ2UgdG8gMSBjb2wgb24gbW9iaWxlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNNb2JpbGUgPSBjb2xzbW9iaWxlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxBcmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtczogY29scyxcbiAgICAgICAgICAgICAgICAgICAgbG9vcDogbG9vcCxcbiAgICAgICAgICAgICAgICAgICAgcmV3aW5kOiAhbG9vcCxcbiAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXk6IGF1dG9wbGF5LFxuICAgICAgICAgICAgICAgICAgICBhdXRvcGxheVRpbWVvdXQ6IE1hdGgubWF4KHRpbWUsMjAwMCksXG4gICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5SG92ZXJQYXVzZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbmF2OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBuYXZUZXh0OiBbJzxzdmcgY2xhc3M9XCJzdmctaW5saW5lLS1mYSBmYS1jaGV2cm9uLWxlZnQgZmEtdy0xMFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGRhdGEtZmEtcHJvY2Vzc2VkPVwiXCIgZGF0YS1wcmVmaXg9XCJmYVwiIGRhdGEtaWNvbj1cImNoZXZyb24tbGVmdFwiIHJvbGU9XCJwcmVzZW50YXRpb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMjAgNTEyXCI+PHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMzQuNTIgMjM5LjAzTDIyOC44NyA0NC42OWM5LjM3LTkuMzcgMjQuNTctOS4zNyAzMy45NCAwbDIyLjY3IDIyLjY3YzkuMzYgOS4zNiA5LjM3IDI0LjUyLjA0IDMzLjlMMTMxLjQ5IDI1NmwxNTQuMDIgMTU0Ljc1YzkuMzQgOS4zOCA5LjMyIDI0LjU0LS4wNCAzMy45bC0yMi42NyAyMi42N2MtOS4zNyA5LjM3LTI0LjU3IDkuMzctMzMuOTQgMEwzNC41MiAyNzIuOTdjLTkuMzctOS4zNy05LjM3LTI0LjU3IDAtMzMuOTR6XCI+PC9wYXRoPjwvc3ZnPicsICc8c3ZnIGNsYXNzPVwic3ZnLWlubGluZS0tZmEgZmEtY2hldnJvbi1yaWdodCBmYS13LTEwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1mYS1wcm9jZXNzZWQ9XCJcIiBkYXRhLXByZWZpeD1cImZhXCIgZGF0YS1pY29uPVwiY2hldnJvbi1yaWdodFwiIHJvbGU9XCJwcmVzZW50YXRpb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMjAgNTEyXCI+PHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMjg1LjQ3NiAyNzIuOTcxTDkxLjEzMiA0NjcuMzE0Yy05LjM3MyA5LjM3My0yNC41NjkgOS4zNzMtMzMuOTQxIDBsLTIyLjY2Ny0yMi42NjdjLTkuMzU3LTkuMzU3LTkuMzc1LTI0LjUyMi0uMDQtMzMuOTAxTDE4OC41MDUgMjU2IDM0LjQ4NCAxMDEuMjU1Yy05LjMzNS05LjM3OS05LjMxNy0yNC41NDQuMDQtMzMuOTAxbDIyLjY2Ny0yMi42NjdjOS4zNzMtOS4zNzMgMjQuNTY5LTkuMzczIDMzLjk0MSAwTDI4NS40NzUgMjM5LjAzYzkuMzczIDkuMzcyIDkuMzczIDI0LjU2OC4wMDEgMzMuOTQxelwiPjwvcGF0aD48L3N2Zz4nXSxcbiAgICAgICAgICAgICAgICAgICAgZG90czogcGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgICAgICAgb3dsMnJvdzogaGFzMnJvd3MsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpdmU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogaXRlbXNNb2JpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICA0ODA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogaXRlbXNUYWJsZXRTbWFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDY0MDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBjb2xzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgb25Jbml0aWFsaXplOiBhZnRlckluaXRcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLnN0cmlwRW1vamlodG1sID0gZnVuY3Rpb24gKCRlbCkge1xuICAgICAgICAgICAgICAgICRlbC5maW5kKCcuZW1vamknKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlcGxhY2VXaXRoKCQodGhpcykuYXR0cignYWx0JykpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICRlbC5odG1sKCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmFmdGVySXRlbVJldmVhbGVkID0gZnVuY3Rpb24oJGl0ZW0pIHtcblxuICAgICAgICAgICAgICAgIHZhciBmZWVkID0gdGhpcztcbiAgICAgICAgICAgICAgICBpZiAoJGl0ZW0uZmluZCgnLnNieV9jYXB0aW9uJykubGVuZ3RoICYmICEgJGl0ZW0uZmluZCgnLnNieV9jYXB0aW9uJykuaGFzQ2xhc3MoJ3NieV9mdWxsX2NhcHRpb24nKSkge1xuICAgICAgICAgICAgICAgICAgICAvL0V4cGFuZCBwb3N0XG4gICAgICAgICAgICAgICAgICAgIHZhciAkY2FwdGlvbiA9ICRpdGVtLmZpbmQoJy5zYnlfaXRlbV9jYXB0aW9uX3dyYXAgLnNieV9jYXB0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgICAgJGhvdmVyQ2FwdGlvbiA9ICRpdGVtLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwgLnNieV9jYXB0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dF9saW1pdCA9IHR5cGVvZiBmZWVkLnNldHRpbmdzLmdlbmVyYWwuZGVzY3JpcHRpb25sZW5ndGggIT09ICd1bmRlZmluZWQnID8gcGFyc2VJbnQoZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmRlc2NyaXB0aW9ubGVuZ3RoKSA6IDE1MDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRfbGltaXQgPCAxKSB0ZXh0X2xpbWl0ID0gOTk5OTk7XG4gICAgICAgICAgICAgICAgICAgIC8vU2V0IHRoZSBmdWxsIHRleHQgdG8gYmUgdGhlIGNhcHRpb24gKHVzZWQgaW4gdGhlIGltYWdlIGFsdClcblxuICAgICAgICAgICAgICAgICAgICB2YXIgY2FwdGlvblRleHQgPSB0aGlzLnN0cmlwRW1vamlodG1sKCRpdGVtLmZpbmQoJy5zYnlfY2FwdGlvbicpLmZpcnN0KCkpLFxuICAgICAgICAgICAgICAgICAgICAgIGJyQ291bnQgPSAoY2FwdGlvblRleHQubWF0Y2goLzxicj4vZykgfHwgW10pLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICBickFkanVzdCA9ICh0eXBlb2Ygc2J5T3B0aW9ucy5ickFkanVzdCA9PT0gJ3VuZGVmaW5lZCcgfHwgc2J5T3B0aW9ucy5ickFkanVzdCA9PT0gJzEnIHx8IHNieU9wdGlvbnMuYnJBZGp1c3QgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbW1lbnQgb3V0IHVubmVjZXNzYXJ5IGNvZGUgdGhhdCBzdHJpcGVzIG91dCB0ZXh0IGxpbWl0IHdpdGggd3JvbmcgdGV4dCBsaW1pdFxuICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlIGVtb2ppIHdpdGggYWx0IGZvciBtb3JlIGFjY3VyYXRlIHNob3J0ZW5pbmdcbi8vICAgICAgICAgICAgICAgICAgICAgaWYgKGJyQWRqdXN0ICYmIGJyQ291bnQgPiAwICYmIGNhcHRpb25UZXh0LmluZGV4T2YoJzxicj4nKSA8IHRleHRfbGltaXQpIHtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkc2l6aW5nQ2FwdGlvbiA9ICRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGl0bGUnKS5maXJzdCgpO1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbldpZHRoID0gJHNpemluZ0NhcHRpb24ud2lkdGgoKSA+IDIwID8gJHNpemluZ0NhcHRpb24ud2lkdGgoKSA6ICRpdGVtLndpZHRoKCksXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplID0gJHNpemluZ0NhcHRpb24uY3NzKCdmb250LXNpemUnKSxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyc1BlckxpbmUgPSBjYXB0aW9uV2lkdGggLyBwYXJzZUludChmb250U2l6ZSkgKiAxLjg1LFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhDaGFyc1BlckxpbmUgPSBNYXRoLmZsb29yKGNoYXJhY3RlcnNQZXJMaW5lKSxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdGVkTWF4TGluZXMgPSBNYXRoLmNlaWwodGV4dF9saW1pdCAvIGNoYXJhY3RlcnNQZXJMaW5lKTtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcGxpdENhcHRpb24gPSBjYXB0aW9uVGV4dC5zcGxpdCgnPGJyPicpLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc0NvbnN1bWVkID0gMCxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRUZXh0TGltaXQgPSAwO1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goc3BsaXRDYXB0aW9uLCBmdW5jdGlvbiAoKSB7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVzTGVmdCA9IHByb2plY3RlZE1heExpbmVzIC0gbGluZXNDb25zdW1lZDtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluZXNMZWZ0ID4gMCkge1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhpc0xpbmVzQ29uc3VtZWQgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwodGhpcy5sZW5ndGggLyBjaGFyYWN0ZXJzUGVyTGluZSkpO1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZFRleHRMaW1pdCArPSBNYXRoLm1pbih0aGlzLmxlbmd0aCArIDQsIGxpbmVzTGVmdCAqIG1heENoYXJzUGVyTGluZSk7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzQ29uc3VtZWQgKz0gdGhpc0xpbmVzQ29uc3VtZWQ7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2xpbWl0ID0gYWRqdXN0ZWRUZXh0TGltaXQ7XG4vLyAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHNob3J0X3RleHQgPSBjYXB0aW9uVGV4dC5zdWJzdHJpbmcoMCwgdGV4dF9saW1pdCk7XG4gICAgICAgICAgICAgICAgICAgIHNob3J0X3RleHQgPSBjYXB0aW9uVGV4dC5sZW5ndGggPiB0ZXh0X2xpbWl0ID8gc2hvcnRfdGV4dC5zdWJzdHIoMCwgTWF0aC5taW4oc2hvcnRfdGV4dC5sZW5ndGgsIHNob3J0X3RleHQubGFzdEluZGV4T2YoXCIgXCIpKSkgOiBzaG9ydF90ZXh0O1xuXG5cbiAgICAgICAgICAgICAgICAgICAgLy9DdXQgdGhlIHRleHQgYmFzZWQgb24gbGltaXRzIHNldFxuICAgICAgICAgICAgICAgICAgICBpZiAoJGNhcHRpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY2FwdGlvbi5odG1sKHNieUxpbmtpZnkoc2hvcnRfdGV4dCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3J0X3RleHQgPT09IGNhcHRpb25UZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNhcHRpb24ubmV4dCgnLnNieV9leHBhbmQnKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoJGhvdmVyQ2FwdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBob3ZlckNhcHRpb25UZXh0ID0gc2hvcnRfdGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG9ydF90ZXh0ICE9PSBjYXB0aW9uVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyQ2FwdGlvblRleHQgKz0gJzxzcGFuIGNsYXNzPVwic2J5X21vcmVcIj4uLi48L3NwYW4+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICRob3ZlckNhcHRpb24uaHRtbChob3ZlckNhcHRpb25UZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vU2hvdyB0aGUgJ1NlZSBNb3JlJyBsaW5rIGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FwdGlvblRleHQubGVuZ3RoID4gdGV4dF9saW1pdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0uZmluZCgnLnNieV9leHBhbmQnKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy9DbGljayBmdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAkaXRlbS5maW5kKCcuc2J5X2V4cGFuZCBhJykub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGV4cGFuZCA9IGpRdWVyeSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjYXB0aW9uID0gdHlwZW9mICRjYXB0aW9uICE9PSAndW5kZWZpbmVkJyA/ICRjYXB0aW9uIDogJGl0ZW0uZmluZCgnLnNieV9pbmZvIC5zYnlfY2FwdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvblRleHQgPSB0eXBlb2YgY2FwdGlvbnRleHQgIT09ICd1bmRlZmluZWQnID8gY2FwdGlvblRleHQgOiAkaXRlbS5maW5kKCcuc2J5X2l0ZW1fdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS10aXRsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpdGVtLmhhc0NsYXNzKCdzYnlfY2FwdGlvbl9mdWxsJykgJiYgdHlwZW9mIHNob3J0X3RleHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNhcHRpb24uaHRtbChzaG9ydF90ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbS5yZW1vdmVDbGFzcygnc2J5X2NhcHRpb25fZnVsbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2FwdGlvbi5odG1sKHNieUxpbmtpZnkoY2FwdGlvblRleHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbS5hZGRDbGFzcygnc2J5X2NhcHRpb25fZnVsbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5hZnRlclJlc2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNldFVwQ1RBKCRpdGVtKTtcblxuICAgICAgICAgICAgICAgIC8vUGhvdG8gbGlua3NcbiAgICAgICAgICAgICAgICAvL0lmIGxpZ2h0Ym94IGlzIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgdmFyIGRpc2FibGVsaWdodGJveCA9IHR5cGVvZiBmZWVkLnNldHRpbmdzLmdlbmVyYWwuZGlzYWJsZWxpZ2h0Ym94ICE9PSAndW5kZWZpbmVkJyA/IGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5kaXNhYmxlbGlnaHRib3ggOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGNhcHRpb25saW5rcyA9IHR5cGVvZiBmZWVkLnNldHRpbmdzLmdlbmVyYWwuY2FwdGlvbmxpbmtzICE9PSAndW5kZWZpbmVkJyA/IGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5jYXB0aW9ubGlua3MgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiggZGlzYWJsZWxpZ2h0Ym94IHx8IGNhcHRpb25saW5rcyApe1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXB0aW9ubGlua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNieVVybERldGVjdCh0ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybFJlZ2V4ID0gL2h0dHBzPzpcXC9cXC8od3d3XFwuKT9bLWEtekEtWjAtOUA6JS5fXFwrfiM9XXsyLDI1Nn1cXC5bYS16XXsyLDZ9XFxiKFstYS16QS1aMC05QDolX1xcKy5+Iz8mLy89XSopL2c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQubWF0Y2godXJsUmVnZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FwID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICRpdGVtLmZpbmQoJ2ltZycpLmF0dHIoJ2FsdCcpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcCA9ICRpdGVtLmZpbmQoJ2ltZycpLmF0dHIoJ2FsdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgJGl0ZW0uZmluZCgndmlkZW8nKS5hdHRyKCdhbHQnKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXAgPSAkaXRlbS5maW5kKCd2aWRlbycpLmF0dHIoJ2FsdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gc2J5VXJsRGV0ZWN0KGNhcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZih1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbS5maW5kKCdhJykuYXR0cignaHJlZicsIHVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgJGl0ZW0uZmluZCgnLnNieV9saW5rJykuYWRkQ2xhc3MoJ3NieV9kaXNhYmxlX2xpZ2h0Ym94Jyk7XG4gICAgICAgICAgICAgICAgICAgIC8vSWYgbGlnaHRib3ggaXMgZW5hYmxlZCBhZGQgbGlnaHRib3ggbGlua3NcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciAkc2J5X3Bob3RvX3dyYXAgPSAkaXRlbS5maW5kKCcuc2J5X3Bob3RvX3dyYXAnKSxcbiAgICAgICAgICAgICAgICAgICAgICAkc2J5X2xpbmsgPSAkc2J5X3Bob3RvX3dyYXAuZmluZCgnLnNieV9saW5rJyk7XG4gICAgICAgICAgICAgICAgICAgIGZlZWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJlZmZlY3Q6ICd0cnVlJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZihmZWVkT3B0aW9ucy5ob3ZlcmVmZmVjdCA9PSAnbm9uZScpe1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9sYXVuY2ggbGlnaHRib3ggb24gY2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICRzYnlfbGluay5jc3MoJ2JhY2tncm91bmQnLCAnbm9uZScpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRzYnlfbGluay5maW5kKCcqJykuaGlkZSgpLmVuZCgpLmZpbmQoJy5zYnlfbGlua19hcmVhJykuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHNieV9waG90b193cmFwLm9uKCdtb3VzZWVudGVyIG1vdXNlbGVhdmUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGUudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtb3VzZWVudGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtLmFkZENsYXNzKCdzYnlfYW5pbWF0ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21vdXNlbGVhdmUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0ucmVtb3ZlQ2xhc3MoJ3NieV9hbmltYXRlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdmlkZW9JRCA9IHR5cGVvZiAkaXRlbS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgIT09ICd1bmRlZmluZWQnID8gJGl0ZW0uYXR0cignZGF0YS12aWRlby1pZCcpIDogJGl0ZW0uZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3N0UmVjZW50bHlMb2FkZWRQb3N0cy5wdXNoKHZpZGVvSUQpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5hZnRlckZlZWRTZXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2Fyb3VzZWxBcmdzICE9PSAndW5kZWZpbmVkJyApIHtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzLmVsKS5maW5kKCcuc2J5X2Nhcm91c2VsJykuc2J5T3dsQ2Fyb3VzZWwodGhpcy5jYXJvdXNlbEFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQodGhpcy5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzVdKSA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzLmVsKS5hZGRDbGFzcygnc2J5X2Nhcm91c2VsXzJfcm93Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuc2V0VXBDVEEgPSBmdW5jdGlvbigkaXRlbSx2aWRlb0lEKSB7XG4gICAgICAgICAgICAgICAgLy93aW5kb3cuc2J5LmN0YXNcblxuICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gdHlwZW9mIHZpZGVvSUQgIT09ICd1bmRlZmluZWQnID8gdmlkZW9JRCA6ICRpdGVtLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyksXG4gICAgICAgICAgICAgICAgICB0ZXh0ID0gdHlwZW9mICRpdGVtLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXRpdGxlJykgIT09ICd1bmRlZmluZWQnID8gJGl0ZW0uZmluZCgnLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtdGl0bGUnKSA6ICcnLFxuICAgICAgICAgICAgICAgICAgY3RhSW5DYXB0aW9uID0gd2luZG93LnNieS5jdGFEZXRlY3QodGV4dCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY3RhSW5DYXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuY3Rhc1t2aWRlb0lEXSA9IGN0YUluQ2FwdGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmN0YXNbdmlkZW9JRF0gPSB0aGlzLmdldERlZmF1bHRDVEEoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmdldERlZmF1bHRDVEEgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YS50eXBlICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZ2VuZXJhbC5jdGEudHlwZSA9PT0gJ2xpbmsnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiAnbGluaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB0aGlzLnNldHRpbmdzLmdlbmVyYWwuY3RhLmRlZmF1bHRMaW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMuc2V0dGluZ3MuZ2VuZXJhbC5jdGEuZGVmYXVsdFRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiAncmVsYXRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZDogdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YS5kZWZhdWx0UG9zdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmFmdGVyUmVzaXplID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbWFnZUhlaWdodCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXliZVJhaXNlSW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbWFnZVNpemVDbGFzcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWxsQ1RBRGltZW5zaW9ucygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2l6ZVBsYXllcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2l6ZUl0ZW1zKCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLnNldEFsbENUQURpbWVuc2lvbnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2godGhpcy5DVEEsIGZ1bmN0aW9uKGluZGV4LCBDVEFPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKENUQU9iai5pc0luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDVEFPYmouc2V0Q1RBU3R5bGVzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuYWZ0ZXJTZW5kQ2hlY2tXUFBvc3RzVG9TZXJ2ZXIgPSBmdW5jdGlvbihyZXNwb25zZSl7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKTtcblxuICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2VbICQodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpIF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHJlc3BvbnNlWyAkKHRoaXMpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9zYnlfdmlld3NfY291bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV92aWV3X2NvdW50JykudGV4dChkYXRhLnNieV92aWV3X2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9jb21tZW50X2NvdW50JykudGV4dChkYXRhLnNieV9jb21tZW50X2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9saWtlX2NvdW50JykudGV4dChkYXRhLnNieV9saWtlX2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5icm9hZGNhc3RfdHlwZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2xzX21lc3NhZ2UnKS50ZXh0KGRhdGEuc2J5X2xpdmVfYnJvYWRjYXN0LmxpdmVfc3RyZWFtaW5nX3N0cmluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2RhdGUnKS5odG1sKGRhdGEuc2J5X2xpdmVfYnJvYWRjYXN0LmxpdmVfc3RyZWFtaW5nX2RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5saXZlX3N0cmVhbWluZ190aW1lc3RhbXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdkYXRhLWxpdmUtZGF0ZScsZGF0YS5zYnlfbGl2ZV9icm9hZGNhc3QubGl2ZV9zdHJlYW1pbmdfdGltZXN0YW1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5zYnlfZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2l0ZW1fdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS10aXRsZScsZGF0YS5zYnlfZGVzY3JpcHRpb24gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2VbICQodGhpcykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2VbICQodGhpcykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV92aWV3X2NvdW50JykudGV4dChkYXRhLnNieV92aWV3X2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9jb21tZW50X2NvdW50JykudGV4dChkYXRhLnNieV9jb21tZW50X2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9saWtlX2NvdW50JykudGV4dChkYXRhLnNieV9saWtlX2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5icm9hZGNhc3RfdHlwZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2xzX21lc3NhZ2UnKS50ZXh0KGRhdGEuc2J5X2xpdmVfYnJvYWRjYXN0LmxpdmVfc3RyZWFtaW5nX3N0cmluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2RhdGUnKS5odG1sKGRhdGEuc2J5X2xpdmVfYnJvYWRjYXN0LmxpdmVfc3RyZWFtaW5nX2RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5saXZlX3N0cmVhbWluZ190aW1lc3RhbXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdkYXRhLWxpdmUtZGF0ZScsZGF0YS5zYnlfbGl2ZV9icm9hZGNhc3QubGl2ZV9zdHJlYW1pbmdfdGltZXN0YW1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnc2J5YWZ0ZXJjaGVja3Bvc3RzJyk7XG4gICAgICAgICAgICAgICAgZXZ0LmZlZWQgPSB3aW5kb3cuc2J5LmZlZWRzW2luZGV4XTtcbiAgICAgICAgICAgICAgICBldnQucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICBqUXVlcnkod2luZG93KS50cmlnZ2VyKGV2dCk7XG5cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuYWZ0ZXJTdGF0ZUNoYW5nZSA9IGZ1bmN0aW9uKHBsYXllcklELHZpZGVvSUQsZGF0YSwkcGxheWVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5DVEFbcGxheWVySURdLnRvZ2dsZUNUQSh2aWRlb0lELGRhdGEuZGF0YSwkcGxheWVyKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlUGxheWVySW5mbyA9IGZ1bmN0aW9uKCRuZXdJdGVtKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKTtcbiAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9pdGVtJykuZmluZCgnLnNieV9pbmZvJykucmVwbGFjZVdpdGgoXG4gICAgICAgICAgICAgICAgICAkbmV3SXRlbS5maW5kKCcuc2J5X2luZm8nKS5jbG9uZSh0cnVlLHRydWUpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAvL3NieV9pbmZvXG4gICAgICAgICAgICAgICAgLy8gcmV0cmVpdmUgdGhlIG5ldyBpdGVtJ3MgZGF0YVxuICAgICAgICAgICAgICAgIGxldCBuZXdJdGVtVmlkZW9UaXRsZSA9ICRuZXdJdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGl0bGVfd3JhcCAuc2J5X3ZpZGVvX3RpdGxlJykudGV4dCgpO1xuICAgICAgICAgICAgICAgIGxldCBuZXdJdGVtQ2hhbm5lbCA9ICRuZXdJdGVtLmZpbmQoJy5zYnlfdXNlcm5hbWVfd3JhcCAuc2J5X3VzZXJuYW1lJykudGV4dCgpO1xuICAgICAgICAgICAgICAgIGxldCBuZXdJdGVtRGF0ZSA9ICRuZXdJdGVtLmZpbmQoJy5zYnlfZGF0ZV93cmFwIC5zYnlfZGF0ZScpLnRleHQoKTtcblxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgcGxheWVyIGluZm9cbiAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5LXBsYXllci1pbmZvIC5zYnktdmlkZW8taGVhZGVyLWluZm8gaDUnKS50ZXh0KCBuZXdJdGVtVmlkZW9UaXRsZSApO1xuICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnktcGxheWVyLWluZm8gLnNieS12aWRlby1oZWFkZXItbWV0YSAuc2J5LWNoYW5uZWwtbmFtZScpLnRleHQoIG5ld0l0ZW1DaGFubmVsICk7XG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieS1wbGF5ZXItaW5mbyAuc2J5LXZpZGVvLWhlYWRlci1tZXRhIC5zYnktdmlkZW8tZGF0ZScpLnRleHQoIG5ld0l0ZW1EYXRlICk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLm1heWJlQWRkQ1RBID0gZnVuY3Rpb24ocGxheWVySUQsJGVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLkNUQVtwbGF5ZXJJRF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQ1RBW3BsYXllcklEXSA9IG5ldyBTYnlDVEEocGxheWVySUQsdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIFNieUZlZWRQcm8ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTYnlGZWVkLnByb3RvdHlwZSk7XG5cbiAgICAgICAgZnVuY3Rpb24gU2J5TGlnaHRib3hCdWlsZGVyKCkge31cblxuICAgICAgICBTYnlMaWdodGJveEJ1aWxkZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgZ2V0RGF0YTogZnVuY3Rpb24oYSl7XG4gICAgICAgICAgICAgICAgdmFyIGNsb3Nlc3RGZWVkSW5kZXggPSBwYXJzZUludChhLmNsb3Nlc3QoJy5zYl95b3V0dWJlJykuYXR0cignZGF0YS1zYnktaW5kZXgnKS0xKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBmZWVkSW5kZXggOiBjbG9zZXN0RmVlZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBhLmF0dHIoXCJocmVmXCIpLFxuICAgICAgICAgICAgICAgICAgICB2aWRlb1RpdGxlOiB0eXBlb2YgYS5hdHRyKFwiZGF0YS12aWRlby10aXRsZVwiKSAhPT0gJ3VuZGVmaW5lZCcgPyBhLmF0dHIoXCJkYXRhLXZpZGVvLXRpdGxlXCIpIDogJ1lvdVR1YmUgVmlkZW8nLFxuICAgICAgICAgICAgICAgICAgICB2aWRlbzogYS5hdHRyKFwiZGF0YS12aWRlby1pZFwiKSxcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbElEOiBhLmF0dHIoXCJkYXRhLWNoYW5uZWwtaWRcIilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVtcGxhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCI8ZGl2IGlkPSdzYnlfbGlnaHRib3hPdmVybGF5JyBjbGFzcz0nc2J5X2xpZ2h0Ym94T3ZlcmxheSc+PC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgaWQ9J3NieV9saWdodGJveCcgY2xhc3M9J3NieV9saWdodGJveCc+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1vdXRlckNvbnRhaW5lcic+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1jb250YWluZXInPlwiK1xuICAgICAgICAgICAgICAgICAgXCI8aW1nIGNsYXNzPSdzYnlfbGItaW1hZ2UnIGFsdD0nTGlnaHRib3ggaW1hZ2UgcGxhY2Vob2xkZXInIHNyYz0nJyAvPlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItcGxheWVyIHNieV9sYi1wbGF5ZXItcGxhY2Vob2xkZXInIGlkPSdzYnlfbGItcGxheWVyJz48L2Rpdj5cIiArXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1uYXYnPjxhIGNsYXNzPSdzYnlfbGItcHJldicgaHJlZj0nIycgPjxwIGNsYXNzPSdzYnktc2NyZWVucmVhZGVyJz5QcmV2aW91cyBTbGlkZTwvcD48c3Bhbj48L3NwYW4+PC9hPjxhIGNsYXNzPSdzYnlfbGItbmV4dCcgaHJlZj0nIycgPjxwIGNsYXNzPSdzYnktc2NyZWVucmVhZGVyJz5OZXh0IFNsaWRlPC9wPjxzcGFuPjwvc3Bhbj48L2E+PC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1sb2FkZXInPjxhIGNsYXNzPSdzYnlfbGItY2FuY2VsJz48L2E+PC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8L2Rpdj5cIitcbiAgICAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc2J5X2xiLWRhdGFDb250YWluZXInPlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItZGF0YSc+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1kZXRhaWxzJz5cIitcbiAgICAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc2J5X2xiLWNhcHRpb24nPjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItaW5mbyc+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1udW1iZXInPjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8L2Rpdj5cIitcbiAgICAgICAgICAgICAgICAgIFwiPC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1jbG9zZUNvbnRhaW5lcic+PGEgY2xhc3M9J3NieV9sYi1jbG9zZSc+PC9hPjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8L2Rpdj5cIitcbiAgICAgICAgICAgICAgICAgIFwiPC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjwvZGl2PlwiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJlZm9yZVBsYXllclNldHVwOiBmdW5jdGlvbigkbGlnaHRib3gsZGF0YSxpbmRleCxhbGJ1bSxmZWVkKXtcblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFmdGVyUGxheWVyU2V0dXA6IGZ1bmN0aW9uICgkbGlnaHRib3gsZGF0YSxpbmRleCxhbGJ1bSkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFmdGVyUmVzaXplOiBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHZhciBwbGF5ZXJIZWlnaHQgPSAkKCcjc2J5X2xpZ2h0Ym94IC5zYnlfbGItcGxheWVyJykuaGVpZ2h0KCk7XG5cbiAgICAgICAgICAgICAgICBpZiAocGxheWVySGVpZ2h0ID4gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHREaWYgPSAkKCcjc2J5X2xpZ2h0Ym94IC5zYnlfbGItb3V0ZXJDb250YWluZXInKS5oZWlnaHQoKSAtIHBsYXllckhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodERpZiA+IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjc2J5X2xpZ2h0Ym94IC5zYnlfbGItcGxheWVyJykuY3NzKCd0b3AnLGhlaWdodERpZi8yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXVzZVBsYXllcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNieUxpZ2h0Ym94UGxheWVyID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgJiYgdHlwZW9mIFlUID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgWVQuZ2V0KCdzYnlfbGItcGxheWVyJykgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAmJiB0eXBlb2YgWVQuZ2V0KCdzYnlfbGItcGxheWVyJykucGF1c2VWaWRlbyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBZVC5nZXQoJ3NieV9sYi1wbGF5ZXInKS5wYXVzZVZpZGVvKClcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cuc2J5TGlnaHRib3hQbGF5ZXIgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAmJiB0eXBlb2Ygd2luZG93LnNieUxpZ2h0Ym94UGxheWVyLnBhdXNlVmlkZW8gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNieUxpZ2h0Ym94UGxheWVyLnBhdXNlVmlkZW8oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBTYnlMaWdodGJveEJ1aWxkZXJQcm8ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTYnlMaWdodGJveEJ1aWxkZXIucHJvdG90eXBlKTtcblxuICAgICAgICBmdW5jdGlvbiBTYnlMaWdodGJveEJ1aWxkZXJQcm8oKSB7XG4gICAgICAgICAgICBTYnlMaWdodGJveEJ1aWxkZXIuY2FsbCh0aGlzKTtcblxuICAgICAgICAgICAgdmFyIGZlZWRDb250YWluZXIgPSAkKCcuc2JfeW91dHViZScpLFxuICAgICAgICAgICAgICAgIGNoYW5uZWxTdWJzY3JpYmVycyA9IGZlZWRDb250YWluZXIuYXR0cignZGF0YS1jaGFubmVsLXN1YnNjcmliZXJzJyksXG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlQnRuVGV4dCA9IGZlZWRDb250YWluZXIuYXR0cignZGF0YS1zdWJzY3JpYmUtYnRuLXRleHQnKSxcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVCdG4gPSBmZWVkQ29udGFpbmVyLmF0dHIoJ2RhdGEtc3Vic2NyaWJlLWJ0bicpO1xuXG4gICAgICAgICAgICB0aGlzLmdldERhdGEgPSBmdW5jdGlvbihhKXtcbiAgICAgICAgICAgICAgICB2YXIgY2xvc2VzdEZlZWRJbmRleCA9IHBhcnNlSW50KGEuY2xvc2VzdCgnLnNiX3lvdXR1YmUnKS5hdHRyKCdkYXRhLXNieS1pbmRleCcpLTEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGZlZWRJbmRleCA6IGNsb3Nlc3RGZWVkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGxpbms6IGEuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvOiBhLmF0dHIoXCJkYXRhLXZpZGVvLWlkXCIpLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogYS5hdHRyKFwiZGF0YS10aXRsZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UaXRsZTogdHlwZW9mIGEuYXR0cihcImRhdGEtdmlkZW8tdGl0bGVcIikgIT09ICd1bmRlZmluZWQnID8gYS5hdHRyKFwiZGF0YS12aWRlby10aXRsZVwiKSA6ICdZb3VUdWJlIFZpZGVvJyxcbiAgICAgICAgICAgICAgICAgICAgYXZhdGFyOiBhLmF0dHIoXCJkYXRhLWF2YXRhclwiKSxcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogYS5hdHRyKFwiZGF0YS11c2VyXCIpLFxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsVVJMOiBhLmF0dHIoXCJkYXRhLXVybFwiKSxcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbElEOiBhLmF0dHIoXCJkYXRhLWNoYW5uZWwtaWRcIiksXG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWxTdWJzY3JpYmVyczogY2hhbm5lbFN1YnNjcmliZXJzLFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVCdG46IHN1YnNjcmliZUJ0bixcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlQnRuVGV4dDogc3Vic2NyaWJlQnRuVGV4dCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiPGRpdiBpZD0nc2J5X2xpZ2h0Ym94T3ZlcmxheScgY2xhc3M9J3NieV9saWdodGJveE92ZXJsYXknPjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGlkPSdzYnlfbGlnaHRib3gnIGNsYXNzPSdzYnlfbGlnaHRib3gnPlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItb3V0ZXJDb250YWluZXInPlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItY29udGFpbmVyJz5cIitcbiAgICAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc2J5X2xiX3ZpZGVvX3RodW1ibmFpbF93cmFwJz5cIitcbiAgICAgICAgICAgICAgICAgIFwiPHNwYW4gY2xhc3M9J3NieV9sYl92aWRlb190aHVtYm5haWwnPlwiICtcbiAgICAgICAgICAgICAgICAgIFwiPGltZyBjbGFzcz0nc2J5X2xiLWltYWdlJyBhbHQ9J0xpZ2h0Ym94IGltYWdlIHBsYWNlaG9sZGVyJyBzcmM9JycgLz5cIitcbiAgICAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc2J5X2xiLXBsYXllcicgaWQ9J3NieV9sYi1wbGF5ZXInPjwvZGl2PlwiICtcbiAgICAgICAgICAgICAgICAgIFwiPC9zcGFuPlwiICtcbiAgICAgICAgICAgICAgICAgIFwiPC9kaXY+XCIgK1xuXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1uYXYnPjxhIGNsYXNzPSdzYnlfbGItcHJldicgaHJlZj0nIycgPjxwIGNsYXNzPSdzYnktc2NyZWVucmVhZGVyJz5QcmV2aW91cyBTbGlkZTwvcD48c3Bhbj48L3NwYW4+PC9hPjxhIGNsYXNzPSdzYnlfbGItbmV4dCcgaHJlZj0nIycgPjxwIGNsYXNzPSdzYnktc2NyZWVucmVhZGVyJz5OZXh0IFNsaWRlPC9wPjxzcGFuPjwvc3Bhbj48L2E+PC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1sb2FkZXInPjxhIGNsYXNzPSdzYnlfbGItY2FuY2VsJz48L2E+PC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8L2Rpdj5cIitcbiAgICAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc2J5X2xiLWRhdGFDb250YWluZXInPlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItZGF0YSc+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1kZXRhaWxzJz5cIitcbiAgICAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc2J5X2xiLWNhcHRpb24nPjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItaW5mbyc+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1udW1iZXInPjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8L2Rpdj5cIitcbiAgICAgICAgICAgICAgICAgIFwiPC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1jbG9zZUNvbnRhaW5lcic+PGEgY2xhc3M9J3NieV9sYi1jbG9zZSc+PC9hPjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8L2Rpdj5cIitcbiAgICAgICAgICAgICAgICAgIFwiPC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjwvZGl2PlwiO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5iZWZvcmVQbGF5ZXJTZXR1cCA9IGZ1bmN0aW9uKCRsaWdodGJveCxkYXRhLGluZGV4LGFsYnVtLGZlZWQpe1xuICAgICAgICAgICAgICAgIGlmICghJGxpZ2h0Ym94LmZpbmQoJy5zYnlfY3RhX2l0ZW1zX3dyYXBzJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICRsaWdodGJveC5maW5kKCcuc2J5X2xiX3ZpZGVvX3RodW1ibmFpbF93cmFwJykuYXBwZW5kKCQoZmVlZC5lbCkuZmluZCgnLnNieV9jdGFfaXRlbXNfd3JhcHMnKS5jbG9uZSgpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkbGlnaHRib3guZmluZCgnLnNieV9jdGFfaXRlbXNfd3JhcHMnKS5yZXBsYWNlV2l0aCgkKGZlZWQuZWwpLmZpbmQoJy5zYnlfY3RhX2l0ZW1zX3dyYXBzJykuY2xvbmUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5hZnRlclBsYXllclNldHVwID0gZnVuY3Rpb24oJGxpZ2h0Ym94LGRhdGEsaW5kZXgsYWxidW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUF2YXRhclVybHMgPSB7fTtcbiAgICAgICAgICAgICAgICAvL0FkZCBsaW5rcyB0byB0aGUgY2FwdGlvblxuICAgICAgICAgICAgICAgIHZhciBzYnlMaWdodGJveENhcHRpb24gPSBkYXRhLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgaGFzaFJlZ2V4ID0gLyhefFxccykjKFxcd1tcXHUwMDQxLVxcdTAwNUFcXHUwMDYxLVxcdTAwN0FcXHUwMEFBXFx1MDBCNVxcdTAwQkFcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4QTBcXHUwOEEyLVxcdTA4QUNcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk3N1xcdTA5NzktXFx1MDk3RlxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzMzXFx1MEMzNS1cXHUwQzM5XFx1MEMzRFxcdTBDNThcXHUwQzU5XFx1MEM2MFxcdTBDNjFcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENjBcXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxQ1xcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QzEtXFx1MTlDN1xcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxODNcXHUyMTg0XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0VFXFx1MkNGMlxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDgwLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyRTJGXFx1MzAwNVxcdTMwMDZcXHUzMDMxLVxcdTMwMzVcXHUzMDNCXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjk3XFx1QTZBMC1cXHVBNkU1XFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBNzkzXFx1QTdBMC1cXHVBN0FBXFx1QTdGOC1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE4MC1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQkMwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGREMrMC05X10rKXwoI1thLdGPXSspfCgjW1xcdTMwMDAtXFx1MzAzZlxcdTMwNDAtXFx1MzA5ZlxcdTMwYTAtXFx1MzBmZlxcdWZmMDAtXFx1ZmY5ZlxcdTRlMDAtXFx1OWZhZlxcdTM0MDAtXFx1NGRiZl0rKS9naSxcbiAgICAgICAgICAgICAgICAgIHRhZ1JlZ2V4ID0gL1tAXStbQS1aYS16MC05LV9cXC5cIjxdKy9nO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2J5TGlnaHRib3hDYXB0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBzYnlMaWdodGJveENhcHRpb24gIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNieUxpZ2h0Ym94Q2FwdGlvbiA9IHNieUxpZ2h0Ym94Q2FwdGlvbi5yZXBsYWNlKC8oPiMpL2csJz4gIycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAoc2J5TGlnaHRib3hDYXB0aW9uKSA/IHNieUxpZ2h0Ym94Q2FwdGlvbiA9IHNieUxpbmtpZnkoc2J5TGlnaHRib3hDYXB0aW9uKSA6IHNieUxpZ2h0Ym94Q2FwdGlvbiA9ICcnO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzYnlMaWdodGJveEFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2J5TGlnaHRib3hBY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfSwxMDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgYXZhdGFySW1hZ2VIdG1sID0gJycsXG4gICAgICAgICAgICAgICAgICAgIFlvdVR1YmVMb2dvID0gJzxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE3XCIgdmlld0JveD1cIjAgMCAxNiAxN1wiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNi42NjczMiAxMC4wNjM0TDEwLjEyNzMgOC4wNjM0TDYuNjY3MzIgNi4wNjM0VjEwLjA2MzRaTTE0LjM3NCA0Ljg0MzRDMTQuNDYwNyA1LjE1NjczIDE0LjUyMDcgNS41NzY3MyAxNC41NjA3IDYuMTEwMDZDMTQuNjA3MyA2LjY0MzQgMTQuNjI3MyA3LjEwMzQgMTQuNjI3MyA3LjUwMzRMMTQuNjY3MyA4LjA2MzRDMTQuNjY3MyA5LjUyMzQgMTQuNTYwNyAxMC41OTY3IDE0LjM3NCAxMS4yODM0QzE0LjIwNzMgMTEuODgzNCAxMy44MjA3IDEyLjI3MDEgMTMuMjIwNyAxMi40MzY3QzEyLjkwNzMgMTIuNTIzNCAxMi4zMzQgMTIuNTgzNCAxMS40NTQgMTIuNjIzNEMxMC41ODczIDEyLjY3MDEgOS43OTM5OCAxMi42OTAxIDkuMDYwNjUgMTIuNjkwMUw4LjAwMDY1IDEyLjczMDFDNS4yMDczMiAxMi43MzAxIDMuNDY3MzIgMTIuNjIzNCAyLjc4MDY1IDEyLjQzNjdDMi4xODA2NSAxMi4yNzAxIDEuNzkzOTggMTEuODgzNCAxLjYyNzMyIDExLjI4MzRDMS41NDA2NSAxMC45NzAxIDEuNDgwNjUgMTAuNTUwMSAxLjQ0MDY1IDEwLjAxNjdDMS4zOTM5OCA5LjQ4MzQgMS4zNzM5OCA5LjAyMzQgMS4zNzM5OCA4LjYyMzRMMS4zMzM5OCA4LjA2MzRDMS4zMzM5OCA2LjYwMzQgMS40NDA2NSA1LjUzMDA2IDEuNjI3MzIgNC44NDM0QzEuNzkzOTggNC4yNDM0IDIuMTgwNjUgMy44NTY3MyAyLjc4MDY1IDMuNjkwMDZDMy4wOTM5OCAzLjYwMzQgMy42NjczMiAzLjU0MzQgNC41NDczMiAzLjUwMzRDNS40MTM5OCAzLjQ1NjczIDYuMjA3MzIgMy40MzY3MyA2Ljk0MDY1IDMuNDM2NzNMOC4wMDA2NSAzLjM5NjczQzEwLjc5NCAzLjM5NjczIDEyLjUzNCAzLjUwMzQgMTMuMjIwNyAzLjY5MDA2QzEzLjgyMDcgMy44NTY3MyAxNC4yMDczIDQuMjQzNCAxNC4zNzQgNC44NDM0WlwiIGZpbGw9XCJ3aGl0ZVwiLz48L3N2Zz4nLFxuICAgICAgICAgICAgICAgICAgdXNlckh0bWwgPSAnPGRpdiBjbGFzcz1cInNieS1sYi1jaGFubmVsLWhlYWRlclwiPicsXG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVCdG4gPSBkYXRhLnN1YnNjcmliZUJ0biA/ICc8YSBjbGFzcz1cInNieS1sYi1zdWJzY3JpYmUtYnRuXCIgaHJlZj1cImh0dHA6Ly93d3cueW91dHViZS5jb20vY2hhbm5lbC8nKyBkYXRhLmNoYW5uZWxJRCArJz9zdWJfY29uZmlybWF0aW9uPTEmZmVhdHVyZT1zdWJzY3JpYmUtZW1iZWQtY2xpY2tcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+JysgWW91VHViZUxvZ28gKycgJyArIHN1YnNjcmliZUJ0blRleHQgKyc8L2E+JyA6ICcnO1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuYXZhdGFyICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhLmF2YXRhciAhPT0gJycgJiYgdHlwZW9mIGRhdGEudXNlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYXZhdGFySW1hZ2VIdG1sID0gKGRhdGEuYXZhdGFyICE9PSAndW5kZWZpbmVkJykgPyAnPGltZyBzcmM9XCInK2RhdGEuYXZhdGFyKydcIiAvPicgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLnN1YnNjcmliZUJ0biApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJIdG1sICs9ICc8YSBjbGFzcz1cInNieV9saWdodGJveF91c2VybmFtZVwiIGhyZWY9XCInK2RhdGEuY2hhbm5lbFVSTCsnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXJcIj4nK2F2YXRhckltYWdlSHRtbCsnPHAgY2xhc3M9XCJzYnktbGItY2hhbm5lbC1uYW1lLXdpdGgtc3Vic1wiPjxzcGFuPkAnK2RhdGEudXNlciArICc8L3NwYW4+PHNwYW4+JyArIGRhdGEuY2hhbm5lbFN1YnNjcmliZXJzICArJzwvc3Bhbj48L3A+PC9hPiAnICsgc3Vic2NyaWJlQnRuICsgJzwvZGl2Pic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VySHRtbCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YS51c2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCh3aW5kb3cuc2J5LmZlZWRzLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5hdmFpbGFibGVBdmF0YXJVcmxzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdGhpcy5hdmFpbGFibGVBdmF0YXJVcmxzW2RhdGEudXNlcl0gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYXZhaWxhYmxlQXZhdGFyVXJsc1tkYXRhLnVzZXJdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YXRhckltYWdlSHRtbCA9ICc8aW1nIHNyYz1cIicrdGhpcy5hdmFpbGFibGVBdmF0YXJVcmxzW2RhdGEudXNlcl0rJ1wiIC8+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWNhcHRpb25cIikuaHRtbCggdXNlckh0bWwgKyAnPHNwYW4gY2xhc3M9XCJzYnlfY2FwdGlvbl90ZXh0XCI+JyArIHNieUxpZ2h0Ym94Q2FwdGlvbiArICc8L3NwYW4+JykuZmFkZUluKFwiZmFzdFwiKTtcblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIFNieUNUQSh2aWRlb0lELGZlZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy52aWRlb0lEID0gdmlkZW9JRDtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLnJlbGF0ZWQ7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrQXJncyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5mZWVkT2JqSW5Db250ZXh0ID0gZmVlZDtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxO1xuICAgICAgICAgICAgdGhpcy5udW1JdGVtcyA9IDQ7XG4gICAgICAgICAgICB0aGlzLm51bUl0ZW1Db2x1bW5zID0gMjtcbiAgICAgICAgICAgIHRoaXMuJHBsYXllciA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgU2J5Q1RBLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgIHRvZ2dsZUNUQTogZnVuY3Rpb24odmlkZW9JRCxkYXRhTnVtLCRwbGF5ZXIpe1xuICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllciA9ICRwbGF5ZXIubGVuZ3RoID8gJHBsYXllciA6ICQoJy5zYnlfbGItY29udGFpbmVyJyk7IC8vIHVzZSB0aGUgbGlnaHRib3ggY29udGFpbmVyIGlmIG5vIHBsYXllciBpcyBzZXRcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gZGF0YU51bTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZGVvSUQgPSB2aWRlb0lEO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldENUQSgpO1xuXG4gICAgICAgICAgICAgICAgLy9jdGFEZXRlY3RcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNieS5jdGFzW3ZpZGVvSURdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrQXJncyA9IHdpbmRvdy5zYnkuY3Rhc1t2aWRlb0lEXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5jYWxsYmFja0FyZ3MuY2FsbGJhY2s7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sgPT09ICdsaW5rJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gdGhpcy5saW5rO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FsbGJhY2sgPT09ICdyZWxhdGVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gdGhpcy5yZWxhdGVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGF0YU51bSA9PT0gMiB8fCBkYXRhTnVtID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllci5maW5kKCcuc2J5X2N0YV9pdGVtc193cmFwcycpLmFkZENsYXNzKCdzYnlfY3RhX2lzX29wZW4nKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGFOdW0gPT09IDIgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllci5maW5kKCcuc2J5X2N0YV9pdGVtc193cmFwcycpLmFkZENsYXNzKCdzYnlfY3RhX3N0YXRlX3BhdXNlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcGxheWVyLmZpbmQoJy5zYnlfY3RhX2l0ZW1zX3dyYXBzJykuYWRkQ2xhc3MoJ3NieV9jdGFfc3RhdGVfZW5kZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllci5maW5kKCcuc2J5X2N0YV9pdGVtc193cmFwcycpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENUQVN0eWxlcygpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcGxheWVyLmZpbmQoJy5zYnlfY3RhX2l0ZW1zX3dyYXBzJykucmVtb3ZlQ2xhc3MoJ3NieV9jdGFfaXNfb3BlbicpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllci5maW5kKCcuc2J5X2N0YV9pdGVtc193cmFwcycpLmhpZGUoKVxuICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2J5X2N0YV9zdGF0ZV9wYXVzZWQnKVxuICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2J5X2N0YV9zdGF0ZV9lbmRlZCcpXG4gICAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdzYnlfY3RhX2lzX29wZW4nKTtcbiAgICAgICAgICAgICAgICB9XG5cblxuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVsYXRlZDogZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciBjdGFPYmogPSB0aGlzLFxuICAgICAgICAgICAgICAgICAgZmVlZE9iakluQ29udGV4dCA9IHRoaXMuZmVlZE9iakluQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgPSB3aW5kb3cuc2J5LnNodWZmbGUodGhpcy5nZXRSZWxhdGVkKGZlZWRPYmpJbkNvbnRleHQpKSxcbiAgICAgICAgICAgICAgICAgIGFkZGVkID0gMCxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRWaWRlb0lkID0gdGhpcy52aWRlb0lELFxuICAgICAgICAgICAgICAgICAgJHBsYXllciA9IHRoaXMuJHBsYXllcjtcblxuICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllci5maW5kKCcuc2J5X2N0YV9pdGVtc193cmFwcycpXG4gICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NieV9jdGFfY29sc18nICsgdGhpcy5udW1JdGVtQ29sdW1ucyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm51bUl0ZW1zID0gNDtcbiAgICAgICAgICAgICAgICB0aGlzLm51bUl0ZW1Db2x1bW5zID0gMjtcblxuICAgICAgICAgICAgICAgIGlmICgkcGxheWVyLndpZHRoKCkgPCA0ODApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1JdGVtcyA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubnVtSXRlbUNvbHVtbnMgPSAxXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIG51bUl0ZW1zID0gdGhpcy5udW1JdGVtcztcblxuICAgICAgICAgICAgICAgICQuZWFjaChyZWxhdGVkLCBmdW5jdGlvbihpbmRleCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnZpZGVvSUQgIT09IGN1cnJlbnRWaWRlb0lkICYmIGFkZGVkIDwgbnVtSXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRwbGF5ZXIuZmluZCgnLnNieV9jdGFfaXRlbXNfd3JhcHMgLnNieV9jdGFfaW5uZXJfd3JhcCcpLmFwcGVuZCgnPGRpdiBjbGFzcz1cInNieV9jdGFfaXRlbVwiPjxkaXYgY2xhc3M9XCJzYnlfdmlkZW9fdGh1bWJuYWlsX3dyYXBcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJzxhIGNsYXNzPVwic2J5X3ZpZGVvX3RodW1ibmFpbFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXJcIiBkYXRhLXZpZGVvLWlkPVwiJyt2YWx1ZS52aWRlb0lEKydcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzYnlfdGh1bWJuYWlsX2hvdmVyXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2J5X3RodW1ibmFpbF9ob3Zlcl9pbm5lclwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzYnlfdmlkZW9fdGl0bGVcIj4nK3ZhbHVlLnRpdGxlKyc8L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzYnktc2NyZWVucmVhZGVyXCI+UGxheTwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJzxpbWcgc3JjPVwiJyt2YWx1ZS50aHVtYm5haWwrJ1wiIGFsdD1cIicrdmFsdWUudGl0bGUrJ1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzYnlfbG9hZGVyIHNieV9oaWRkZW5cIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTtcIj48L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICc8L2E+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgJHBsYXllci5maW5kKCcuc2J5X2N0YV9pdGVtc193cmFwcyAuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykub2ZmKCkub24oJ2NsaWNrJyxmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3VmlkZW9JRCA9ICQodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmVlZE9iakluQ29udGV4dC5vblRodW1ibmFpbENsaWNrKCQodGhpcyksdHJ1ZSxuZXdWaWRlb0lEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0YU9iai52aWRlb0lEID0gbmV3VmlkZW9JRDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRSZWxhdGVkOiBmdW5jdGlvbihmZWVkT2JqSW5Db250ZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmZWVkT2JqSW5Db250ZXh0LnNldHRpbmdzLmdlbmVyYWwuY3RhLmRlZmF1bHRQb3N0c1swXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRmZWVkRWwgPSAkKGZlZWRPYmpJbkNvbnRleHQuZWwpLFxuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRWaWRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICRmZWVkRWwuZmluZCgnLnNieV9pdGVtJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgJCh0aGlzKS5maW5kKCcuc2J5X2l0ZW1fdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS1mdWxsLXJlcycpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGlzVmlkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0lEOiAkKHRoaXMpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICQodGhpcykuYXR0cignZGF0YS12aWRlby10aXRsZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHVtYm5haWw6ICQodGhpcykuZmluZCgnLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtZnVsbC1yZXMnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZFZpZHMucHVzaCh0aGlzVmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWxhdGVkVmlkcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZlZWRPYmpJbkNvbnRleHQuc2V0dGluZ3MuZ2VuZXJhbC5jdGEuZGVmYXVsdFBvc3RzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHBsYXllciA9IHRoaXMuJHBsYXllcixcbiAgICAgICAgICAgICAgICAgIGZlZWRPYmpJbkNvbnRleHQgPSB0aGlzLmZlZWRPYmpJbkNvbnRleHQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLiRwbGF5ZXIuZmluZCgnLnNieV9jdGFfaXRlbXNfd3JhcHMnKVxuICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdzYnlfY3RhX2NvbHNfJyArIHRoaXMubnVtSXRlbUNvbHVtbnMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5udW1JdGVtcyA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5udW1JdGVtQ29sdW1ucyA9IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSAnJyxcbiAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3MgPSAnJztcblxuICAgICAgICAgICAgICAgIGlmIChmZWVkT2JqSW5Db250ZXh0LnNldHRpbmdzLmdlbmVyYWwuY3RhLmNvbG9yICE9PSAnJyB8fCBmZWVkT2JqSW5Db250ZXh0LnNldHRpbmdzLmdlbmVyYWwuY3RhLnRleHRDb2xvciAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSAnIHN0eWxlPVwiJztcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcyA9ICcgc2J5X2N1c3RvbSc7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZlZWRPYmpJbkNvbnRleHQuc2V0dGluZ3MuZ2VuZXJhbC5jdGEuY29sb3IgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSArPSAnYmFja2dyb3VuZDogcmdiKCcgKyBmZWVkT2JqSW5Db250ZXh0LnNldHRpbmdzLmdlbmVyYWwuY3RhLmNvbG9yICsgJyk7JztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZmVlZE9iakluQ29udGV4dC5zZXR0aW5ncy5nZW5lcmFsLmN0YS50ZXh0Q29sb3IgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSArPSAnY29sb3I6IHJnYignICsgZmVlZE9iakluQ29udGV4dC5zZXR0aW5ncy5nZW5lcmFsLmN0YS50ZXh0Q29sb3IgKyAnKTsnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlICs9ICdcIic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIG9wZW5BdHRzID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGZlZWRPYmpJbkNvbnRleHQuc2V0dGluZ3MuZ2VuZXJhbC5jdGEub3BlblR5cGUgPT09ICduZXd3aW5kb3cnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5BdHRzID0gJyB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lclwiJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkcGxheWVyLmZpbmQoJy5zYnlfY3RhX2l0ZW1zX3dyYXBzIC5zYnlfY3RhX2lubmVyX3dyYXAnKS5hcHBlbmQoJzxkaXYgY2xhc3M9XCJzYnlfY3RhX2l0ZW1cIj4nICtcbiAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2J5X2J0bl93cmFwXCI+JyArXG4gICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNieV9idG4nK3N0eWxlQ2xhc3MrJ1wiPicgK1xuXG4gICAgICAgICAgICAgICAgICAnPGEgY2xhc3M9XCJzYnlfY3RhX2J1dHRvblwiIGhyZWY9XCInK3RoaXMuY2FsbGJhY2tBcmdzLnVybCsnXCInK29wZW5BdHRzKycgZGF0YS12aWRlby1pZD1cIicrdGhpcy52aWRlb0lEKydcIicrc3R5bGUrJz4nICtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tBcmdzLnRleHQgK1xuICAgICAgICAgICAgICAgICAgJzwvYT4nICtcbiAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcblxuICAgICAgICAgICAgICAgICAgJzwvZGl2PidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldENUQVN0eWxlczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBsYXllclRvcEhlaWdodCA9IDYwLFxuICAgICAgICAgICAgICAgICAgcGxheWVyQm90dG9tSGVpZ2h0ID0gNDksXG4gICAgICAgICAgICAgICAgICBtaW5pbXVtSGVpZ2h0ID0gOTAsXG4gICAgICAgICAgICAgICAgICBjdGFPdmVybGF5SGVpZ2h0ID0gTWF0aC5tYXgobWluaW11bUhlaWdodCx0aGlzLiRwbGF5ZXIuaGVpZ2h0KCkgLSBwbGF5ZXJUb3BIZWlnaHQgLSBwbGF5ZXJCb3R0b21IZWlnaHQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy4kcGxheWVyLmZpbmQoJy5zYnlfY3RhX2l0ZW1zX3dyYXBzJylcbiAgICAgICAgICAgICAgICAgIC5jc3MoJ2hlaWdodCcsY3RhT3ZlcmxheUhlaWdodCsncHgnKVxuICAgICAgICAgICAgICAgICAgLmNzcygnd2lkdGgnLCh0aGlzLiRwbGF5ZXIuZmluZCgnaWZyYW1lJykud2lkdGgoKS0yMCkrJ3B4JylcbiAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2J5X2N0YV9jb2xzXycgKyB0aGlzLm51bUl0ZW1Db2x1bW5zKTtcblxuICAgICAgICAgICAgICAgIHZhciBudW1Sb3dzID0gTWF0aC5tYXgoMSx0aGlzLm51bUl0ZW1zL3RoaXMubnVtSXRlbUNvbHVtbnMpLFxuICAgICAgICAgICAgICAgICAgdG90YWxWZXJ0aWNhbFBhZGRpbmcgPSBwYXJzZUludCh0aGlzLiRwbGF5ZXIuZmluZCgnLnNieV9jdGFfaXRlbXNfd3JhcHMnKS5jc3MoJ3BhZGRpbmctdG9wJykucmVwbGFjZSgncHgnLCcnKSkgKiAyLFxuICAgICAgICAgICAgICAgICAgbWF4Q1RBSXRlbUhlaWdodCA9IE1hdGgubWF4KG1pbmltdW1IZWlnaHQsKGN0YU92ZXJsYXlIZWlnaHQtdG90YWxWZXJ0aWNhbFBhZGRpbmcpL251bVJvd3MpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy4kcGxheWVyLmZpbmQoJy5zYnlfY3RhX2l0ZW0nKS5jc3MoJ21heC1oZWlnaHQnLG1heENUQUl0ZW1IZWlnaHQrJ3B4JykuZmluZCgnaW1nJykuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgJ21heC1oZWlnaHQnOiBtYXhDVEFJdGVtSGVpZ2h0KydweCcsXG4gICAgICAgICAgICAgICAgICAgICd3aWR0aCc6ICdhdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgJ21hcmdpbic6ICdhdXRvJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllci5maW5kKCcuc2J5X2J0bl93cmFwJykuY3NzKCdoZWlnaHQnLG1heENUQUl0ZW1IZWlnaHQrJ3B4Jyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzZXRDVEE6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllci5maW5kKCcuc2J5X2N0YV9pdGVtc193cmFwcyAuc2J5X2N0YV9pbm5lcl93cmFwJykuZW1wdHkoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9O1xuXG4gICAgICAgIHdpbmRvdy5zYnlfaW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgd2luZG93LnNieSA9IG5ldyBTYnkoKTtcbiAgICAgICAgICAgIHdpbmRvdy5zYnkuY3JlYXRlUGFnZSggd2luZG93LnNieS5jcmVhdGVGZWVkcywge3doZW5GZWVkc0NyZWF0ZWQ6IHdpbmRvdy5zYnkuYWZ0ZXJGZWVkc0NyZWF0ZWR9KTtcbiAgICAgICAgfTtcblxuXG5cbiAgICAgICAgd2luZG93LnNieV9jYXJvdXNlbF9pbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnbG9nJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzYnlHZXROZXdGZWVkKGZlZWQsaW5kZXgsZmVlZE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2J5RmVlZFBybyhmZWVkLGluZGV4LGZlZWRPcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNieUdldGxpZ2h0Ym94QnVpbGRlcigpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2J5TGlnaHRib3hCdWlsZGVyUHJvKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzYnlBamF4KHN1Ym1pdERhdGEsb25TdWNjZXNzKSB7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogc2J5T3B0aW9ucy5hZG1pbkFqYXhVcmwsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHN1Ym1pdERhdGEsXG4gICAgICAgICAgICAgICAgc3VjY2Vzczogb25TdWNjZXNzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNieUlzVG91Y2goKSB7XG4gICAgICAgICAgICBpZiAoXCJvbnRvdWNoc3RhcnRcIiBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNieUNtcGx6R2V0Q29va2llKGNuYW1lKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGNuYW1lICsgXCI9XCI7IC8vQ3JlYXRlIHRoZSBjb29raWUgbmFtZSB2YXJpYWJsZSB3aXRoIGNvb2tpZSBuYW1lIGNvbmNhdGVuYXRlIHdpdGggPSBzaWduXG4gICAgICAgICAgICB2YXIgY0FyciA9IHdpbmRvdy5kb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgLy9DcmVhdGUgY29va2llIGFycmF5IGJ5IHNwbGl0IHRoZSBjb29raWUgYnkgJzsnXG5cbiAgICAgICAgICAgIC8vTG9vcCB0aHJvdWdoIHRoZSBjb29raWVzIGFuZCByZXR1cm4gdGhlIGNvb2tpZSB2YWx1ZSBpZiBpdCBmaW5kIHRoZSBjb29raWUgbmFtZVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGMgPSBjQXJyW2ldLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAvL0lmIHRoZSBuYW1lIGlzIHRoZSBjb29raWUgc3RyaW5nIGF0IHBvc2l0aW9uIDAsIHdlIGZvdW5kIHRoZSBjb29raWUgYW5kIHJldHVybiB0aGUgY29va2llIHZhbHVlXG4gICAgICAgICAgICAgICAgaWYgKGMuaW5kZXhPZihuYW1lKSA9PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5zdWJzdHJpbmcobmFtZS5sZW5ndGgsIGMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cblxuXG4gICAgfSkoalF1ZXJ5KTtcblxuICAgIGlmICh0eXBlb2Ygd2luZG93LnNieUVhZ2VyTG9hZGluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LnNieUVhZ2VyTG9hZGluZyA9IHR5cGVvZiB3aW5kb3cuc2J5T3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuc2J5T3B0aW9ucy5lYWdlcmxvYWQgOiBmYWxzZTtcbiAgICAgICAgaWYgKGpRdWVyeSgnLmVsZW1lbnRvci13aWRnZXQtdmlkZW8nKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IHR5cGVvZiBqUXVlcnkoJy5lbGVtZW50b3Itd2lkZ2V0LXZpZGVvJykuYXR0cignZGF0YS1zZXR0aW5ncycpICE9PSAndW5kZWZpbmVkJyA/IEpTT04ucGFyc2UoIGpRdWVyeSgnLmVsZW1lbnRvci13aWRnZXQtdmlkZW8nKS5hdHRyKCdkYXRhLXNldHRpbmdzJykpIDogZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MgJiYgdHlwZW9mIHNldHRpbmdzLnlvdXR1YmVfdXJsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zYnlFYWdlckxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGpRdWVyeSgnZGl2W2RhdGEtdmMtdmlkZW8tYmddJykubGVuZ3RoKSB7XG4gICAgICAgICAgICB3aW5kb3cuc2J5RWFnZXJMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdy5zYnlTZW1pRWFnZXJMb2FkaW5nID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cuc2J5U2VtaUVhZ2VyTG9hZGluZyA9IHR5cGVvZiB3aW5kb3cuc2J5T3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuc2J5T3B0aW9ucy5zZW1pRWFnZXJsb2FkIDogZmFsc2U7XG4gICAgICAgIGlmIChqUXVlcnkoJ2RpdltkYXRhLXZjLXZpZGVvLWJnXScpLmxlbmd0aCB8fCB3aW5kb3cuc2J5RWFnZXJMb2FkaW5nKSB7XG4gICAgICAgICAgICB3aW5kb3cuc2J5U2VtaUVhZ2VyTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigkKSB7XG4gICAgICAgIGlmICghd2luZG93LnNieVNlbWlFYWdlckxvYWRpbmcpIHtcbiAgICAgICAgICAgIHNieV9pbml0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb29raWUgTm90aWNlIGJ5IGRGYWN0b3J5XG4gICAgICAgICQoJyNjb29raWUtbm90aWNlIGEnKS5vbignY2xpY2snLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2god2luZG93LnNieS5mZWVkcyxmdW5jdGlvbihpbmRleCl7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uYWZ0ZXJDb25zZW50VG9nZ2xlZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwxMDAwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ29va2llIE5vdGljZSBieSBkRmFjdG9yeVxuICAgICAgICAkKCcjY29va2llLWxhdy1pbmZvLWJhciBhJykub24oJ2NsaWNrJyxmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgJC5lYWNoKHdpbmRvdy5zYnkuZmVlZHMsZnVuY3Rpb24oaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLmFmdGVyQ29uc2VudFRvZ2dsZWQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sMTAwMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEdEUFIgQ29va2llIENvbnNlbnQgYnkgV2ViVG9mZmVlXG4gICAgICAgICQoJy5jbGktdXNlci1wcmVmZXJlbmNlLWNoZWNrYm94Jykub24oJ2NsaWNrJyxmdW5jdGlvbigpe1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2god2luZG93LnNieS5mZWVkcyxmdW5jdGlvbihpbmRleCl7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uc2V0dGluZ3MuY29uc2VudEdpdmVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uYWZ0ZXJDb25zZW50VG9nZ2xlZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwxMDAwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ29va2llYm90XG4gICAgICAgICQod2luZG93KS5vbignQ29va2llYm90T25BY2NlcHQnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICQuZWFjaCh3aW5kb3cuc2J5LmZlZWRzLGZ1bmN0aW9uKGluZGV4KXtcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgd2luZG93LnNieS5mZWVkc1sgaW5kZXggXS5hZnRlckNvbnNlbnRUb2dnbGVkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ29tcGxpYW56IGJ5IFJlYWxseSBTaW1wbGUgUGx1Z2luc1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbXBsel9zdGF0dXNfY2hhbmdlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmRldGFpbC5jYXRlZ29yeSA9PT0gJ21hcmtldGluZycgJiYgZS5kZXRhaWwudmFsdWU9PT0nYWxsb3cnKSB7XG4gICAgICAgICAgICAgICAgJC5lYWNoKHdpbmRvdy5zYnkuZmVlZHMsZnVuY3Rpb24oaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uYWZ0ZXJDb25zZW50VG9nZ2xlZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAkKGRvY3VtZW50KS5vbignY21wbHpGaXJlQ2F0ZWdvcmllcycsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCBldmVudC5kZXRhaWwuY2F0ZWdvcnk9PT0nbWFya2V0aW5nJyApIHtcbiAgICAgICAgICAgICAgICAkLmVhY2god2luZG93LnNieS5mZWVkcyxmdW5jdGlvbihpbmRleCl7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uc2V0dGluZ3MuY29uc2VudEdpdmVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNieS5mZWVkc1sgaW5kZXggXS5hZnRlckNvbnNlbnRUb2dnbGVkKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEJvcmxhYnMgQ29va2llIGJ5IEJvcmxhYnNcbiAgICAgICAgJChkb2N1bWVudCkub24oJ2JvcmxhYnMtY29va2llLWNvbnNlbnQtc2F2ZWQnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICQuZWFjaCh3aW5kb3cuc2J5LmZlZWRzLGZ1bmN0aW9uKGluZGV4KXtcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uYWZ0ZXJDb25zZW50VG9nZ2xlZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGhpZGUgbm90aWNlIG9uIGNsaWNrIGFuZCBzZW5kIGFqYXggcmVxdWVzdCB0byBiYWNrZW5kXG4gICAgICAgICQoJyNzYnktZnJjZS1oaWRlLWxpY2Vuc2UtZXJyb3InKS5vbignY2xpY2snLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgJCgnI3NieS1mci1jZS1saWNlbnNlLWVycm9yJykuc2xpZGVVcCgpO1xuICAgICAgICAgICAgalF1ZXJ5LmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogc2J5T3B0aW9ucy5hZG1pbkFqYXhVcmwsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnc2J5X2hpZGVfZnJvbnRlbmRfbGljZW5zZV9lcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIG5vbmNlOiBzYnlPcHRpb25zLm5vbmNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihtc2cpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH0pO1xuXG59IC8vIGlmIHNieV9qc19leGlzdHNcblxuaWYgKHdpbmRvdy5zYnlTZW1pRWFnZXJMb2FkaW5nKSB7XG4gICAgdmFyIHNieVlTY3JpcHRJZCA9IFwic2J5LXlvdXR1YmUtYXBpXCI7XG4gICAgdmFyIHNieVlTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzYnlZU2NyaXB0SWQpO1xuXG4gICAgaWYgKHNieVlTY3JpcHQgPT09IG51bGwpIHtcbiAgICAgICAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgIHZhciBmaXJzdFNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpWzBdO1xuXG4gICAgICAgIHRhZy5zcmMgPSBcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2lmcmFtZV9hcGlcIjtcbiAgICAgICAgdGFnLmlkID0gc2J5WVNjcmlwdElkO1xuICAgICAgICBmaXJzdFNjcmlwdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0YWcsIGZpcnN0U2NyaXB0KTtcblxuICAgIH1cbn1cblxud2luZG93Lm9uWW91VHViZUlmcmFtZUFQSVJlYWR5ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG51bUZlZWRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc2JfeW91dHViZScpLmxlbmd0aDtcbiAgICBpZiAobnVtRmVlZHMgPiAwKSB7XG4gICAgICAgIGlmICh3aW5kb3cuc2J5U2VtaUVhZ2VyTG9hZGluZykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRmVlZHM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzW2ldLnBsYXllckFQSVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zYnlBUElSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzYnlfaW5pdCgpO1xuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBpZiAod2luZG93LnNieUVhZ2VyTG9hZGluZykge1xuICAgICAgICAgICAgICAgIHZhciBmbGFnTGlnaHRib3ggPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGF1dG9wbGF5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBqUXVlcnkoJy5zYl95b3V0dWJlJykuZWFjaChmdW5jdGlvbihpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJHNlbGYgPSBqUXVlcnkodGhpcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2xpc3QnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLmFkZENsYXNzKCdzYnlfcGxheWVyX2xvYWRlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvSUQgPSBqUXVlcnkodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcy5jcmVhdGVQbGF5ZXIoLHZpZGVvSUQsMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyID0gbmV3IFlULlBsYXllcignc2J5X3BsYXllcl8nK3ZpZGVvSUQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0lkOiB2aWRlb0lELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXJWYXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rlc3RicmFuZGluZzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5OiBhdXRvcGxheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvblN0YXRlQ2hhbmdlJzogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gZGF0YS50YXJnZXQuZ2V0VmlkZW9EYXRhKClbJ3ZpZGVvX2lkJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YSAhPT0gMSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtVmlkSUQgPSBqUXVlcnkodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqUXVlcnkodGhpcykuZmluZCgnaWZyYW1lJykubGVuZ3RoICYmIGpRdWVyeShkYXRhLnRhcmdldC5hKS5hdHRyKCdpZCcpICE9PSBqUXVlcnkodGhpcykuZmluZCgnaWZyYW1lJykuYXR0cignaWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVQuZ2V0KCdzYnlfcGxheWVyXycraXRlbVZpZElEKS5wYXVzZVZpZGVvKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9nYWxsZXJ5JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlzKS5hZGRDbGFzcygnc2J5X3BsYXllcl9sb2FkZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyID0gbmV3IFlULlBsYXllcignc2J5X3BsYXllcicraW5kZXgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0lkOiBqUXVlcnkodGhpcykuZmluZCgnLnNieV9pdGVtJykuZmlyc3QoKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyVmFyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rlc3RicmFuZGluZzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvcGxheTogYXV0b3BsYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25TdGF0ZUNoYW5nZSc6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gZGF0YS50YXJnZXQuZ2V0VmlkZW9EYXRhKClbJ3ZpZGVvX2lkJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5kYXRhICE9PSAxKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtVmlkSUQgPSBqUXVlcnkodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpRdWVyeSh0aGlzKS5maW5kKCdpZnJhbWUnKS5sZW5ndGggJiYgalF1ZXJ5KGRhdGEudGFyZ2V0LmEpLmF0dHIoJ2lkJykgIT09IGpRdWVyeSh0aGlzKS5maW5kKCdpZnJhbWUnKS5hdHRyKCdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlULmdldCgnc2J5X3BsYXllcl8nK2l0ZW1WaWRJRCkucGF1c2VWaWRlbygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnTGlnaHRib3ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5zYnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1GZWVkczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbaV0ucGxheWVyQVBJUmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2luZG93LnNieUFQSVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGpRdWVyeSgnLnNiX3lvdXR1YmUnKS5lYWNoKGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgJHNlbGYgPSBqUXVlcnkodGhpcyk7XG4gICAgICAgICAgICBpZiAoJHNlbGYuZmluZCgnLnNieV9saXZlX3BsYXllcicpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHBsYXllciA9IG5ldyBZVC5QbGF5ZXIoJHNlbGYuZmluZCgnLnNieV9saXZlX3BsYXllcicpLmF0dHIoJ2lkJyksIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnb25SZWFkeSc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xpdmVfcGxheWVyJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gWVQuZ2V0KCRzZWxmLmZpbmQoJy5zYnlfbGl2ZV9wbGF5ZXInKS5hdHRyKCdpZCcpKS5nZXRWaWRlb0RhdGEoKS52aWRlb19pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyx2aWRlb0lEKS5jc3MoJ3otaW5kZXgnLC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbU9mZnNldCA9ICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdERhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnc2J5X2xpdmVfcmV0cmlldmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX2lkOiB2aWRlb0lELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRfaWQ6ICRzZWxmLmF0dHIoJ2RhdGEtZmVlZGlkJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0czogJHNlbGYuYXR0cignZGF0YS1zaG9ydGNvZGUtYXR0cycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb25TdWNjZXNzID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEudHJpbSgpLmluZGV4T2YoJ3snKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWQgPSB3aW5kb3cuc2J5LmZlZWRzW2luZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1dQUG9zdHMgPSB0eXBlb2YgcmVzcG9uc2UuZmVlZFN0YXR1cy5jaGVja1dQUG9zdHMgIT09ICd1bmRlZmluZWQnID8gcmVzcG9uc2UuZmVlZFN0YXR1cy5jaGVja1dQUG9zdHMgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja1dQUG9zdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLnNldHRpbmdzLmNoZWNrV1BQb3N0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuc2V0dGluZ3MuY2hlY2tXUFBvc3RzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFwcGVuZE5ld1Bvc3RzKHJlc3BvbnNlLmh0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5hZGRSZXNpemVkSW1hZ2VzKHJlc3BvbnNlLnJlc2l6ZWRJbWFnZXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVySW5pdGlhbEltYWdlc0xvYWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmZlZWRTdGF0dXMuc2hvdWxkUGFnaW5hdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLm91dE9mUGFnZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfbG9hZF9idG4nKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQub3V0T2ZQYWdlcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJy5zYnlfbm9fanMnKS5yZW1vdmVDbGFzcygnc2J5X25vX2pzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xpdmVfcGxheWVyJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNlbGYuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfZ2FsbGVyeScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5jcmVhdGVQbGF5ZXIoJ3NieV9wbGF5ZXInK2ZlZWQuaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfaXRlbScpLmNzcygnb3BhY2l0eScsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5jc3MoJ29wYWNpdHknLDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfbG9hZGluZycpLnJlbW92ZUNsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9saXN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW1fdmlkZW9fdGh1bWJuYWlsJykub24oJ21vdXNlZW50ZXInLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykuY3NzKCd6LWluZGV4JywtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBzYnlPcHRpb25zLmFkbWluQWpheFVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzdWJtaXREYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBvblN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZmxhZ0xpZ2h0Ym94KSB7XG4gICAgICAgICAgICBpZiAoIWpRdWVyeSgnI3NieV9sYi1wbGF5ZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBqUXVlcnkoJy5zYl95b3V0dWJlJykuZmlyc3QoKS5hcHBlbmQoJzxkaXYgY2xhc3M9XCJzYnlfbGItcGxheWVyLWxvYWRlZCBzYnlfbGItcGxheWVyXCIgaWQ9XCJzYnlfbGItcGxheWVyXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvZGl2PicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGxheWVyID0gbmV3IFlULlBsYXllcignc2J5X2xiLXBsYXllcicsIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJyxcbiAgICAgICAgICAgICAgICB2aWRlb0lkOiBqUXVlcnkodGhpcykuZmluZCgnLnNieV9pdGVtJykuZmlyc3QoKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyksXG4gICAgICAgICAgICAgICAgcGxheWVyVmFyczoge1xuICAgICAgICAgICAgICAgICAgICBtb2Rlc3RicmFuZGluZzogMSxcbiAgICAgICAgICAgICAgICAgICAgcmVsOiAwLFxuICAgICAgICAgICAgICAgICAgICBhdXRvcGxheTogYXV0b3BsYXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciA9IHBsYXllcjtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdzYnlmZWVkYW5keXRyZWFkeScpO1xuICAgICAgICBqUXVlcnkod2luZG93KS50cmlnZ2VyKGV2dCk7XG4gICAgfVxuXG59OyJdLCJuYW1lcyI6WyIkIiwiYSIsImUiLCJtIiwibCIsImciLCJiIiwiaSIsInNieV9qc19leGlzdHMiLCJzYnlfc3VwcG9ydHNfdmlkZW8iLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjYW5QbGF5VHlwZSIsIndpbmRvdyIsInNieUxpbmtpZnkiLCJSZWdFeHAiLCJjYWxsYmFjayIsInEiLCJwIiwicHVuY3RfcmVnZXhwIiwidSIsInoiLCJ3IiwidiIsIkEiLCJzIiwiRSIsIkMiLCJ5IiwiRCIsIkIiLCJyIiwieCIsInQiLCJ1bmRlZmluZWQiLCJleGVjIiwibGFzdEluZGV4IiwibGVuZ3RoIiwidGVzdCIsImNoYXJBdCIsInN1YnN0ciIsIm1hdGNoIiwicmVwbGFjZSIsIkYiLCJpbmRleE9mIiwicHVzaCIsInNsaWNlIiwiYXBwbHkiLCJjIiwiZCIsInRoaXMiLCJzZXR0aW5ncyIsIm9wdGlvbnMiLCJleHRlbmQiLCJEZWZhdWx0cyIsIiRlbGVtZW50IiwiX2hhbmRsZXJzIiwiX3BsdWdpbnMiLCJfc3VwcmVzcyIsIl9jdXJyZW50IiwiX3NwZWVkIiwiX2Nvb3JkaW5hdGVzIiwiX2JyZWFrcG9pbnQiLCJfd2lkdGgiLCJfaXRlbXMiLCJfY2xvbmVzIiwiX21lcmdlcnMiLCJfd2lkdGhzIiwiX2ludmFsaWRhdGVkIiwiX3BpcGUiLCJfZHJhZyIsInRpbWUiLCJ0YXJnZXQiLCJwb2ludGVyIiwic3RhZ2UiLCJzdGFydCIsImN1cnJlbnQiLCJkaXJlY3Rpb24iLCJfc3RhdGVzIiwidGFncyIsImluaXRpYWxpemluZyIsImFuaW1hdGluZyIsImRyYWdnaW5nIiwiZWFjaCIsInByb3h5IiwiUGx1Z2lucyIsInRvTG93ZXJDYXNlIiwiV29ya2VycyIsImZpbHRlciIsInJ1biIsInNldHVwIiwiaW5pdGlhbGl6ZSIsIml0ZW1zIiwibG9vcCIsImNlbnRlciIsInJld2luZCIsIm1vdXNlRHJhZyIsInRvdWNoRHJhZyIsInB1bGxEcmFnIiwiZnJlZURyYWciLCJtYXJnaW4iLCJzdGFnZVBhZGRpbmciLCJtZXJnZSIsIm1lcmdlRml0IiwiYXV0b1dpZHRoIiwic3RhcnRQb3NpdGlvbiIsInJ0bCIsInNtYXJ0U3BlZWQiLCJmbHVpZFNwZWVkIiwiZHJhZ0VuZFNwZWVkIiwicmVzcG9uc2l2ZSIsInJlc3BvbnNpdmVSZWZyZXNoUmF0ZSIsInJlc3BvbnNpdmVCYXNlRWxlbWVudCIsImZhbGxiYWNrRWFzaW5nIiwiaW5mbyIsIm5lc3RlZEl0ZW1TZWxlY3RvciIsIml0ZW1FbGVtZW50Iiwic3RhZ2VFbGVtZW50IiwicmVmcmVzaENsYXNzIiwibG9hZGVkQ2xhc3MiLCJsb2FkaW5nQ2xhc3MiLCJydGxDbGFzcyIsInJlc3BvbnNpdmVDbGFzcyIsImRyYWdDbGFzcyIsIml0ZW1DbGFzcyIsInN0YWdlQ2xhc3MiLCJzdGFnZU91dGVyQ2xhc3MiLCJncmFiQ2xhc3MiLCJXaWR0aCIsIkRlZmF1bHQiLCJJbm5lciIsIk91dGVyIiwiVHlwZSIsIkV2ZW50IiwiU3RhdGUiLCJ3aWR0aCIsInJlbGF0aXZlIiwiJHN0YWdlIiwiY2hpbGRyZW4iLCJyZW1vdmUiLCJjc3MiLCJ0b0ZpeGVkIiwiZiIsIk1hdGgiLCJtaW4iLCJtYXgiLCJjZWlsIiwiaCIsIm5vcm1hbGl6ZSIsIm91dGVySFRNTCIsImFkZENsYXNzIiwiYXBwZW5kVG8iLCJwcmVwZW5kVG8iLCJhYnMiLCJlcSIsInJlbW92ZUF0dHIiLCJpbmRleCIsIm1pbmltdW0iLCJtYXhpbXVtIiwicmVzZXQiLCJhbmltYXRlIiwiY29vcmRpbmF0ZXMiLCJvcCIsInJlbW92ZUNsYXNzIiwiam9pbiIsInByb3RvdHlwZSIsImVudGVyIiwidHJpZ2dlciIsInRvZ2dsZUNsYXNzIiwiaXMiLCJmaW5kIiwicHJlbG9hZEF1dG9XaWR0aEltYWdlcyIsIndyYXAiLCJhcHBlbmQiLCJwYXJlbnQiLCJub3QiLCJyZWZyZXNoIiwiaW52YWxpZGF0ZSIsInJlZ2lzdGVyRXZlbnRIYW5kbGVycyIsImxlYXZlIiwidmlld3BvcnQiLCJOdW1iZXIiLCJhdHRyIiwicHJvcGVydHkiLCJuYW1lIiwidmFsdWUiLCJvcHRpb25zTG9naWMiLCJwcmVwYXJlIiwiY29udGVudCIsImRhdGEiLCJ1cGRhdGUiLCJhbGwiLCJncmVwIiwib25UaHJvdHRsZWRSZXNpemUiLCJjbGVhclRpbWVvdXQiLCJyZXNpemVUaW1lciIsInNldFRpbWVvdXQiLCJvblJlc2l6ZSIsImlzRGVmYXVsdFByZXZlbnRlZCIsInN1cHBvcnQiLCJ0cmFuc2l0aW9uIiwib24iLCJlbmQiLCJvblRyYW5zaXRpb25FbmQiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ0VuZCIsIndoaWNoIiwidHJhbnNmb3JtIiwic3BsaXQiLCJwb3NpdGlvbiIsImxlZnQiLCJ0b3AiLCJzdG9wIiwidHlwZSIsInNwZWVkIiwiRGF0ZSIsImdldFRpbWUiLCJvbmUiLCJkaWZmZXJlbmNlIiwib25EcmFnTW92ZSIsInByZXZlbnREZWZhdWx0Iiwib2ZmIiwiY2xvc2VzdCIsInRyYW5zZm9ybTNkIiwibWFwIiwic3VwcHJlc3MiLCJyZWxlYXNlIiwiaXNOdW1lcmljIiwibWVyZ2VycyIsImNsb25lcyIsImR1cmF0aW9uIiwidG8iLCJuZXh0IiwicHJldiIsInN0b3BQcm9wYWdhdGlvbiIsInNyY0VsZW1lbnQiLCJvcmlnaW5hbFRhcmdldCIsImdldCIsImlubmVyV2lkdGgiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRXaWR0aCIsImNvbnNvbGUiLCJ3YXJuIiwiZW1wdHkiLCJqUXVlcnkiLCJub2RlVHlwZSIsImFkZEJhY2siLCJhZGQiLCJhZnRlciIsImJlZm9yZSIsInNwbGljZSIsIkltYWdlIiwic3JjIiwiZGVzdHJveSIsInVud3JhcCIsImNvbnRlbnRzIiwicmVtb3ZlRGF0YSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZXRhY2hFdmVudCIsIml0ZW0iLCJjb3VudCIsImNhbWVsQ2FzZSIsImoiLCJyZWxhdGVkVGFyZ2V0Iiwib25UcmlnZ2VyIiwicmVnaXN0ZXIiLCJjYWxsIiwiY29uY2F0IiwiZXZlbnQiLCJzcGVjaWFsIiwib3dsIiwiX2RlZmF1bHQiLCJuYW1lc3BhY2UiLCJhcmd1bWVudHMiLCJpbkFycmF5Iiwib3JpZ2luYWxFdmVudCIsInRvdWNoZXMiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2VYIiwicGFnZVkiLCJjbGllbnRYIiwiY2xpZW50WSIsImlzTmFOIiwicGFyc2VGbG9hdCIsImZuIiwic2J5T3dsQ2Fyb3VzZWwiLCJBcnJheSIsIkNvbnN0cnVjdG9yIiwiWmVwdG8iLCJfY29yZSIsIl9pbnRlcnZhbCIsIl92aXNpYmxlIiwiYXV0b1JlZnJlc2giLCJ3YXRjaCIsImF1dG9SZWZyZXNoSW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiQXV0b1JlZnJlc2giLCJfbG9hZGVkIiwibGF6eUxvYWQiLCJsb2FkIiwiZGV2aWNlUGl4ZWxSYXRpbyIsImVsZW1lbnQiLCJ1cmwiLCJvbmxvYWQiLCJvcGFjaXR5IiwiaGFuZGxlcnMiLCJMYXp5IiwiYXV0b0hlaWdodCIsImF1dG9IZWlnaHRDbGFzcyIsInRvQXJyYXkiLCJoZWlnaHQiLCJBdXRvSGVpZ2h0IiwiX3ZpZGVvcyIsIl9wbGF5aW5nIiwidmlkZW8iLCJpc0luRnVsbFNjcmVlbiIsImZldGNoIiwicGxheSIsInZpZGVvSGVpZ2h0IiwidmlkZW9XaWR0aCIsIkVycm9yIiwiaWQiLCJ0aHVtYm5haWwiLCJrIiwiYWpheCIsImpzb25wIiwiZGF0YVR5cGUiLCJzdWNjZXNzIiwidGh1bWJuYWlsX2xhcmdlIiwiZnJhbWVncmFiX3VybCIsImluc2VydEFmdGVyIiwiZnVsbHNjcmVlbkVsZW1lbnQiLCJtb3pGdWxsU2NyZWVuRWxlbWVudCIsIndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50IiwiaGFzQ2xhc3MiLCJWaWRlbyIsImNvcmUiLCJzd2FwcGluZyIsInByZXZpb3VzIiwiYW5pbWF0ZU91dCIsImFuaW1hdGVJbiIsInN3YXAiLCJhbmltYXRpb24iLCJjbGVhciIsIkFuaW1hdGUiLCJfdGltZW91dCIsIl9wYXVzZWQiLCJhdXRvcGxheSIsIl9zZXRBdXRvUGxheUludGVydmFsIiwiYXV0b3BsYXlIb3ZlclBhdXNlIiwicGF1c2UiLCJhdXRvcGxheVRpbWVvdXQiLCJhdXRvcGxheVNwZWVkIiwiX2dldE5leHRUaW1lb3V0IiwiaGlkZGVuIiwiX2luaXRpYWxpemVkIiwiX3BhZ2VzIiwiX2NvbnRyb2xzIiwiX3RlbXBsYXRlcyIsIl9vdmVycmlkZXMiLCJkb3RzRGF0YSIsImRvdENsYXNzIiwicG9wIiwiZHJhdyIsIm5hdiIsIm5hdlRleHQiLCJuYXZTcGVlZCIsIm5hdkVsZW1lbnQiLCJuYXZDb250YWluZXIiLCJuYXZDb250YWluZXJDbGFzcyIsIm5hdkNsYXNzIiwic2xpZGVCeSIsImRvdHNDbGFzcyIsImRvdHMiLCJkb3RzRWFjaCIsImRvdHNTcGVlZCIsImRvdHNDb250YWluZXIiLCIkcmVsYXRpdmUiLCIkcHJldmlvdXMiLCJodG1sIiwiJG5leHQiLCJwcm9wIiwiJGFic29sdXRlIiwib3ZlcmlkZXMiLCJwYWdlIiwic2l6ZSIsImdldFBvc2l0aW9uIiwiTmF2aWdhdGlvbiIsIl9oYXNoZXMiLCJsb2NhdGlvbiIsImhhc2giLCJzdWJzdHJpbmciLCJVUkxoYXNoTGlzdGVuZXIiLCJIYXNoIiwidG9VcHBlckNhc2UiLCJzdHlsZSIsIldlYmtpdFRyYW5zaXRpb24iLCJNb3pUcmFuc2l0aW9uIiwiT1RyYW5zaXRpb24iLCJXZWJraXRBbmltYXRpb24iLCJNb3pBbmltYXRpb24iLCJPQW5pbWF0aW9uIiwiU3RyaW5nIiwiT3dsMnJvdyIsInNjb3BlIiwib3dsMnJvdyIsImJ1aWxkMnJvdyIsIm93bDJyb3dUYXJnZXQiLCJvd2wycm93Q29udGFpbmVyIiwib3dsMnJvd0RpcmVjdGlvbiIsInRoaXNTY29wZSIsImNhcm91c2VsIiwiY2Fyb3VzZWxJdGVtcyIsImFFdmVuRWxlbWVudHMiLCJhT2RkRWxlbWVudHMiLCJsZWZ0VG9yaWdodCIsInVwVG9kb3duIiwibzJ3Q29udGFpbmVyQ2xhc3MiLCJvd2xNYXJnaW4iLCJjYXJvdXNlbEl0ZW1zTGVuZ3RoIiwiZmlyc0FyciIsInNlY29uZEFyciIsInJvd0NvbnRhaW5lciIsImZpcnN0Um93RWxlbWVudCIsIm1hcmdpbkJvdHRvbSIsImV2ZW5FbGVtZW50IiwiU2J5IiwiZmVlZHMiLCJjdGFzIiwic2J5T3B0aW9ucyIsImlzVG91Y2giLCJTYnlGZWVkIiwiZWwiLCJwbGFjZWhvbGRlclVSTCIsInNieSIsInBsYWNlaG9sZGVyIiwibmFycm93UGxheWVyIiwicGxhY2Vob2xkZXJOYXJyb3ciLCJwbGF5ZXJBUElSZWFkeSIsImNvbnNlbnRHaXZlbiIsInBsYXllcnMiLCJtaW5JbWFnZVdpZHRoIiwiaW1hZ2VSZXNvbHV0aW9uIiwicmVzaXplZEltYWdlcyIsIm5lZWRzUmVzaXppbmciLCJvdXRPZlBhZ2VzIiwiaXNJbml0aWFsaXplZCIsIm1vc3RSZWNlbnRseUxvYWRlZFBvc3RzIiwiZW1iZWRVUkwiLCJhbGxvd0Nvb2tpZXMiLCJTYnlGZWVkUHJvIiwiQ1RBIiwiaW5pdExheW91dCIsImluaXRHYWxsZXJ5TGF5b3V0IiwiaW5pdEdyaWQiLCJpbml0Q2Fyb3VzZWxzIiwiZXZ0IiwiZmVlZCIsInNieVNlbWlFYWdlckxvYWRpbmciLCJwbGF5ZXJJRCIsImlzUHJvIiwidmlkZW9JRCIsImZpcnN0Iiwic2J5TGlnaHRib3hQbGF5ZXIiLCJhcmdzIiwiaG9zdCIsInByb3RvY29sIiwidmlkZW9JZCIsInBsYXllclZhcnMiLCJtb2Rlc3RicmFuZGluZyIsInJlbCIsImV2ZW50cyIsImdldFZpZGVvRGF0YSIsImFmdGVyU3RhdGVDaGFuZ2UiLCJtYXliZUFkZENUQSIsIllUIiwiUGxheWVyIiwiJHNlbGYiLCJnZW5lcmFsIiwiY29scyIsImNvbHNtb2JpbGUiLCJhcnJvd3MiLCJwYWdpbmF0aW9uIiwicm93cyIsIml0ZW1zVGFibGV0U21hbGwiLCJpdGVtc01vYmlsZSIsImhhczJyb3dzIiwicGFyc2VJbnQiLCJjYXJvdXNlbEFyZ3MiLCJvbkNoYW5nZSIsImFmdGVyUmVzaXplIiwib25Jbml0aWFsaXplIiwiZmFkZUluIiwiJG5hdkVsZW1lbnRzV3JhcHBlciIsIiRkb3RzIiwiJHByZXYiLCIkbmF2IiwiJGRvdCIsIndpZHRoRG90cyIsImhpZGUiLCJzdHJpcEVtb2ppaHRtbCIsIiRlbCIsInJlcGxhY2VXaXRoIiwiYWZ0ZXJJdGVtUmV2ZWFsZWQiLCIkaXRlbSIsIiRjYXB0aW9uIiwiJGhvdmVyQ2FwdGlvbiIsInRleHRfbGltaXQiLCJkZXNjcmlwdGlvbmxlbmd0aCIsImNhcHRpb25UZXh0Iiwic2hvcnRfdGV4dCIsImJyQWRqdXN0IiwibGFzdEluZGV4T2YiLCJob3ZlckNhcHRpb25UZXh0Iiwic2hvdyIsImNhcHRpb250ZXh0Iiwic2V0VXBDVEEiLCJkaXNhYmxlbGlnaHRib3giLCJjYXB0aW9ubGlua3MiLCJjYXAiLCIkc2J5X3Bob3RvX3dyYXAiLCIkc2J5X2xpbmsiLCJmZWVkT3B0aW9ucyIsImhvdmVyZWZmZWN0IiwiYWZ0ZXJGZWVkU2V0IiwidGV4dCIsImN0YUluQ2FwdGlvbiIsImN0YURldGVjdCIsImdldERlZmF1bHRDVEEiLCJjdGEiLCJkZWZhdWx0TGluayIsImRlZmF1bHRUZXh0IiwicmVsYXRlZCIsImRlZmF1bHRQb3N0cyIsInNldEltYWdlSGVpZ2h0Iiwic2V0SW1hZ2VSZXNvbHV0aW9uIiwibWF5YmVSYWlzZUltYWdlUmVzb2x1dGlvbiIsInNldEltYWdlU2l6ZUNsYXNzIiwic2V0QWxsQ1RBRGltZW5zaW9ucyIsInNpemVQbGF5ZXIiLCJzaXplSXRlbXMiLCJDVEFPYmoiLCJzZXRDVEFTdHlsZXMiLCJhZnRlclNlbmRDaGVja1dQUG9zdHNUb1NlcnZlciIsInJlc3BvbnNlIiwic2J5X3ZpZXdfY291bnQiLCJzYnlfY29tbWVudF9jb3VudCIsInNieV9saWtlX2NvdW50Iiwic2J5X2xpdmVfYnJvYWRjYXN0IiwiYnJvYWRjYXN0X3R5cGUiLCJsaXZlX3N0cmVhbWluZ19zdHJpbmciLCJsaXZlX3N0cmVhbWluZ19kYXRlIiwibGl2ZV9zdHJlYW1pbmdfdGltZXN0YW1wIiwic2J5X2Rlc2NyaXB0aW9uIiwiJHBsYXllciIsInRvZ2dsZUNUQSIsImNoYW5nZVBsYXllckluZm8iLCIkbmV3SXRlbSIsImNsb25lIiwibmV3SXRlbVZpZGVvVGl0bGUiLCJuZXdJdGVtQ2hhbm5lbCIsIm5ld0l0ZW1EYXRlIiwiU2J5Q1RBIiwiU2J5TGlnaHRib3hCdWlsZGVyIiwiU2J5TGlnaHRib3hCdWlsZGVyUHJvIiwiZmVlZENvbnRhaW5lciIsImNoYW5uZWxTdWJzY3JpYmVycyIsInN1YnNjcmliZUJ0blRleHQiLCJzdWJzY3JpYmVCdG4iLCJnZXREYXRhIiwiZmVlZEluZGV4IiwibGluayIsInRpdGxlIiwidmlkZW9UaXRsZSIsImF2YXRhciIsInVzZXIiLCJjaGFubmVsVVJMIiwiY2hhbm5lbElEIiwidGVtcGxhdGUiLCJiZWZvcmVQbGF5ZXJTZXR1cCIsIiRsaWdodGJveCIsImFsYnVtIiwiYWZ0ZXJQbGF5ZXJTZXR1cCIsImF2YWlsYWJsZUF2YXRhclVybHMiLCJzYnlMaWdodGJveENhcHRpb24iLCJzYnlMaWdodGJveEFjdGlvbiIsImF2YXRhckltYWdlSHRtbCIsInVzZXJIdG1sIiwiY2FsbGJhY2tBcmdzIiwiZmVlZE9iakluQ29udGV4dCIsInN0YXRlIiwibnVtSXRlbXMiLCJudW1JdGVtQ29sdW1ucyIsInNieUFqYXgiLCJzdWJtaXREYXRhIiwib25TdWNjZXNzIiwiYWRtaW5BamF4VXJsIiwiY3JlYXRlUGFnZSIsImNyZWF0ZUZlZWRzIiwiY3JlYXRlRmVlZHNBcmdzIiwic2J5YWpheHVybCIsImhvc3RuYW1lIiwibWF5YmVBZGRZVEFQSSIsInlvdXR1YmVTY3JpcHRJZCIsImdldEVsZW1lbnRCeUlkIiwidGFnIiwiZmlyc3RTY3JpcHQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInBhcmVudE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJjcmVhdGVMaWdodGJveCIsInNieV90aW1lciIsImxiQnVpbGRlciIsInNieV9sYl9kZWxheSIsInNieV9jYWxsYmFjayIsInNieV9tcyIsImZhZGVEdXJhdGlvbiIsImZpdEltYWdlc0luVmlld3BvcnQiLCJyZXNpemVEdXJhdGlvbiIsInBvc2l0aW9uRnJvbVRvcCIsInNob3dJbWFnZU51bWJlckxhYmVsIiwiYWx3YXlzU2hvd05hdk9uVG91Y2hEZXZpY2VzIiwid3JhcEFyb3VuZCIsImFsYnVtTGFiZWwiLCJjdXJyZW50SW1hZ2VJbmRleCIsImluaXQiLCJlbmFibGUiLCJidWlsZCIsImN1cnJlbnRUYXJnZXQiLCIkb3ZlcmxheSIsIiRvdXRlckNvbnRhaW5lciIsIiRjb250YWluZXIiLCJjb250YWluZXJUb3BQYWRkaW5nIiwiY29udGFpbmVyUmlnaHRQYWRkaW5nIiwiY29udGFpbmVyQm90dG9tUGFkZGluZyIsImNvbnRhaW5lckxlZnRQYWRkaW5nIiwicGF1c2VQbGF5ZXIiLCJmYWRlT3V0IiwiY2hhbmdlSW1hZ2UiLCJzaXplT3ZlcmxheSIsInZpc2liaWxpdHkiLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwiZGlzYWJsZUtleWJvYXJkTmF2Iiwic2l6ZUNvbnRhaW5lciIsInNob3dJbWFnZSIsIm91dGVyV2lkdGgiLCJvdXRlckhlaWdodCIsInVwZGF0ZU5hdiIsInVwZGF0ZURldGFpbHMiLCJwcmVsb2FkTmVpZ2hib3JpbmdJbWFnZXMiLCJlbmFibGVLZXlib2FyZE5hdiIsImNyZWF0ZUV2ZW50IiwibG9hZFZpZGVvQnlJZCIsImZ1bGxJbWFnZSIsInByZXBlbmQiLCJrZXlib2FyZEFjdGlvbiIsImtleWNvZGUiLCJrZXlDb2RlIiwia2V5IiwiZnJvbUNoYXJDb2RlIiwidG9nZ2xlIiwibGlnaHRib3hDcmVhdGVkIiwiaXNBZG1pbiIsIndoZW5GZWVkc0NyZWF0ZWQiLCJmbGFncyIsIkpTT04iLCJwYXJzZSIsInRyaWdnZXJlZFRlc3QiLCJsb2ciLCJudW0iLCJpbWdSZXMiLCJmZWVkSUQiLCJwb3N0SUQiLCJzaG9ydENvZGVBdHRzIiwicmVzaXppbmdFbmFibGVkIiwiaW1hZ2VMb2FkRW5hYmxlZCIsImRlYnVnRW5hYmxlZCIsImZhdm9yTG9jYWwiLCJhamF4UG9zdExvYWQiLCJjaGVja1dQUG9zdHMiLCJzaW5nbGVDaGVja1Bvc3RzIiwiZ2RwciIsIm5vQ0ROIiwibGlnaHRib3hFbmFibGVkIiwibG9jYXRvciIsImF1dG9NaW5SZXMiLCJzdWJzY3JpYmVCYXJFbmFibGVkIiwic2J5R2V0TmV3RmVlZCIsInNieUFQSVJlYWR5Iiwic2V0UmVzaXplZEltYWdlcyIsImFmdGVyRmVlZHNDcmVhdGVkIiwiJHRoaXNIZWFkZXIiLCJlbmNvZGVIVE1MIiwicmF3IiwidXJsRGV0ZWN0IiwiY3RhTWF0Y2hlcyIsInVybE1hdGNoZXMiLCJ0cmltIiwic2h1ZmZsZSIsImFycmF5IiwidGVtcG9yYXJ5VmFsdWUiLCJyYW5kb21JbmRleCIsImN1cnJlbnRJbmRleCIsImZsb29yIiwicmFuZG9tIiwiY2hlY2tDb25zZW50IiwiZ2V0TmV3UG9zdFNldCIsImFmdGVySW5pdGlhbEltYWdlc0xvYWRlZCIsInNieV9kZWxheSIsIm1heWJlUmFpc2VTaW5nbGVJbWFnZVJlc29sdXRpb24iLCJvblRodW1ibmFpbENsaWNrIiwiY2FuQ3JlYXRlUGxheWVyIiwicGxheWVyIiwicGxheWVyRWFnZXJMb2FkZWQiLCJjcmVhdGVQbGF5ZXIiLCJnZXRWaWRlb0lEIiwiaXNDdXN0b21pemVyIiwiZmFkZVRvIiwiaXRlbVZpZElEIiwicGF1c2VWaWRlbyIsInNieUVhZ2VyTG9hZGluZyIsIm5ld1BsYXllciIsImxvYWRNb3JlQnV0dG9uSW5pdCIsImhpZGVFeHRyYUl0ZW1zRm9yV2lkdGgiLCJiZWZvcmVOZXdJbWFnZXNSZXZlYWxlZCIsInJldmVhbE5ld0ltYWdlcyIsImFmdGVyTmV3SW1hZ2VzUmV2ZWFsZWQiLCJhcHBseUZ1bGxGZWF0dXJlcyIsInJlbW92ZUZlYXR1cmVzIiwiYWZ0ZXJMb2FkTW9yZUNsaWNrZWQiLCIkYnV0dG9uIiwiYWZ0ZXJOZXdJbWFnZXNMb2FkZWQiLCIkcGxheWVyVGh1bWJuYWlsIiwicGxheWVyV2lkdGgiLCJuZXdQbGF5ZXJIZWlnaHQiLCJ0aHVtYldpZHRoIiwibmV3VGh1bWJIZWlnaHQiLCJhcHBseUltYWdlTGlxdWlkIiwic2J5Q3VzdG9tSlMiLCJvblRodW1ibmFpbEVudGVyIiwib25UaHVtYm5haWxMZWF2ZSIsImxpZ2h0Ym94UGxhY2Vob2xkZXIiLCJsaWdodGJveFBsYWNlaG9sZGVyTmFycm93IiwiJHNieV9pdGVtX3RyYW5zaXRpb25fZWwiLCJsaXN0ZW5Gb3JWaXNpYmlsaXR5Q2hhbmdlIiwic2VuZE5lZWRzUmVzaXppbmdUb1NlcnZlciIsInNlbmRDaGVja1dQUG9zdHNUb1NlcnZlciIsIml0ZW1PZmZzZXQiLCJhY3Rpb24iLCJuZWVkc19yZXNpemluZyIsIm9mZnNldCIsImZlZWRfaWQiLCJsb2NhdGlvbkd1ZXNzIiwicG9zdF9pZCIsImF0dHMiLCJwb3N0cyIsImN1cnJlbnRfcmVzb2x1dGlvbiIsImZlZWRTdGF0dXMiLCJhcHBlbmROZXdQb3N0cyIsImFkZFJlc2l6ZWRJbWFnZXMiLCJzaG91bGRQYWdpbmF0ZSIsIm5ld1Bvc3RzSHRtbCIsImxhc3QiLCJyZXNpemVkSW1hZ2VzVG9BZGQiLCJpbWFnZUlEIiwiZm9yY2VDaGFuZ2UiLCJpbWdTcmNTZXQiLCJnZXRJbWFnZVVybHMiLCJjdXJyZW50VXJsIiwiY3VycmVudFJlcyIsIm5ld1JlcyIsImdldEJlc3RSZXNvbHV0aW9uRm9yQXV0byIsInJlYXNvbiIsIm5ld1VybCIsInNyY1NldCIsImp1c3ROZXciLCJpdGVtc1NlbGVjdG9yIiwiY29sV2lkdGgiLCJhc3BlY3RSYXRpbyIsImJlc3RXaWR0aCIsImJlc3RXaWR0aFJvdW5kZWQiLCJjdXN0b21TaXplcyIsImRvbmUiLCJsYXlvdXQiLCJudW1tb2JpbGUiLCJmZWVkV2lkdGgiLCJwaG90b1BhZGRpbmciLCJnZXRDb2x1bW5Db3VudCIsInNldE1pbkltYWdlV2lkdGgiLCJmb3VuZFNpemVzIiwicmVzaXplZF91cmwiLCJhZGRUb05lZWRzUmVzaXppbmciLCIkdGFyZ2VFbCIsImdldEF2YXRhclVybCIsInVzZXJuYW1lIiwiZmF2b3JUeXBlIiwiYXZhaWxhYmxlQXZhdGFycyIsImF2YXRhcnMiLCJoZWFkIiwic2J5X2ltZ0xpcXVpZCIsIlZFUiIsImJnc19BdmFpbGFibGUiLCJiZ3NfQ2hlY2tSdW5uZWQiLCJkZWZhdWx0cyIsImZpbGwiLCJ2ZXJ0aWNhbEFsaWduIiwiaG9yaXpvbnRhbEFsaWduIiwidXNlQmFja2dyb3VuZFNpemUiLCJ1c2VEYXRhSHRtbEF0dHIiLCJkZWxheSIsImZhZGVJblRpbWUiLCJyZW1vdmVCb3hCYWNrZ3JvdW5kIiwiaGFyZFBpeGVscyIsInJlc3BvbnNpdmVDaGVja1RpbWUiLCJ0aW1lY2hlY2t2aXNpYmlsaXR5Iiwib25TdGFydCIsIm9uRmluaXNoIiwib25JdGVtU3RhcnQiLCJvbkl0ZW1GaW5pc2giLCJvbkl0ZW1FcnJvciIsImdldENvbXB1dGVkU3R5bGUiLCJiYWNrZ3JvdW5kU2l6ZSIsImFjdHVhbFNpemUiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsInNpemVPbGQiLCJuIiwibyIsIkJvb2xlYW4iLCJpc0lFIiwiaWVGYWRlSW5EaXNhYmxlZCIsImVuY29kZVVSSSIsImRpc3BsYXkiLCJvdmVyZmxvdyIsIm9uZXJyb3IiLCJjb21wbGV0ZSIsImluamVjdENzcyIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiYXBwZW5kQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsInNieUFkZEltZ0xpcXVpZCIsInJ1bk9uTG9hZCIsImZyZXF1ZW5jeSIsInNieVByZXZpb3VzVmlzaWJpbGl0eSIsImNvbnRhaW5zIiwic2J5Q2hlY2tWaXNpYmlsaXR5Iiwic2J5VmlzaWJpbGl0eUNoYW5nZWQiLCJ2aXNpYmxlIiwicmV0dXJuQ29scyIsInNieVdpbmRvd1dpZHRoIiwiJGNsaWNrZWQiLCJpc1BsYXllciIsInBsYXlWaWRlb0luUGxheWVyIiwiYWZ0ZXJWaWRlb0NoYW5nZWQiLCJ1cGRhdGVHYWxsZXJ5UGxheWVyU3Vic2NyaWJlQnRuIiwiJHNieUl0ZW0iLCIkaG92ZXJlZCIsInN1YnNjcmliZUJ0blVSTCIsIkNMSV9Db29raWUiLCJyZWFkIiwiQ0xJX0FDQ0VQVF9DT09LSUVfTkFNRSIsImNuQXJncyIsInBhcnRzIiwiY29va2llIiwidmFsIiwic2hpZnQiLCJjb21wbGlhbnoiLCJjbmFtZSIsImNBcnIiLCJzYnlDbXBsekdldENvb2tpZSIsIkNvb2tpZWJvdCIsImNvbnNlbnRlZCIsIkJvcmxhYnNDb29raWUiLCJjaGVja0Nvb2tpZUNvbnNlbnQiLCJhZnRlckNvbnNlbnRUb2dnbGVkIiwiJGZlZWQiLCJjcmVhdGUiLCJwbGF5ZXJIZWlnaHQiLCJoZWlnaHREaWYiLCJkYXRhTnVtIiwicmVzZXRDVEEiLCJjdGFPYmoiLCJnZXRSZWxhdGVkIiwiYWRkZWQiLCJjdXJyZW50VmlkZW9JZCIsIm5ld1ZpZGVvSUQiLCIkZmVlZEVsIiwicmVsYXRlZFZpZHMiLCJ0aGlzVmlkIiwic3R5bGVDbGFzcyIsImNvbG9yIiwidGV4dENvbG9yIiwib3BlbkF0dHMiLCJvcGVuVHlwZSIsImN0YU92ZXJsYXlIZWlnaHQiLCJudW1Sb3dzIiwidG90YWxWZXJ0aWNhbFBhZGRpbmciLCJtYXhDVEFJdGVtSGVpZ2h0Iiwic2J5X2luaXQiLCJzYnlfY2Fyb3VzZWxfaW5pdCIsImVhZ2VybG9hZCIsInlvdXR1YmVfdXJsIiwic2VtaUVhZ2VybG9hZCIsInJlYWR5IiwiZGV0YWlsIiwiY2F0ZWdvcnkiLCJzbGlkZVVwIiwibm9uY2UiLCJtc2ciLCJzYnlZU2NyaXB0SWQiLCJvbllvdVR1YmVJZnJhbWVBUElSZWFkeSIsIm51bUZlZWRzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImZsYWdMaWdodGJveCIsInZpZGVvX2lkIl0sInNvdXJjZVJvb3QiOiIifQ==