window.Modernizr=function(e,t,i){function n(e){w.cssText=e}function o(e,t){return typeof e===t}function s(e,t){return!!~(""+e).indexOf(t)}function r(e,t){for(var n in e){var o=e[n];if(!s(o,"-")&&w[o]!==i)return"pfx"==t?o:!0}return!1}function l(e,t,n){for(var s in e){var r=t[e[s]];if(r!==i)return n===!1?e[s]:o(r,"function")?r.bind(n||t):r}return!1}function a(e,t,i){var n=e.charAt(0).toUpperCase()+e.slice(1),s=(e+" "+k.join(n+" ")+n).split(" ");return o(t,"string")||o(t,"undefined")?r(s,t):(s=(e+" "+T.join(n+" ")+n).split(" "),l(s,t,i))}var d,c,u,p="2.8.3",h={},f=!0,m=t.documentElement,v="modernizr",g=t.createElement(v),w=g.style,b=({}.toString," -webkit- -moz- -o- -ms- ".split(" ")),y="Webkit Moz O ms",k=y.split(" "),T=y.toLowerCase().split(" "),C={svg:"http://www.w3.org/2000/svg"},S={},$=[],x=$.slice,P=function(e,i,n,o){var s,r,l,a,d=t.createElement("div"),c=t.body,u=c||t.createElement("body");if(parseInt(n,10))for(;n--;)l=t.createElement("div"),l.id=o?o[n]:v+(n+1),d.appendChild(l);return s=["­",'"].join(""),d.id=v,(c?d:u).innerHTML+=s,u.appendChild(d),c||(u.style.background="",u.style.overflow="hidden",a=m.style.overflow,m.style.overflow="hidden",m.appendChild(u)),r=i(d,e),c?d.parentNode.removeChild(d):(u.parentNode.removeChild(u),m.style.overflow=a),!!r},M={}.hasOwnProperty;u=o(M,"undefined")||o(M.call,"undefined")?function(e,t){return t in e&&o(e.constructor.prototype[t],"undefined")}:function(e,t){return M.call(e,t)},Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if("function"!=typeof t)throw new TypeError;var i=x.call(arguments,1),n=function(){if(this instanceof n){var o=function(){};o.prototype=t.prototype;var s=new o,r=t.apply(s,i.concat(x.call(arguments)));return Object(r)===r?r:s}return t.apply(e,i.concat(x.call(arguments)))};return n}),S.touch=function(){var i;return"ontouchstart"in e||e.DocumentTouch&&t instanceof DocumentTouch?i=!0:P(["@media (",b.join("touch-enabled),("),v,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(e){i=9===e.offsetTop}),i},S.cssanimations=function(){return a("animationName")},S.csstransitions=function(){return a("transition")},S.svg=function(){return!!t.createElementNS&&!!t.createElementNS(C.svg,"svg").createSVGRect},S.inlinesvg=function(){var e=t.createElement("div");return e.innerHTML="",(e.firstChild&&e.firstChild.namespaceURI)==C.svg};for(var D in S)u(S,D)&&(c=D.toLowerCase(),h[c]=S[D](),$.push((h[c]?"":"no-")+c));return h.addTest=function(e,t){if("object"==typeof e)for(var n in e)u(e,n)&&h.addTest(n,e[n]);else{if(e=e.toLowerCase(),h[e]!==i)return h;t="function"==typeof t?t():t,"undefined"!=typeof f&&f&&(m.className+=" "+(t?"":"no-")+e),h[e]=t}return h},n(""),g=d=null,function(e,t){function i(e,t){var i=e.createElement("p"),n=e.getElementsByTagName("head")[0]||e.documentElement;return i.innerHTML="x",n.insertBefore(i.lastChild,n.firstChild)}function n(){var e=w.elements;return"string"==typeof e?e.split(" "):e}function o(e){var t=g[e[m]];return t||(t={},v++,e[m]=v,g[v]=t),t}function s(e,i,n){if(i||(i=t),c)return i.createElement(e);n||(n=o(i));var s;return s=n.cache[e]?n.cache[e].cloneNode():f.test(e)?(n.cache[e]=n.createElem(e)).cloneNode():n.createElem(e),!s.canHaveChildren||h.test(e)||s.tagUrn?s:n.frag.appendChild(s)}function r(e,i){if(e||(e=t),c)return e.createDocumentFragment();i=i||o(e);for(var s=i.frag.cloneNode(),r=0,l=n(),a=l.length;a>r;r++)s.createElement(l[r]);return s}function l(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(i){return w.shivMethods?s(i,e,t):t.createElem(i)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+n().join().replace(/[\w\-]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(w,t.frag)}function a(e){e||(e=t);var n=o(e);return!w.shivCSS||d||n.hasCSS||(n.hasCSS=!!i(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),c||l(e,n),e}var d,c,u="3.7.0",p=e.html5||{},h=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,f=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,m="_html5shiv",v=0,g={};!function(){try{var e=t.createElement("a");e.innerHTML="",d="hidden"in e,c=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(i){d=!0,c=!0}}();var w={elements:p.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:u,shivCSS:p.shivCSS!==!1,supportsUnknownElements:c,shivMethods:p.shivMethods!==!1,type:"default",shivDocument:a,createElement:s,createDocumentFragment:r};e.html5=w,a(t)}(this,t),h._version=p,h._prefixes=b,h._domPrefixes=T,h._cssomPrefixes=k,h.testProp=function(e){return r([e])},h.testAllProps=a,h.testStyles=P,h.prefixed=function(e,t,i){return t?a(e,t,i):a(e,"pfx")},m.className=m.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+$.join(" "):""),h}(this,this.document),function(e,t,i){function n(e){return"[object Function]"==v.call(e)}function o(e){return"string"==typeof e}function s(){}function r(e){return!e||"loaded"==e||"complete"==e||"uninitialized"==e}function l(){var e=g.shift();w=1,e?e.t?f(function(){("c"==e.t?p.injectCss:p.injectJs)(e.s,0,e.a,e.x,e.e,1)},0):(e(),l()):w=0}function a(e,i,n,o,s,a,d){function c(t){if(!h&&r(u.readyState)&&(b.r=h=1,!w&&l(),u.onload=u.onreadystatechange=null,t)){"img"!=e&&f(function(){k.removeChild(u)},50);for(var n in x[i])x[i].hasOwnProperty(n)&&x[i][n].onload()}}var d=d||p.errorTimeout,u=t.createElement(e),h=0,v=0,b={t:n,s:i,e:s,a:a,x:d};1===x[i]&&(v=1,x[i]=[]),"object"==e?u.data=i:(u.src=i,u.type=e),u.width=u.height="0",u.onerror=u.onload=u.onreadystatechange=function(){c.call(this,v)},g.splice(o,0,b),"img"!=e&&(v||2===x[i]?(k.insertBefore(u,y?null:m),f(c,d)):x[i].push(u))}function d(e,t,i,n,s){return w=0,t=t||"j",o(e)?a("c"==t?C:T,e,t,this.i++,i,n,s):(g.splice(this.i++,0,e),1==g.length&&l()),this}function c(){var e=p;return e.loader={load:d,i:0},e}var u,p,h=t.documentElement,f=e.setTimeout,m=t.getElementsByTagName("script")[0],v={}.toString,g=[],w=0,b="MozAppearance"in h.style,y=b&&!!t.createRange().compareNode,k=y?h:m.parentNode,h=e.opera&&"[object Opera]"==v.call(e.opera),h=!!t.attachEvent&&!h,T=b?"object":h?"script":"img",C=h?"script":T,S=Array.isArray||function(e){return"[object Array]"==v.call(e)},$=[],x={},P={timeout:function(e,t){return t.length&&(e.timeout=t[0]),e}};p=function(e){function t(e){var t,i,n,e=e.split("!"),o=$.length,s=e.pop(),r=e.length,s={url:s,origUrl:s,prefixes:e};for(i=0;r>i;i++)n=e[i].split("="),(t=P[n.shift()])&&(s=t(s,n));for(i=0;o>i;i++)s=$[i](s);return s}function r(e,o,s,r,l){var a=t(e),d=a.autoCallback;a.url.split(".").pop().split("?").shift(),a.bypass||(o&&(o=n(o)?o:o[e]||o[r]||o[e.split("/").pop().split("?")[0]]),a.instead?a.instead(e,o,s,r,l):(x[a.url]?a.noexec=!0:x[a.url]=1,s.load(a.url,a.forceCSS||!a.forceJS&&"css"==a.url.split(".").pop().split("?").shift()?"c":i,a.noexec,a.attrs,a.timeout),(n(o)||n(d))&&s.load(function(){c(),o&&o(a.origUrl,l,r),d&&d(a.origUrl,l,r),x[a.url]=2})))}function l(e,t){function i(e,i){if(e){if(o(e))i||(u=function(){var e=[].slice.call(arguments);p.apply(this,e),h()}),r(e,u,t,0,d);else if(Object(e)===e)for(a in l=function(){var t,i=0;for(t in e)e.hasOwnProperty(t)&&i++;return i}(),e)e.hasOwnProperty(a)&&(!i&&!--l&&(n(u)?u=function(){var e=[].slice.call(arguments);p.apply(this,e),h()}:u[a]=function(e){return function(){var t=[].slice.call(arguments);e&&e.apply(this,t),h()}}(p[a])),r(e[a],u,t,a,d))}else!i&&h()}var l,a,d=!!e.test,c=e.load||e.both,u=e.callback||s,p=u,h=e.complete||s;i(d?e.yep:e.nope,!!c),c&&i(c)}var a,d,u=this.yepnope.loader;if(o(e))r(e,0,u,0);else if(S(e))for(a=0;a-1&&-1===s.indexOf("Chrome")&&-1===s.indexOf("Firefox")&&(this.supportAnimations=!1,this.supportTransitions=!1),this._initEvents()},_config:function(){this.open=!1,this.$trigger=this.$el.children(".dl-trigger"),this.$menu=this.$el.children("ul.dl-menu"),this.$menuitems=this.$menu.find("li:not(.dl-back)"),this.$el.find("ul.dl-submenu").prepend('
  • back
  • '),this.$back=this.$menu.find("li.dl-back")},_initEvents:function(){var t=this;this.$trigger.on("click.dlmenu",function(){return t.open?t._closeMenu():t._openMenu(),!1}),this.$menuitems.on("click.dlmenu",function(i){i.stopPropagation();var n=e(this),o=n.children("ul.dl-submenu");if(o.length>0){var s=o.clone().css("opacity",0).insertAfter(t.$menu),r=function(){t.$menu.off(t.animEndEventName).removeClass(t.options.animationClasses.classout).addClass("dl-subview"),n.addClass("dl-subviewopen").parents(".dl-subviewopen:first").removeClass("dl-subviewopen").addClass("dl-subview"),s.remove()};return setTimeout(function(){s.addClass(t.options.animationClasses.classin),t.$menu.addClass(t.options.animationClasses.classout),t.supportAnimations?t.$menu.on(t.animEndEventName,r):r.call(),t.options.onLevelClick(n,n.children("a:first").text())}),!1}t.options.onLinkClick(n,i)}),this.$back.on("click.dlmenu",function(){var i=e(this),n=i.parents("ul.dl-submenu:first"),o=n.parent(),s=n.clone().insertAfter(t.$menu),r=function(){t.$menu.off(t.animEndEventName).removeClass(t.options.animationClasses.classin),s.remove()};return setTimeout(function(){s.addClass(t.options.animationClasses.classout),t.$menu.addClass(t.options.animationClasses.classin),t.supportAnimations?t.$menu.on(t.animEndEventName,r):r.call(),o.removeClass("dl-subviewopen");var e=i.parents(".dl-subview:first");e.is("li")&&e.addClass("dl-subviewopen"),e.removeClass("dl-subview")}),!1})},closeMenu:function(){this.open&&this._closeMenu()},_closeMenu:function(){var e=this,t=function(){e.$menu.off(e.transEndEventName),e._resetMenu()};this.$menu.removeClass("dl-menuopen"),this.$menu.addClass("dl-menu-toggle"),this.$trigger.removeClass("dl-active"),this.supportTransitions?this.$menu.on(this.transEndEventName,t):t.call(),this.open=!1},openMenu:function(){this.open||this._openMenu()},_openMenu:function(){var t=this;i.off("click").on("click.dlmenu",function(){t._closeMenu()}),this.$menu.addClass("dl-menuopen dl-menu-toggle").on(this.transEndEventName,function(){e(this).removeClass("dl-menu-toggle")}),this.$trigger.addClass("dl-active"),this.open=!0},_resetMenu:function(){this.$menu.removeClass("dl-subview"),this.$menuitems.removeClass("dl-subview dl-subviewopen")}};var n=function(e){window.console&&window.console.error(e)};e.fn.dlmenu=function(t){if("string"==typeof t){var i=Array.prototype.slice.call(arguments,1);this.each(function(){var o=e.data(this,"dlmenu");return o?e.isFunction(o[t])&&"_"!==t.charAt(0)?void o[t].apply(o,i):void n("no such method '"+t+"' for dlmenu instance"):void n("cannot call methods on dlmenu prior to initialization; attempted to call method '"+t+"'")})}else this.each(function(){var i=e.data(this,"dlmenu");i?i._init():i=e.data(this,"dlmenu",new e.DLMenu(t,this))});return this}}(jQuery),function(e){function t(){var e=window,t="inner";return"innerWidth"in window||(t="client",e=document.documentElement||document.body),{width:e[t+"Width"],height:e[t+"Height"]}}var i=[{name:"x-large",cutOff:1400},{name:"large",cutOff:1250},{name:"inter-large",cutOff:980},{name:"medium",cutOff:800},{name:"inter-medium",cutOff:768},{name:"small",cutOff:640},{name:"inter-small",cutOff:480},{name:"x-small",cutOff:320},{name:"bp-null",cutOff:0}];deviceInfo={size:"",width:"",height:"",breakPoints:[],calculate:function(){$window=t(),this.width=t().width,this.height=t().height;for(var e=0;e=this.breakPoints[e].cutOff){this.size=this.breakPoints[e].name;break}e===this.breakPoints.length&&(window.console.log("deviceInfo.calculate - There's something wrong with the breakPoints property."),this.size="ERROR")}this.orientation=this.width>this.height?"landscape":"portrait"},setBreakPoints:function(t){return e.isArray(t)&&0!==t.length?(this.breakPoints=t,void this.calculate()):void console.error('deviceInfo.setBreakPoints expects an array of objects like:\n { name: "blah", break: ### }\n')},listBreakPoints:function(){for(var e={},t=0;t').find("ul").addClass("dl-submenu").removeAttr("style").end().closest("#dl-menu").prepend('').dlmenu({animationClasse1s:{classin:"dl-animate-in-2",classout:"dl-animate-out-2"}}),Drupal.DLoom.MM.menu=e("#dl-menu")}function o(){var t=Drupal.DLoom.MM.touchActive.bind(Drupal.DLoom.MM);e("#dl-menu").on("mousedown touchstart","button, a",t),e(window).on("mousedown touchstart",function(){Drupal.DLoom.MM.activated||Drupal.DLoom.MM.menu.dlmenu("closeMenu")})}Drupal.DLoom=Drupal.Dloom||{},Drupal.DLoom.MM={menu:null,timer:null,activated:!1,touchActive:function(){this.activated=!0,clearTimeout(this.timer),this.timer=setTimeout(function(){this.activated=!1}.bind(this),250)}},e(document).on("ready",function(){var i=t("#block-system-main-menu ul.menu");e("#block-system-main-menu").remove(),n(i),o(),e("ul#superfish-1 li#menu-2167-1 a.find-sensor-menu").removeAttr("href").css("cursor","default"),e("ul.dl-submenu a.find-sensor-menu").closest("li.parent-landing").remove()})}(jQuery),function(e){e.fn.equalize=function(t){var i,n,o=this,s=!1,r=!1;return e.isPlainObject(t)?(i=t.equalize||"height",s=t.children||!1,r=t.reset||!1):i=t||"height",e.isFunction(e.fn[i])?(n=i.indexOf("eight")>0?"height":"width",o.each(function(){var t=s?e(this).find(s):e(this).children(),o=0;t.each(function(){var t,s=e(this);r&&s.css(n,""),t=s[i](),t>o&&(o=t)}),t.css(n,o+"px")})):!1}}(jQuery),function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)}(function(e){"use strict";var t=window.Slick||{};t=function(){function t(t,n){var o,s,r=this;if(r.defaults={accessibility:!0,appendArrows:e(t),arrows:!0,asNavFor:null,prevArrow:'',nextArrow:'',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(e,t){return'"},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",fade:!1,focusOnSelect:!1,infinite:!0,lazyLoad:"ondemand",onBeforeChange:null,onAfterChange:null,onInit:null,onReInit:null,pauseOnHover:!0,pauseOnDotsHover:!1,responsive:null,rtl:!1,slide:"div",slidesToShow:1,slidesToScroll:1,speed:300,swipe:!0,touchMove:!0,touchThreshold:5,useCSS:!0,vertical:!1,waitForAnimate:!0},r.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentSlide:0,currentLeft:null,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,$list:null,touchObject:{},transformsEnabled:!1},e.extend(r,r.initials),r.activeBreakpoint=null,r.animType=null,r.animProp=null,r.breakpoints=[],r.breakpointSettings=[],r.cssTransitions=!1,r.paused=!1,r.positionProp=null,r.$slider=e(t),r.$slidesCache=null,r.transformType=null,r.transitionType=null,r.windowWidth=0,r.windowTimer=null,r.options=e.extend({},r.defaults,n),r.originalSettings=r.options,o=r.options.responsive||null,o&&o.length>-1){for(s in o)o.hasOwnProperty(s)&&(r.breakpoints.push(o[s].breakpoint),r.breakpointSettings[o[s].breakpoint]=o[s].settings);r.breakpoints.sort(function(e,t){return t-e})}r.autoPlay=e.proxy(r.autoPlay,r),r.autoPlayClear=e.proxy(r.autoPlayClear,r),r.changeSlide=e.proxy(r.changeSlide,r),r.selectHandler=e.proxy(r.selectHandler,r),r.setPosition=e.proxy(r.setPosition,r),r.swipeHandler=e.proxy(r.swipeHandler,r),r.dragHandler=e.proxy(r.dragHandler,r),r.keyHandler=e.proxy(r.keyHandler,r),r.autoPlayIterator=e.proxy(r.autoPlayIterator,r),r.instanceUid=i++,r.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,r.init()}var i=0;return t}(),t.prototype.addSlide=function(t,i,n){var o=this;if("boolean"==typeof i)n=i,i=null;else if(0>i||i>=o.slideCount)return!1;o.unload(),"number"==typeof i?0===i&&0===o.$slides.length?e(t).appendTo(o.$slideTrack):n?e(t).insertBefore(o.$slides.eq(i)):e(t).insertAfter(o.$slides.eq(i)):n===!0?e(t).prependTo(o.$slideTrack):e(t).appendTo(o.$slideTrack),o.$slides=o.$slideTrack.children(this.options.slide),o.$slideTrack.children(this.options.slide).detach(),o.$slideTrack.append(o.$slides),o.$slides.each(function(t,i){e(i).attr("index",t)}),o.$slidesCache=o.$slides,o.reinit()},t.prototype.animateSlide=function(t,i){var n={},o=this;o.options.rtl===!0&&o.options.vertical===!1&&(t=-t),o.transformsEnabled===!1?o.options.vertical===!1?o.$slideTrack.animate({left:t},o.options.speed,o.options.easing,i):o.$slideTrack.animate({top:t},o.options.speed,o.options.easing,i):o.cssTransitions===!1?e({animStart:o.currentLeft}).animate({animStart:t},{duration:o.options.speed,easing:o.options.easing,step:function(e){o.options.vertical===!1?(n[o.animType]="translate("+e+"px, 0px)",o.$slideTrack.css(n)):(n[o.animType]="translate(0px,"+e+"px)",o.$slideTrack.css(n))},complete:function(){i&&i.call()}}):(o.applyTransition(),n[o.animType]=o.options.vertical===!1?"translate3d("+t+"px, 0px, 0px)":"translate3d(0px,"+t+"px, 0px)",o.$slideTrack.css(n),i&&setTimeout(function(){o.disableTransition(),i.call()},o.options.speed))},t.prototype.applyTransition=function(e){var t=this,i={};i[t.transitionType]=t.options.fade===!1?t.transformType+" "+t.options.speed+"ms "+t.options.cssEase:"opacity "+t.options.speed+"ms "+t.options.cssEase,t.options.fade===!1?t.$slideTrack.css(i):t.$slides.eq(e).css(i)},t.prototype.autoPlay=function(){var e=this;e.autoPlayTimer&&clearInterval(e.autoPlayTimer),e.slideCount>e.options.slidesToShow&&e.paused!==!0&&(e.autoPlayTimer=setInterval(e.autoPlayIterator,e.options.autoplaySpeed))},t.prototype.autoPlayClear=function(){var e=this;e.autoPlayTimer&&clearInterval(e.autoPlayTimer)},t.prototype.autoPlayIterator=function(){var t=this,i=null!=t.options.asNavFor?e(t.options.asNavFor).getSlick():null;t.options.infinite===!1?1===t.direction?(t.currentSlide+1===t.slideCount-1&&(t.direction=0),t.slideHandler(t.currentSlide+t.options.slidesToScroll),null!=i&&i.slideHandler(i.currentSlide+i.options.slidesToScroll)):(t.currentSlide-1===0&&(t.direction=1),t.slideHandler(t.currentSlide-t.options.slidesToScroll),null!=i&&i.slideHandler(i.currentSlide-i.options.slidesToScroll)):(t.slideHandler(t.currentSlide+t.options.slidesToScroll),null!=i&&i.slideHandler(i.currentSlide+i.options.slidesToScroll))},t.prototype.buildArrows=function(){var t=this;t.options.arrows===!0&&t.slideCount>t.options.slidesToShow&&(t.$prevArrow=e(t.options.prevArrow),t.$nextArrow=e(t.options.nextArrow),t.htmlExpr.test(t.options.prevArrow)&&t.$prevArrow.appendTo(t.options.appendArrows),t.htmlExpr.test(t.options.nextArrow)&&t.$nextArrow.appendTo(t.options.appendArrows),t.options.infinite!==!0&&t.$prevArrow.addClass("slick-disabled"))},t.prototype.buildDots=function(){var t,i,n=this;if(n.options.dots===!0&&n.slideCount>n.options.slidesToShow){for(i='
      ',t=0;t<=n.getDotCount();t+=1)i+="
    • "+n.options.customPaging.call(this,n,t)+"
    • ";i+="
    ",n.$dots=e(i).appendTo(n.$slider),n.$dots.find("li").first().addClass("slick-active")}},t.prototype.buildOut=function(){var t=this;t.$slides=t.$slider.children(t.options.slide+":not(.slick-cloned)").addClass("slick-slide"),t.slideCount=t.$slides.length,t.$slides.each(function(t,i){e(i).attr("index",t)}),t.$slidesCache=t.$slides,t.$slider.addClass("slick-slider"),t.$slideTrack=0===t.slideCount?e('
    ').appendTo(t.$slider):t.$slides.wrapAll('
    ').parent(),t.$list=t.$slideTrack.wrap('
    ').parent(),t.$slideTrack.css("opacity",0),t.options.centerMode===!0&&(t.options.slidesToScroll=1,t.options.slidesToShow%2===0&&(t.options.slidesToShow=3)),e("img[data-lazy]",t.$slider).not("[src]").addClass("slick-loading"),t.setupInfinite(),t.buildArrows(),t.buildDots(),t.updateDots(),t.options.accessibility===!0&&t.$list.prop("tabIndex",0),t.setSlideClasses("number"==typeof this.currentSlide?this.currentSlide:0),t.options.draggable===!0&&t.$list.addClass("draggable")},t.prototype.checkResponsive=function(){var t,i,n=this;if(n.originalSettings.responsive&&n.originalSettings.responsive.length>-1&&null!==n.originalSettings.responsive){i=null;for(t in n.breakpoints)n.breakpoints.hasOwnProperty(t)&&e(window).width()i.options.slidesToShow&&(i.slideHandler(i.currentSlide-i.options.slidesToScroll),null!=o&&o.slideHandler(o.currentSlide-o.options.slidesToScroll));break;case"next":i.slideCount>i.options.slidesToShow&&(i.slideHandler(i.currentSlide+i.options.slidesToScroll),null!=o&&o.slideHandler(o.currentSlide+o.options.slidesToScroll));break;case"index":var s=e(t.target).parent().index()*i.options.slidesToScroll;i.slideHandler(s),null!=o&&o.slideHandler(s);break;default:return!1}},t.prototype.destroy=function(){var t=this;t.autoPlayClear(),t.touchObject={},e(".slick-cloned",t.$slider).remove(),t.$dots&&t.$dots.remove(),t.$prevArrow&&(t.$prevArrow.remove(),t.$nextArrow.remove()),t.$slides.parent().hasClass("slick-track")&&t.$slides.unwrap().unwrap(),t.$slides.removeClass("slick-slide slick-active slick-visible").removeAttr("style"),t.$slider.removeClass("slick-slider"),t.$slider.removeClass("slick-initialized"),t.$list.off(".slick"),e(window).off(".slick-"+t.instanceUid),e(document).off(".slick-"+t.instanceUid)},t.prototype.disableTransition=function(e){var t=this,i={};i[t.transitionType]="",t.options.fade===!1?t.$slideTrack.css(i):t.$slides.eq(e).css(i)},t.prototype.fadeSlide=function(e,t){var i=this;i.cssTransitions===!1?(i.$slides.eq(e).css({zIndex:1e3}),i.$slides.eq(e).animate({opacity:1},i.options.speed,i.options.easing,t)):(i.applyTransition(e),i.$slides.eq(e).css({opacity:1,zIndex:1e3}),t&&setTimeout(function(){i.disableTransition(e),t.call()},i.options.speed))},t.prototype.filterSlides=function(e){var t=this;null!==e&&(t.unload(),t.$slideTrack.children(this.options.slide).detach(),t.$slidesCache.filter(e).appendTo(t.$slideTrack),t.reinit())},t.prototype.getCurrent=function(){var e=this;return e.currentSlide},t.prototype.getDotCount=function(){var e,t=this,i=0,n=0,o=0;for(e=t.options.infinite===!0?t.slideCount+t.options.slidesToShow-t.options.slidesToScroll:t.slideCount;e>i;)o++,n+=t.options.slidesToScroll,i=n+t.options.slidesToShow;return o},t.prototype.getLeft=function(e){var t,i,n=this,o=0;return n.slideOffset=0,i=n.$slides.first().outerHeight(),n.options.infinite===!0?(n.slideCount>n.options.slidesToShow&&(n.slideOffset=n.slideWidth*n.options.slidesToShow*-1,o=i*n.options.slidesToShow*-1),n.slideCount%n.options.slidesToScroll!==0&&e+n.options.slidesToScroll>n.slideCount&&n.slideCount>n.options.slidesToShow&&(n.slideOffset=n.slideCount%n.options.slidesToShow*n.slideWidth*-1,o=n.slideCount%n.options.slidesToShow*i*-1)):n.slideCount%n.options.slidesToShow!==0&&e+n.options.slidesToScroll>n.slideCount&&n.slideCount>n.options.slidesToShow&&(n.slideOffset=n.options.slidesToShow*n.slideWidth-n.slideCount%n.options.slidesToShow*n.slideWidth,o=n.slideCount%n.options.slidesToShow*i),n.options.centerMode===!0&&n.options.infinite===!0?n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)-n.slideWidth:n.options.centerMode===!0&&(n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)),t=n.options.vertical===!1?e*n.slideWidth*-1+n.slideOffset:e*i*-1+o},t.prototype.init=function(){var t=this;e(t.$slider).hasClass("slick-initialized")||(e(t.$slider).addClass("slick-initialized"),t.buildOut(),t.setProps(),t.startLoad(),t.loadSlider(),t.initializeEvents(),t.checkResponsive()),null!==t.options.onInit&&t.options.onInit.call(this,t)},t.prototype.initArrowEvents=function(){var e=this;e.options.arrows===!0&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow.on("click.slick",{message:"previous"},e.changeSlide),e.$nextArrow.on("click.slick",{message:"next"},e.changeSlide))},t.prototype.initDotEvents=function(){var t=this;t.options.dots===!0&&t.slideCount>t.options.slidesToShow&&e("li",t.$dots).on("click.slick",{message:"index"},t.changeSlide),t.options.dots===!0&&t.options.pauseOnDotsHover===!0&&t.options.autoplay===!0&&e("li",t.$dots).on("mouseenter.slick",t.autoPlayClear).on("mouseleave.slick",t.autoPlay)},t.prototype.initializeEvents=function(){var t=this;t.initArrowEvents(),t.initDotEvents(),t.$list.on("touchstart.slick mousedown.slick",{action:"start"},t.swipeHandler),t.$list.on("touchmove.slick mousemove.slick",{action:"move"},t.swipeHandler),t.$list.on("touchend.slick mouseup.slick",{action:"end"},t.swipeHandler),t.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},t.swipeHandler),t.options.pauseOnHover===!0&&t.options.autoplay===!0&&(t.$list.on("mouseenter.slick",t.autoPlayClear),t.$list.on("mouseleave.slick",t.autoPlay)),t.options.accessibility===!0&&t.$list.on("keydown.slick",t.keyHandler),t.options.focusOnSelect===!0&&e(t.options.slide,t.$slideTrack).on("click.slick",t.selectHandler),e(window).on("orientationchange.slick.slick-"+t.instanceUid,function(){t.checkResponsive(),t.setPosition()}),e(window).on("resize.slick.slick-"+t.instanceUid,function(){e(window).width()!==t.windowWidth&&(clearTimeout(t.windowDelay),t.windowDelay=window.setTimeout(function(){t.windowWidth=e(window).width(),t.checkResponsive(),t.setPosition()},50))}),e(window).on("load.slick.slick-"+t.instanceUid,t.setPosition),e(document).on("ready.slick.slick-"+t.instanceUid,t.setPosition)},t.prototype.initUI=function(){var e=this;e.options.arrows===!0&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow.show(),e.$nextArrow.show()),e.options.dots===!0&&e.slideCount>e.options.slidesToShow&&e.$dots.show(),e.options.autoplay===!0&&e.autoPlay()},t.prototype.keyHandler=function(e){var t=this;37===e.keyCode?t.changeSlide({data:{message:"previous"}}):39===e.keyCode&&t.changeSlide({data:{message:"next"}})},t.prototype.lazyLoad=function(){function t(t){e("img[data-lazy]",t).each(function(){var t=e(this),i=e(this).attr("data-lazy")+"?"+(new Date).getTime();t.load(function(){t.animate({opacity:1},200)}).css({opacity:0}).attr("src",i).removeAttr("data-lazy").removeClass("slick-loading")})}var i,n,o,s,r=this;r.options.centerMode===!0?r.options.infinite===!0?(o=r.currentSlide+(r.options.slidesToShow/2+1),s=o+r.options.slidesToShow+2):(o=Math.max(0,r.currentSlide-(r.options.slidesToShow/2+1)),s=2+(r.options.slidesToShow/2+1)+r.currentSlide):(o=r.options.infinite?r.options.slidesToShow+r.currentSlide:r.currentSlide,s=o+r.options.slidesToShow,r.options.fade===!0&&(o>0&&o--,s<=r.slideCount&&s++)),i=r.$slider.find(".slick-slide").slice(o,s),t(i),1==r.slideCount?(n=r.$slider.find(".slick-slide"),t(n)):r.currentSlide>=r.slideCount-r.options.slidesToShow?(n=r.$slider.find(".slick-cloned").slice(0,r.options.slidesToShow),t(n)):0===r.currentSlide&&(n=r.$slider.find(".slick-cloned").slice(-1*r.options.slidesToShow),t(n))},t.prototype.loadSlider=function(){var e=this;e.setPosition(),e.$slideTrack.css({opacity:1}),e.$slider.removeClass("slick-loading"),e.initUI(),"progressive"===e.options.lazyLoad&&e.progressiveLazyLoad()},t.prototype.postSlide=function(e){var t=this;null!==t.options.onAfterChange&&t.options.onAfterChange.call(this,t,e),t.animating=!1,t.setPosition(),t.swipeLeft=null,t.options.autoplay===!0&&t.paused===!1&&t.autoPlay()},t.prototype.progressiveLazyLoad=function(){var t,i,n=this; t=e("img[data-lazy]").length,t>0&&(i=e("img[data-lazy]",n.$slider).first(),i.attr("src",i.attr("data-lazy")).removeClass("slick-loading").load(function(){i.removeAttr("data-lazy"),n.progressiveLazyLoad()}))},t.prototype.refresh=function(){var t=this,i=t.currentSlide;t.destroy(),e.extend(t,t.initials),t.currentSlide=i,t.init()},t.prototype.reinit=function(){var t=this;t.$slides=t.$slideTrack.children(t.options.slide).addClass("slick-slide"),t.slideCount=t.$slides.length,t.currentSlide>=t.slideCount&&0!==t.currentSlide&&(t.currentSlide=t.currentSlide-t.options.slidesToScroll),t.setProps(),t.setupInfinite(),t.buildArrows(),t.updateArrows(),t.initArrowEvents(),t.buildDots(),t.updateDots(),t.initDotEvents(),t.options.focusOnSelect===!0&&e(t.options.slide,t.$slideTrack).on("click.slick",t.selectHandler),t.setSlideClasses(0),t.setPosition(),null!==t.options.onReInit&&t.options.onReInit.call(this,t)},t.prototype.removeSlide=function(e,t){var i=this;return"boolean"==typeof e?(t=e,e=t===!0?0:i.slideCount-1):e=t===!0?--e:e,i.slideCount<1||0>e||e>i.slideCount-1?!1:(i.unload(),i.$slideTrack.children(this.options.slide).eq(e).remove(),i.$slides=i.$slideTrack.children(this.options.slide),i.$slideTrack.children(this.options.slide).detach(),i.$slideTrack.append(i.$slides),i.$slidesCache=i.$slides,void i.reinit())},t.prototype.setCSS=function(e){var t,i,n=this,o={};n.options.rtl===!0&&(e=-e),t="left"==n.positionProp?e+"px":"0px",i="top"==n.positionProp?e+"px":"0px",o[n.positionProp]=e,n.transformsEnabled===!1?n.$slideTrack.css(o):(o={},n.cssTransitions===!1?(o[n.animType]="translate("+t+", "+i+")",n.$slideTrack.css(o)):(o[n.animType]="translate3d("+t+", "+i+", 0px)",n.$slideTrack.css(o)))},t.prototype.setDimensions=function(){var e=this;e.options.vertical===!1?e.options.centerMode===!0&&e.$list.css({padding:"0px "+e.options.centerPadding}):(e.$list.height(e.$slides.first().outerHeight(!0)*e.options.slidesToShow),e.options.centerMode===!0&&e.$list.css({padding:e.options.centerPadding+" 0px"})),e.listWidth=e.$list.width(),e.listHeight=e.$list.height(),e.options.vertical===!1?(e.slideWidth=Math.ceil(e.listWidth/e.options.slidesToShow),e.$slideTrack.width(Math.ceil(e.slideWidth*e.$slideTrack.children(".slick-slide").length))):(e.slideWidth=Math.ceil(e.listWidth),e.$slideTrack.height(Math.ceil(e.$slides.first().outerHeight(!0)*e.$slideTrack.children(".slick-slide").length)));var t=e.$slides.first().outerWidth(!0)-e.$slides.first().width();e.$slideTrack.children(".slick-slide").width(e.slideWidth-t)},t.prototype.setFade=function(){var t,i=this;i.$slides.each(function(n,o){t=i.slideWidth*n*-1,e(o).css({position:"relative",left:t,top:0,zIndex:800,opacity:0})}),i.$slides.eq(i.currentSlide).css({zIndex:900,opacity:1})},t.prototype.setPosition=function(){var e=this;e.setDimensions(),e.options.fade===!1?e.setCSS(e.getLeft(e.currentSlide)):e.setFade()},t.prototype.setProps=function(){var e=this,t=document.body.style;e.positionProp=e.options.vertical===!0?"top":"left","top"===e.positionProp?e.$slider.addClass("slick-vertical"):e.$slider.removeClass("slick-vertical"),(void 0!==t.WebkitTransition||void 0!==t.MozTransition||void 0!==t.msTransition)&&e.options.useCSS===!0&&(e.cssTransitions=!0),void 0!==t.OTransform&&(e.animType="OTransform",e.transformType="-o-transform",e.transitionType="OTransition",void 0===t.perspectiveProperty&&void 0===t.webkitPerspective&&(e.animType=!1)),void 0!==t.MozTransform&&(e.animType="MozTransform",e.transformType="-moz-transform",e.transitionType="MozTransition",void 0===t.perspectiveProperty&&void 0===t.MozPerspective&&(e.animType=!1)),void 0!==t.webkitTransform&&(e.animType="webkitTransform",e.transformType="-webkit-transform",e.transitionType="webkitTransition",void 0===t.perspectiveProperty&&void 0===t.webkitPerspective&&(e.animType=!1)),void 0!==t.msTransform&&(e.animType="msTransform",e.transformType="-ms-transform",e.transitionType="msTransition",void 0===t.msTransform&&(e.animType=!1)),void 0!==t.transform&&e.animType!==!1&&(e.animType="transform",e.transformType="transform",e.transitionType="transition"),e.transformsEnabled=null!==e.animType&&e.animType!==!1},t.prototype.setSlideClasses=function(e){var t,i,n,o,s=this;s.$slider.find(".slick-slide").removeClass("slick-active").removeClass("slick-center"),i=s.$slider.find(".slick-slide"),s.options.centerMode===!0?(t=Math.floor(s.options.slidesToShow/2),s.options.infinite===!0&&(e>=t&&e<=s.slideCount-1-t?s.$slides.slice(e-t,e+t+1).addClass("slick-active"):(n=s.options.slidesToShow+e,i.slice(n-t+1,n+t+2).addClass("slick-active")),0===e?i.eq(i.length-1-s.options.slidesToShow).addClass("slick-center"):e===s.slideCount-1&&i.eq(s.options.slidesToShow).addClass("slick-center")),s.$slides.eq(e).addClass("slick-center")):e>=0&&e<=s.slideCount-s.options.slidesToShow?s.$slides.slice(e,e+s.options.slidesToShow).addClass("slick-active"):i.length<=s.options.slidesToShow?i.addClass("slick-active"):(o=s.slideCount%s.options.slidesToShow,n=s.options.infinite===!0?s.options.slidesToShow+e:e,s.options.slidesToShow==s.options.slidesToScroll&&s.slideCount-eo.options.slidesToShow)){for(n=o.options.centerMode===!0?o.options.slidesToShow+1:o.options.slidesToShow,t=o.slideCount;t>o.slideCount-n;t-=1)i=t-1,e(o.$slides[i]).clone(!0).attr("id","").prependTo(o.$slideTrack).addClass("slick-cloned");for(t=0;n>t;t+=1)i=t,e(o.$slides[i]).clone(!0).attr("id","").appendTo(o.$slideTrack).addClass("slick-cloned");o.$slideTrack.find(".slick-cloned").find("[id]").each(function(){e(this).attr("id","")})}},t.prototype.selectHandler=function(t){var i=this,n=null!=i.options.asNavFor?e(i.options.asNavFor).getSlick():null,o=parseInt(e(t.target).parent().attr("index"));if(o||(o=0),!(i.slideCount<=i.options.slidesToShow)&&(i.slideHandler(o),null!=n)){if(n.slideCount<=n.options.slidesToShow)return;n.slideHandler(o)}},t.prototype.slideHandler=function(e){var t,i,n,o,s=null,r=this;return r.animating===!0&&r.options.waitForAnimate===!0?!1:(t=e,s=r.getLeft(t),n=r.getLeft(r.currentSlide),o=r.slideCount%r.options.slidesToScroll!==0?r.options.slidesToScroll:0,r.currentLeft=null===r.swipeLeft?n:r.swipeLeft,r.options.infinite===!1&&r.options.centerMode===!1&&(0>e||e>r.slideCount-r.options.slidesToShow+o)?(r.options.fade===!1&&(t=r.currentSlide,r.animateSlide(n,function(){r.postSlide(t)})),!1):r.options.infinite===!1&&r.options.centerMode===!0&&(0>e||e>r.slideCount-r.options.slidesToScroll)?(r.options.fade===!1&&(t=r.currentSlide,r.animateSlide(n,function(){r.postSlide(t)})),!1):(r.options.autoplay===!0&&clearInterval(r.autoPlayTimer),i=0>t?r.slideCount%r.options.slidesToScroll!==0?r.slideCount-r.slideCount%r.options.slidesToScroll:r.slideCount-r.options.slidesToScroll:t>r.slideCount-1?0:t,r.animating=!0,null!==r.options.onBeforeChange&&e!==r.currentSlide&&r.options.onBeforeChange.call(this,r,r.currentSlide,i),r.currentSlide=i,r.setSlideClasses(r.currentSlide),r.updateDots(),r.updateArrows(),r.options.fade===!0?(r.fadeSlide(i,function(){r.postSlide(i)}),!1):void r.animateSlide(s,function(){r.postSlide(i)})))},t.prototype.startLoad=function(){var e=this;e.options.arrows===!0&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow.hide(),e.$nextArrow.hide()),e.options.dots===!0&&e.slideCount>e.options.slidesToShow&&e.$dots.hide(),e.$slider.addClass("slick-loading")},t.prototype.swipeDirection=function(){var e,t,i,n,o=this;return e=o.touchObject.startX-o.touchObject.curX,t=o.touchObject.startY-o.touchObject.curY,i=Math.atan2(t,e),n=Math.round(180*i/Math.PI),0>n&&(n=360-Math.abs(n)),45>=n&&n>=0?"left":360>=n&&n>=315?"left":n>=135&&225>=n?"right":"vertical"},t.prototype.swipeEnd=function(t){var i=this,n=null!=i.options.asNavFor?e(i.options.asNavFor).getSlick():null;if(i.dragging=!1,void 0===i.touchObject.curX)return!1;if(i.touchObject.swipeLength>=i.touchObject.minSwipe)switch(e(t.target).on("click.slick",function(t){t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault(),e(t.target).off("click.slick")}),i.swipeDirection()){case"left":i.slideHandler(i.currentSlide+i.options.slidesToScroll),null!=n&&n.slideHandler(n.currentSlide+n.options.slidesToScroll),i.touchObject={};break;case"right":i.slideHandler(i.currentSlide-i.options.slidesToScroll),null!=n&&n.slideHandler(n.currentSlide-n.options.slidesToScroll),i.touchObject={}}else i.touchObject.startX!==i.touchObject.curX&&(i.slideHandler(i.currentSlide),null!=n&&n.slideHandler(n.currentSlide),i.touchObject={})},t.prototype.swipeHandler=function(e){var t=this;if(!(t.options.swipe===!1||"ontouchend"in document&&t.options.swipe===!1||t.options.draggable===!1||t.options.draggable===!1&&!e.originalEvent.touches))switch(t.touchObject.fingerCount=e.originalEvent&&void 0!==e.originalEvent.touches?e.originalEvent.touches.length:1,t.touchObject.minSwipe=t.listWidth/t.options.touchThreshold,e.data.action){case"start":t.swipeStart(e);break;case"move":t.swipeMove(e);break;case"end":t.swipeEnd(e)}},t.prototype.swipeMove=function(e){var t,i,n,o,s=this;return o=void 0!==e.originalEvent?e.originalEvent.touches:null,t=s.getLeft(s.currentSlide),!s.dragging||o&&1!==o.length?!1:(s.touchObject.curX=void 0!==o?o[0].pageX:e.clientX,s.touchObject.curY=void 0!==o?o[0].pageY:e.clientY,s.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(s.touchObject.curX-s.touchObject.startX,2))),i=s.swipeDirection(),"vertical"!==i?(void 0!==e.originalEvent&&s.touchObject.swipeLength>4&&e.preventDefault(),n=s.touchObject.curX>s.touchObject.startX?1:-1,s.swipeLeft=s.options.vertical===!1?t+s.touchObject.swipeLength*n:t+s.touchObject.swipeLength*(s.$list.height()/s.listWidth)*n,s.options.fade===!0||s.options.touchMove===!1?!1:s.animating===!0?(s.swipeLeft=null,!1):void s.setCSS(s.swipeLeft)):void 0)},t.prototype.swipeStart=function(e){var t,i=this;return 1!==i.touchObject.fingerCount||i.slideCount<=i.options.slidesToShow?(i.touchObject={},!1):(void 0!==e.originalEvent&&void 0!==e.originalEvent.touches&&(t=e.originalEvent.touches[0]),i.touchObject.startX=i.touchObject.curX=void 0!==t?t.pageX:e.clientX,i.touchObject.startY=i.touchObject.curY=void 0!==t?t.pageY:e.clientY,void(i.dragging=!0))},t.prototype.unfilterSlides=function(){var e=this;null!==e.$slidesCache&&(e.unload(),e.$slideTrack.children(this.options.slide).detach(),e.$slidesCache.appendTo(e.$slideTrack),e.reinit())},t.prototype.unload=function(){var t=this;e(".slick-cloned",t.$slider).remove(),t.$dots&&t.$dots.remove(),t.$prevArrow&&(t.$prevArrow.remove(),t.$nextArrow.remove()),t.$slides.removeClass("slick-slide slick-active slick-visible").removeAttr("style")},t.prototype.updateArrows=function(){var e=this;e.options.arrows===!0&&e.options.infinite!==!0&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow.removeClass("slick-disabled"),e.$nextArrow.removeClass("slick-disabled"),0===e.currentSlide?(e.$prevArrow.addClass("slick-disabled"),e.$nextArrow.removeClass("slick-disabled")):e.currentSlide>=e.slideCount-e.options.slidesToShow&&(e.$nextArrow.addClass("slick-disabled"),e.$prevArrow.removeClass("slick-disabled")))},t.prototype.updateDots=function(){var e=this;null!==e.$dots&&(e.$dots.find("li").removeClass("slick-active"),e.$dots.find("li").eq(Math.floor(e.currentSlide/e.options.slidesToScroll)).addClass("slick-active"))},e.fn.slick=function(e){var i=this;return i.each(function(i,n){n.slick=new t(n,e)})},e.fn.slickAdd=function(e,t,i){var n=this;return n.each(function(n,o){o.slick.addSlide(e,t,i)})},e.fn.slickCurrentSlide=function(){var e=this;return e.get(0).slick.getCurrent()},e.fn.slickFilter=function(e){var t=this;return t.each(function(t,i){i.slick.filterSlides(e)})},e.fn.slickGoTo=function(t){var i=this;return i.each(function(i,n){var o=null!=n.slick.options.asNavFor?e(n.slick.options.asNavFor):null;null!=o&&o.slickGoTo(t),n.slick.slideHandler(t)})},e.fn.slickNext=function(){var e=this;return e.each(function(e,t){t.slick.changeSlide({data:{message:"next"}})})},e.fn.slickPause=function(){var e=this;return e.each(function(e,t){t.slick.autoPlayClear(),t.slick.paused=!0})},e.fn.slickPlay=function(){var e=this;return e.each(function(e,t){t.slick.paused=!1,t.slick.autoPlay()})},e.fn.slickPrev=function(){var e=this;return e.each(function(e,t){t.slick.changeSlide({data:{message:"previous"}})})},e.fn.slickRemove=function(e,t){var i=this;return i.each(function(i,n){n.slick.removeSlide(e,t)})},e.fn.slickGetOption=function(e){var t=this;return t.get(0).slick.options[e]},e.fn.slickSetOption=function(e,t,i){var n=this;return n.each(function(n,o){o.slick.options[e]=t,i===!0&&(o.slick.unload(),o.slick.reinit())})},e.fn.slickUnfilter=function(){var e=this;return e.each(function(e,t){t.slick.unfilterSlides()})},e.fn.unslick=function(){var e=this;return e.each(function(e,t){t.slick&&t.slick.destroy()})},e.fn.getSlick=function(){var e=null,t=this;return t.each(function(t,i){e=i.slick}),e}}),function(e){function t(){var t=e("div.view.dl-slideshow > div.view-content");t.each(function(){var t=e("div.field-content img",this).length;t>1&&e(this).slick({dots:!0,autoplay:!0,responsive:!0,infinite:!0,speed:500,fade:!0,slide:"div.views-row",cssEase:"linear"})})}function i(){$carousel=e("div.view.dl-slider-carousel > div.view-content"),$carousel.each(function(){e(this).slick({centerMode:!1,arrow:!0,speed:1500,slidesToShow:3,slidesToScroll:3,infinite:!0,touchMove:!0,autoplay:!0,responsive:[{breakpoint:980,settings:{slidesToShow:3,slidesToScroll:3}},{breakpoint:650,settings:{slidesToShow:3,slidesToScroll:3}},{breakpoint:480,settings:{slidesToShow:0,slidesToScroll:0}}]})})}function n(){t(),i()}e(document).on("ready",function(){n()})}(jQuery),function(e){function t(){var t=e("body.front div.node-group.view-mode-teaser_list");t.length>0&&t.each(function(){var t=e("div.field-name-field-high-level-message",this),i=e("div.field-name-field-image-division-thumbnail a",this),n="";0===e("div.fade-area",t).length&&(t.wrapInner('
    '),e(this).addClass("fade-container"));var o=e(".fade-area",t);t.attr("style",""),o.attr("style",""),o.hide(),n=deviceInfo.width>deviceInfo.getMaxPoint("medium")?e("div.field-name-field-image-division-thumbnail",this):e(this);var s=n.innerHeight(!0)+1,r=n.innerWidth(!0),l=[{height:s,width:r,overflow:"hidden"}],a=[{width:"100%",height:s}];t.css(l[0]),o.css(a[0]),t.on("mouseenter touchstart",function(e){o.show(),o.css("cursor","pointer"),e.stopPropagation()}),t.on("mouseleave touchend",function(){o.hide(),o.css("cursor","auto")}),t.on("click",function(){i[0].click()})})}function i(){var t=e("li#menu-241-1, li#menu-1079-1"),i=e("div#navigation-content div.region-navigation").width();t.each(function(){$submenu=e("a.menuparent.sf-depth-1 + ul.sf-megamenu",t),$submenu.each(function(){var t=e(this).offset(),n=e("div#block-superfish-1").offset(),o=n.left-t.left;e(this).css({width:i,left:o,"max-width":i})})})}function n(){0!==e("div#block-views-applications-block").length&&o("div#block-views-applications-block"),0!==e("div.region-content-closure").length&&o("div.region-content-closure"),0!==e("div#block-views-events-block-2").length&&o("div#block-views-events-block-2",deviceInfo.breakPoints[2].cutOff)}function o(t,i){var n=e(t),o=parseInt(deviceInfo.width),s=parseInt(n.parent().innerWidth(!0)),r=parseInt(n.parent().width()),l=-((o-r)/2),a={width:o,left:l,"max-width":"none"},d={width:s};void 0===i||void 0!==i&&deviceInfo.width<=i?(0===e(".full-width-box-wrapper",n).length&&n.wrapInner("
    "),e(".full-width-box-wrapper",n).css(d),n.css(a).addClass("full-width-box").end()):(n.attr("style","").removeClass("full-width-box"),e(".full-width-box-wrapper",n).attr("style",""),e(".full-width-box-wrapper",n).length>0&&e(".full-width-box-wrapper",n).children().unwrap())}function s(){e(".view-display-id-division_homepage .view-content .node:first-child img").onload=function(){e(".view-display-id-division_homepage .view-content").equalize({children:".node",reset:!0})}}function r(){i(),n(),s(),t()}function l(){var t;e(window).on("resize",function(){clearTimeout(t),t=setTimeout(r,100)})}var a=navigator.userAgent.match(/iPhone/i)?"touchstart":"click";Drupal.DLoom=Drupal.DLoom||{},Drupal.behaviors.setXpandable={attach:function(){e(".xpandable").each(function(){e(this).off(a).on(a,function(){e(this).toggleClass("open").next(".xpandable-area").slideToggle()}),0===e(this).nextAll("div.xpandable-area").length&&e(this).nextUntil(".xpandable, .xpandable-break").wrapAll('
    ')}),e(".xpandable-area").hide()}},Drupal.behaviors.alterCartDisplay={attach:function(){e("div.node-product-display.view-mode-full").each(function(){if(e("div.field-name-field-products",this).length>0){if(e("div.field-commerce-price-preprocessed",this).length>0)return;0===e("div#price-quantity-submit",this).length&&(e("form.commerce-add-to-cart input.form-submit",this).wrapAll('
    '),e("div.form-item-quantity",this).prependTo("div#price-quantity-submit"));var t=e("div.field-commerce-price",this),i=t.clone();t.css({"position:":"absolute",left:"-99999px",visibility:"hidden"}),i.addClass("field-commerce-price-preprocessed").removeClass("field-commerce-price").prependTo("div#price-quantity-submit")}})}},e(document).ready(function(){e(".node.view-mode-full").each(function(){0!==e("div.field-name-ds-original-image",this).length&&0!==e("div.field-name-ds-wide-image",this).length?(e("div.field-name-ds-original-image",this).remove(),e(this).addClass("wide-image-node")):e(this).addClass(0!==e("div.field-name-ds-original-image",this).length&&0===e("div.field-name-ds-wide-image",this).length?"crop-thumb-node":"no-thumb-node")});for(var t=document.querySelectorAll(".form-type-select"),i=0;i0){var t=e("iframe",this).attr("width");e(this).css("max-width",t)}}),e(".video").each(function(){if(e("iframe",this).length>0){var t=e("iframe",this).attr("width"),i=e("iframe",this).attr("height");e(this).css({width:t,"max-width":"100%","max-height":i})}}),e("form.mktoForm, form.lpeRegForm").each(function(){e(this).css("min-width","100%"),e("div, span, label",this).attr("style",""),e(".mktoOffset, .mktoClear, .mktoGutter ",this).remove()}),r(),window.location.hash&&window.setTimeout(function(){e(window).scrollTop(0)},1e3)})}(jQuery),function(e){function t(t){var i=deviceInfo.getMaxPoint("small"),n=e(t).find("tbody tr:first-child td").length;return i=deviceInfo.getMaxPoint(n>=10?"medium":n>=7&&10>n?"inter-medium":n>=4&&7>n?"small":4>n&&n>3?"inter-small":"x-small")}function i(t,i){var n=e(t),o=n.prevAll("table.sticky-header"),s=parseInt(e("thead tr:last-child th:last-child",t).index()+1);if(o.length>0){for(var r=1;s>=r;r++){var l=e("tbody tr:first-child td:nth-child("+r+")",t).outerWidth(!0);e("th:nth-child("+r+")",this).css({width:l})}i?(o.hide(),n.removeClass("sticky-table sticky-enabled"),e("th",o).css({display:"none"})):(o.show(),n.addClass("sticky-table sticky-enabled"),e("th",o).css({display:"table-cell"}))}}function n(){var i=e("table.responsive-table, table.layout-table-even, table.layout-table-odd, table.clear-table");i.each(function(){{var e=t(this);o(this,e)}}),e("table.responsive-table-with-header").each(function(){var i=e(this),n=t(this),s=o(this,n);if(s===!0){if(i.closest(".xpandable-area").length>0){var r=i.clone(),l=i.closest(".xpandable-area").outerWidth(!0);r.addClass("xp-table-clone").css({position:"absolute",display:"block",left:"-99999px",visibility:"hidden",width:l,"max-width":l}).end(),i.closest(".xpandable-area").prev(".xpandable").prepend(r);var a=r}else var a=this;var d=parseInt(e(a).find("thead").outerWidth(!0)),c=parseInt(e(a).find("thead").outerHeight(!0)),u=parseInt(e(a).parent().width()),p=parseInt(e("tbody tr:last-child",this).index()+1),h=parseInt(e("tbody tr:last-child td:last-child",this).index()+1),f=parseInt(u-d),m=[{height:c+"px",width:u+"px"}],v=[{width:f+"px",left:d+"px"}],g=[{width:d+"px"}];i.css(m[0]),e("tbody",this).css(v[0]),e("thead",this).css(g[0]);for(var w=0;p>=w;w++)for(var b=0;h>=b;b++){var y=e("thead tr th:nth-child("+b+")",a).height();e("tbody tr:nth-child("+w+") td:nth-child("+b+")",this).css("min-height",y),e(e("tbody tr:nth-child("+w+") td:nth-child("+b+")",this),e("thead tr:last-child th:nth-child("+b+")",this)).equalize()}r&&r.remove()}}),e("table.responsive-table-with-label").each(function(){var i=e(this),n=t(i),s=o(this,n);if(e("span.header-label",this).remove(),s===!0){for(var r=parseInt(e("thead tr:last-child th:last-child",this).index()+1),l=parseInt(e("tbody tr:last-child",this).index()+1),a=parseInt(e("tbody tr:last-child td:last-child",this).index()+1),d=[],c="",u=0;r>=u;u++)d.push(e("thead tr:last-child > *:nth-child("+u+")",this).text());for(var p=0;l>=p;p++)for(var h=0;a>=h;h++)c="",""!=e.trim(d[h])&&(c=''+d[h]+": ",e("tbody tr:nth-child("+p+") td:nth-child("+h+")",this).prepend(c))}})}function o(t,n){var o=e(t),s=!1;return o.parent().width()<=n?(s=!0,o.addClass("responsive")):o.removeClass("responsive"),o.closest("#tab-content").width()>n&&(s=!1,o.removeClass("responsive")),i(t,s),s}function s(){var t;e(window).on("resize",function(){clearTimeout(t),t=setTimeout(n,100)})}Drupal.behaviors.responsiveTables={attach:function(){0!==e("table").length&&(e("table td div.media_embed").each(function(){if(e("iframe",this).length>0){var t=e("iframe",this).attr("width");e(this).closest("td").css("width",t)}}),e("div#content table.views-table, div.region-full-width-content-bottom table.views-table ").each(function(){var t=e(this);t.hasClass("responsiveTablesProcessed")||t.addClass(0!==e("thead",this).length?"responsive-table-with-label":"responsive-table")}),e("table").each(function(){var t=e(this);if(!t.hasClass("responsiveTablesProcessed")){var i=t.find("tr:first td").length;0===i&&(i=t.find("tr:first th").length),t.addClass("col-"+i+" responsiveTablesProcessed")}}),n())}},e(document).on("ready",function(){0!==e("table").length&&s()})}(jQuery),function(e){function t(t){var i=t.children(".view-content"),n=e('
    '),o=e('').appendTo(n),s=e('
      ').appendTo(o),r=0;0===t.length||t.hasClass("tab-processed")||(i.children(".item-list").each(function(){var t=e(this),i=t.children("h3"),n=i.text()||"No Type",o="tab-"+n.split(" ").join("-"),l=e('
    • '+n+"
    • ");null!==content&&(t.attr("id",o),t.addClass("tab-content vertical-tabs-content tab-content-"+r),t.children("ul").wrap('
      '),i.remove(),e('

      '+n+"

      ").prependTo(this),s.append(l),r++)}),e('#tab-Equilibrators div.content-wrapper').prepend('

      View All Equilibration Devices with Specifications

      '),i.before(n),t.addClass("tab-processed"))}function i(t){Drupal.DLoom.TabXpandable=deviceInfo.width<=t;var i=e("div.tab-content.vertical-tabs-content");i.each(function(){var t=e("h2.tab-name",this),i=e("div.content-wrapper",this);Drupal.DLoom.TabXpandable?(e(this).parent().addClass("responsive"),t.addClass("xpandable"),i.addClass("xpandable-area")):(e(this).parent().removeClass("responsive"),t.removeClass("xpandable"),i.removeClass("xpandable-area"),i.attr("style",""))}),Drupal.DLoom.TabXpandable&&Drupal.behaviors.setXpandable.attach()}var n,o={responsive:!1,resizeTimer:void 0,init:function(){this.bindUIfunctions(),this.pageLoadCorrectTab(),this.setResponsiveTab(),this.applyToResize()},bindUIfunctions:function(){e(document).on("click",".responsive-tabs a[href^='#']:not('.active'), .tab-content a[href^='#']",function(e){o.changeTab(this.hash),e.preventDefault()}).on("click",".responsive-tabs a.active",function(e){o.toggleMobileMenu(e,this),e.preventDefault()})},changeTab:function(t,i){var n=e("[href="+t+"]"),o=e(t),i=i||!1;if(0===o.length||0===n.length?(e("a#tab-link-0").addClass("active").parent().siblings().find("a").removeClass("active"),e("div.tab-content-0").addClass("active").siblings().removeClass("active")):(n.addClass("active").parent().siblings().find("a").removeClass("active"),o.addClass("active").siblings().removeClass("active")),!i){var s=t.substr(1);window.history.replaceState({},"","?tab="+s)}n.closest("ul").removeClass("open");},pageLoadCorrectTab:function(){for(var t=window.location.search.substr(1),i=t.split("&"),n=0;n0&&t(i),e(".responsive-tabs").length>0&&o.init()}}}(jQuery),function(e){function t(){return s===!1&&(s=e(o)),s.length}function i(t){for(var i=0;i2",toU:function(e){return e/this.modifier},mDeci:1,mName:" sensels / cm2",toM:function(e){return e*this.modifier}}},l=[{selector:".field-name-field-sensor-length .field-item",conversion:"length"},{selector:".field-name-field-sensing-size .field-item",conversion:"length"},{selector:".field-name-field-max-force .field-item",conversion:"force"},{selector:".field-name-field-temperature-range-low .field-item",conversion:"temperature"},{selector:".field-name-field-temperature-range-high .field-item",conversion:"temperature"},{selector:".field-name-field-ps-temperature-range-low .field-item",conversion:"temperature"},{selector:".field-name-field-ps-temperature-range-high .field-item",conversion:"temperature"},{selector:".field-name-field-max-pressure .field-item",conversion:"pressure"},{selector:".field-name-field-thickness .field-item",conversion:"length",options:{mDeci:3,uDeci:3}},{selector:".field-name-field-pitch .field-item",conversion:"length",options:{mDeci:3,uDeci:3}},{selector:".field-name-field-overall-length .field-item",conversion:"length"},{selector:".field-name-field-overall-width .field-item",conversion:"length"},{selector:".field-name-field-tab-length .field-item",conversion:"length"},{selector:".field-name-field-matrix-height .field-item",conversion:"length"},{selector:".field-name-field-matrix-width .field-item",conversion:"length"},{selector:".field-name-field-sensel-density .field-item",conversion:"volume"},{selector:".field-name-field-row-width .field-item",conversion:"length"},{selector:".field-name-field-row-spacing .field-item",conversion:"length",options:{uDeci:3}},{selector:".field-name-field-column-width .field-item",conversion:"length"},{selector:".field-name-field-column-spacing .field-item",conversion:"length",options:{uDeci:3}},{selector:".field-name-field-outer-matrix-diameter .field-item",conversion:"length"},{selector:".field-name-field-inner-matrix-diameter .field-item",conversion:"length"},{selector:".field-name-field-spoke-width .field-item",conversion:"length"},{selector:".field-name-field-ring-width .field-item",conversion:"length"},{selector:".field-name-field-ring-spacing .field-item",conversion:"length"},{selector:".views-field-field-sensor-length li",conversion:"length"},{selector:"td.views-field-field-sensing-size",conversion:"length",options:{uDeci:3,mDeci:2}},{selector:".views-field-field-max-force li",conversion:"force"},{selector:"td.views-field-field-temperature-range-low",conversion:"temperature"},{selector:"td.views-field-field-temperature-range-high",conversion:"temperature"},{selector:"td.views-field-field-overall-length",conversion:"length"},{selector:"td.views-field-field-overall-width",conversion:"length"},{selector:"td.views-field-field-thickness",conversion:"length",options:{mDeci:3,uDeci:3}},{selector:"td.views-field-field-sensel-density",conversion:"volume"}],a=[{selector:'[name="attributes[field_store_max_sensor_length]"] option',conversion:"length",options:{uDeci:1,uName:'"'}},{selector:'[name="attributes[field_store_max_force]"] option',conversion:"force"}];e.fn.unitConverter=function(i,n,o){function l(){"us"!==m.display&&(h.html(m.uValue+m.uName),m.display="us")}function a(){"metric"!==m.display&&(h.html(m.mValue+m.mName),m.display="metric")}function d(){switch(c()){case"us":l();break;case"metric":a();break;default:var e="unitConverter: Could not understand radio selection";window.console.warn(e)}h.addClass(f)}function c(){var e=s.find("input:checked");return 0===e.length?null:"metricRadio"===e.attr("id")?"metric":"us"}function u(e){return"string"!=typeof e?(window.console.warn("stringNonNumeric: "+e+" is not a string."),e):e.replace(/[^\d.-]/g,"")}function p(){var e=parseFloat(u(h.html()));"us"===m.initialDisplay?(m.uValue=e.toFixed(m.uDeci),m.mValue=m.toM(m.uValue).toFixed(m.mDeci)):(m.mValue=e.toFixed(m.mDeci),m.uValue=m.toU(m.mValue).toFixed(m.uDeci)),d(),s.on("change",d)}var h=this,f="unitConverted",m={conversion:i,display:"",initialDisplay:o||"us",uValue:0,mValue:0};if(void 0===r[m.conversion]){var v=m.conversion+" is not a valid conversion type.";return void window.console.warn(v)}return e.extend(m,r[m.conversion],n),0===t()?void window.console.warn("unitConverter: Could not find input."):""===h.html()||null===this.html()?void window.console.warn("unitConverter: Element has no html."):void(h.hasClass(f)||p())},e(document).on("ready",function(){0!==t()&&(n(s),i(l))}),Drupal.behaviors.storeFieldConverter={attach:function(){0!==t()&&i(a)}}}(jQuery),function(){function e(){for(var e=[],t=window.location.href,i=t.slice(t.indexOf("?")+1).split("&"),n=0;n0){var i="LMutm="+encodeURIComponent(t.join("&"))+"; path=/; domain=.tekscan.com";document.cookie=i}})}(jQuery); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vZGVybml6ci5jdXN0b20uanMiLCJqcXVlcnkuZGxtZW51LmpzIiwianF1ZXJ5LmRldmljZUluZm8uanMiLCJqcXVlcnkubW9iaWxlTWVudS5qcyIsImVxdWFsaXplLmpzIiwic2xpY2suanMiLCJkbG9vbS1jYXJvdXNlbC5qcyIsInNjcmlwdC5qcyIsImpxdWVyeS5yZXNwb25zaXZlVGFibGVzLmpzIiwianF1ZXJ5LnJlc3BvbnNpdmVUYWJzLmpzIiwianF1ZXJ5LnVuaXRDb252ZXJ0ZXIuanMiLCJ1dG0uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBQSxVQUFBLFNBQUEsRUFBQSxFQUFBLEdBd0lBLFFBQUEsR0FBQSxHQUNBLEVBQUEsUUFBQSxFQU9BLFFBQUEsR0FBQSxFQUFBLEdBQ0EsYUFBQSxLQUFBLEVBR0EsUUFBQSxHQUFBLEVBQUEsR0FDQSxVQUFBLEdBQUEsR0FBQSxRQUFBLEdBR0EsUUFBQSxHQUFBLEVBQUEsR0FDQSxJQUFBLEdBQUEsS0FBQSxHQUFBLENBQ0EsR0FBQSxHQUFBLEVBQUEsRUFDQSxLQUFBLEVBQUEsRUFBQSxNQUFBLEVBQUEsS0FBQSxFQUNBLE1BQUEsT0FBQSxFQUFBLEdBQUEsRUFHQSxPQUFBLEVBR0EsUUFBQSxHQUFBLEVBQUEsRUFBQSxHQUNBLElBQUEsR0FBQSxLQUFBLEdBQUEsQ0FDQSxHQUFBLEdBQUEsRUFBQSxFQUFBLEdBQ0EsSUFBQSxJQUFBLEVBRUEsTUFBQSxNQUFBLEVBQUEsRUFBQSxHQUVBLEVBQUEsRUFBQSxZQUNBLEVBQUEsS0FBQSxHQUFBLEdBR0EsRUFHQSxPQUFBLEVBR0EsUUFBQSxHQUFBLEVBQUEsRUFBQSxHQUVBLEdBQUEsR0FBQSxFQUFBLE9BQUEsR0FBQSxjQUFBLEVBQUEsTUFBQSxHQUNBLEdBQUEsRUFBQSxJQUFBLEVBQUEsS0FBQSxFQUFBLEtBQUEsR0FBQSxNQUFBLElBRUEsT0FBQSxHQUFBLEVBQUEsV0FBQSxFQUFBLEVBQUEsYUFDQSxFQUFBLEVBQUEsSUFHQSxHQUFBLEVBQUEsSUFBQSxFQUFBLEtBQUEsRUFBQSxLQUFBLEdBQUEsTUFBQSxLQUNBLEVBQUEsRUFBQSxFQUFBLElBM0xBLEdBWUEsR0F5QkEsRUF5Q0EsRUE5RUEsRUFBQSxRQUVBLEtBRUEsR0FBQSxFQUVBLEVBQUEsRUFBQSxnQkFFQSxFQUFBLFlBQ0EsRUFBQSxFQUFBLGNBQUEsR0FDQSxFQUFBLEVBQUEsTUFPQSxNQUZBLFNBRUEsNEJBQUEsTUFBQSxNQUlBLEVBQUEsa0JBRUEsRUFBQSxFQUFBLE1BQUEsS0FFQSxFQUFBLEVBQUEsY0FBQSxNQUFBLEtBRUEsR0FBQSxJQUFBLDhCQUVBLEtBSUEsS0FFQSxFQUFBLEVBQUEsTUFLQSxFQUFBLFNBQUEsRUFBQSxFQUFBLEVBQUEsR0FFQSxHQUFBLEdBQUEsRUFBQSxFQUFBLEVBQ0EsRUFBQSxFQUFBLGNBQUEsT0FDQSxFQUFBLEVBQUEsS0FDQSxFQUFBLEdBQUEsRUFBQSxjQUFBLE9BRUEsSUFBQSxTQUFBLEVBQUEsSUFDQSxLQUFBLEtBQ0EsRUFBQSxFQUFBLGNBQUEsT0FDQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEdBQUEsR0FBQSxFQUFBLEdBQ0EsRUFBQSxZQUFBLEVBd0JBLE9BcEJBLElBQUEsU0FBQSxlQUFBLEVBQUEsS0FBQSxFQUFBLFlBQUEsS0FBQSxJQUNBLEVBQUEsR0FBQSxHQUNBLEVBQUEsRUFBQSxHQUFBLFdBQUEsRUFDQSxFQUFBLFlBQUEsR0FDQSxJQUNBLEVBQUEsTUFBQSxXQUFBLEdBQ0EsRUFBQSxNQUFBLFNBQUEsU0FDQSxFQUFBLEVBQUEsTUFBQSxTQUNBLEVBQUEsTUFBQSxTQUFBLFNBQ0EsRUFBQSxZQUFBLElBR0EsRUFBQSxFQUFBLEVBQUEsR0FDQSxFQUlBLEVBQUEsV0FBQSxZQUFBLElBSEEsRUFBQSxXQUFBLFlBQUEsR0FDQSxFQUFBLE1BQUEsU0FBQSxLQUtBLEdBR0EsS0FBQSxjQVFBLEdBTkEsRUFBQSxFQUFBLGNBQUEsRUFBQSxFQUFBLEtBQUEsYUFNQSxTQUFBLEVBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxFQUFBLEVBQUEsWUFBQSxVQUFBLEdBQUEsY0FOQSxTQUFBLEVBQUEsR0FDQSxNQUFBLEdBQUEsS0FBQSxFQUFBLElBVUEsU0FBQSxVQUFBLE9BQ0EsU0FBQSxVQUFBLEtBQUEsU0FBQSxHQUVBLEdBQUEsR0FBQSxJQUVBLElBQUEsa0JBQUEsR0FDQSxLQUFBLElBQUEsVUFHQSxJQUFBLEdBQUEsRUFBQSxLQUFBLFVBQUEsR0FDQSxFQUFBLFdBRUEsR0FBQSxlQUFBLEdBQUEsQ0FFQSxHQUFBLEdBQUEsWUFDQSxHQUFBLFVBQUEsRUFBQSxTQUNBLElBQUEsR0FBQSxHQUFBLEdBRUEsRUFBQSxFQUFBLE1BQ0EsRUFDQSxFQUFBLE9BQUEsRUFBQSxLQUFBLFlBRUEsT0FBQSxRQUFBLEtBQUEsRUFDQSxFQUVBLEVBSUEsTUFBQSxHQUFBLE1BQ0EsRUFDQSxFQUFBLE9BQUEsRUFBQSxLQUFBLGFBT0EsT0FBQSxLQTJEQSxFQUFBLE1BQUEsV0FDQSxHQUFBLEVBVUEsT0FSQSxnQkFBQSxJQUFBLEVBQUEsZUFBQSxZQUFBLGVBQ0EsR0FBQSxFQUVBLEdBQUEsV0FBQSxFQUFBLEtBQUEsb0JBQUEsRUFBQSxJQUFBLDJDQUFBLEtBQUEsSUFBQSxTQUFBLEdBQ0EsRUFBQSxJQUFBLEVBQUEsWUFJQSxHQUVBLEVBQUEsY0FBQSxXQUNBLE1BQUEsR0FBQSxrQkFJQSxFQUFBLGVBQUEsV0FDQSxNQUFBLEdBQUEsZUFLQSxFQUFBLElBQUEsV0FDQSxRQUFBLEVBQUEsbUJBQUEsRUFBQSxnQkFBQSxFQUFBLElBQUEsT0FBQSxlQUdBLEVBQUEsVUFBQSxXQUNBLEdBQUEsR0FBQSxFQUFBLGNBQUEsTUFFQSxPQURBLEdBQUEsVUFBQSxVQUNBLEVBQUEsWUFBQSxFQUFBLFdBQUEsZUFBQSxFQUFBLElBQ0EsS0FBQSxHQUFBLEtBQUEsR0FDQSxFQUFBLEVBQUEsS0FDQSxFQUFBLEVBQUEsY0FDQSxFQUFBLEdBQUEsRUFBQSxLQUVBLEVBQUEsTUFBQSxFQUFBLEdBQUEsR0FBQSxPQUFBLEdBc1BBLE9BaFBBLEdBQUEsUUFBQSxTQUFBLEVBQUEsR0FDQSxHQUFBLGdCQUFBLEdBQ0EsSUFBQSxHQUFBLEtBQUEsR0FDQSxFQUFBLEVBQUEsSUFDQSxFQUFBLFFBQUEsRUFBQSxFQUFBLFFBR0EsQ0FJQSxHQUZBLEVBQUEsRUFBQSxjQUVBLEVBQUEsS0FBQSxFQUNBLE1BQUEsRUFHQSxHQUFBLGtCQUFBLEdBQUEsSUFBQSxFQUVBLG1CQUFBLElBQUEsSUFDQSxFQUFBLFdBQUEsS0FBQSxFQUFBLEdBQUEsT0FBQSxHQUVBLEVBQUEsR0FBQSxFQUlBLE1BQUEsSUFJQSxFQUFBLElBQ0EsRUFBQSxFQUFBLEtBRUEsU0FBQSxFQUFBLEdBeUNBLFFBQUEsR0FBQSxFQUFBLEdBQ0EsR0FBQSxHQUFBLEVBQUEsY0FBQSxLQUNBLEVBQUEsRUFBQSxxQkFBQSxRQUFBLElBQUEsRUFBQSxlQUdBLE9BREEsR0FBQSxVQUFBLFdBQUEsRUFBQSxXQUNBLEVBQUEsYUFBQSxFQUFBLFVBQUEsRUFBQSxZQUdBLFFBQUEsS0FDQSxHQUFBLEdBQUEsRUFBQSxRQUNBLE9BQUEsZ0JBQUEsR0FBQSxFQUFBLE1BQUEsS0FBQSxFQUdBLFFBQUEsR0FBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLEVBQUEsR0FPQSxPQU5BLEtBQ0EsS0FDQSxJQUNBLEVBQUEsR0FBQSxFQUNBLEVBQUEsR0FBQSxHQUVBLEVBR0EsUUFBQSxHQUFBLEVBQUEsRUFBQSxHQUlBLEdBSEEsSUFDQSxFQUFBLEdBRUEsRUFDQSxNQUFBLEdBQUEsY0FBQSxFQUVBLEtBQ0EsRUFBQSxFQUFBLEdBRUEsSUFBQSxFQVVBLE9BUEEsR0FEQSxFQUFBLE1BQUEsR0FDQSxFQUFBLE1BQUEsR0FBQSxZQUNBLEVBQUEsS0FBQSxJQUNBLEVBQUEsTUFBQSxHQUFBLEVBQUEsV0FBQSxJQUFBLFlBRUEsRUFBQSxXQUFBLElBR0EsRUFBQSxpQkFBQSxFQUFBLEtBQUEsSUFBQSxFQUFBLE9BQUEsRUFBQSxFQUFBLEtBQUEsWUFBQSxHQUdBLFFBQUEsR0FBQSxFQUFBLEdBSUEsR0FIQSxJQUNBLEVBQUEsR0FFQSxFQUNBLE1BQUEsR0FBQSx3QkFFQSxHQUFBLEdBQUEsRUFBQSxFQUtBLEtBSkEsR0FBQSxHQUFBLEVBQUEsS0FBQSxZQUNBLEVBQUEsRUFDQSxFQUFBLElBQ0EsRUFBQSxFQUFBLE9BQ0EsRUFBQSxFQUFBLElBQ0EsRUFBQSxjQUFBLEVBQUEsR0FFQSxPQUFBLEdBR0EsUUFBQSxHQUFBLEVBQUEsR0FDQSxFQUFBLFFBQ0EsRUFBQSxTQUNBLEVBQUEsV0FBQSxFQUFBLGNBQ0EsRUFBQSxXQUFBLEVBQUEsdUJBQ0EsRUFBQSxLQUFBLEVBQUEsY0FJQSxFQUFBLGNBQUEsU0FBQSxHQUNBLE1BQUEsR0FBQSxZQUdBLEVBQUEsRUFBQSxFQUFBLEdBRkEsRUFBQSxXQUFBLElBS0EsRUFBQSx1QkFBQSxTQUFBLE1BQUEsMkVBR0EsSUFBQSxPQUFBLFFBQUEsV0FBQSxTQUFBLEdBR0EsTUFGQSxHQUFBLFdBQUEsR0FDQSxFQUFBLEtBQUEsY0FBQSxHQUNBLE1BQUEsRUFBQSxPQUVBLGVBQ0EsRUFBQSxFQUFBLE1BR0EsUUFBQSxHQUFBLEdBQ0EsSUFDQSxFQUFBLEVBRUEsSUFBQSxHQUFBLEVBQUEsRUFZQSxRQVZBLEVBQUEsU0FBQSxHQUFBLEVBQUEsU0FDQSxFQUFBLFNBQUEsRUFBQSxFQUNBLHNKQUtBLEdBQ0EsRUFBQSxFQUFBLEdBRUEsRUFySkEsR0FRQSxHQVFBLEVBaEJBLEVBQUEsUUFFQSxFQUFBLEVBQUEsVUFFQSxFQUFBLHFFQUVBLEVBQUEsNkdBSUEsRUFBQSxhQUVBLEVBQUEsRUFFQSxNQUlBLFdBQ0EsSUFDQSxHQUFBLEdBQUEsRUFBQSxjQUFBLElBQ0EsR0FBQSxVQUFBLGNBQ0EsRUFBQSxVQUFBLEdBRUEsRUFBQSxHQUFBLEVBQUEsV0FBQSxRQUFBLFdBQ0EsRUFBQSxjQUFBLElBQ0EsSUFBQSxHQUFBLEVBQUEsd0JBQ0EsT0FDQSxtQkFBQSxHQUFBLFdBQ0EsbUJBQUEsR0FBQSx3QkFDQSxtQkFBQSxHQUFBLGlCQUdBLE1BQUEsR0FDQSxHQUFBLEVBQ0EsR0FBQSxLQXFIQSxJQUFBLElBRUEsU0FBQSxFQUFBLFVBQUEsa0xBRUEsUUFBQSxFQUVBLFFBQUEsRUFBQSxXQUFBLEVBRUEsd0JBQUEsRUFFQSxZQUFBLEVBQUEsZUFBQSxFQUVBLEtBQUEsVUFFQSxhQUFBLEVBRUEsY0FBQSxFQUVBLHVCQUFBLEVBR0EsR0FBQSxNQUFBLEVBRUEsRUFBQSxJQUVBLEtBQUEsR0FFQSxFQUFBLFNBQUEsRUFFQSxFQUFBLFVBQUEsRUFDQSxFQUFBLGFBQUEsRUFDQSxFQUFBLGVBQUEsRUFJQSxFQUFBLFNBQUEsU0FBQSxHQUNBLE1BQUEsSUFBQSxLQUdBLEVBQUEsYUFBQSxFQUdBLEVBQUEsV0FBQSxFQUNBLEVBQUEsU0FBQSxTQUFBLEVBQUEsRUFBQSxHQUNBLE1BQUEsR0FHQSxFQUFBLEVBQUEsRUFBQSxHQUZBLEVBQUEsRUFBQSxRQU9BLEVBQUEsVUFBQSxFQUFBLFVBQUEsUUFBQSxvQkFBQSxTQUVBLEVBQUEsT0FBQSxFQUFBLEtBQUEsS0FBQSxJQUVBLEdBRUEsS0FBQSxLQUFBLFVBRUEsU0FBQSxFQUFBLEVBQUEsR0FBQSxRQUFBLEdBQUEsR0FBQSxNQUFBLHFCQUFBLEVBQUEsS0FBQSxHQUFBLFFBQUEsR0FBQSxHQUFBLE1BQUEsZ0JBQUEsR0FBQSxRQUFBLE1BQUEsUUFBQSxHQUFBLEdBQUEsT0FBQSxHQUFBLFVBQUEsR0FBQSxZQUFBLEdBQUEsaUJBQUEsRUFBQSxRQUFBLEtBQUEsR0FBQSxHQUFBLEVBQUEsT0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxZQUFBLEtBQUEsRUFBQSxFQUFBLEVBQUEsVUFBQSxFQUFBLFVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsSUFBQSxJQUFBLElBQUEsS0FBQSxFQUFBLEVBQUEsUUFBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsUUFBQSxHQUFBLEdBQUEsSUFBQSxHQUFBLEVBQUEsRUFBQSxjQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsR0FBQSxJQUFBLEVBQUEsT0FBQSxFQUFBLG1CQUFBLEtBQUEsR0FBQSxDQUFBLE9BQUEsR0FBQSxFQUFBLFdBQUEsRUFBQSxZQUFBLElBQUEsR0FBQSxLQUFBLEdBQUEsS0FBQSxHQUFBLEdBQUEsRUFBQSxHQUFBLGVBQUEsSUFBQSxFQUFBLEdBQUEsR0FBQSxVQUFBLEdBQUEsR0FBQSxHQUFBLEVBQUEsYUFBQSxFQUFBLEVBQUEsY0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsRUFBQSxFQUFBLE9BQUEsVUFBQSxFQUFBLEVBQUEsS0FBQSxHQUFBLEVBQUEsSUFBQSxFQUFBLEVBQUEsS0FBQSxHQUFBLEVBQUEsTUFBQSxFQUFBLE9BQUEsSUFBQSxFQUFBLFFBQUEsRUFBQSxPQUFBLEVBQUEsbUJBQUEsV0FBQSxFQUFBLEtBQUEsS0FBQSxJQUFBLEVBQUEsT0FBQSxFQUFBLEVBQUEsR0FBQSxPQUFBLElBQUEsR0FBQSxJQUFBLEVBQUEsSUFBQSxFQUFBLGFBQUEsRUFBQSxFQUFBLEtBQUEsR0FBQSxFQUFBLEVBQUEsSUFBQSxFQUFBLEdBQUEsS0FBQSxJQUFBLFFBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsRUFBQSxHQUFBLElBQUEsRUFBQSxHQUFBLEVBQUEsS0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsS0FBQSxJQUFBLEVBQUEsRUFBQSxJQUFBLEVBQUEsT0FBQSxLQUFBLElBQUEsRUFBQSxHQUFBLEdBQUEsRUFBQSxRQUFBLEtBQUEsS0FBQSxRQUFBLEtBQUEsR0FBQSxHQUFBLENBQUEsT0FBQSxHQUFBLFFBQUEsS0FBQSxFQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxnQkFBQSxFQUFBLEVBQUEsV0FBQSxFQUFBLEVBQUEscUJBQUEsVUFBQSxHQUFBLEtBQUEsU0FBQSxLQUFBLEVBQUEsRUFBQSxFQUFBLGlCQUFBLEdBQUEsTUFBQSxFQUFBLEtBQUEsRUFBQSxjQUFBLFlBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxXQUFBLEVBQUEsRUFBQSxPQUFBLGtCQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsSUFBQSxFQUFBLGNBQUEsRUFBQSxFQUFBLEVBQUEsU0FBQSxFQUFBLFNBQUEsTUFBQSxFQUFBLEVBQUEsU0FBQSxFQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQSxNQUFBLGtCQUFBLEVBQUEsS0FBQSxJQUFBLEtBQUEsS0FBQSxHQUFBLFFBQUEsU0FBQSxFQUFBLEdBQUEsTUFBQSxHQUFBLFNBQUEsRUFBQSxRQUFBLEVBQUEsSUFBQSxHQUFBLEdBQUEsU0FBQSxHQUFBLFFBQUEsR0FBQSxHQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLE1BQUEsS0FBQSxFQUFBLEVBQUEsT0FBQSxFQUFBLEVBQUEsTUFBQSxFQUFBLEVBQUEsT0FBQSxHQUFBLElBQUEsRUFBQSxRQUFBLEVBQUEsU0FBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxJQUFBLEVBQUEsRUFBQSxHQUFBLE1BQUEsTUFBQSxFQUFBLEVBQUEsRUFBQSxZQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLElBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxPQUFBLEdBQUEsUUFBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsR0FBQSxHQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsRUFBQSxZQUFBLEdBQUEsSUFBQSxNQUFBLEtBQUEsTUFBQSxNQUFBLEtBQUEsUUFBQSxFQUFBLFNBQUEsSUFBQSxFQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsSUFBQSxFQUFBLElBQUEsRUFBQSxFQUFBLE1BQUEsS0FBQSxNQUFBLE1BQUEsS0FBQSxLQUFBLEVBQUEsUUFBQSxFQUFBLFFBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxJQUFBLEVBQUEsRUFBQSxLQUFBLEVBQUEsUUFBQSxFQUFBLEVBQUEsRUFBQSxLQUFBLEVBQUEsRUFBQSxLQUFBLEVBQUEsSUFBQSxFQUFBLFdBQUEsRUFBQSxTQUFBLE9BQUEsRUFBQSxJQUFBLE1BQUEsS0FBQSxNQUFBLE1BQUEsS0FBQSxRQUFBLElBQUEsRUFBQSxFQUFBLE9BQUEsRUFBQSxNQUFBLEVBQUEsVUFBQSxFQUFBLElBQUEsRUFBQSxLQUFBLEVBQUEsS0FBQSxXQUFBLElBQUEsR0FBQSxFQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEtBQUEsTUFBQSxRQUFBLEdBQUEsRUFBQSxHQUFBLFFBQUEsR0FBQSxFQUFBLEdBQUEsR0FBQSxHQUFBLEdBQUEsRUFBQSxHQUFBLElBQUEsRUFBQSxXQUFBLEdBQUEsTUFBQSxNQUFBLEtBQUEsVUFBQSxHQUFBLE1BQUEsS0FBQSxHQUFBLE1BQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLE9BQUEsSUFBQSxPQUFBLEtBQUEsRUFBQSxJQUFBLElBQUEsR0FBQSxXQUFBLEdBQUEsR0FBQSxFQUFBLENBQUEsS0FBQSxJQUFBLEdBQUEsRUFBQSxlQUFBLElBQUEsR0FBQSxPQUFBLE1BQUEsRUFBQSxFQUFBLGVBQUEsTUFBQSxNQUFBLElBQUEsRUFBQSxHQUFBLEVBQUEsV0FBQSxHQUFBLE1BQUEsTUFBQSxLQUFBLFVBQUEsR0FBQSxNQUFBLEtBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxTQUFBLEdBQUEsTUFBQSxZQUFBLEdBQUEsTUFBQSxNQUFBLEtBQUEsVUFBQSxJQUFBLEVBQUEsTUFBQSxLQUFBLEdBQUEsTUFBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsU0FBQSxHQUFBLElBQUEsR0FBQSxHQUFBLEVBQUEsSUFBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLE1BQUEsRUFBQSxLQUFBLEVBQUEsRUFBQSxVQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxVQUFBLENBQUEsR0FBQSxFQUFBLEVBQUEsSUFBQSxFQUFBLE9BQUEsR0FBQSxHQUFBLEVBQUEsR0FBQSxHQUFBLEdBQUEsRUFBQSxFQUFBLEtBQUEsUUFBQSxNQUFBLElBQUEsRUFBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsT0FBQSxJQUFBLEVBQUEsR0FBQSxJQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsT0FBQSxJQUFBLEVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxPQUFBLEtBQUEsR0FBQSxFQUFBLEVBQUEsT0FBQSxRQUFBLEtBQUEsR0FBQSxFQUFBLEVBQUEsSUFBQSxFQUFBLFVBQUEsU0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEdBQUEsRUFBQSxVQUFBLFNBQUEsR0FBQSxFQUFBLEtBQUEsSUFBQSxFQUFBLGFBQUEsSUFBQSxNQUFBLEVBQUEsWUFBQSxFQUFBLG1CQUFBLEVBQUEsV0FBQSxVQUFBLEVBQUEsaUJBQUEsbUJBQUEsRUFBQSxXQUFBLEVBQUEsb0JBQUEsbUJBQUEsRUFBQSxHQUFBLEVBQUEsV0FBQSxZQUFBLElBQUEsRUFBQSxRQUFBLElBQUEsRUFBQSxRQUFBLGFBQUEsRUFBQSxFQUFBLFFBQUEsU0FBQSxTQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxHQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxjQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsWUFBQSxHQUFBLElBQUEsQ0FBQSxLQUFBLElBQUEsR0FBQSxFQUFBLGFBQUEsRUFBQSxFQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsbUJBQUEsRUFBQSxPQUFBLFlBQUEsR0FBQSxFQUFBLEVBQUEsY0FBQSxFQUFBLEVBQUEsSUFBQSxFQUFBLE9BQUEsRUFBQSxtQkFBQSxPQUFBLEVBQUEsV0FBQSxJQUFBLEVBQUEsRUFBQSxFQUFBLEtBQUEsR0FBQSxFQUFBLEVBQUEsU0FBQSxFQUFBLFdBQUEsYUFBQSxFQUFBLElBQUEsRUFBQSxRQUFBLFVBQUEsU0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsR0FBQSxHQUFBLEdBQUEsRUFBQSxFQUFBLGNBQUEsUUFBQSxFQUFBLEVBQUEsRUFBQSxHQUFBLENBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxJQUFBLGFBQUEsRUFBQSxLQUFBLFVBQUEsS0FBQSxJQUFBLEdBQUEsRUFBQSxhQUFBLEVBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxXQUFBLGFBQUEsRUFBQSxHQUFBLEVBQUEsRUFBQSxNQUFBLEtBQUEsVUFDQSxVQUFBLEtBQUEsV0FBQSxRQUFBLE1BQUEsVUFBQSxNQUFBLEtBQUEsVUFBQSxLQzVkQSxTQUFBLEdBRUEsWUFHQSxJQUFBLEdBQUEsT0FBQSxVQUFBLEVBQUEsRUFBQSxPQUVBLEdBQUEsT0FBQSxTQUFBLEVBQUEsR0FDQSxLQUFBLElBQUEsRUFBQSxHQUNBLEtBQUEsTUFBQSxJQUlBLEVBQUEsT0FBQSxVQUVBLGtCQUFBLFFBQUEsa0JBQUEsU0FBQSxvQkFHQSxhQUFBLFdBQUEsT0FBQSxHQUdBLFlBQUEsV0FBQSxPQUFBLElBR0EsRUFBQSxPQUFBLFdBQ0EsTUFBQSxTQUFBLEdBR0EsS0FBQSxRQUFBLEVBQUEsUUFBQSxLQUFBLEVBQUEsT0FBQSxTQUFBLEdBRUEsS0FBQSxTQUVBLElBQUEsSUFDQSxnQkFBQSxxQkFDQSxXQUFBLGdCQUNBLFlBQUEsaUJBQ0EsVUFBQSxnQkFFQSxHQUNBLGlCQUFBLHNCQUNBLGNBQUEsZ0JBQ0EsWUFBQSxpQkFDQSxhQUFBLGtCQUNBLFdBQUEsZ0JBR0EsTUFBQSxpQkFBQSxFQUFBLEVBQUEsU0FBQSxjQUFBLFVBRUEsS0FBQSxrQkFBQSxFQUFBLEVBQUEsU0FBQSxlQUFBLFVBRUEsS0FBQSxrQkFBQSxFQUFBLGNBQ0EsS0FBQSxtQkFBQSxFQUFBLGNBWUEsSUFBQSxHQUFBLFVBQUEsU0FDQSxHQUFBLFFBQUEsV0FBQSxJQUFBLEtBQUEsRUFBQSxRQUFBLFdBQUEsS0FBQSxFQUFBLFFBQUEsYUFDQSxLQUFBLG1CQUFBLEVBQ0EsS0FBQSxvQkFBQSxHQUtBLEtBQUEsZUFFQSxRQUFBLFdBQ0EsS0FBQSxNQUFBLEVBQ0EsS0FBQSxTQUFBLEtBQUEsSUFBQSxTQUFBLGVBQ0EsS0FBQSxNQUFBLEtBQUEsSUFBQSxTQUFBLGNBQ0EsS0FBQSxXQUFBLEtBQUEsTUFBQSxLQUFBLG9CQUNBLEtBQUEsSUFBQSxLQUFBLGlCQUFBLFFBQUEsaURBQ0EsS0FBQSxNQUFBLEtBQUEsTUFBQSxLQUFBLGVBRUEsWUFBQSxXQUVBLEdBQUEsR0FBQSxJQUVBLE1BQUEsU0FBQSxHQUFBLGVBQUEsV0FRQSxNQU5BLEdBQUEsS0FDQSxFQUFBLGFBR0EsRUFBQSxhQUVBLElBSUEsS0FBQSxXQUFBLEdBQUEsZUFBQSxTQUFBLEdBRUEsRUFBQSxpQkFFQSxJQUFBLEdBQUEsRUFBQSxNQUNBLEVBQUEsRUFBQSxTQUFBLGdCQUVBLElBQUEsRUFBQSxPQUFBLEVBQUEsQ0FFQSxHQUFBLEdBQUEsRUFBQSxRQUFBLElBQUEsVUFBQSxHQUFBLFlBQUEsRUFBQSxPQUNBLEVBQUEsV0FDQSxFQUFBLE1BQUEsSUFBQSxFQUFBLGtCQUFBLFlBQUEsRUFBQSxRQUFBLGlCQUFBLFVBQUEsU0FBQSxjQUNBLEVBQUEsU0FBQSxrQkFBQSxRQUFBLHlCQUFBLFlBQUEsa0JBQUEsU0FBQSxjQUNBLEVBQUEsU0FnQkEsT0FiQSxZQUFBLFdBQ0EsRUFBQSxTQUFBLEVBQUEsUUFBQSxpQkFBQSxTQUNBLEVBQUEsTUFBQSxTQUFBLEVBQUEsUUFBQSxpQkFBQSxVQUNBLEVBQUEsa0JBQ0EsRUFBQSxNQUFBLEdBQUEsRUFBQSxpQkFBQSxHQUdBLEVBQUEsT0FHQSxFQUFBLFFBQUEsYUFBQSxFQUFBLEVBQUEsU0FBQSxXQUFBLFdBR0EsRUFJQSxFQUFBLFFBQUEsWUFBQSxFQUFBLEtBS0EsS0FBQSxNQUFBLEdBQUEsZUFBQSxXQUVBLEdBQUEsR0FBQSxFQUFBLE1BQ0EsRUFBQSxFQUFBLFFBQUEsdUJBQ0EsRUFBQSxFQUFBLFNBRUEsRUFBQSxFQUFBLFFBQUEsWUFBQSxFQUFBLE9BRUEsRUFBQSxXQUNBLEVBQUEsTUFBQSxJQUFBLEVBQUEsa0JBQUEsWUFBQSxFQUFBLFFBQUEsaUJBQUEsU0FDQSxFQUFBLFNBc0JBLE9BbkJBLFlBQUEsV0FDQSxFQUFBLFNBQUEsRUFBQSxRQUFBLGlCQUFBLFVBQ0EsRUFBQSxNQUFBLFNBQUEsRUFBQSxRQUFBLGlCQUFBLFNBQ0EsRUFBQSxrQkFDQSxFQUFBLE1BQUEsR0FBQSxFQUFBLGlCQUFBLEdBR0EsRUFBQSxPQUdBLEVBQUEsWUFBQSxpQkFFQSxJQUFBLEdBQUEsRUFBQSxRQUFBLG9CQUNBLEdBQUEsR0FBQSxPQUNBLEVBQUEsU0FBQSxrQkFFQSxFQUFBLFlBQUEsaUJBR0EsS0FLQSxVQUFBLFdBQ0EsS0FBQSxNQUNBLEtBQUEsY0FHQSxXQUFBLFdBQ0EsR0FBQSxHQUFBLEtBQ0EsRUFBQSxXQUNBLEVBQUEsTUFBQSxJQUFBLEVBQUEsbUJBQ0EsRUFBQSxhQUdBLE1BQUEsTUFBQSxZQUFBLGVBQ0EsS0FBQSxNQUFBLFNBQUEsa0JBQ0EsS0FBQSxTQUFBLFlBQUEsYUFFQSxLQUFBLG1CQUNBLEtBQUEsTUFBQSxHQUFBLEtBQUEsa0JBQUEsR0FHQSxFQUFBLE9BR0EsS0FBQSxNQUFBLEdBRUEsU0FBQSxXQUNBLEtBQUEsTUFDQSxLQUFBLGFBR0EsVUFBQSxXQUNBLEdBQUEsR0FBQSxJQUVBLEdBQUEsSUFBQSxTQUFBLEdBQUEsZUFBQSxXQUNBLEVBQUEsZUFFQSxLQUFBLE1BQUEsU0FBQSw4QkFBQSxHQUFBLEtBQUEsa0JBQUEsV0FDQSxFQUFBLE1BQUEsWUFBQSxvQkFFQSxLQUFBLFNBQUEsU0FBQSxhQUNBLEtBQUEsTUFBQSxHQUdBLFdBQUEsV0FDQSxLQUFBLE1BQUEsWUFBQSxjQUNBLEtBQUEsV0FBQSxZQUFBLDhCQUlBLElBQUEsR0FBQSxTQUFBLEdBQ0EsT0FBQSxTQUNBLE9BQUEsUUFBQSxNQUFBLEdBSUEsR0FBQSxHQUFBLE9BQUEsU0FBQSxHQUNBLEdBQUEsZ0JBQUEsR0FBQSxDQUNBLEdBQUEsR0FBQSxNQUFBLFVBQUEsTUFBQSxLQUFBLFVBQUEsRUFDQSxNQUFBLEtBQUEsV0FDQSxHQUFBLEdBQUEsRUFBQSxLQUFBLEtBQUEsU0FDQSxPQUFBLEdBS0EsRUFBQSxXQUFBLEVBQUEsS0FBQSxNQUFBLEVBQUEsT0FBQSxPQUlBLEdBQUEsR0FBQSxNQUFBLEVBQUEsT0FIQSxHQUFBLG1CQUFBLEVBQUEsNkJBTEEsR0FBQSxvRkFDQSxFQUFBLFdBV0EsTUFBQSxLQUFBLFdBQ0EsR0FBQSxHQUFBLEVBQUEsS0FBQSxLQUFBLFNBQ0EsR0FDQSxFQUFBLFFBR0EsRUFBQSxFQUFBLEtBQUEsS0FBQSxTQUFBLEdBQUEsR0FBQSxPQUFBLEVBQUEsUUFJQSxPQUFBLFFBR0EsUUN2UUEsU0FBQSxHQUdBLFFBQUEsS0FDQSxHQUFBLEdBQUEsT0FBQSxFQUFBLE9BS0EsT0FKQSxjQUFBLFVBQ0EsRUFBQSxTQUNBLEVBQUEsU0FBQSxpQkFBQSxTQUFBLE9BRUEsTUFBQSxFQUFBLEVBQUEsU0FBQSxPQUFBLEVBQUEsRUFBQSxXQUlBLEdBQUEsS0FDQSxLQUFBLFVBQUEsT0FBQSxPQUNBLEtBQUEsUUFBQSxPQUFBLE9BQ0EsS0FBQSxjQUFBLE9BQUEsTUFDQSxLQUFBLFNBQUEsT0FBQSxNQUNBLEtBQUEsZUFBQSxPQUFBLE1BQ0EsS0FBQSxRQUFBLE9BQUEsTUFDQSxLQUFBLGNBQUEsT0FBQSxNQUNBLEtBQUEsVUFBQSxPQUFBLE1BQ0EsS0FBQSxVQUFBLE9BQUEsR0FHQSxhQUNBLEtBQUEsR0FDQSxNQUFBLEdBQ0EsT0FBQSxHQUNBLGVBTUEsVUFBQSxXQUNBLFFBQUEsSUFDQSxLQUFBLE1BQUEsSUFBQSxNQUNBLEtBQUEsT0FBQSxJQUFBLE1BRUEsS0FBQSxHQUFBLEdBQUEsRUFBQSxFQUFBLEtBQUEsWUFBQSxPQUFBLElBQUEsQ0FDQSxHQUFBLEtBQUEsT0FBQSxLQUFBLFlBQUEsR0FBQSxPQUFBLENBQ0EsS0FBQSxLQUFBLEtBQUEsWUFBQSxHQUFBLElBQ0EsT0FHQSxJQUFBLEtBQUEsWUFBQSxTQUNBLE9BQUEsUUFBQSxJQUFBLGlGQUNBLEtBQUEsS0FBQSxTQUtBLEtBQUEsWUFEQSxLQUFBLE1BQUEsS0FBQSxPQUNBLFlBR0EsWUFRQSxlQUFBLFNBQUEsR0FDQSxNQUFBLEdBQUEsUUFBQSxJQUFBLElBQUEsRUFBQSxRQUlBLEtBQUEsWUFBQSxNQUVBLE1BQUEsaUJBTEEsU0FBQSxNQUFBLGlHQVlBLGdCQUFBLFdBRUEsSUFBQSxHQURBLE1BQ0EsRUFBQSxFQUFBLEVBQUEsS0FBQSxZQUFBLE9BQUEsSUFBQSxDQUNBLEdBQUEsR0FBQSxLQUFBLFlBQUEsRUFDQSxHQUFBLEVBQUEsTUFBQSxFQUFBLE9BRUEsTUFBQSxJQVFBLFlBQUEsU0FBQSxHQUNBLEdBQUEsZ0JBQUEsR0FFQSxXQURBLFFBQUEsUUFBQSxLQUFBLDRCQUdBLEtBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxLQUFBLFlBQUEsT0FBQSxJQUNBLEdBQUEsS0FBQSxZQUFBLEdBQUEsT0FBQSxFQUNBLE1BQUEsTUFBQSxZQUFBLEdBQUEsTUFJQSxPQURBLFFBQUEsUUFBQSxJQUFBLDJCQUFBLEVBQUEsK0NBQ0EsTUFRQSxZQUFBLFNBQUEsR0FDQSxHQUFBLGdCQUFBLEdBRUEsV0FEQSxRQUFBLFFBQUEsS0FBQSw0QkFHQSxLQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsS0FBQSxZQUFBLE9BQUEsSUFDQSxHQUFBLEtBQUEsWUFBQSxHQUFBLE9BQUEsRUFDQSxNQUFBLEtBQUEsRUFDQSxHQUdBLEtBQUEsWUFBQSxFQUFBLEdBQUEsT0FBQSxDQUtBLE9BREEsUUFBQSxRQUFBLElBQUEsMkJBQUEsRUFBQSwrQ0FDQSxNQVFBLFNBQUEsU0FBQSxHQUNBLEdBQUEsZ0JBQUEsR0FFQSxXQURBLFFBQUEsUUFBQSxLQUFBLDRCQUdBLElBQUEsSUFDQSxJQUFBLEtBQUEsWUFBQSxHQUVBLE9BQUEsUUFBQSxFQUFBLElBQ0EsTUFFQSxFQUFBLElBQUEsS0FBQSxZQUFBLEdBQ0EsS0FPQSxXQUFBLGVBQUEsRUFHQSxJQUFBLEVBQ0EsR0FBQSxRQUFBLEdBQUEsU0FBQSxXQUNBLGFBQUEsR0FDQSxFQUFBLFdBQUEsV0FDQSxXQUFBLGFBQ0EsT0FHQSxFQUFBLFVBQUEsTUFBQSxXQUNBLFdBQUEsZUFHQSxRQ3RLQSxTQUFBLEdBb0JBLFFBQUEsR0FBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLEdBQUEsUUFDQSxFQUFBLEVBQUEsS0FBQSxhQWlCQSxPQWRBLEdBQUEsS0FBQSxXQUNBLEdBQUEsR0FBQSxFQUFBLE1BQ0EsRUFBQSxFQUFBLFFBQ0EsU0FBQSxrQkFDQSxTQUFBLE1BQ0EsU0FDQSxLQUVBLEdBQUEsU0FBQSxNQUNBLFFBQUEsS0FHQSxFQUFBLEdBRUEsRUFLQSxRQUFBLEdBQUEsR0FDQSxFQUFBLG9EQUFBLEtBQUEsV0FDQSxFQUFBLE9BQ0EsRUFBQSxNQUFBLFFBQUEsU0FBQSx5QkFNQSxRQUFBLEdBQUEsR0FDQSxFQUNBLFdBQUEsTUFDQSxXQUFBLFNBQ0EsU0FBQSxXQUNBLFNBQUEsc0JBQ0EsS0FBQSwrQ0FDQSxLQUFBLE1BQ0EsU0FBQSxjQUNBLFdBQUEsU0FDQSxNQUNBLFFBQUEsWUFDQSxRQUFBLDRDQUNBLFFBQ0EsbUJBQUEsUUFBQSxrQkFBQSxTQUFBLHNCQUdBLE9BQUEsTUFBQSxHQUFBLEtBQUEsRUFBQSxZQUtBLFFBQUEsS0FDQSxHQUFBLEdBQUEsT0FBQSxNQUFBLEdBQUEsWUFBQSxLQUFBLE9BQUEsTUFBQSxHQUdBLEdBQUEsWUFBQSxHQUFBLHVCQUFBLFlBQUEsR0FPQSxFQUFBLFFBQUEsR0FBQSx1QkFBQSxXQUNBLE9BQUEsTUFBQSxHQUFBLFdBQ0EsT0FBQSxNQUFBLEdBQUEsS0FBQSxPQUFBLGVBdEZBLE9BQUEsTUFBQSxPQUFBLFVBRUEsT0FBQSxNQUFBLElBQ0EsS0FBQSxLQUNBLE1BQUEsS0FDQSxXQUFBLEVBR0EsWUFBQSxXQUNBLEtBQUEsV0FBQSxFQUNBLGFBQUEsS0FBQSxPQUNBLEtBQUEsTUFBQSxXQUFBLFdBQ0EsS0FBQSxXQUFBLEdBQ0EsS0FBQSxNQUFBLE9BZ0ZBLEVBQUEsVUFBQSxHQUFBLFFBQUEsV0FFQSxHQUFBLEdBQUEsRUFBQSxrQ0FDQSxHQUFBLDJCQUFBLFNBQ0EsRUFBQSxHQUNBLElBR0EsRUFBQSxvREFBQSxXQUFBLFFBQUEsSUFBQSxTQUFBLFdBQ0EsRUFBQSxvQ0FBQSxRQUFBLHFCQUFBLFlBS0EsUUMxRkEsU0FBQSxHQUVBLEVBQUEsR0FBQSxTQUFBLFNBQUEsR0FDQSxHQUdBLEdBQ0EsRUFKQSxFQUFBLEtBQ0EsR0FBQSxFQUNBLEdBQUEsQ0FhQSxPQVJBLEdBQUEsY0FBQSxJQUNBLEVBQUEsRUFBQSxVQUFBLFNBQ0EsRUFBQSxFQUFBLFdBQUEsRUFDQSxFQUFBLEVBQUEsUUFBQSxHQUVBLEVBQUEsR0FBQSxTQUdBLEVBQUEsV0FBQSxFQUFBLEdBQUEsS0FHQSxFQUFBLEVBQUEsUUFBQSxTQUFBLEVBQUEsU0FBQSxRQUVBLEVBQUEsS0FBQSxXQUVBLEdBQUEsR0FBQSxFQUFBLEVBQUEsTUFBQSxLQUFBLEdBQUEsRUFBQSxNQUFBLFdBQ0EsRUFBQSxDQUVBLEdBQUEsS0FBQSxXQUNBLEdBQ0EsR0FEQSxFQUFBLEVBQUEsS0FFQSxJQUFBLEVBQUEsSUFBQSxFQUFBLElBQ0EsRUFBQSxFQUFBLEtBQ0EsRUFBQSxJQUFBLEVBQUEsS0FHQSxFQUFBLElBQUEsRUFBQSxFQUFBLFVBbEJBLElBc0JBLFFDaERBLFNBQUEsR0FDQSxZQUNBLG1CQUFBLFNBQUEsT0FBQSxJQUNBLFFBQUEsVUFBQSxHQUVBLEVBQUEsU0FHQSxTQUFBLEdBQ0EsWUFDQSxJQUFBLEdBQUEsT0FBQSxTQUVBLEdBQUEsV0FJQSxRQUFBLEdBQUEsRUFBQSxHQUVBLEdBQ0EsR0FBQSxFQURBLEVBQUEsSUE2RkEsSUExRkEsRUFBQSxVQUNBLGVBQUEsRUFDQSxhQUFBLEVBQUEsR0FDQSxRQUFBLEVBQ0EsU0FBQSxLQUNBLFVBQUEsOEVBQ0EsVUFBQSwwRUFDQSxVQUFBLEVBQ0EsY0FBQSxJQUNBLFlBQUEsRUFDQSxjQUFBLE9BQ0EsUUFBQSxPQUNBLGFBQUEsU0FBQSxFQUFBLEdBQ0EsTUFBQSwyQ0FBQSxFQUFBLEdBQUEsYUFFQSxNQUFBLEVBQ0EsVUFBQSxhQUNBLFdBQUEsRUFDQSxPQUFBLFNBQ0EsTUFBQSxFQUNBLGVBQUEsRUFDQSxVQUFBLEVBQ0EsU0FBQSxXQUNBLGVBQUEsS0FDQSxjQUFBLEtBQ0EsT0FBQSxLQUNBLFNBQUEsS0FDQSxjQUFBLEVBQ0Esa0JBQUEsRUFDQSxXQUFBLEtBQ0EsS0FBQSxFQUNBLE1BQUEsTUFDQSxhQUFBLEVBQ0EsZUFBQSxFQUNBLE1BQUEsSUFDQSxPQUFBLEVBQ0EsV0FBQSxFQUNBLGVBQUEsRUFDQSxRQUFBLEVBQ0EsVUFBQSxFQUNBLGdCQUFBLEdBR0EsRUFBQSxVQUNBLFdBQUEsRUFDQSxVQUFBLEVBQ0EsY0FBQSxLQUNBLGFBQUEsRUFDQSxZQUFBLEtBQ0EsVUFBQSxFQUNBLE1BQUEsS0FDQSxVQUFBLEtBQ0EsV0FBQSxLQUNBLFVBQUEsRUFDQSxXQUFBLEtBQ0EsV0FBQSxLQUNBLFdBQUEsS0FDQSxXQUFBLEtBQ0EsWUFBQSxLQUNBLFFBQUEsS0FDQSxTQUFBLEVBQ0EsWUFBQSxFQUNBLFVBQUEsS0FDQSxNQUFBLEtBQ0EsZUFDQSxtQkFBQSxHQUdBLEVBQUEsT0FBQSxFQUFBLEVBQUEsVUFFQSxFQUFBLGlCQUFBLEtBQ0EsRUFBQSxTQUFBLEtBQ0EsRUFBQSxTQUFBLEtBQ0EsRUFBQSxlQUNBLEVBQUEsc0JBQ0EsRUFBQSxnQkFBQSxFQUNBLEVBQUEsUUFBQSxFQUNBLEVBQUEsYUFBQSxLQUNBLEVBQUEsUUFBQSxFQUFBLEdBQ0EsRUFBQSxhQUFBLEtBQ0EsRUFBQSxjQUFBLEtBQ0EsRUFBQSxlQUFBLEtBQ0EsRUFBQSxZQUFBLEVBQ0EsRUFBQSxZQUFBLEtBRUEsRUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLFNBQUEsR0FFQSxFQUFBLGlCQUFBLEVBQUEsUUFDQSxFQUFBLEVBQUEsUUFBQSxZQUFBLEtBRUEsR0FBQSxFQUFBLE9BQUEsR0FBQSxDQUNBLElBQUEsSUFBQSxHQUNBLEVBQUEsZUFBQSxLQUNBLEVBQUEsWUFBQSxLQUFBLEVBQ0EsR0FBQSxZQUNBLEVBQUEsbUJBQUEsRUFDQSxHQUFBLFlBQ0EsRUFBQSxHQUFBLFNBR0EsR0FBQSxZQUFBLEtBQUEsU0FBQSxFQUFBLEdBQ0EsTUFBQSxHQUFBLElBSUEsRUFBQSxTQUFBLEVBQUEsTUFBQSxFQUFBLFNBQUEsR0FDQSxFQUFBLGNBQUEsRUFBQSxNQUFBLEVBQUEsY0FBQSxHQUNBLEVBQUEsWUFBQSxFQUFBLE1BQUEsRUFBQSxZQUFBLEdBQ0EsRUFBQSxjQUFBLEVBQUEsTUFBQSxFQUFBLGNBQUEsR0FDQSxFQUFBLFlBQUEsRUFBQSxNQUFBLEVBQUEsWUFBQSxHQUNBLEVBQUEsYUFBQSxFQUFBLE1BQUEsRUFBQSxhQUFBLEdBQ0EsRUFBQSxZQUFBLEVBQUEsTUFBQSxFQUFBLFlBQUEsR0FDQSxFQUFBLFdBQUEsRUFBQSxNQUFBLEVBQUEsV0FBQSxHQUNBLEVBQUEsaUJBQUEsRUFBQSxNQUFBLEVBQUEsaUJBQUEsR0FFQSxFQUFBLFlBQUEsSUFLQSxFQUFBLFNBQUEsNEJBRUEsRUFBQSxPQWpJQSxHQUFBLEdBQUEsQ0FxSUEsT0FBQSxNQUlBLEVBQUEsVUFBQSxTQUFBLFNBQUEsRUFBQSxFQUFBLEdBRUEsR0FBQSxHQUFBLElBRUEsSUFBQSxpQkFBQSxHQUNBLEVBQUEsRUFDQSxFQUFBLFNBQ0EsSUFBQSxFQUFBLEdBQUEsR0FBQSxFQUFBLFdBQ0EsT0FBQSxDQUdBLEdBQUEsU0FFQSxnQkFBQSxHQUNBLElBQUEsR0FBQSxJQUFBLEVBQUEsUUFBQSxPQUNBLEVBQUEsR0FBQSxTQUFBLEVBQUEsYUFDQSxFQUNBLEVBQUEsR0FBQSxhQUFBLEVBQUEsUUFBQSxHQUFBLElBRUEsRUFBQSxHQUFBLFlBQUEsRUFBQSxRQUFBLEdBQUEsSUFHQSxLQUFBLEVBQ0EsRUFBQSxHQUFBLFVBQUEsRUFBQSxhQUVBLEVBQUEsR0FBQSxTQUFBLEVBQUEsYUFJQSxFQUFBLFFBQUEsRUFBQSxZQUFBLFNBQUEsS0FBQSxRQUFBLE9BRUEsRUFBQSxZQUFBLFNBQUEsS0FBQSxRQUFBLE9BQUEsU0FFQSxFQUFBLFlBQUEsT0FBQSxFQUFBLFNBRUEsRUFBQSxRQUFBLEtBQUEsU0FBQSxFQUFBLEdBQ0EsRUFBQSxHQUFBLEtBQUEsUUFBQSxLQUdBLEVBQUEsYUFBQSxFQUFBLFFBRUEsRUFBQSxVQUlBLEVBQUEsVUFBQSxhQUFBLFNBQUEsRUFBQSxHQUVBLEdBQUEsTUFBQSxFQUFBLElBRUEsR0FBQSxRQUFBLE9BQUEsR0FBQSxFQUFBLFFBQUEsWUFBQSxJQUNBLEdBQUEsR0FFQSxFQUFBLHFCQUFBLEVBQ0EsRUFBQSxRQUFBLFlBQUEsRUFDQSxFQUFBLFlBQUEsU0FDQSxLQUFBLEdBQ0EsRUFBQSxRQUFBLE1BQUEsRUFBQSxRQUFBLE9BQUEsR0FFQSxFQUFBLFlBQUEsU0FDQSxJQUFBLEdBQ0EsRUFBQSxRQUFBLE1BQUEsRUFBQSxRQUFBLE9BQUEsR0FLQSxFQUFBLGtCQUFBLEVBRUEsR0FDQSxVQUFBLEVBQUEsY0FDQSxTQUNBLFVBQUEsSUFFQSxTQUFBLEVBQUEsUUFBQSxNQUNBLE9BQUEsRUFBQSxRQUFBLE9BQ0EsS0FBQSxTQUFBLEdBQ0EsRUFBQSxRQUFBLFlBQUEsR0FDQSxFQUFBLEVBQUEsVUFBQSxhQUNBLEVBQUEsV0FDQSxFQUFBLFlBQUEsSUFBQSxLQUVBLEVBQUEsRUFBQSxVQUFBLGlCQUNBLEVBQUEsTUFDQSxFQUFBLFlBQUEsSUFBQSxLQUdBLFNBQUEsV0FDQSxHQUNBLEVBQUEsV0FPQSxFQUFBLGtCQUdBLEVBQUEsRUFBQSxVQURBLEVBQUEsUUFBQSxZQUFBLEVBQ0EsZUFBQSxFQUFBLGdCQUVBLG1CQUFBLEVBQUEsV0FFQSxFQUFBLFlBQUEsSUFBQSxHQUVBLEdBQ0EsV0FBQSxXQUVBLEVBQUEsb0JBRUEsRUFBQSxRQUNBLEVBQUEsUUFBQSxTQVNBLEVBQUEsVUFBQSxnQkFBQSxTQUFBLEdBRUEsR0FBQSxHQUFBLEtBQ0EsSUFHQSxHQUFBLEVBQUEsZ0JBREEsRUFBQSxRQUFBLFFBQUEsRUFDQSxFQUFBLGNBQUEsSUFBQSxFQUFBLFFBQUEsTUFBQSxNQUFBLEVBQUEsUUFBQSxRQUVBLFdBQUEsRUFBQSxRQUFBLE1BQUEsTUFBQSxFQUFBLFFBQUEsUUFHQSxFQUFBLFFBQUEsUUFBQSxFQUNBLEVBQUEsWUFBQSxJQUFBLEdBRUEsRUFBQSxRQUFBLEdBQUEsR0FBQSxJQUFBLElBS0EsRUFBQSxVQUFBLFNBQUEsV0FFQSxHQUFBLEdBQUEsSUFFQSxHQUFBLGVBQ0EsY0FBQSxFQUFBLGVBR0EsRUFBQSxXQUFBLEVBQUEsUUFBQSxjQUFBLEVBQUEsVUFBQSxJQUNBLEVBQUEsY0FBQSxZQUFBLEVBQUEsaUJBQ0EsRUFBQSxRQUFBLGlCQUtBLEVBQUEsVUFBQSxjQUFBLFdBRUEsR0FBQSxHQUFBLElBRUEsR0FBQSxlQUNBLGNBQUEsRUFBQSxnQkFLQSxFQUFBLFVBQUEsaUJBQUEsV0FFQSxHQUFBLEdBQUEsS0FDQSxFQUFBLE1BQUEsRUFBQSxRQUFBLFNBQUEsRUFBQSxFQUFBLFFBQUEsVUFBQSxXQUFBLElBRUEsR0FBQSxRQUFBLFlBQUEsRUFFQSxJQUFBLEVBQUEsV0FFQSxFQUFBLGFBQUEsSUFBQSxFQUFBLFdBQ0EsSUFDQSxFQUFBLFVBQUEsR0FHQSxFQUFBLGFBQUEsRUFBQSxhQUFBLEVBQUEsUUFBQSxnQkFDQSxNQUFBLEdBQUEsRUFBQSxhQUFBLEVBQUEsYUFBQSxFQUFBLFFBQUEsa0JBSUEsRUFBQSxhQUFBLElBQUEsSUFFQSxFQUFBLFVBQUEsR0FJQSxFQUFBLGFBQUEsRUFBQSxhQUFBLEVBQUEsUUFBQSxnQkFDQSxNQUFBLEdBQUEsRUFBQSxhQUFBLEVBQUEsYUFBQSxFQUFBLFFBQUEsa0JBTUEsRUFBQSxhQUFBLEVBQUEsYUFBQSxFQUFBLFFBQUEsZ0JBQ0EsTUFBQSxHQUFBLEVBQUEsYUFBQSxFQUFBLGFBQUEsRUFBQSxRQUFBLGtCQU1BLEVBQUEsVUFBQSxZQUFBLFdBRUEsR0FBQSxHQUFBLElBRUEsR0FBQSxRQUFBLFVBQUEsR0FBQSxFQUFBLFdBQUEsRUFBQSxRQUFBLGVBRUEsRUFBQSxXQUFBLEVBQUEsRUFBQSxRQUFBLFdBQ0EsRUFBQSxXQUFBLEVBQUEsRUFBQSxRQUFBLFdBRUEsRUFBQSxTQUFBLEtBQUEsRUFBQSxRQUFBLFlBQ0EsRUFBQSxXQUFBLFNBQUEsRUFBQSxRQUFBLGNBR0EsRUFBQSxTQUFBLEtBQUEsRUFBQSxRQUFBLFlBQ0EsRUFBQSxXQUFBLFNBQUEsRUFBQSxRQUFBLGNBR0EsRUFBQSxRQUFBLFlBQUEsR0FDQSxFQUFBLFdBQUEsU0FBQSxvQkFPQSxFQUFBLFVBQUEsVUFBQSxXQUVBLEdBQ0EsR0FBQSxFQURBLEVBQUEsSUFHQSxJQUFBLEVBQUEsUUFBQSxRQUFBLEdBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxhQUFBLENBSUEsSUFGQSxFQUFBLGNBQUEsRUFBQSxRQUFBLFVBQUEsS0FFQSxFQUFBLEVBQUEsR0FBQSxFQUFBLGNBQUEsR0FBQSxFQUNBLEdBQUEsT0FBQSxFQUFBLFFBQUEsYUFBQSxLQUFBLEtBQUEsRUFBQSxHQUFBLE9BR0EsSUFBQSxRQUVBLEVBQUEsTUFBQSxFQUFBLEdBQUEsU0FDQSxFQUFBLFNBRUEsRUFBQSxNQUFBLEtBQUEsTUFBQSxRQUFBLFNBQ0Esa0JBTUEsRUFBQSxVQUFBLFNBQUEsV0FFQSxHQUFBLEdBQUEsSUFFQSxHQUFBLFFBQUEsRUFBQSxRQUFBLFNBQUEsRUFBQSxRQUFBLE1BQ0EsdUJBQUEsU0FDQSxlQUNBLEVBQUEsV0FBQSxFQUFBLFFBQUEsT0FFQSxFQUFBLFFBQUEsS0FBQSxTQUFBLEVBQUEsR0FDQSxFQUFBLEdBQUEsS0FBQSxRQUFBLEtBR0EsRUFBQSxhQUFBLEVBQUEsUUFFQSxFQUFBLFFBQUEsU0FBQSxnQkFFQSxFQUFBLFlBQUEsSUFBQSxFQUFBLFdBQ0EsRUFBQSw4QkFBQSxTQUFBLEVBQUEsU0FDQSxFQUFBLFFBQUEsUUFBQSw4QkFBQSxTQUVBLEVBQUEsTUFBQSxFQUFBLFlBQUEsS0FDQSw2QkFBQSxTQUNBLEVBQUEsWUFBQSxJQUFBLFVBQUEsR0FFQSxFQUFBLFFBQUEsY0FBQSxJQUNBLEVBQUEsUUFBQSxlQUFBLEVBQ0EsRUFBQSxRQUFBLGFBQUEsSUFBQSxJQUNBLEVBQUEsUUFBQSxhQUFBLElBSUEsRUFBQSxpQkFBQSxFQUFBLFNBQUEsSUFBQSxTQUFBLFNBQUEsaUJBRUEsRUFBQSxnQkFFQSxFQUFBLGNBRUEsRUFBQSxZQUVBLEVBQUEsYUFFQSxFQUFBLFFBQUEsaUJBQUEsR0FDQSxFQUFBLE1BQUEsS0FBQSxXQUFBLEdBR0EsRUFBQSxnQkFBQSxnQkFBQSxNQUFBLGFBQUEsS0FBQSxhQUFBLEdBRUEsRUFBQSxRQUFBLGFBQUEsR0FDQSxFQUFBLE1BQUEsU0FBQSxjQUtBLEVBQUEsVUFBQSxnQkFBQSxXQUVBLEdBQ0EsR0FBQSxFQURBLEVBQUEsSUFHQSxJQUFBLEVBQUEsaUJBQUEsWUFBQSxFQUFBLGlCQUNBLFdBQUEsT0FBQSxJQUFBLE9BQUEsRUFBQSxpQkFBQSxXQUFBLENBRUEsRUFBQSxJQUVBLEtBQUEsSUFBQSxHQUFBLFlBQ0EsRUFBQSxZQUFBLGVBQUEsSUFDQSxFQUFBLFFBQUEsUUFBQSxFQUFBLFlBQ0EsS0FDQSxFQUFBLEVBQUEsWUFDQSxHQUtBLFFBQUEsRUFDQSxPQUFBLEVBQUEsaUJBQ0EsSUFBQSxFQUFBLG1CQUNBLEVBQUEsaUJBQ0EsRUFDQSxFQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsUUFDQSxFQUFBLG1CQUNBLElBQ0EsRUFBQSxZQUdBLEVBQUEsaUJBQUEsRUFDQSxFQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsUUFDQSxFQUFBLG1CQUNBLElBQ0EsRUFBQSxXQUdBLE9BQUEsRUFBQSxtQkFDQSxFQUFBLGlCQUFBLEtBQ0EsRUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLFFBQ0EsRUFBQSxrQkFDQSxFQUFBLGFBUUEsRUFBQSxVQUFBLFlBQUEsU0FBQSxHQUVBLEdBQUEsR0FBQSxLQUNBLEVBQUEsRUFBQSxFQUFBLFFBQ0EsRUFBQSxNQUFBLEVBQUEsUUFBQSxTQUFBLEVBQUEsRUFBQSxRQUFBLFVBQUEsV0FBQSxJQUtBLFFBRkEsRUFBQSxHQUFBLE1BQUEsRUFBQSxpQkFFQSxFQUFBLEtBQUEsU0FFQSxJQUFBLFdBQ0EsRUFBQSxXQUFBLEVBQUEsUUFBQSxlQUNBLEVBQUEsYUFBQSxFQUFBLGFBQUEsRUFBQSxRQUNBLGdCQUNBLE1BQUEsR0FBQSxFQUFBLGFBQUEsRUFBQSxhQUFBLEVBQUEsUUFBQSxnQkFFQSxNQUVBLEtBQUEsT0FDQSxFQUFBLFdBQUEsRUFBQSxRQUFBLGVBQ0EsRUFBQSxhQUFBLEVBQUEsYUFBQSxFQUFBLFFBQ0EsZ0JBQ0EsTUFBQSxHQUFBLEVBQUEsYUFBQSxFQUFBLGFBQUEsRUFBQSxRQUFBLGdCQUVBLE1BRUEsS0FBQSxRQUNBLEdBQUEsR0FBQSxFQUFBLEVBQUEsUUFBQSxTQUFBLFFBQUEsRUFBQSxRQUFBLGNBQ0EsR0FBQSxhQUFBLEdBQ0EsTUFBQSxHQUFBLEVBQUEsYUFBQSxFQUFBLE1BRUEsU0FDQSxPQUFBLElBS0EsRUFBQSxVQUFBLFFBQUEsV0FFQSxHQUFBLEdBQUEsSUFFQSxHQUFBLGdCQUVBLEVBQUEsZUFFQSxFQUFBLGdCQUFBLEVBQUEsU0FBQSxTQUNBLEVBQUEsT0FDQSxFQUFBLE1BQUEsU0FFQSxFQUFBLGFBQ0EsRUFBQSxXQUFBLFNBQ0EsRUFBQSxXQUFBLFVBRUEsRUFBQSxRQUFBLFNBQUEsU0FBQSxnQkFDQSxFQUFBLFFBQUEsU0FBQSxTQUVBLEVBQUEsUUFBQSxZQUNBLDBDQUFBLFdBQUEsU0FDQSxFQUFBLFFBQUEsWUFBQSxnQkFDQSxFQUFBLFFBQUEsWUFBQSxxQkFFQSxFQUFBLE1BQUEsSUFBQSxVQUNBLEVBQUEsUUFBQSxJQUFBLFVBQUEsRUFBQSxhQUNBLEVBQUEsVUFBQSxJQUFBLFVBQUEsRUFBQSxjQUlBLEVBQUEsVUFBQSxrQkFBQSxTQUFBLEdBRUEsR0FBQSxHQUFBLEtBQ0EsSUFFQSxHQUFBLEVBQUEsZ0JBQUEsR0FFQSxFQUFBLFFBQUEsUUFBQSxFQUNBLEVBQUEsWUFBQSxJQUFBLEdBRUEsRUFBQSxRQUFBLEdBQUEsR0FBQSxJQUFBLElBS0EsRUFBQSxVQUFBLFVBQUEsU0FBQSxFQUFBLEdBRUEsR0FBQSxHQUFBLElBRUEsR0FBQSxrQkFBQSxHQUVBLEVBQUEsUUFBQSxHQUFBLEdBQUEsS0FDQSxPQUFBLE1BR0EsRUFBQSxRQUFBLEdBQUEsR0FBQSxTQUNBLFFBQUEsR0FDQSxFQUFBLFFBQUEsTUFBQSxFQUFBLFFBQUEsT0FBQSxLQUlBLEVBQUEsZ0JBQUEsR0FFQSxFQUFBLFFBQUEsR0FBQSxHQUFBLEtBQ0EsUUFBQSxFQUNBLE9BQUEsTUFHQSxHQUNBLFdBQUEsV0FFQSxFQUFBLGtCQUFBLEdBRUEsRUFBQSxRQUNBLEVBQUEsUUFBQSxTQU9BLEVBQUEsVUFBQSxhQUFBLFNBQUEsR0FFQSxHQUFBLEdBQUEsSUFFQSxRQUFBLElBRUEsRUFBQSxTQUVBLEVBQUEsWUFBQSxTQUFBLEtBQUEsUUFBQSxPQUFBLFNBRUEsRUFBQSxhQUFBLE9BQUEsR0FBQSxTQUFBLEVBQUEsYUFFQSxFQUFBLFdBTUEsRUFBQSxVQUFBLFdBQUEsV0FFQSxHQUFBLEdBQUEsSUFFQSxPQUFBLEdBQUEsY0FJQSxFQUFBLFVBQUEsWUFBQSxXQUVBLEdBSUEsR0FKQSxFQUFBLEtBQ0EsRUFBQSxFQUNBLEVBQUEsRUFDQSxFQUFBLENBS0EsS0FGQSxFQUFBLEVBQUEsUUFBQSxZQUFBLEVBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxhQUFBLEVBQUEsUUFBQSxlQUFBLEVBQUEsV0FFQSxFQUFBLEdBQ0EsSUFDQSxHQUFBLEVBQUEsUUFBQSxlQUNBLEVBQUEsRUFBQSxFQUFBLFFBQUEsWUFHQSxPQUFBLElBSUEsRUFBQSxVQUFBLFFBQUEsU0FBQSxHQUVBLEdBQ0EsR0FDQSxFQUZBLEVBQUEsS0FHQSxFQUFBLENBcUNBLE9BbkNBLEdBQUEsWUFBQSxFQUNBLEVBQUEsRUFBQSxRQUFBLFFBQUEsY0FFQSxFQUFBLFFBQUEsWUFBQSxHQUNBLEVBQUEsV0FBQSxFQUFBLFFBQUEsZUFDQSxFQUFBLFlBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxhQUFBLEdBQ0EsRUFBQSxFQUFBLEVBQUEsUUFBQSxhQUFBLElBRUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxpQkFBQSxHQUNBLEVBQUEsRUFBQSxRQUFBLGVBQUEsRUFBQSxZQUFBLEVBQUEsV0FBQSxFQUFBLFFBQUEsZUFDQSxFQUFBLFlBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxhQUFBLEVBQUEsV0FBQSxHQUNBLEVBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxhQUFBLEVBQUEsS0FJQSxFQUFBLFdBQUEsRUFBQSxRQUFBLGVBQUEsR0FDQSxFQUFBLEVBQUEsUUFBQSxlQUFBLEVBQUEsWUFBQSxFQUFBLFdBQUEsRUFBQSxRQUFBLGVBQ0EsRUFBQSxZQUFBLEVBQUEsUUFBQSxhQUFBLEVBQUEsV0FBQSxFQUFBLFdBQUEsRUFBQSxRQUFBLGFBQUEsRUFBQSxXQUNBLEVBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxhQUFBLEdBS0EsRUFBQSxRQUFBLGNBQUEsR0FBQSxFQUFBLFFBQUEsWUFBQSxFQUNBLEVBQUEsYUFBQSxFQUFBLFdBQUEsS0FBQSxNQUFBLEVBQUEsUUFBQSxhQUFBLEdBQUEsRUFBQSxXQUNBLEVBQUEsUUFBQSxjQUFBLElBQ0EsRUFBQSxhQUFBLEVBQUEsV0FBQSxLQUFBLE1BQUEsRUFBQSxRQUFBLGFBQUEsSUFJQSxFQURBLEVBQUEsUUFBQSxZQUFBLEVBQ0EsRUFBQSxFQUFBLFdBQUEsR0FBQSxFQUFBLFlBRUEsRUFBQSxFQUFBLEdBQUEsR0FPQSxFQUFBLFVBQUEsS0FBQSxXQUVBLEdBQUEsR0FBQSxJQUVBLEdBQUEsRUFBQSxTQUFBLFNBQUEsdUJBRUEsRUFBQSxFQUFBLFNBQUEsU0FBQSxxQkFDQSxFQUFBLFdBQ0EsRUFBQSxXQUNBLEVBQUEsWUFDQSxFQUFBLGFBQ0EsRUFBQSxtQkFDQSxFQUFBLG1CQUdBLE9BQUEsRUFBQSxRQUFBLFFBQ0EsRUFBQSxRQUFBLE9BQUEsS0FBQSxLQUFBLElBS0EsRUFBQSxVQUFBLGdCQUFBLFdBRUEsR0FBQSxHQUFBLElBRUEsR0FBQSxRQUFBLFVBQUEsR0FBQSxFQUFBLFdBQUEsRUFBQSxRQUFBLGVBQ0EsRUFBQSxXQUFBLEdBQUEsZUFDQSxRQUFBLFlBQ0EsRUFBQSxhQUNBLEVBQUEsV0FBQSxHQUFBLGVBQ0EsUUFBQSxRQUNBLEVBQUEsZUFLQSxFQUFBLFVBQUEsY0FBQSxXQUVBLEdBQUEsR0FBQSxJQUVBLEdBQUEsUUFBQSxRQUFBLEdBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxjQUNBLEVBQUEsS0FBQSxFQUFBLE9BQUEsR0FBQSxlQUNBLFFBQUEsU0FDQSxFQUFBLGFBR0EsRUFBQSxRQUFBLFFBQUEsR0FBQSxFQUFBLFFBQUEsb0JBQUEsR0FBQSxFQUFBLFFBQUEsWUFBQSxHQUNBLEVBQUEsS0FBQSxFQUFBLE9BQ0EsR0FBQSxtQkFBQSxFQUFBLGVBQ0EsR0FBQSxtQkFBQSxFQUFBLFdBS0EsRUFBQSxVQUFBLGlCQUFBLFdBRUEsR0FBQSxHQUFBLElBRUEsR0FBQSxrQkFFQSxFQUFBLGdCQUVBLEVBQUEsTUFBQSxHQUFBLG9DQUNBLE9BQUEsU0FDQSxFQUFBLGNBQ0EsRUFBQSxNQUFBLEdBQUEsbUNBQ0EsT0FBQSxRQUNBLEVBQUEsY0FDQSxFQUFBLE1BQUEsR0FBQSxnQ0FDQSxPQUFBLE9BQ0EsRUFBQSxjQUNBLEVBQUEsTUFBQSxHQUFBLHNDQUNBLE9BQUEsT0FDQSxFQUFBLGNBRUEsRUFBQSxRQUFBLGdCQUFBLEdBQUEsRUFBQSxRQUFBLFlBQUEsSUFDQSxFQUFBLE1BQUEsR0FBQSxtQkFBQSxFQUFBLGVBQ0EsRUFBQSxNQUFBLEdBQUEsbUJBQUEsRUFBQSxXQUdBLEVBQUEsUUFBQSxpQkFBQSxHQUNBLEVBQUEsTUFBQSxHQUFBLGdCQUFBLEVBQUEsWUFHQSxFQUFBLFFBQUEsaUJBQUEsR0FDQSxFQUFBLEVBQUEsUUFBQSxNQUFBLEVBQUEsYUFBQSxHQUFBLGNBQUEsRUFBQSxlQUdBLEVBQUEsUUFBQSxHQUFBLGlDQUFBLEVBQUEsWUFBQSxXQUNBLEVBQUEsa0JBQ0EsRUFBQSxnQkFHQSxFQUFBLFFBQUEsR0FBQSxzQkFBQSxFQUFBLFlBQUEsV0FDQSxFQUFBLFFBQUEsVUFBQSxFQUFBLGNBQ0EsYUFBQSxFQUFBLGFBQ0EsRUFBQSxZQUFBLE9BQUEsV0FBQSxXQUNBLEVBQUEsWUFBQSxFQUFBLFFBQUEsUUFDQSxFQUFBLGtCQUNBLEVBQUEsZUFDQSxPQUlBLEVBQUEsUUFBQSxHQUFBLG9CQUFBLEVBQUEsWUFBQSxFQUFBLGFBQ0EsRUFBQSxVQUFBLEdBQUEscUJBQUEsRUFBQSxZQUFBLEVBQUEsY0FJQSxFQUFBLFVBQUEsT0FBQSxXQUVBLEdBQUEsR0FBQSxJQUVBLEdBQUEsUUFBQSxVQUFBLEdBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxlQUVBLEVBQUEsV0FBQSxPQUNBLEVBQUEsV0FBQSxRQUlBLEVBQUEsUUFBQSxRQUFBLEdBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxjQUVBLEVBQUEsTUFBQSxPQUlBLEVBQUEsUUFBQSxZQUFBLEdBRUEsRUFBQSxZQU1BLEVBQUEsVUFBQSxXQUFBLFNBQUEsR0FFQSxHQUFBLEdBQUEsSUFFQSxNQUFBLEVBQUEsUUFDQSxFQUFBLGFBQ0EsTUFDQSxRQUFBLGNBR0EsS0FBQSxFQUFBLFNBQ0EsRUFBQSxhQUNBLE1BQ0EsUUFBQSxXQU9BLEVBQUEsVUFBQSxTQUFBLFdBS0EsUUFBQSxHQUFBLEdBQ0EsRUFBQSxpQkFBQSxHQUFBLEtBQUEsV0FDQSxHQUFBLEdBQUEsRUFBQSxNQUNBLEVBQUEsRUFBQSxNQUFBLEtBQUEsYUFBQSxLQUFBLEdBQUEsT0FBQSxTQUVBLEdBQ0EsS0FBQSxXQUFBLEVBQUEsU0FBQSxRQUFBLEdBQUEsT0FDQSxLQUFBLFFBQUEsSUFDQSxLQUFBLE1BQUEsR0FDQSxXQUFBLGFBQ0EsWUFBQSxtQkFiQSxHQUNBLEdBQUEsRUFBQSxFQUFBLEVBREEsRUFBQSxJQWlCQSxHQUFBLFFBQUEsY0FBQSxFQUNBLEVBQUEsUUFBQSxZQUFBLEdBQ0EsRUFBQSxFQUFBLGNBQUEsRUFBQSxRQUFBLGFBQUEsRUFBQSxHQUNBLEVBQUEsRUFBQSxFQUFBLFFBQUEsYUFBQSxJQUVBLEVBQUEsS0FBQSxJQUFBLEVBQUEsRUFBQSxjQUFBLEVBQUEsUUFBQSxhQUFBLEVBQUEsSUFDQSxFQUFBLEdBQUEsRUFBQSxRQUFBLGFBQUEsRUFBQSxHQUFBLEVBQUEsZUFHQSxFQUFBLEVBQUEsUUFBQSxTQUFBLEVBQUEsUUFBQSxhQUFBLEVBQUEsYUFBQSxFQUFBLGFBQ0EsRUFBQSxFQUFBLEVBQUEsUUFBQSxhQUNBLEVBQUEsUUFBQSxRQUFBLElBQ0EsRUFBQSxHQUFBLElBQ0EsR0FBQSxFQUFBLFlBQUEsTUFJQSxFQUFBLEVBQUEsUUFBQSxLQUFBLGdCQUFBLE1BQUEsRUFBQSxHQUNBLEVBQUEsR0FFQSxHQUFBLEVBQUEsWUFDQSxFQUFBLEVBQUEsUUFBQSxLQUFBLGdCQUNBLEVBQUEsSUFFQSxFQUFBLGNBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxjQUNBLEVBQUEsRUFBQSxRQUFBLEtBQUEsaUJBQUEsTUFBQSxFQUFBLEVBQUEsUUFBQSxjQUNBLEVBQUEsSUFDQSxJQUFBLEVBQUEsZUFDQSxFQUFBLEVBQUEsUUFBQSxLQUFBLGlCQUFBLE1BQUEsR0FBQSxFQUFBLFFBQUEsY0FDQSxFQUFBLEtBS0EsRUFBQSxVQUFBLFdBQUEsV0FFQSxHQUFBLEdBQUEsSUFFQSxHQUFBLGNBRUEsRUFBQSxZQUFBLEtBQ0EsUUFBQSxJQUdBLEVBQUEsUUFBQSxZQUFBLGlCQUVBLEVBQUEsU0FFQSxnQkFBQSxFQUFBLFFBQUEsVUFDQSxFQUFBLHVCQUtBLEVBQUEsVUFBQSxVQUFBLFNBQUEsR0FFQSxHQUFBLEdBQUEsSUFFQSxRQUFBLEVBQUEsUUFBQSxlQUNBLEVBQUEsUUFBQSxjQUFBLEtBQUEsS0FBQSxFQUFBLEdBR0EsRUFBQSxXQUFBLEVBRUEsRUFBQSxjQUVBLEVBQUEsVUFBQSxLQUVBLEVBQUEsUUFBQSxZQUFBLEdBQUEsRUFBQSxVQUFBLEdBQ0EsRUFBQSxZQUtBLEVBQUEsVUFBQSxvQkFBQSxXQUVBLEdBQ0EsR0FBQSxFQURBLEVBQUEsSUFHQTtFQUFBLEVBQUEsa0JBQUEsT0FFQSxFQUFBLElBQ0EsRUFBQSxFQUFBLGlCQUFBLEVBQUEsU0FBQSxRQUNBLEVBQUEsS0FBQSxNQUFBLEVBQUEsS0FBQSxjQUFBLFlBQUEsaUJBQUEsS0FBQSxXQUNBLEVBQUEsV0FBQSxhQUNBLEVBQUEsMEJBTUEsRUFBQSxVQUFBLFFBQUEsV0FFQSxHQUFBLEdBQUEsS0FDQSxFQUFBLEVBQUEsWUFFQSxHQUFBLFVBRUEsRUFBQSxPQUFBLEVBQUEsRUFBQSxVQUVBLEVBQUEsYUFBQSxFQUNBLEVBQUEsUUFJQSxFQUFBLFVBQUEsT0FBQSxXQUVBLEdBQUEsR0FBQSxJQUVBLEdBQUEsUUFBQSxFQUFBLFlBQUEsU0FBQSxFQUFBLFFBQUEsT0FBQSxTQUNBLGVBRUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxPQUVBLEVBQUEsY0FBQSxFQUFBLFlBQUEsSUFBQSxFQUFBLGVBQ0EsRUFBQSxhQUFBLEVBQUEsYUFBQSxFQUFBLFFBQUEsZ0JBR0EsRUFBQSxXQUVBLEVBQUEsZ0JBRUEsRUFBQSxjQUVBLEVBQUEsZUFFQSxFQUFBLGtCQUVBLEVBQUEsWUFFQSxFQUFBLGFBRUEsRUFBQSxnQkFFQSxFQUFBLFFBQUEsaUJBQUEsR0FDQSxFQUFBLEVBQUEsUUFBQSxNQUFBLEVBQUEsYUFBQSxHQUFBLGNBQUEsRUFBQSxlQUdBLEVBQUEsZ0JBQUEsR0FFQSxFQUFBLGNBRUEsT0FBQSxFQUFBLFFBQUEsVUFDQSxFQUFBLFFBQUEsU0FBQSxLQUFBLEtBQUEsSUFLQSxFQUFBLFVBQUEsWUFBQSxTQUFBLEVBQUEsR0FFQSxHQUFBLEdBQUEsSUFTQSxPQVBBLGlCQUFBLElBQ0EsRUFBQSxFQUNBLEVBQUEsS0FBQSxFQUFBLEVBQUEsRUFBQSxXQUFBLEdBRUEsRUFBQSxLQUFBLElBQUEsRUFBQSxFQUdBLEVBQUEsV0FBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsV0FBQSxHQUNBLEdBR0EsRUFBQSxTQUVBLEVBQUEsWUFBQSxTQUFBLEtBQUEsUUFBQSxPQUFBLEdBQUEsR0FBQSxTQUVBLEVBQUEsUUFBQSxFQUFBLFlBQUEsU0FBQSxLQUFBLFFBQUEsT0FFQSxFQUFBLFlBQUEsU0FBQSxLQUFBLFFBQUEsT0FBQSxTQUVBLEVBQUEsWUFBQSxPQUFBLEVBQUEsU0FFQSxFQUFBLGFBQUEsRUFBQSxZQUVBLEdBQUEsV0FJQSxFQUFBLFVBQUEsT0FBQSxTQUFBLEdBRUEsR0FDQSxHQUFBLEVBREEsRUFBQSxLQUNBLElBRUEsR0FBQSxRQUFBLE9BQUEsSUFDQSxHQUFBLEdBRUEsRUFBQSxRQUFBLEVBQUEsYUFBQSxFQUFBLEtBQUEsTUFDQSxFQUFBLE9BQUEsRUFBQSxhQUFBLEVBQUEsS0FBQSxNQUVBLEVBQUEsRUFBQSxjQUFBLEVBRUEsRUFBQSxxQkFBQSxFQUNBLEVBQUEsWUFBQSxJQUFBLElBRUEsS0FDQSxFQUFBLGtCQUFBLEdBQ0EsRUFBQSxFQUFBLFVBQUEsYUFBQSxFQUFBLEtBQUEsRUFBQSxJQUNBLEVBQUEsWUFBQSxJQUFBLEtBRUEsRUFBQSxFQUFBLFVBQUEsZUFBQSxFQUFBLEtBQUEsRUFBQSxTQUNBLEVBQUEsWUFBQSxJQUFBLE1BTUEsRUFBQSxVQUFBLGNBQUEsV0FFQSxHQUFBLEdBQUEsSUFFQSxHQUFBLFFBQUEsWUFBQSxFQUNBLEVBQUEsUUFBQSxjQUFBLEdBQ0EsRUFBQSxNQUFBLEtBQ0EsUUFBQSxPQUFBLEVBQUEsUUFBQSxpQkFJQSxFQUFBLE1BQUEsT0FBQSxFQUFBLFFBQUEsUUFBQSxhQUFBLEdBQUEsRUFBQSxRQUFBLGNBQ0EsRUFBQSxRQUFBLGNBQUEsR0FDQSxFQUFBLE1BQUEsS0FDQSxRQUFBLEVBQUEsUUFBQSxjQUFBLFVBS0EsRUFBQSxVQUFBLEVBQUEsTUFBQSxRQUNBLEVBQUEsV0FBQSxFQUFBLE1BQUEsU0FHQSxFQUFBLFFBQUEsWUFBQSxHQUNBLEVBQUEsV0FBQSxLQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsUUFBQSxjQUNBLEVBQUEsWUFBQSxNQUFBLEtBQUEsS0FBQSxFQUFBLFdBQUEsRUFBQSxZQUFBLFNBQUEsZ0JBQUEsV0FHQSxFQUFBLFdBQUEsS0FBQSxLQUFBLEVBQUEsV0FDQSxFQUFBLFlBQUEsT0FBQSxLQUFBLEtBQUEsRUFBQSxRQUFBLFFBQUEsYUFBQSxHQUFBLEVBQUEsWUFBQSxTQUFBLGdCQUFBLFNBSUEsSUFBQSxHQUFBLEVBQUEsUUFBQSxRQUFBLFlBQUEsR0FBQSxFQUFBLFFBQUEsUUFBQSxPQUNBLEdBQUEsWUFBQSxTQUFBLGdCQUFBLE1BQUEsRUFBQSxXQUFBLElBSUEsRUFBQSxVQUFBLFFBQUEsV0FFQSxHQUNBLEdBREEsRUFBQSxJQUdBLEdBQUEsUUFBQSxLQUFBLFNBQUEsRUFBQSxHQUNBLEVBQUEsRUFBQSxXQUFBLEVBQUEsR0FDQSxFQUFBLEdBQUEsS0FDQSxTQUFBLFdBQ0EsS0FBQSxFQUNBLElBQUEsRUFDQSxPQUFBLElBQ0EsUUFBQSxNQUlBLEVBQUEsUUFBQSxHQUFBLEVBQUEsY0FBQSxLQUNBLE9BQUEsSUFDQSxRQUFBLEtBS0EsRUFBQSxVQUFBLFlBQUEsV0FFQSxHQUFBLEdBQUEsSUFFQSxHQUFBLGdCQUVBLEVBQUEsUUFBQSxRQUFBLEVBQ0EsRUFBQSxPQUFBLEVBQUEsUUFBQSxFQUFBLGVBRUEsRUFBQSxXQUtBLEVBQUEsVUFBQSxTQUFBLFdBRUEsR0FBQSxHQUFBLEtBQ0EsRUFBQSxTQUFBLEtBQUEsS0FFQSxHQUFBLGFBQUEsRUFBQSxRQUFBLFlBQUEsRUFBQSxNQUFBLE9BRUEsUUFBQSxFQUFBLGFBQ0EsRUFBQSxRQUFBLFNBQUEsa0JBRUEsRUFBQSxRQUFBLFlBQUEsbUJBR0EsU0FBQSxFQUFBLGtCQUNBLFNBQUEsRUFBQSxlQUNBLFNBQUEsRUFBQSxlQUNBLEVBQUEsUUFBQSxVQUFBLElBQ0EsRUFBQSxnQkFBQSxHQUlBLFNBQUEsRUFBQSxhQUNBLEVBQUEsU0FBQSxhQUNBLEVBQUEsY0FBQSxlQUNBLEVBQUEsZUFBQSxjQUNBLFNBQUEsRUFBQSxxQkFBQSxTQUFBLEVBQUEsb0JBQUEsRUFBQSxVQUFBLElBRUEsU0FBQSxFQUFBLGVBQ0EsRUFBQSxTQUFBLGVBQ0EsRUFBQSxjQUFBLGlCQUNBLEVBQUEsZUFBQSxnQkFDQSxTQUFBLEVBQUEscUJBQUEsU0FBQSxFQUFBLGlCQUFBLEVBQUEsVUFBQSxJQUVBLFNBQUEsRUFBQSxrQkFDQSxFQUFBLFNBQUEsa0JBQ0EsRUFBQSxjQUFBLG9CQUNBLEVBQUEsZUFBQSxtQkFDQSxTQUFBLEVBQUEscUJBQUEsU0FBQSxFQUFBLG9CQUFBLEVBQUEsVUFBQSxJQUVBLFNBQUEsRUFBQSxjQUNBLEVBQUEsU0FBQSxjQUNBLEVBQUEsY0FBQSxnQkFDQSxFQUFBLGVBQUEsZUFDQSxTQUFBLEVBQUEsY0FBQSxFQUFBLFVBQUEsSUFFQSxTQUFBLEVBQUEsV0FBQSxFQUFBLFlBQUEsSUFDQSxFQUFBLFNBQUEsWUFDQSxFQUFBLGNBQUEsWUFDQSxFQUFBLGVBQUEsY0FFQSxFQUFBLGtCQUFBLE9BQUEsRUFBQSxVQUFBLEVBQUEsWUFBQSxHQUtBLEVBQUEsVUFBQSxnQkFBQSxTQUFBLEdBRUEsR0FDQSxHQUFBLEVBQUEsRUFBQSxFQURBLEVBQUEsSUFHQSxHQUFBLFFBQUEsS0FBQSxnQkFBQSxZQUFBLGdCQUFBLFlBQUEsZ0JBQ0EsRUFBQSxFQUFBLFFBQUEsS0FBQSxnQkFFQSxFQUFBLFFBQUEsY0FBQSxHQUVBLEVBQUEsS0FBQSxNQUFBLEVBQUEsUUFBQSxhQUFBLEdBRUEsRUFBQSxRQUFBLFlBQUEsSUFFQSxHQUFBLEdBQUEsR0FBQSxFQUFBLFdBQUEsRUFBQSxFQUNBLEVBQUEsUUFBQSxNQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsR0FBQSxTQUFBLGlCQUVBLEVBQUEsRUFBQSxRQUFBLGFBQUEsRUFDQSxFQUFBLE1BQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsU0FBQSxpQkFHQSxJQUFBLEVBQ0EsRUFBQSxHQUFBLEVBQUEsT0FBQSxFQUFBLEVBQUEsUUFBQSxjQUFBLFNBQUEsZ0JBQ0EsSUFBQSxFQUFBLFdBQUEsR0FDQSxFQUFBLEdBQUEsRUFBQSxRQUFBLGNBQUEsU0FBQSxpQkFLQSxFQUFBLFFBQUEsR0FBQSxHQUFBLFNBQUEsaUJBSUEsR0FBQSxHQUFBLEdBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxhQUNBLEVBQUEsUUFBQSxNQUFBLEVBQUEsRUFBQSxFQUFBLFFBQUEsY0FBQSxTQUFBLGdCQUNBLEVBQUEsUUFBQSxFQUFBLFFBQUEsYUFDQSxFQUFBLFNBQUEsaUJBRUEsRUFBQSxFQUFBLFdBQUEsRUFBQSxRQUFBLGFBQ0EsRUFBQSxFQUFBLFFBQUEsWUFBQSxFQUFBLEVBQUEsUUFBQSxhQUFBLEVBQUEsRUFDQSxFQUFBLFFBQUEsY0FBQSxFQUFBLFFBQUEsZ0JBQUEsRUFBQSxXQUFBLEVBQUEsRUFBQSxRQUFBLGFBQ0EsRUFBQSxNQUFBLEdBQUEsRUFBQSxRQUFBLGFBQUEsR0FBQSxFQUFBLEdBQUEsU0FBQSxnQkFFQSxFQUFBLE1BQUEsRUFBQSxFQUFBLEVBQUEsUUFBQSxjQUFBLFNBQUEsaUJBTUEsYUFBQSxFQUFBLFFBQUEsVUFDQSxFQUFBLFlBS0EsRUFBQSxVQUFBLGNBQUEsV0FFQSxHQUNBLEdBQUEsRUFBQSxFQURBLEVBQUEsSUFPQSxLQUpBLEVBQUEsUUFBQSxRQUFBLEdBQUEsRUFBQSxRQUFBLFlBQUEsS0FDQSxFQUFBLFFBQUEsWUFBQSxHQUdBLEVBQUEsUUFBQSxZQUFBLEdBQUEsRUFBQSxRQUFBLFFBQUEsSUFFQSxFQUFBLEtBRUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxjQUFBLENBUUEsSUFMQSxFQURBLEVBQUEsUUFBQSxjQUFBLEVBQ0EsRUFBQSxRQUFBLGFBQUEsRUFFQSxFQUFBLFFBQUEsYUFHQSxFQUFBLEVBQUEsV0FBQSxFQUFBLEVBQUEsV0FDQSxFQUFBLEdBQUEsRUFDQSxFQUFBLEVBQUEsRUFDQSxFQUFBLEVBQUEsUUFBQSxJQUFBLE9BQUEsR0FBQSxLQUFBLEtBQUEsSUFBQSxVQUNBLEVBQUEsYUFBQSxTQUFBLGVBRUEsS0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsRUFDQSxFQUFBLEVBQ0EsRUFBQSxFQUFBLFFBQUEsSUFBQSxPQUFBLEdBQUEsS0FBQSxLQUFBLElBQUEsU0FDQSxFQUFBLGFBQUEsU0FBQSxlQUVBLEdBQUEsWUFBQSxLQUFBLGlCQUFBLEtBQUEsUUFBQSxLQUFBLFdBQ0EsRUFBQSxNQUFBLEtBQUEsS0FBQSxRQVNBLEVBQUEsVUFBQSxjQUFBLFNBQUEsR0FFQSxHQUFBLEdBQUEsS0FDQSxFQUFBLE1BQUEsRUFBQSxRQUFBLFNBQUEsRUFBQSxFQUFBLFFBQUEsVUFBQSxXQUFBLEtBQ0EsRUFBQSxTQUFBLEVBQUEsRUFBQSxRQUFBLFNBQUEsS0FBQSxTQUdBLElBRkEsSUFBQSxFQUFBLEtBRUEsRUFBQSxZQUFBLEVBQUEsUUFBQSxnQkFHQSxFQUFBLGFBQUEsR0FFQSxNQUFBLEdBQUEsQ0FDQSxHQUFBLEVBQUEsWUFBQSxFQUFBLFFBQUEsYUFDQSxNQUVBLEdBQUEsYUFBQSxLQUlBLEVBQUEsVUFBQSxhQUFBLFNBQUEsR0FFQSxHQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxLQUNBLEVBQUEsSUFFQSxPQUFBLEdBQUEsYUFBQSxHQUFBLEVBQUEsUUFBQSxrQkFBQSxHQUNBLEdBR0EsRUFBQSxFQUNBLEVBQUEsRUFBQSxRQUFBLEdBQ0EsRUFBQSxFQUFBLFFBQUEsRUFBQSxjQUVBLEVBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxpQkFBQSxFQUFBLEVBQUEsUUFBQSxlQUFBLEVBRUEsRUFBQSxZQUFBLE9BQUEsRUFBQSxVQUFBLEVBQUEsRUFBQSxVQUVBLEVBQUEsUUFBQSxZQUFBLEdBQUEsRUFBQSxRQUFBLGNBQUEsSUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLFdBQUEsRUFBQSxRQUFBLGFBQUEsSUFDQSxFQUFBLFFBQUEsUUFBQSxJQUNBLEVBQUEsRUFBQSxhQUNBLEVBQUEsYUFBQSxFQUFBLFdBQ0EsRUFBQSxVQUFBLE9BR0EsR0FDQSxFQUFBLFFBQUEsWUFBQSxHQUFBLEVBQUEsUUFBQSxjQUFBLElBQUEsRUFBQSxHQUFBLEVBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxpQkFDQSxFQUFBLFFBQUEsUUFBQSxJQUNBLEVBQUEsRUFBQSxhQUNBLEVBQUEsYUFBQSxFQUFBLFdBQ0EsRUFBQSxVQUFBLE9BR0EsSUFHQSxFQUFBLFFBQUEsWUFBQSxHQUNBLGNBQUEsRUFBQSxlQUtBLEVBRkEsRUFBQSxFQUNBLEVBQUEsV0FBQSxFQUFBLFFBQUEsaUJBQUEsRUFDQSxFQUFBLFdBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxlQUVBLEVBQUEsV0FBQSxFQUFBLFFBQUEsZUFFQSxFQUFBLEVBQUEsV0FBQSxFQUNBLEVBRUEsRUFHQSxFQUFBLFdBQUEsRUFFQSxPQUFBLEVBQUEsUUFBQSxnQkFBQSxJQUFBLEVBQUEsY0FDQSxFQUFBLFFBQUEsZUFBQSxLQUFBLEtBQUEsRUFBQSxFQUFBLGFBQUEsR0FHQSxFQUFBLGFBQUEsRUFFQSxFQUFBLGdCQUFBLEVBQUEsY0FFQSxFQUFBLGFBQ0EsRUFBQSxlQUVBLEVBQUEsUUFBQSxRQUFBLEdBQ0EsRUFBQSxVQUFBLEVBQUEsV0FDQSxFQUFBLFVBQUEsTUFFQSxPQUdBLEdBQUEsYUFBQSxFQUFBLFdBQ0EsRUFBQSxVQUFBLFFBS0EsRUFBQSxVQUFBLFVBQUEsV0FFQSxHQUFBLEdBQUEsSUFFQSxHQUFBLFFBQUEsVUFBQSxHQUFBLEVBQUEsV0FBQSxFQUFBLFFBQUEsZUFFQSxFQUFBLFdBQUEsT0FDQSxFQUFBLFdBQUEsUUFJQSxFQUFBLFFBQUEsUUFBQSxHQUFBLEVBQUEsV0FBQSxFQUFBLFFBQUEsY0FFQSxFQUFBLE1BQUEsT0FJQSxFQUFBLFFBQUEsU0FBQSxrQkFJQSxFQUFBLFVBQUEsZUFBQSxXQUVBLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLElBV0EsT0FUQSxHQUFBLEVBQUEsWUFBQSxPQUFBLEVBQUEsWUFBQSxLQUNBLEVBQUEsRUFBQSxZQUFBLE9BQUEsRUFBQSxZQUFBLEtBQ0EsRUFBQSxLQUFBLE1BQUEsRUFBQSxHQUVBLEVBQUEsS0FBQSxNQUFBLElBQUEsRUFBQSxLQUFBLElBQ0EsRUFBQSxJQUNBLEVBQUEsSUFBQSxLQUFBLElBQUEsSUFHQSxJQUFBLEdBQUEsR0FBQSxFQUNBLE9BRUEsS0FBQSxHQUFBLEdBQUEsSUFDQSxPQUVBLEdBQUEsS0FBQSxLQUFBLEVBQ0EsUUFHQSxZQUlBLEVBQUEsVUFBQSxTQUFBLFNBQUEsR0FFQSxHQUFBLEdBQUEsS0FDQSxFQUFBLE1BQUEsRUFBQSxRQUFBLFNBQUEsRUFBQSxFQUFBLFFBQUEsVUFBQSxXQUFBLElBSUEsSUFGQSxFQUFBLFVBQUEsRUFFQSxTQUFBLEVBQUEsWUFBQSxLQUNBLE9BQUEsQ0FHQSxJQUFBLEVBQUEsWUFBQSxhQUFBLEVBQUEsWUFBQSxTQVFBLE9BUEEsRUFBQSxFQUFBLFFBQUEsR0FBQSxjQUFBLFNBQUEsR0FDQSxFQUFBLDJCQUNBLEVBQUEsa0JBQ0EsRUFBQSxpQkFDQSxFQUFBLEVBQUEsUUFBQSxJQUFBLGlCQUdBLEVBQUEsa0JBQ0EsSUFBQSxPQUNBLEVBQUEsYUFBQSxFQUFBLGFBQUEsRUFBQSxRQUFBLGdCQUNBLE1BQUEsR0FBQSxFQUFBLGFBQUEsRUFBQSxhQUFBLEVBQUEsUUFBQSxnQkFDQSxFQUFBLGNBQ0EsTUFFQSxLQUFBLFFBQ0EsRUFBQSxhQUFBLEVBQUEsYUFBQSxFQUFBLFFBQUEsZ0JBQ0EsTUFBQSxHQUFBLEVBQUEsYUFBQSxFQUFBLGFBQUEsRUFBQSxRQUFBLGdCQUNBLEVBQUEsbUJBSUEsR0FBQSxZQUFBLFNBQUEsRUFBQSxZQUFBLE9BQ0EsRUFBQSxhQUFBLEVBQUEsY0FDQSxNQUFBLEdBQUEsRUFBQSxhQUFBLEVBQUEsY0FDQSxFQUFBLGlCQU1BLEVBQUEsVUFBQSxhQUFBLFNBQUEsR0FFQSxHQUFBLEdBQUEsSUFFQSxNQUFBLEVBQUEsUUFBQSxTQUFBLEdBQUEsY0FBQSxXQUFBLEVBQUEsUUFBQSxTQUFBLEdBRUEsRUFBQSxRQUFBLGFBQUEsR0FBQSxFQUFBLFFBQUEsYUFBQSxJQUFBLEVBQUEsY0FBQSxTQVVBLE9BTkEsRUFBQSxZQUFBLFlBQUEsRUFBQSxlQUFBLFNBQUEsRUFBQSxjQUFBLFFBQ0EsRUFBQSxjQUFBLFFBQUEsT0FBQSxFQUVBLEVBQUEsWUFBQSxTQUFBLEVBQUEsVUFBQSxFQUFBLFFBQ0EsZUFFQSxFQUFBLEtBQUEsUUFFQSxJQUFBLFFBQ0EsRUFBQSxXQUFBLEVBQ0EsTUFFQSxLQUFBLE9BQ0EsRUFBQSxVQUFBLEVBQ0EsTUFFQSxLQUFBLE1BQ0EsRUFBQSxTQUFBLEtBT0EsRUFBQSxVQUFBLFVBQUEsU0FBQSxHQUVBLEdBQ0EsR0FBQSxFQUFBLEVBQUEsRUFEQSxFQUFBLElBT0EsT0FKQSxHQUFBLFNBQUEsRUFBQSxjQUFBLEVBQUEsY0FBQSxRQUFBLEtBRUEsRUFBQSxFQUFBLFFBQUEsRUFBQSxlQUVBLEVBQUEsVUFBQSxHQUFBLElBQUEsRUFBQSxRQUNBLEdBR0EsRUFBQSxZQUFBLEtBQUEsU0FBQSxFQUFBLEVBQUEsR0FBQSxNQUFBLEVBQUEsUUFDQSxFQUFBLFlBQUEsS0FBQSxTQUFBLEVBQUEsRUFBQSxHQUFBLE1BQUEsRUFBQSxRQUVBLEVBQUEsWUFBQSxZQUFBLEtBQUEsTUFBQSxLQUFBLEtBQ0EsS0FBQSxJQUFBLEVBQUEsWUFBQSxLQUFBLEVBQUEsWUFBQSxPQUFBLEtBRUEsRUFBQSxFQUFBLGlCQUVBLGFBQUEsR0FJQSxTQUFBLEVBQUEsZUFBQSxFQUFBLFlBQUEsWUFBQSxHQUNBLEVBQUEsaUJBR0EsRUFBQSxFQUFBLFlBQUEsS0FBQSxFQUFBLFlBQUEsT0FBQSxFQUFBLEdBR0EsRUFBQSxVQURBLEVBQUEsUUFBQSxZQUFBLEVBQ0EsRUFBQSxFQUFBLFlBQUEsWUFBQSxFQUVBLEVBQUEsRUFBQSxZQUNBLGFBQUEsRUFBQSxNQUFBLFNBQUEsRUFBQSxXQUFBLEVBR0EsRUFBQSxRQUFBLFFBQUEsR0FBQSxFQUFBLFFBQUEsYUFBQSxHQUNBLEVBR0EsRUFBQSxhQUFBLEdBQ0EsRUFBQSxVQUFBLE1BQ0EsT0FHQSxHQUFBLE9BQUEsRUFBQSxZQTFCQSxTQThCQSxFQUFBLFVBQUEsV0FBQSxTQUFBLEdBRUEsR0FDQSxHQURBLEVBQUEsSUFHQSxPQUFBLEtBQUEsRUFBQSxZQUFBLGFBQUEsRUFBQSxZQUFBLEVBQUEsUUFBQSxjQUNBLEVBQUEsZ0JBQ0EsSUFHQSxTQUFBLEVBQUEsZUFBQSxTQUFBLEVBQUEsY0FBQSxVQUNBLEVBQUEsRUFBQSxjQUFBLFFBQUEsSUFHQSxFQUFBLFlBQUEsT0FBQSxFQUFBLFlBQUEsS0FBQSxTQUFBLEVBQUEsRUFBQSxNQUFBLEVBQUEsUUFDQSxFQUFBLFlBQUEsT0FBQSxFQUFBLFlBQUEsS0FBQSxTQUFBLEVBQUEsRUFBQSxNQUFBLEVBQUEsYUFFQSxFQUFBLFVBQUEsS0FJQSxFQUFBLFVBQUEsZUFBQSxXQUVBLEdBQUEsR0FBQSxJQUVBLFFBQUEsRUFBQSxlQUVBLEVBQUEsU0FFQSxFQUFBLFlBQUEsU0FBQSxLQUFBLFFBQUEsT0FBQSxTQUVBLEVBQUEsYUFBQSxTQUFBLEVBQUEsYUFFQSxFQUFBLFdBTUEsRUFBQSxVQUFBLE9BQUEsV0FFQSxHQUFBLEdBQUEsSUFFQSxHQUFBLGdCQUFBLEVBQUEsU0FBQSxTQUNBLEVBQUEsT0FDQSxFQUFBLE1BQUEsU0FFQSxFQUFBLGFBQ0EsRUFBQSxXQUFBLFNBQ0EsRUFBQSxXQUFBLFVBRUEsRUFBQSxRQUFBLFlBQ0EsMENBQUEsV0FBQSxVQUlBLEVBQUEsVUFBQSxhQUFBLFdBRUEsR0FBQSxHQUFBLElBRUEsR0FBQSxRQUFBLFVBQUEsR0FBQSxFQUFBLFFBQUEsWUFDQSxHQUFBLEVBQUEsV0FBQSxFQUFBLFFBQUEsZUFDQSxFQUFBLFdBQUEsWUFBQSxrQkFDQSxFQUFBLFdBQUEsWUFBQSxrQkFDQSxJQUFBLEVBQUEsY0FDQSxFQUFBLFdBQUEsU0FBQSxrQkFDQSxFQUFBLFdBQUEsWUFBQSxtQkFDQSxFQUFBLGNBQUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxlQUNBLEVBQUEsV0FBQSxTQUFBLGtCQUNBLEVBQUEsV0FBQSxZQUFBLHFCQU1BLEVBQUEsVUFBQSxXQUFBLFdBRUEsR0FBQSxHQUFBLElBRUEsUUFBQSxFQUFBLFFBRUEsRUFBQSxNQUFBLEtBQUEsTUFBQSxZQUFBLGdCQUNBLEVBQUEsTUFBQSxLQUFBLE1BQUEsR0FBQSxLQUFBLE1BQUEsRUFBQSxhQUFBLEVBQUEsUUFBQSxpQkFBQSxTQUFBLGtCQU1BLEVBQUEsR0FBQSxNQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsSUFDQSxPQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsR0FFQSxFQUFBLE1BQUEsR0FBQSxHQUFBLEVBQUEsTUFLQSxFQUFBLEdBQUEsU0FBQSxTQUFBLEVBQUEsRUFBQSxHQUNBLEdBQUEsR0FBQSxJQUNBLE9BQUEsR0FBQSxLQUFBLFNBQUEsRUFBQSxHQUVBLEVBQUEsTUFBQSxTQUFBLEVBQUEsRUFBQSxNQUtBLEVBQUEsR0FBQSxrQkFBQSxXQUNBLEdBQUEsR0FBQSxJQUNBLE9BQUEsR0FBQSxJQUFBLEdBQUEsTUFBQSxjQUdBLEVBQUEsR0FBQSxZQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsSUFDQSxPQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsR0FFQSxFQUFBLE1BQUEsYUFBQSxNQUtBLEVBQUEsR0FBQSxVQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsSUFDQSxPQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsR0FFQSxHQUFBLEdBQUEsTUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEVBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxJQUNBLE9BQUEsR0FBQSxFQUFBLFVBQUEsR0FDQSxFQUFBLE1BQUEsYUFBQSxNQUtBLEVBQUEsR0FBQSxVQUFBLFdBQ0EsR0FBQSxHQUFBLElBQ0EsT0FBQSxHQUFBLEtBQUEsU0FBQSxFQUFBLEdBRUEsRUFBQSxNQUFBLGFBQ0EsTUFDQSxRQUFBLGFBT0EsRUFBQSxHQUFBLFdBQUEsV0FDQSxHQUFBLEdBQUEsSUFDQSxPQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsR0FFQSxFQUFBLE1BQUEsZ0JBQ0EsRUFBQSxNQUFBLFFBQUEsS0FLQSxFQUFBLEdBQUEsVUFBQSxXQUNBLEdBQUEsR0FBQSxJQUNBLE9BQUEsR0FBQSxLQUFBLFNBQUEsRUFBQSxHQUVBLEVBQUEsTUFBQSxRQUFBLEVBQ0EsRUFBQSxNQUFBLGNBS0EsRUFBQSxHQUFBLFVBQUEsV0FDQSxHQUFBLEdBQUEsSUFDQSxPQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsR0FFQSxFQUFBLE1BQUEsYUFDQSxNQUNBLFFBQUEsaUJBT0EsRUFBQSxHQUFBLFlBQUEsU0FBQSxFQUFBLEdBQ0EsR0FBQSxHQUFBLElBQ0EsT0FBQSxHQUFBLEtBQUEsU0FBQSxFQUFBLEdBRUEsRUFBQSxNQUFBLFlBQUEsRUFBQSxNQUtBLEVBQUEsR0FBQSxlQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsSUFDQSxPQUFBLEdBQUEsSUFBQSxHQUFBLE1BQUEsUUFBQSxJQUdBLEVBQUEsR0FBQSxlQUFBLFNBQUEsRUFBQSxFQUFBLEdBQ0EsR0FBQSxHQUFBLElBQ0EsT0FBQSxHQUFBLEtBQUEsU0FBQSxFQUFBLEdBRUEsRUFBQSxNQUFBLFFBQUEsR0FBQSxFQUVBLEtBQUEsSUFDQSxFQUFBLE1BQUEsU0FDQSxFQUFBLE1BQUEsYUFNQSxFQUFBLEdBQUEsY0FBQSxXQUNBLEdBQUEsR0FBQSxJQUNBLE9BQUEsR0FBQSxLQUFBLFNBQUEsRUFBQSxHQUVBLEVBQUEsTUFBQSxvQkFLQSxFQUFBLEdBQUEsUUFBQSxXQUNBLEdBQUEsR0FBQSxJQUNBLE9BQUEsR0FBQSxLQUFBLFNBQUEsRUFBQSxHQUVBLEVBQUEsT0FDQSxFQUFBLE1BQUEsYUFNQSxFQUFBLEdBQUEsU0FBQSxXQUNBLEdBQUEsR0FBQSxLQUNBLEVBQUEsSUFLQSxPQUpBLEdBQUEsS0FBQSxTQUFBLEVBQUEsR0FDQSxFQUFBLEVBQUEsUUFHQSxLQ256REEsU0FBQSxHQU1BLFFBQUEsS0FDQSxHQUFBLEdBQUEsRUFBQSwyQ0FDQSxHQUFBLEtBQUEsV0FDQSxHQUFBLEdBQUEsRUFBQSx3QkFBQSxNQUFBLE1BQ0EsR0FBQSxHQUNBLEVBQUEsTUFBQSxPQUNBLE1BQUEsRUFDQSxVQUFBLEVBQ0EsWUFBQSxFQUNBLFVBQUEsRUFDQSxNQUFBLElBQ0EsTUFBQSxFQUNBLE1BQUEsZ0JBQ0EsUUFBQSxhQVVBLFFBQUEsS0FDQSxVQUFBLEVBQUEsa0RBRUEsVUFBQSxLQUFBLFdBQ0EsRUFBQSxNQUFBLE9BQ0EsWUFBQSxFQUNBLE9BQUEsRUFDQSxNQUFBLEtBQ0EsYUFBQSxFQUNBLGVBQUEsRUFDQSxVQUFBLEVBQ0EsV0FBQSxFQUNBLFVBQUEsRUFDQSxhQUVBLFdBQUEsSUFDQSxVQUNBLGFBQUEsRUFDQSxlQUFBLEtBSUEsV0FBQSxJQUNBLFVBQ0EsYUFBQSxFQUNBLGVBQUEsS0FJQSxXQUFBLElBQ0EsVUFDQSxhQUFBLEVBQ0EsZUFBQSxTQVFBLFFBQUEsS0FDQSxJQUNBLElBWUEsRUFBQSxVQUFBLEdBQUEsUUFBQSxXQUNBLE9BRUEsUUM3RUEsU0FBQSxHQU1BLFFBQUEsS0FDQSxHQUFBLEdBQUEsRUFBQSxrREFFQSxHQUFBLE9BQUEsR0FFQSxFQUFBLEtBQUEsV0FFQSxHQUFBLEdBQUEsRUFBQSwwQ0FBQSxNQUNBLEVBQUEsRUFBQSxrREFBQSxNQUNBLEVBQUEsRUFFQSxLQUFBLEVBQUEsZ0JBQUEsR0FBQSxTQUNBLEVBQUEsVUFBQSxpQ0FDQSxFQUFBLE1BQUEsU0FBQSxrQkFFQSxJQUFBLEdBQUEsRUFBQSxhQUFBLEVBQ0EsR0FBQSxLQUFBLFFBQUEsSUFDQSxFQUFBLEtBQUEsUUFBQSxJQUNBLEVBQUEsT0FHQSxFQURBLFdBQUEsTUFBQSxXQUFBLFlBQUEsVUFDQSxFQUFBLGdEQUFBLE1BR0EsRUFBQSxLQUdBLElBQUEsR0FBQSxFQUFBLGFBQUEsR0FBQSxFQUNBLEVBQUEsRUFBQSxZQUFBLEdBQ0EsSUFBQSxPQUFBLEVBQUEsTUFBQSxFQUFBLFNBQUEsV0FDQSxJQUFBLE1BQUEsT0FBQSxPQUFBLEdBRUEsR0FBQSxJQUFBLEVBQUEsSUFDQSxFQUFBLElBQUEsRUFBQSxJQUVBLEVBQUEsR0FBQSx3QkFBQSxTQUFBLEdBRUEsRUFBQSxPQUNBLEVBQUEsSUFBQSxTQUFBLFdBQ0EsRUFBQSxvQkFHQSxFQUFBLEdBQUEsc0JBQUEsV0FFQSxFQUFBLE9BQ0EsRUFBQSxJQUFBLFNBQUEsVUFHQSxFQUFBLEdBQUEsUUFBQSxXQUNBLEVBQUEsR0FBQSxZQU9BLFFBQUEsS0FDQSxHQUFBLEdBQUEsRUFBQSxpQ0FDQSxFQUFBLEVBQUEsZ0RBQUEsT0FFQSxHQUFBLEtBQUEsV0FFQSxTQUFBLEVBQUEsMkNBQUEsR0FDQSxTQUFBLEtBQUEsV0FDQSxHQUFBLEdBQUEsRUFBQSxNQUFBLFNBQ0EsRUFBQSxFQUFBLHlCQUFBLFNBQ0EsRUFBQSxFQUFBLEtBQUEsRUFBQSxJQUNBLEdBQUEsTUFBQSxLQUFBLE1BQUEsRUFBQSxLQUFBLEVBQUEsWUFBQSxRQU1BLFFBQUEsS0FFQSxJQUFBLEVBQUEsc0NBQUEsUUFFQSxFQUFBLHNDQUVBLElBQUEsRUFBQSw4QkFBQSxRQUNBLEVBQUEsOEJBRUEsSUFBQSxFQUFBLGtDQUFBLFFBQ0EsRUFBQSxpQ0FBQSxXQUFBLFlBQUEsR0FBQSxRQU1BLFFBQUEsR0FBQSxFQUFBLEdBRUEsR0FBQSxHQUFBLEVBQUEsR0FFQSxFQUFBLFNBQUEsV0FBQSxPQUNBLEVBQUEsU0FBQSxFQUFBLFNBQUEsWUFBQSxJQUNBLEVBQUEsU0FBQSxFQUFBLFNBQUEsU0FDQSxLQUFBLEVBQUEsR0FBQSxHQUNBLEdBQUEsTUFBQSxFQUFBLEtBQUEsRUFBQSxZQUFBLFFBQ0EsR0FBQSxNQUFBLEVBRUEsVUFBQSxHQUFBLFNBQUEsR0FBQSxXQUFBLE9BQUEsR0FFQSxJQUFBLEVBQUEsMEJBQUEsR0FBQSxRQUNBLEVBQUEsVUFBQSw4Q0FFQSxFQUFBLDBCQUFBLEdBQUEsSUFBQSxHQUNBLEVBQ0EsSUFBQSxHQUNBLFNBQUEsa0JBQ0EsUUFHQSxFQUNBLEtBQUEsUUFBQSxJQUNBLFlBQUEsa0JBQ0EsRUFBQSwwQkFBQSxHQUFBLEtBQUEsUUFBQSxJQUNBLEVBQUEsMEJBQUEsR0FBQSxPQUFBLEdBQ0EsRUFBQSwwQkFBQSxHQUFBLFdBQUEsVUF5REEsUUFBQSxLQUVBLEVBQUEsMEVBQUEsT0FBQSxXQUNBLEVBQUEsb0RBQUEsVUFBQSxTQUFBLFFBQUEsT0FBQSxLQUlBLFFBQUEsS0FDQSxJQUNBLElBQ0EsSUFDQSxJQUlBLFFBQUEsS0FDQSxHQUFBLEVBQ0EsR0FBQSxRQUFBLEdBQUEsU0FBQSxXQUNBLGFBQUEsR0FDQSxFQUFBLFdBQUEsRUFBQSxPQXJNQSxHQUFBLEdBQUEsVUFBQSxVQUFBLE1BQUEsV0FBQSxhQUFBLE9BRUEsUUFBQSxNQUFBLE9BQUEsVUErSEEsT0FBQSxVQUFBLGNBQ0EsT0FBQSxXQUNBLEVBQUEsY0FBQSxLQUFBLFdBQ0EsRUFBQSxNQUNBLElBQUEsR0FDQSxHQUFBLEVBQUEsV0FDQSxFQUFBLE1BQUEsWUFBQSxRQUFBLEtBQUEsbUJBQUEsZ0JBR0EsSUFBQSxFQUFBLE1BQUEsUUFBQSxzQkFBQSxRQUNBLEVBQUEsTUFDQSxVQUFBLGdDQUNBLFFBQUEsd0NBR0EsRUFBQSxtQkFBQSxTQUlBLE9BQUEsVUFBQSxrQkFDQSxPQUFBLFdBQ0EsRUFBQSwyQ0FBQSxLQUFBLFdBRUEsR0FBQSxFQUFBLGdDQUFBLE1BQUEsT0FBQSxFQUFBLENBQ0EsR0FBQSxFQUFBLHdDQUFBLE1BQUEsT0FBQSxFQUNBLE1BR0EsS0FBQSxFQUFBLDRCQUFBLE1BQUEsU0FDQSxFQUFBLDhDQUFBLE1BQUEsUUFBQSxvQ0FDQSxFQUFBLHlCQUFBLE1BQUEsVUFBQSw2QkFJQSxJQUFBLEdBQUEsRUFBQSwyQkFBQSxNQUNBLEVBQUEsRUFBQSxPQUVBLEdBQUEsS0FBQSxZQUFBLFdBQUEsS0FBQSxXQUFBLFdBQUEsV0FFQSxFQUFBLFNBQUEscUNBQ0EsWUFBQSx3QkFDQSxVQUFBLGtDQWdDQSxFQUFBLFVBQUEsTUFBQSxXQUdBLEVBQUEsd0JBQUEsS0FBQSxXQUNBLElBQUEsRUFBQSxtQ0FBQSxNQUFBLFFBQUEsSUFBQSxFQUFBLCtCQUFBLE1BQUEsUUFDQSxFQUFBLG1DQUFBLE1BQUEsU0FDQSxFQUFBLE1BQUEsU0FBQSxvQkFHQSxFQUFBLE1BQUEsU0FEQSxJQUFBLEVBQUEsbUNBQUEsTUFBQSxRQUFBLElBQUEsRUFBQSwrQkFBQSxNQUFBLE9BQ0Esa0JBR0Esa0JBTUEsS0FBQSxHQURBLEdBQUEsU0FBQSxpQkFBQSxxQkFDQSxFQUFBLEVBQUEsRUFBQSxFQUFBLE9BQUEsSUFDQSxFQUFBLEdBQUEsYUFBQSxjQUNBLEVBQUEsR0FBQSxXQUFBLFdBQUEsOEJBS0EsR0FBQSxLQUFBLE9BQUEsV0FDQSxNQUFBLEtBQUEsRUFBQSxNQUFBLFdBQUEsUUFBQSxRQUFBLEVBQUEsTUFBQSxXQUFBLEdBQUEsUUFBQSxnQkFDQSxTQUFBLFNBSUEsSUFHQSxFQUFBLGdCQUFBLFlBQUEsUUFHQSxFQUFBLG1CQUFBLEtBQUEsV0FDQSxHQUFBLEVBQUEsU0FBQSxNQUFBLE9BQUEsRUFBQSxDQUNBLEdBQUEsR0FBQSxFQUFBLFNBQUEsTUFBQSxLQUFBLFFBQ0EsR0FBQSxNQUFBLElBQUEsWUFBQSxNQUdBLEVBQUEsVUFBQSxLQUFBLFdBQ0EsR0FBQSxFQUFBLFNBQUEsTUFBQSxPQUFBLEVBQUEsQ0FDQSxHQUFBLEdBQUEsRUFBQSxTQUFBLE1BQUEsS0FBQSxTQUNBLEVBQUEsRUFBQSxTQUFBLE1BQUEsS0FBQSxTQUNBLEdBQUEsTUFBQSxLQUFBLE1BQUEsRUFBQSxZQUFBLE9BQUEsYUFBQSxPQUlBLEVBQUEsa0NBQUEsS0FBQSxXQUNBLEVBQUEsTUFBQSxJQUFBLFlBQUEsUUFDQSxFQUFBLG1CQUFBLE1BQUEsS0FBQSxRQUFBLElBQ0EsRUFBQSx3Q0FBQSxNQUFBLFdBR0EsSUFHQSxPQUFBLFNBQUEsTUFDQSxPQUFBLFdBQUEsV0FDQSxFQUFBLFFBQUEsVUFBQSxJQUNBLFFBSUEsUUN4UkEsU0FBQSxHQUVBLFFBQUEsR0FBQSxHQUVBLEdBQUEsR0FBQSxXQUFBLFlBQUEsU0FDQSxFQUFBLEVBQUEsR0FBQSxLQUFBLDJCQUFBLE1BaUJBLE9BZEEsR0FBQSxXQUFBLFlBREEsR0FBQSxHQUNBLFNBRUEsR0FBQSxHQUFBLEdBQUEsRUFDQSxlQUVBLEdBQUEsR0FBQSxFQUFBLEVBQ0EsUUFFQSxFQUFBLEdBQUEsRUFBQSxFQUNBLGNBR0EsV0FLQSxRQUFBLEdBQUEsRUFBQSxHQUVBLEdBQUEsR0FBQSxFQUFBLEdBQ0EsRUFBQSxFQUFBLFFBQUEsdUJBQ0EsRUFBQSxTQUFBLEVBQUEsb0NBQUEsR0FBQSxRQUFBLEVBR0EsSUFBQSxFQUFBLE9BQUEsRUFBQSxDQUNBLElBQUEsR0FBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsQ0FDQSxHQUFBLEdBQUEsRUFBQSxxQ0FBQSxFQUFBLElBQUEsR0FBQSxZQUFBLEVBQ0EsR0FBQSxnQkFBQSxFQUFBLElBQUEsTUFBQSxLQUFBLE1BQUEsSUFHQSxHQUNBLEVBQUEsT0FDQSxFQUFBLFlBQUEsK0JBQ0EsRUFBQSxLQUFBLEdBQUEsS0FBQSxRQUFBLFdBR0EsRUFBQSxPQUNBLEVBQUEsU0FBQSwrQkFDQSxFQUFBLEtBQUEsR0FBQSxLQUFBLFFBQUEsaUJBU0EsUUFBQSxLQUVBLEdBQUEsR0FBQSxFQUFBLDZGQUVBLEdBQUEsS0FBQSxXQUNBLENBQUEsR0FBQSxHQUFBLEVBQUEsS0FDQSxHQUFBLEtBQUEsTUFJQSxFQUFBLHNDQUFBLEtBQUEsV0FDQSxHQUFBLEdBQUEsRUFBQSxNQUNBLEVBQUEsRUFBQSxNQUNBLEVBQUEsRUFBQSxLQUFBLEVBRUEsSUFBQSxLQUFBLEVBQUEsQ0FFQSxHQUFBLEVBQUEsUUFBQSxtQkFBQSxPQUFBLEVBQUEsQ0FFQSxHQUFBLEdBQUEsRUFBQSxRQUNBLEVBQUEsRUFBQSxRQUFBLG1CQUFBLFlBQUEsRUFFQSxHQUFBLFNBQUEsa0JBQ0EsS0FBQSxTQUFBLFdBQUEsUUFBQSxRQUFBLEtBQUEsV0FBQSxXQUFBLFNBQUEsTUFBQSxFQUFBLFlBQUEsSUFDQSxNQUNBLEVBQUEsUUFBQSxtQkFBQSxLQUFBLGNBQUEsUUFBQSxFQUVBLElBQUEsR0FBQSxNQUdBLElBQUEsR0FBQSxJQUdBLElBQUEsR0FBQSxTQUFBLEVBQUEsR0FBQSxLQUFBLFNBQUEsWUFBQSxJQUNBLEVBQUEsU0FBQSxFQUFBLEdBQUEsS0FBQSxTQUFBLGFBQUEsSUFDQSxFQUFBLFNBQUEsRUFBQSxHQUFBLFNBQUEsU0FDQSxFQUFBLFNBQUEsRUFBQSxzQkFBQSxNQUFBLFFBQUEsR0FDQSxFQUFBLFNBQUEsRUFBQSxvQ0FBQSxNQUFBLFFBQUEsR0FDQSxFQUFBLFNBQUEsRUFBQSxHQUNBLElBQUEsT0FBQSxFQUFBLEtBQUEsTUFBQSxFQUFBLE9BQ0EsSUFBQSxNQUFBLEVBQUEsS0FBQSxLQUFBLEVBQUEsT0FDQSxJQUFBLE1BQUEsRUFBQSxNQUdBLEdBQUEsSUFBQSxFQUFBLElBQ0EsRUFBQSxRQUFBLE1BQUEsSUFBQSxFQUFBLElBQ0EsRUFBQSxRQUFBLE1BQUEsSUFBQSxFQUFBLEdBR0EsS0FBQSxHQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFDQSxJQUFBLEdBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLENBQ0EsR0FBQSxHQUFBLEVBQUEseUJBQUEsRUFBQSxJQUFBLEdBQUEsUUFDQSxHQUFBLHNCQUFBLEVBQUEsa0JBQUEsRUFBQSxJQUFBLE1BQUEsSUFBQSxhQUFBLEdBQ0EsRUFBQSxFQUFBLHNCQUFBLEVBQUEsa0JBQUEsRUFBQSxJQUFBLE1BQUEsRUFBQSxvQ0FBQSxFQUFBLElBQUEsT0FBQSxXQUdBLEdBQ0EsRUFBQSxZQU1BLEVBQUEscUNBQUEsS0FBQSxXQUVBLEdBQUEsR0FBQSxFQUFBLE1BQ0EsRUFBQSxFQUFBLEdBQ0EsRUFBQSxFQUFBLEtBQUEsRUFLQSxJQUZBLEVBQUEsb0JBQUEsTUFBQSxTQUVBLEtBQUEsRUFBQSxDQVFBLElBQUEsR0FOQSxHQUFBLFNBQUEsRUFBQSxvQ0FBQSxNQUFBLFFBQUEsR0FDQSxFQUFBLFNBQUEsRUFBQSxzQkFBQSxNQUFBLFFBQUEsR0FDQSxFQUFBLFNBQUEsRUFBQSxvQ0FBQSxNQUFBLFFBQUEsR0FDQSxLQUNBLEVBQUEsR0FFQSxFQUFBLEVBQUEsR0FBQSxFQUFBLElBRUEsRUFBQSxLQUFBLEVBQUEscUNBQUEsRUFBQSxJQUFBLE1BQUEsT0FFQSxLQUFBLEdBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUNBLElBQUEsR0FBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQ0EsRUFBQSxHQUNBLElBQUEsRUFBQSxLQUFBLEVBQUEsTUFDQSxFQUFBLDhCQUFBLEVBQUEsR0FBQSxZQUNBLEVBQUEsc0JBQUEsRUFBQSxrQkFBQSxFQUFBLElBQUEsTUFBQSxRQUFBLE9BUUEsUUFBQSxHQUFBLEVBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSxHQUNBLEdBQUEsQ0FlQSxPQWJBLEdBQUEsU0FBQSxTQUFBLEdBQ0EsR0FBQSxFQUNBLEVBQUEsU0FBQSxlQUdBLEVBQUEsWUFBQSxjQUVBLEVBQUEsUUFBQSxnQkFBQSxRQUFBLElBQ0EsR0FBQSxFQUNBLEVBQUEsWUFBQSxlQUdBLEVBQUEsRUFBQSxHQUNBLEVBSUEsUUFBQSxLQUNBLEdBQUEsRUFDQSxHQUFBLFFBQUEsR0FBQSxTQUFBLFdBQ0EsYUFBQSxHQUNBLEVBQUEsV0FBQSxFQUFBLE9BS0EsT0FBQSxVQUFBLGtCQUNBLE9BQUEsV0FDQSxJQUFBLEVBQUEsU0FBQSxTQUtBLEVBQUEsNEJBQUEsS0FBQSxXQUNBLEdBQUEsRUFBQSxTQUFBLE1BQUEsT0FBQSxFQUFBLENBQ0EsR0FBQSxHQUFBLEVBQUEsU0FBQSxNQUFBLEtBQUEsUUFDQSxHQUFBLE1BQUEsUUFBQSxNQUFBLElBQUEsUUFBQSxNQUlBLEVBQUEsMEZBQUEsS0FBQSxXQUNBLEdBQUEsR0FBQSxFQUFBLEtBQ0EsR0FBQSxTQUFBLDhCQUtBLEVBQUEsU0FEQSxJQUFBLEVBQUEsUUFBQSxNQUFBLE9BQ0EsOEJBR0Esc0JBS0EsRUFBQSxTQUFBLEtBQUEsV0FDQSxHQUFBLEdBQUEsRUFBQSxLQUNBLEtBQUEsRUFBQSxTQUFBLDZCQUFBLENBSUEsR0FBQSxHQUFBLEVBQUEsS0FBQSxlQUFBLE1BQ0EsS0FBQSxJQUNBLEVBQUEsRUFBQSxLQUFBLGVBQUEsUUFFQSxFQUFBLFNBQUEsT0FBQSxFQUFBLGlDQUdBLE9BSUEsRUFBQSxVQUFBLEdBQUEsUUFBQSxXQUNBLElBQUEsRUFBQSxTQUFBLFFBQ0EsT0FHQSxRQ3pPQSxTQUFBLEdBc0hBLFFBQUEsR0FBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLFNBQUEsaUJBQ0EsRUFBQSxFQUFBLDJDQUNBLEVBQUEsRUFBQSx1RUFBQSxTQUFBLEdBQ0EsRUFBQSxFQUFBLHFDQUFBLFNBQUEsR0FDQSxFQUFBLENBRUEsS0FBQSxFQUFBLFFBQUEsRUFBQSxTQUFBLG1CQUlBLEVBQUEsU0FBQSxjQUFBLEtBQUEsV0FDQSxHQUFBLEdBQUEsRUFBQSxNQUNBLEVBQUEsRUFBQSxTQUFBLE1BQ0EsRUFBQSxFQUFBLFFBQUEsVUFDQSxFQUFBLE9BQUEsRUFBQSxNQUFBLEtBQUEsS0FBQSxLQUNBLEVBQUEsRUFBQSx1QkFBQSxFQUFBLFlBQUEsRUFBQSxLQUFBLEVBQUEsWUFFQSxRQUFBLFVBSUEsRUFBQSxLQUFBLEtBQUEsR0FDQSxFQUFBLFNBQUEsaURBQUEsR0FDQSxFQUFBLFNBQUEsTUFBQSxLQUFBLHVDQUNBLEVBQUEsU0FDQSxFQUFBLHdCQUFBLEVBQUEsU0FBQSxVQUFBLE1BQ0EsRUFBQSxPQUFBLEdBQ0EsT0FHQSxFQUFBLE9BQUEsR0FDQSxFQUFBLFNBQUEsa0JBS0EsUUFBQSxHQUFBLEdBQ0EsT0FBQSxNQUFBLGFBQUEsV0FBQSxPQUFBLENBRUEsSUFBQSxHQUFBLEVBQUEsd0NBRUEsR0FBQSxLQUFBLFdBQ0EsR0FBQSxHQUFBLEVBQUEsY0FBQSxNQUNBLEVBQUEsRUFBQSxzQkFBQSxLQUVBLFFBQUEsTUFBQSxjQUNBLEVBQUEsTUFBQSxTQUFBLFNBQUEsY0FDQSxFQUFBLFNBQUEsYUFDQSxFQUFBLFNBQUEsb0JBR0EsRUFBQSxNQUFBLFNBQUEsWUFBQSxjQUNBLEVBQUEsWUFBQSxhQUNBLEVBQUEsWUFBQSxrQkFDQSxFQUFBLEtBQUEsUUFBQSxPQUdBLE9BQUEsTUFBQSxjQUNBLE9BQUEsVUFBQSxhQUFBLFNBM0tBLEdBaUxBLEdBakxBLEdBQ0EsWUFBQSxFQUNBLFlBQUEsT0FFQSxLQUFBLFdBQ0EsS0FBQSxrQkFDQSxLQUFBLHFCQUNBLEtBQUEsbUJBQ0EsS0FBQSxpQkFHQSxnQkFBQSxXQUVBLEVBQUEsVUFDQSxHQUFBLFFBQUEsMEVBQUEsU0FBQSxHQUNBLEVBQUEsVUFBQSxLQUFBLE1BQ0EsRUFBQSxtQkFFQSxHQUFBLFFBQUEsNEJBQUEsU0FBQSxHQUNBLEVBQUEsaUJBQUEsRUFBQSxNQUNBLEVBQUEsb0JBS0EsVUFBQSxTQUFBLEVBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSxTQUFBLEVBQUEsS0FDQSxFQUFBLEVBQUEsR0FDQSxFQUFBLElBQUEsQ0FlQSxJQWJBLElBQUEsRUFBQSxRQUFBLElBQUEsRUFBQSxRQUVBLEVBQUEsZ0JBQUEsU0FBQSxVQUFBLFNBQUEsV0FBQSxLQUFBLEtBQUEsWUFBQSxVQUVBLEVBQUEscUJBQUEsU0FBQSxVQUFBLFdBQUEsWUFBQSxZQUlBLEVBQUEsU0FBQSxVQUFBLFNBQUEsV0FBQSxLQUFBLEtBQUEsWUFBQSxVQUVBLEVBQUEsU0FBQSxVQUFBLFdBQUEsWUFBQSxZQUdBLEVBQUEsQ0FDQSxHQUFBLEdBQUEsRUFBQSxPQUFBLEVBQ0EsUUFBQSxRQUFBLGdCQUFBLEdBQUEsUUFBQSxHQUdBLEVBQUEsUUFBQSxNQUFBLFlBQUEsU0FJQSxtQkFBQSxXQUlBLElBQUEsR0FIQSxHQUFBLE9BQUEsU0FBQSxPQUFBLE9BQUEsR0FDQSxFQUFBLEVBQUEsTUFBQSxLQUVBLEVBQUEsRUFBQSxFQUFBLEVBQUEsT0FBQSxJQUFBLENBQ0EsR0FBQSxHQUFBLEVBQUEsR0FBQSxNQUFBLElBQ0EsSUFBQSxRQUFBLEVBQUEsR0FFQSxXQURBLE1BQUEsVUFBQSxJQUFBLEVBQUEsSUFBQSxHQU1BLEdBQUEsR0FBQSxFQUFBLGVBQ0EsRUFBQSxFQUFBLEtBQUEsUUFBQSxPQUFBLEVBQ0EsTUFBQSxVQUFBLEdBQUEsSUFHQSxpQkFBQSxTQUFBLEVBQUEsR0FDQSxFQUFBLEdBQUEsUUFBQSxNQUFBLFlBQUEsU0FJQSxvQkFBQSxTQUFBLEVBQUEsR0FDQSxFQUFBLFdBQ0EsRUFBQSxHQUFBLFNBQUEsU0FBQSxHQUNBLFdBQUEsT0FBQSxHQUlBLGlCQUFBLFdBQ0EsR0FBQSxHQUFBLFdBQUEsWUFBQSxjQUdBLEdBQUEsb0JBQUEsS0FBQSxXQUNBLEVBQUEsb0JBQUEsS0FBQSxHQUVBLEVBQUEsY0FBQSxFQUNBLEVBQUEsTUFBQSxTQUFBLGNBSUEsRUFBQSxNQUFBLFlBQUEsaUJBTUEsY0FBQSxXQUNBLEVBQUEsUUFBQSxHQUFBLFNBQUEsV0FDQSxhQUFBLEtBQUEsYUFDQSxLQUFBLFlBQUEsV0FBQSxLQUFBLGlCQUFBLFFBMkVBLEdBQUEsUUFBQSxHQUFBLFNBQUEsV0FDQSxhQUFBLEdBQ0EsRUFBQSxXQUFBLFdBQ0EsRUFBQSxXQUFBLFlBQUEsR0FBQSxTQUNBLE9BSUEsT0FBQSxVQUFBLFNBQ0EsT0FBQSxXQUNBLEdBQUEsR0FBQSxFQUFBLHNEQUNBLEdBQUEsT0FBQSxHQUNBLEVBQUEsR0FFQSxFQUFBLG9CQUFBLE9BQUEsR0FDQSxFQUFBLFVBS0EsUUMzTUEsU0FBQSxHQVVBLFFBQUEsS0FJQSxNQUhBLE1BQUEsSUFDQSxFQUFBLEVBQUEsSUFFQSxFQUFBLE9BaVhBLFFBQUEsR0FBQSxHQUNBLElBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLE9BQUEsSUFBQSxDQUNBLEdBQUEsR0FBQSxFQUFBLEVBQUEsR0FBQSxVQUNBLEVBQUEsRUFBQSxHQUFBLFdBQ0EsRUFBQSxFQUFBLEdBQUEsV0FFQSxJQUFBLElBQUEsRUFBQSxPQUlBLElBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLE9BQUEsSUFDQSxFQUFBLEVBQUEsSUFBQSxjQUFBLEVBQUEsSUFTQSxRQUFBLEdBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSx3QkFDQSxLQUFBLEVBQUEsUUFBQSxJQUFBLEVBQUEsUUFDQSxFQUFBLGFBQUEsR0FuWkEsR0FBQSxHQUFBLGlCQUNBLEdBQUEsRUF5QkEsR0FDQSxRQUNBLFNBQUEsbUJBQ0EsTUFBQSxFQUNBLE1BQUEsTUFDQSxJQUFBLFNBQUEsR0FDQSxNQUFBLEdBQUEsS0FBQSxVQUVBLE1BQUEsRUFDQSxNQUFBLE1BQ0EsSUFBQSxTQUFBLEdBQ0EsTUFBQSxHQUFBLEtBQUEsV0FHQSxVQUNBLFNBQUEsbUJBQ0EsTUFBQSxFQUNBLE1BQUEsT0FDQSxJQUFBLFNBQUEsR0FDQSxNQUFBLEdBQUEsS0FBQSxVQUVBLE1BQUEsRUFDQSxNQUFBLE9BQ0EsSUFBQSxTQUFBLEdBQ0EsTUFBQSxHQUFBLEtBQUEsV0FHQSxPQUNBLFNBQUEsa0JBQ0EsTUFBQSxFQUNBLE1BQUEsT0FDQSxJQUFBLFNBQUEsR0FDQSxNQUFBLEdBQUEsS0FBQSxVQUVBLE1BQUEsRUFDQSxNQUFBLEtBQ0EsSUFBQSxTQUFBLEdBQ0EsTUFBQSxHQUFBLEtBQUEsV0FHQSxhQUNBLE1BQUEsRUFDQSxNQUFBLFVBQ0EsSUFBQSxTQUFBLEdBQ0EsTUFBQSxLQUFBLEVBQUEsSUFFQSxNQUFBLEVBQ0EsTUFBQSxVQUNBLElBQUEsU0FBQSxHQUNBLE9BQUEsRUFBQSxLQUFBLEVBQUEsS0FJQSxRQUNBLFNBQUEsZ0JBQ0EsTUFBQSxFQUNBLE1BQUEsa0JBQ0EsSUFBQSxTQUFBLEdBQ0EsTUFBQSxHQUFBLEtBQUEsVUFFQSxNQUFBLEVBQ0EsTUFBQSxrQkFDQSxJQUFBLFNBQUEsR0FDQSxNQUFBLEdBQUEsS0FBQSxZQWNBLElBR0EsU0FBQSw4Q0FDQSxXQUFBLFdBR0EsU0FBQSw2Q0FDQSxXQUFBLFdBR0EsU0FBQSwwQ0FDQSxXQUFBLFVBR0EsU0FBQSxzREFDQSxXQUFBLGdCQUdBLFNBQUEsdURBQ0EsV0FBQSxnQkFHQSxTQUFBLDZDQUNBLFdBQUEsYUFHQSxTQUFBLDBDQUNBLFdBQUEsU0FDQSxTQUNBLE1BQUEsRUFDQSxNQUFBLEtBSUEsU0FBQSxzQ0FDQSxXQUFBLFdBR0EsU0FBQSwrQ0FDQSxXQUFBLFdBR0EsU0FBQSw4Q0FDQSxXQUFBLFdBR0EsU0FBQSwyQ0FDQSxXQUFBLFdBR0EsU0FBQSw4Q0FDQSxXQUFBLFdBR0EsU0FBQSw2Q0FDQSxXQUFBLFdBR0EsU0FBQSwrQ0FDQSxXQUFBLFdBR0EsU0FBQSwwQ0FDQSxXQUFBLFdBR0EsU0FBQSw0Q0FDQSxXQUFBLFNBQ0EsU0FDQSxNQUFBLEtBSUEsU0FBQSw2Q0FDQSxXQUFBLFdBR0EsU0FBQSwrQ0FDQSxXQUFBLFNBQ0EsU0FDQSxNQUFBLEtBSUEsU0FBQSxzREFDQSxXQUFBLFdBR0EsU0FBQSxzREFDQSxXQUFBLFdBR0EsU0FBQSw0Q0FDQSxXQUFBLFdBR0EsU0FBQSwyQ0FDQSxXQUFBLFdBR0EsU0FBQSw2Q0FDQSxXQUFBLFdBSUEsU0FBQSxzQ0FDQSxXQUFBLFdBR0EsU0FBQSxvQ0FDQSxXQUFBLFNBQ0EsU0FDQSxNQUFBLEVBQ0EsTUFBQSxLQUlBLFNBQUEsa0NBQ0EsV0FBQSxVQUdBLFNBQUEsNkNBQ0EsV0FBQSxnQkFHQSxTQUFBLDhDQUNBLFdBQUEsZ0JBTUEsSUFFQSxTQUFBLDREQUNBLFdBQUEsU0FDQSxTQUNBLE1BQUEsRUFDQSxNQUFBLE9BSUEsU0FBQSxvREFDQSxXQUFBLFNBV0EsR0FBQSxHQUFBLGNBQUEsU0FBQSxFQUFBLEVBQUEsR0ErQ0EsUUFBQSxLQUNBLE9BQUEsRUFBQSxVQUNBLEVBQUEsS0FBQSxFQUFBLE9BQUEsRUFBQSxPQUNBLEVBQUEsUUFBQSxNQUlBLFFBQUEsS0FDQSxXQUFBLEVBQUEsVUFDQSxFQUFBLEtBQUEsRUFBQSxPQUFBLEVBQUEsT0FDQSxFQUFBLFFBQUEsVUFJQSxRQUFBLEtBQ0EsT0FBQSxLQUNBLElBQUEsS0FDQSxHQUNBLE1BQ0EsS0FBQSxTQUNBLEdBQ0EsTUFDQSxTQUNBLEdBQUEsR0FBQSxxREFDQSxRQUFBLFFBQUEsS0FBQSxHQUVBLEVBQUEsU0FBQSxHQUdBLFFBQUEsS0FDQSxHQUFBLEdBQUEsRUFBQSxLQUFBLGdCQUNBLE9BQUEsS0FBQSxFQUFBLE9BQ0EsS0FFQSxnQkFBQSxFQUFBLEtBQUEsTUFDQSxTQUdBLEtBSUEsUUFBQSxHQUFBLEdBQ0EsTUFBQSxnQkFBQSxJQUNBLE9BQUEsUUFBQSxLQUFBLHFCQUFBLEVBQUEscUJBQ0EsR0FFQSxFQUFBLFFBQUEsV0FBQSxJQUdBLFFBQUEsS0FFQSxHQUFBLEdBQUEsV0FBQSxFQUFBLEVBQUEsUUFFQSxRQUFBLEVBQUEsZ0JBQ0EsRUFBQSxPQUFBLEVBQUEsUUFBQSxFQUFBLE9BQ0EsRUFBQSxPQUFBLEVBQUEsSUFBQSxFQUFBLFFBQUEsUUFBQSxFQUFBLFNBR0EsRUFBQSxPQUFBLEVBQUEsUUFBQSxFQUFBLE9BQ0EsRUFBQSxPQUFBLEVBQUEsSUFBQSxFQUFBLFFBQUEsUUFBQSxFQUFBLFFBRUEsSUFDQSxFQUFBLEdBQUEsU0FBQSxHQXpHQSxHQUFBLEdBQUEsS0FDQSxFQUFBLGdCQUNBLEdBQ0EsV0FBQSxFQUNBLFFBQUEsR0FDQSxlQUFBLEdBQUEsS0FDQSxPQUFBLEVBQ0EsT0FBQSxFQUlBLElBQUEsU0FBQSxFQUFBLEVBQUEsWUFBQSxDQUNBLEdBQUEsR0FBQSxFQUFBLFdBQUEsa0NBRUEsWUFEQSxRQUFBLFFBQUEsS0FBQSxHQVdBLE1BUEEsR0FBQSxPQUFBLEVBQUEsRUFBQSxFQUFBLFlBQUEsR0FPQSxJQUFBLFFBQ0EsUUFBQSxRQUFBLEtBQUEsd0NBSUEsS0FBQSxFQUFBLFFBQUEsT0FBQSxLQUFBLFdBQ0EsUUFBQSxRQUFBLEtBQUEsNENBR0EsRUFBQSxTQUFBLElBNkVBLE1Bb0NBLEVBQUEsVUFBQSxHQUFBLFFBQUEsV0FDQSxJQUFBLE1BQ0EsRUFBQSxHQUNBLEVBQUEsTUFLQSxPQUFBLFVBQUEscUJBQ0EsT0FBQSxXQUNBLElBQUEsS0FDQSxFQUFBLE1BSUEsUUMzYUEsV0FDQSxRQUFBLEtBS0EsSUFBQSxHQUpBLE1BQ0EsRUFBQSxPQUFBLFNBQUEsS0FDQSxFQUFBLEVBQUEsTUFBQSxFQUFBLFFBQUEsS0FBQSxHQUFBLE1BQUEsS0FFQSxFQUFBLEVBQUEsRUFBQSxFQUFBLE9BQUEsSUFDQSxHQUFBLEVBQUEsR0FBQSxRQUFBLFNBQ0EsRUFBQSxLQUFBLEVBQUEsR0FHQSxPQUFBLEdBR0EsT0FBQSxVQUFBLE1BQUEsV0FHQSxHQUFBLEdBQUEsR0FDQSxJQUFBLEVBQUEsT0FBQSxFQUFBLENBQ0EsR0FBQSxHQUFBLFNBQUEsbUJBQUEsRUFBQSxLQUFBLE1BQUEsK0JBQ0EsVUFBQSxPQUFBLE1BR0EiLCJmaWxlIjoidGhlbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBNb2Rlcm5penIgMi44LjMgKEN1c3RvbSBCdWlsZCkgfCBNSVQgJiBCU0RcbiAqIEJ1aWxkOiBodHRwOi8vbW9kZXJuaXpyLmNvbS9kb3dubG9hZC8jLWNzc2FuaW1hdGlvbnMtY3NzdHJhbnNpdGlvbnMtaW5saW5lc3ZnLXN2Zy10b3VjaC1zaGl2LWNzc2NsYXNzZXMtcHJlZml4ZWQtdGVzdHN0eWxlcy10ZXN0cHJvcC10ZXN0YWxscHJvcHMtcHJlZml4ZXMtZG9tcHJlZml4ZXMtbG9hZFxuICovXG5cblxuXG5cbndpbmRvdy5Nb2Rlcm5penIgPSAoZnVuY3Rpb24oIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCApIHtcblxuICAgIHZhciB2ZXJzaW9uID0gJzIuOC4zJyxcblxuICAgIE1vZGVybml6ciA9IHt9LFxuXG4gICAgZW5hYmxlQ2xhc3NlcyA9IHRydWUsXG5cbiAgICBkb2NFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXG4gICAgbW9kID0gJ21vZGVybml6cicsXG4gICAgbW9kRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobW9kKSxcbiAgICBtU3R5bGUgPSBtb2RFbGVtLnN0eWxlLFxuXG4gICAgaW5wdXRFbGVtICAsXG5cblxuICAgIHRvU3RyaW5nID0ge30udG9TdHJpbmcsXG5cbiAgICBwcmVmaXhlcyA9ICcgLXdlYmtpdC0gLW1vei0gLW8tIC1tcy0gJy5zcGxpdCgnICcpLFxuXG5cblxuICAgIG9tUHJlZml4ZXMgPSAnV2Via2l0IE1veiBPIG1zJyxcblxuICAgIGNzc29tUHJlZml4ZXMgPSBvbVByZWZpeGVzLnNwbGl0KCcgJyksXG5cbiAgICBkb21QcmVmaXhlcyA9IG9tUHJlZml4ZXMudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpLFxuXG4gICAgbnMgPSB7J3N2Zyc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyd9LFxuXG4gICAgdGVzdHMgPSB7fSxcbiAgICBpbnB1dHMgPSB7fSxcbiAgICBhdHRycyA9IHt9LFxuXG4gICAgY2xhc3NlcyA9IFtdLFxuXG4gICAgc2xpY2UgPSBjbGFzc2VzLnNsaWNlLFxuXG4gICAgZmVhdHVyZU5hbWUsIFxuXG5cbiAgICBpbmplY3RFbGVtZW50V2l0aFN0eWxlcyA9IGZ1bmN0aW9uKCBydWxlLCBjYWxsYmFjaywgbm9kZXMsIHRlc3RuYW1lcyApIHtcblxuICAgICAgdmFyIHN0eWxlLCByZXQsIG5vZGUsIGRvY092ZXJmbG93LFxuICAgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuICAgICAgICAgICAgICAgIGJvZHkgPSBkb2N1bWVudC5ib2R5LFxuICAgICAgICAgICAgICAgIGZha2VCb2R5ID0gYm9keSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdib2R5Jyk7XG5cbiAgICAgIGlmICggcGFyc2VJbnQobm9kZXMsIDEwKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG5vZGVzLS0gKSB7XG4gICAgICAgICAgICAgIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgbm9kZS5pZCA9IHRlc3RuYW1lcyA/IHRlc3RuYW1lc1tub2Rlc10gOiBtb2QgKyAobm9kZXMgKyAxKTtcbiAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0eWxlID0gWycmIzE3MzsnLCc8c3R5bGUgaWQ9XCJzJywgbW9kLCAnXCI+JywgcnVsZSwgJzwvc3R5bGU+J10uam9pbignJyk7XG4gICAgICBkaXYuaWQgPSBtb2Q7XG4gICAgICAgICAgKGJvZHkgPyBkaXYgOiBmYWtlQm9keSkuaW5uZXJIVE1MICs9IHN0eWxlO1xuICAgICAgZmFrZUJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgIGlmICggIWJvZHkgKSB7XG4gICAgICAgICAgICAgICAgZmFrZUJvZHkuc3R5bGUuYmFja2dyb3VuZCA9ICcnO1xuICAgICAgICAgICAgICAgIGZha2VCb2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgICAgZG9jT3ZlcmZsb3cgPSBkb2NFbGVtZW50LnN0eWxlLm92ZXJmbG93O1xuICAgICAgICAgIGRvY0VsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgICBkb2NFbGVtZW50LmFwcGVuZENoaWxkKGZha2VCb2R5KTtcbiAgICAgIH1cblxuICAgICAgcmV0ID0gY2FsbGJhY2soZGl2LCBydWxlKTtcbiAgICAgICAgaWYgKCAhYm9keSApIHtcbiAgICAgICAgICBmYWtlQm9keS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGZha2VCb2R5KTtcbiAgICAgICAgICBkb2NFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gZG9jT3ZlcmZsb3c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRpdik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhIXJldDtcblxuICAgIH0sXG4gICAgX2hhc093blByb3BlcnR5ID0gKHt9KS5oYXNPd25Qcm9wZXJ0eSwgaGFzT3duUHJvcDtcblxuICAgIGlmICggIWlzKF9oYXNPd25Qcm9wZXJ0eSwgJ3VuZGVmaW5lZCcpICYmICFpcyhfaGFzT3duUHJvcGVydHkuY2FsbCwgJ3VuZGVmaW5lZCcpICkge1xuICAgICAgaGFzT3duUHJvcCA9IGZ1bmN0aW9uIChvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiBfaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTtcbiAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaGFzT3duUHJvcCA9IGZ1bmN0aW9uIChvYmplY3QsIHByb3BlcnR5KSB7IFxuICAgICAgICByZXR1cm4gKChwcm9wZXJ0eSBpbiBvYmplY3QpICYmIGlzKG9iamVjdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbcHJvcGVydHldLCAndW5kZWZpbmVkJykpO1xuICAgICAgfTtcbiAgICB9XG5cblxuICAgIGlmICghRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpIHtcbiAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG5cbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcbiAgICAgICAgICAgIGJvdW5kID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG5cbiAgICAgICAgICAgICAgdmFyIEYgPSBmdW5jdGlvbigpe307XG4gICAgICAgICAgICAgIEYucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgdmFyIHNlbGYgPSBuZXcgRigpO1xuXG4gICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgICBzZWxmLFxuICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gc2VsZjtcblxuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgICAgdGhhdCxcbiAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGJvdW5kO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRDc3MoIHN0ciApIHtcbiAgICAgICAgbVN0eWxlLmNzc1RleHQgPSBzdHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0Q3NzQWxsKCBzdHIxLCBzdHIyICkge1xuICAgICAgICByZXR1cm4gc2V0Q3NzKHByZWZpeGVzLmpvaW4oc3RyMSArICc7JykgKyAoIHN0cjIgfHwgJycgKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXMoIG9iaiwgdHlwZSApIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IHR5cGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udGFpbnMoIHN0ciwgc3Vic3RyICkge1xuICAgICAgICByZXR1cm4gISF+KCcnICsgc3RyKS5pbmRleE9mKHN1YnN0cik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGVzdFByb3BzKCBwcm9wcywgcHJlZml4ZWQgKSB7XG4gICAgICAgIGZvciAoIHZhciBpIGluIHByb3BzICkge1xuICAgICAgICAgICAgdmFyIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgICAgICAgIGlmICggIWNvbnRhaW5zKHByb3AsIFwiLVwiKSAmJiBtU3R5bGVbcHJvcF0gIT09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ZWQgPT0gJ3BmeCcgPyBwcm9wIDogdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGVzdERPTVByb3BzKCBwcm9wcywgb2JqLCBlbGVtICkge1xuICAgICAgICBmb3IgKCB2YXIgaSBpbiBwcm9wcyApIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gb2JqW3Byb3BzW2ldXTtcbiAgICAgICAgICAgIGlmICggaXRlbSAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbSA9PT0gZmFsc2UpIHJldHVybiBwcm9wc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpcyhpdGVtLCAnZnVuY3Rpb24nKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmJpbmQoZWxlbSB8fCBvYmopO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0ZXN0UHJvcHNBbGwoIHByb3AsIHByZWZpeGVkLCBlbGVtICkge1xuXG4gICAgICAgIHZhciB1Y1Byb3AgID0gcHJvcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3Auc2xpY2UoMSksXG4gICAgICAgICAgICBwcm9wcyAgID0gKHByb3AgKyAnICcgKyBjc3NvbVByZWZpeGVzLmpvaW4odWNQcm9wICsgJyAnKSArIHVjUHJvcCkuc3BsaXQoJyAnKTtcblxuICAgICAgICAgICAgaWYoaXMocHJlZml4ZWQsIFwic3RyaW5nXCIpIHx8IGlzKHByZWZpeGVkLCBcInVuZGVmaW5lZFwiKSkge1xuICAgICAgICAgIHJldHVybiB0ZXN0UHJvcHMocHJvcHMsIHByZWZpeGVkKTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wcyA9IChwcm9wICsgJyAnICsgKGRvbVByZWZpeGVzKS5qb2luKHVjUHJvcCArICcgJykgKyB1Y1Byb3ApLnNwbGl0KCcgJyk7XG4gICAgICAgICAgcmV0dXJuIHRlc3RET01Qcm9wcyhwcm9wcywgcHJlZml4ZWQsIGVsZW0pO1xuICAgICAgICB9XG4gICAgfSAgICB0ZXN0c1sndG91Y2gnXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYm9vbDtcblxuICAgICAgICBpZigoJ29udG91Y2hzdGFydCcgaW4gd2luZG93KSB8fCB3aW5kb3cuRG9jdW1lbnRUb3VjaCAmJiBkb2N1bWVudCBpbnN0YW5jZW9mIERvY3VtZW50VG91Y2gpIHtcbiAgICAgICAgICBib29sID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbmplY3RFbGVtZW50V2l0aFN0eWxlcyhbJ0BtZWRpYSAoJyxwcmVmaXhlcy5qb2luKCd0b3VjaC1lbmFibGVkKSwoJyksbW9kLCcpJywneyNtb2Rlcm5penJ7dG9wOjlweDtwb3NpdGlvbjphYnNvbHV0ZX19J10uam9pbignJyksIGZ1bmN0aW9uKCBub2RlICkge1xuICAgICAgICAgICAgYm9vbCA9IG5vZGUub2Zmc2V0VG9wID09PSA5O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJvb2w7XG4gICAgfTtcbiAgICB0ZXN0c1snY3NzYW5pbWF0aW9ucyddID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0ZXN0UHJvcHNBbGwoJ2FuaW1hdGlvbk5hbWUnKTtcbiAgICB9O1xuXG5cbiAgICB0ZXN0c1snY3NzdHJhbnNpdGlvbnMnXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGVzdFByb3BzQWxsKCd0cmFuc2l0aW9uJyk7XG4gICAgfTtcblxuXG5cbiAgICB0ZXN0c1snc3ZnJ10gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TICYmICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLnN2ZywgJ3N2ZycpLmNyZWF0ZVNWR1JlY3Q7XG4gICAgfTtcblxuICAgIHRlc3RzWydpbmxpbmVzdmcnXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmlubmVySFRNTCA9ICc8c3ZnLz4nO1xuICAgICAgcmV0dXJuIChkaXYuZmlyc3RDaGlsZCAmJiBkaXYuZmlyc3RDaGlsZC5uYW1lc3BhY2VVUkkpID09IG5zLnN2ZztcbiAgICB9OyAgICBmb3IgKCB2YXIgZmVhdHVyZSBpbiB0ZXN0cyApIHtcbiAgICAgICAgaWYgKCBoYXNPd25Qcm9wKHRlc3RzLCBmZWF0dXJlKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVOYW1lICA9IGZlYXR1cmUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIE1vZGVybml6cltmZWF0dXJlTmFtZV0gPSB0ZXN0c1tmZWF0dXJlXSgpO1xuXG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goKE1vZGVybml6cltmZWF0dXJlTmFtZV0gPyAnJyA6ICduby0nKSArIGZlYXR1cmVOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbiAgICAgTW9kZXJuaXpyLmFkZFRlc3QgPSBmdW5jdGlvbiAoIGZlYXR1cmUsIHRlc3QgKSB7XG4gICAgICAgaWYgKCB0eXBlb2YgZmVhdHVyZSA9PSAnb2JqZWN0JyApIHtcbiAgICAgICAgIGZvciAoIHZhciBrZXkgaW4gZmVhdHVyZSApIHtcbiAgICAgICAgICAgaWYgKCBoYXNPd25Qcm9wKCBmZWF0dXJlLCBrZXkgKSApIHtcbiAgICAgICAgICAgICBNb2Rlcm5penIuYWRkVGVzdCgga2V5LCBmZWF0dXJlWyBrZXkgXSApO1xuICAgICAgICAgICB9XG4gICAgICAgICB9XG4gICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgZmVhdHVyZSA9IGZlYXR1cmUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgaWYgKCBNb2Rlcm5penJbZmVhdHVyZV0gIT09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTW9kZXJuaXpyO1xuICAgICAgICAgfVxuXG4gICAgICAgICB0ZXN0ID0gdHlwZW9mIHRlc3QgPT0gJ2Z1bmN0aW9uJyA/IHRlc3QoKSA6IHRlc3Q7XG5cbiAgICAgICAgIGlmICh0eXBlb2YgZW5hYmxlQ2xhc3NlcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlbmFibGVDbGFzc2VzKSB7XG4gICAgICAgICAgIGRvY0VsZW1lbnQuY2xhc3NOYW1lICs9ICcgJyArICh0ZXN0ID8gJycgOiAnbm8tJykgKyBmZWF0dXJlO1xuICAgICAgICAgfVxuICAgICAgICAgTW9kZXJuaXpyW2ZlYXR1cmVdID0gdGVzdDtcblxuICAgICAgIH1cblxuICAgICAgIHJldHVybiBNb2Rlcm5penI7IFxuICAgICB9O1xuXG5cbiAgICBzZXRDc3MoJycpO1xuICAgIG1vZEVsZW0gPSBpbnB1dEVsZW0gPSBudWxsO1xuXG4gICAgOyhmdW5jdGlvbih3aW5kb3csIGRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gPSAnMy43LjAnO1xuXG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHdpbmRvdy5odG1sNSB8fCB7fTtcblxuICAgICAgICAgICAgdmFyIHJlU2tpcCA9IC9ePHxeKD86YnV0dG9ufG1hcHxzZWxlY3R8dGV4dGFyZWF8b2JqZWN0fGlmcmFtZXxvcHRpb258b3B0Z3JvdXApJC9pO1xuXG4gICAgICAgICAgICB2YXIgc2F2ZUNsb25lcyA9IC9eKD86YXxifGNvZGV8ZGl2fGZpZWxkc2V0fGgxfGgyfGgzfGg0fGg1fGg2fGl8bGFiZWx8bGl8b2x8cHxxfHNwYW58c3Ryb25nfHN0eWxlfHRhYmxlfHRib2R5fHRkfHRofHRyfHVsKSQvaTtcblxuICAgICAgICAgICAgdmFyIHN1cHBvcnRzSHRtbDVTdHlsZXM7XG5cbiAgICAgICAgICAgIHZhciBleHBhbmRvID0gJ19odG1sNXNoaXYnO1xuXG4gICAgICAgICAgICB2YXIgZXhwYW5JRCA9IDA7XG5cbiAgICAgICAgICAgIHZhciBleHBhbmRvRGF0YSA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgc3VwcG9ydHNVbmtub3duRWxlbWVudHM7XG5cbiAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgIGEuaW5uZXJIVE1MID0gJzx4eXo+PC94eXo+JztcbiAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHNIdG1sNVN0eWxlcyA9ICgnaGlkZGVuJyBpbiBhKTtcblxuICAgICAgICAgICAgc3VwcG9ydHNVbmtub3duRWxlbWVudHMgPSBhLmNoaWxkTm9kZXMubGVuZ3RoID09IDEgfHwgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpKCdhJyk7XG4gICAgICAgICAgICAgIHZhciBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHR5cGVvZiBmcmFnLmNsb25lTm9kZSA9PSAndW5kZWZpbmVkJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBmcmFnLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgPT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgZnJhZy5jcmVhdGVFbGVtZW50ID09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KCkpO1xuICAgICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgICAgICAgICBzdXBwb3J0c0h0bWw1U3R5bGVzID0gdHJ1ZTtcbiAgICAgICAgICAgIHN1cHBvcnRzVW5rbm93bkVsZW1lbnRzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSgpKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gYWRkU3R5bGVTaGVldChvd25lckRvY3VtZW50LCBjc3NUZXh0KSB7XG4gICAgICAgICAgdmFyIHAgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKSxcbiAgICAgICAgICBwYXJlbnQgPSBvd25lckRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgb3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICAgICAgICBwLmlubmVySFRNTCA9ICd4PHN0eWxlPicgKyBjc3NUZXh0ICsgJzwvc3R5bGU+JztcbiAgICAgICAgICByZXR1cm4gcGFyZW50Lmluc2VydEJlZm9yZShwLmxhc3RDaGlsZCwgcGFyZW50LmZpcnN0Q2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEVsZW1lbnRzKCkge1xuICAgICAgICAgIHZhciBlbGVtZW50cyA9IGh0bWw1LmVsZW1lbnRzO1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgZWxlbWVudHMgPT0gJ3N0cmluZycgPyBlbGVtZW50cy5zcGxpdCgnICcpIDogZWxlbWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0RXhwYW5kb0RhdGEob3duZXJEb2N1bWVudCkge1xuICAgICAgICAgIHZhciBkYXRhID0gZXhwYW5kb0RhdGFbb3duZXJEb2N1bWVudFtleHBhbmRvXV07XG4gICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICBkYXRhID0ge307XG4gICAgICAgICAgICBleHBhbklEKys7XG4gICAgICAgICAgICBvd25lckRvY3VtZW50W2V4cGFuZG9dID0gZXhwYW5JRDtcbiAgICAgICAgICAgIGV4cGFuZG9EYXRhW2V4cGFuSURdID0gZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudChub2RlTmFtZSwgb3duZXJEb2N1bWVudCwgZGF0YSl7XG4gICAgICAgICAgaWYgKCFvd25lckRvY3VtZW50KSB7XG4gICAgICAgICAgICBvd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHN1cHBvcnRzVW5rbm93bkVsZW1lbnRzKXtcbiAgICAgICAgICAgIHJldHVybiBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIGRhdGEgPSBnZXRFeHBhbmRvRGF0YShvd25lckRvY3VtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG5vZGU7XG5cbiAgICAgICAgICBpZiAoZGF0YS5jYWNoZVtub2RlTmFtZV0pIHtcbiAgICAgICAgICAgIG5vZGUgPSBkYXRhLmNhY2hlW25vZGVOYW1lXS5jbG9uZU5vZGUoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNhdmVDbG9uZXMudGVzdChub2RlTmFtZSkpIHtcbiAgICAgICAgICAgIG5vZGUgPSAoZGF0YS5jYWNoZVtub2RlTmFtZV0gPSBkYXRhLmNyZWF0ZUVsZW0obm9kZU5hbWUpKS5jbG9uZU5vZGUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZSA9IGRhdGEuY3JlYXRlRWxlbShub2RlTmFtZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2FuSGF2ZUNoaWxkcmVuICYmICFyZVNraXAudGVzdChub2RlTmFtZSkgJiYgIW5vZGUudGFnVXJuID8gZGF0YS5mcmFnLmFwcGVuZENoaWxkKG5vZGUpIDogbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVEb2N1bWVudEZyYWdtZW50KG93bmVyRG9jdW1lbnQsIGRhdGEpe1xuICAgICAgICAgIGlmICghb3duZXJEb2N1bWVudCkge1xuICAgICAgICAgICAgb3duZXJEb2N1bWVudCA9IGRvY3VtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihzdXBwb3J0c1Vua25vd25FbGVtZW50cyl7XG4gICAgICAgICAgICByZXR1cm4gb3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRhdGEgPSBkYXRhIHx8IGdldEV4cGFuZG9EYXRhKG93bmVyRG9jdW1lbnQpO1xuICAgICAgICAgIHZhciBjbG9uZSA9IGRhdGEuZnJhZy5jbG9uZU5vZGUoKSxcbiAgICAgICAgICBpID0gMCxcbiAgICAgICAgICBlbGVtcyA9IGdldEVsZW1lbnRzKCksXG4gICAgICAgICAgbCA9IGVsZW1zLmxlbmd0aDtcbiAgICAgICAgICBmb3IoO2k8bDtpKyspe1xuICAgICAgICAgICAgY2xvbmUuY3JlYXRlRWxlbWVudChlbGVtc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBzaGl2TWV0aG9kcyhvd25lckRvY3VtZW50LCBkYXRhKSB7XG4gICAgICAgICAgaWYgKCFkYXRhLmNhY2hlKSB7XG4gICAgICAgICAgICBkYXRhLmNhY2hlID0ge307XG4gICAgICAgICAgICBkYXRhLmNyZWF0ZUVsZW0gPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ7XG4gICAgICAgICAgICBkYXRhLmNyZWF0ZUZyYWcgPSBvd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ7XG4gICAgICAgICAgICBkYXRhLmZyYWcgPSBkYXRhLmNyZWF0ZUZyYWcoKTtcbiAgICAgICAgICB9XG5cblxuICAgICAgICAgIG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKG5vZGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaHRtbDUuc2hpdk1ldGhvZHMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuY3JlYXRlRWxlbShub2RlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChub2RlTmFtZSwgb3duZXJEb2N1bWVudCwgZGF0YSk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIG93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IEZ1bmN0aW9uKCdoLGYnLCAncmV0dXJuIGZ1bmN0aW9uKCl7JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhciBuPWYuY2xvbmVOb2RlKCksYz1uLmNyZWF0ZUVsZW1lbnQ7JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2guc2hpdk1ldGhvZHMmJignICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRFbGVtZW50cygpLmpvaW4oKS5yZXBsYWNlKC9bXFx3XFwtXSsvZywgZnVuY3Rpb24obm9kZU5hbWUpIHtcbiAgICAgICAgICAgIGRhdGEuY3JlYXRlRWxlbShub2RlTmFtZSk7XG4gICAgICAgICAgICBkYXRhLmZyYWcuY3JlYXRlRWxlbWVudChub2RlTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gJ2MoXCInICsgbm9kZU5hbWUgKyAnXCIpJztcbiAgICAgICAgICB9KSArXG4gICAgICAgICAgICAnKTtyZXR1cm4gbn0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKGh0bWw1LCBkYXRhLmZyYWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNoaXZEb2N1bWVudChvd25lckRvY3VtZW50KSB7XG4gICAgICAgICAgaWYgKCFvd25lckRvY3VtZW50KSB7XG4gICAgICAgICAgICBvd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBkYXRhID0gZ2V0RXhwYW5kb0RhdGEob3duZXJEb2N1bWVudCk7XG5cbiAgICAgICAgICBpZiAoaHRtbDUuc2hpdkNTUyAmJiAhc3VwcG9ydHNIdG1sNVN0eWxlcyAmJiAhZGF0YS5oYXNDU1MpIHtcbiAgICAgICAgICAgIGRhdGEuaGFzQ1NTID0gISFhZGRTdHlsZVNoZWV0KG93bmVyRG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcnRpY2xlLGFzaWRlLGRpYWxvZyxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGhncm91cCxtYWluLG5hdixzZWN0aW9ue2Rpc3BsYXk6YmxvY2t9JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFya3tiYWNrZ3JvdW5kOiNGRjA7Y29sb3I6IzAwMH0nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZW1wbGF0ZXtkaXNwbGF5Om5vbmV9J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXN1cHBvcnRzVW5rbm93bkVsZW1lbnRzKSB7XG4gICAgICAgICAgICBzaGl2TWV0aG9kcyhvd25lckRvY3VtZW50LCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG93bmVyRG9jdW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGh0bWw1ID0ge1xuXG4gICAgICAgICAgICAgICAgJ2VsZW1lbnRzJzogb3B0aW9ucy5lbGVtZW50cyB8fCAnYWJiciBhcnRpY2xlIGFzaWRlIGF1ZGlvIGJkaSBjYW52YXMgZGF0YSBkYXRhbGlzdCBkZXRhaWxzIGRpYWxvZyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBtYWluIG1hcmsgbWV0ZXIgbmF2IG91dHB1dCBwcm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGVtcGxhdGUgdGltZSB2aWRlbycsXG5cbiAgICAgICAgICAgICAgICAndmVyc2lvbic6IHZlcnNpb24sXG5cbiAgICAgICAgICAgICAgICAnc2hpdkNTUyc6IChvcHRpb25zLnNoaXZDU1MgIT09IGZhbHNlKSxcblxuICAgICAgICAgICAgICAgICdzdXBwb3J0c1Vua25vd25FbGVtZW50cyc6IHN1cHBvcnRzVW5rbm93bkVsZW1lbnRzLFxuXG4gICAgICAgICAgICAgICAgJ3NoaXZNZXRob2RzJzogKG9wdGlvbnMuc2hpdk1ldGhvZHMgIT09IGZhbHNlKSxcblxuICAgICAgICAgICAgICAgICd0eXBlJzogJ2RlZmF1bHQnLFxuXG4gICAgICAgICAgICAgICAgJ3NoaXZEb2N1bWVudCc6IHNoaXZEb2N1bWVudCxcblxuICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQsXG5cbiAgICAgICAgICAgICAgICBjcmVhdGVEb2N1bWVudEZyYWdtZW50OiBjcmVhdGVEb2N1bWVudEZyYWdtZW50XG4gICAgICAgIH07XG5cbiAgICAgICAgICAgIHdpbmRvdy5odG1sNSA9IGh0bWw1O1xuXG4gICAgICAgICAgICBzaGl2RG9jdW1lbnQoZG9jdW1lbnQpO1xuXG4gICAgfSh0aGlzLCBkb2N1bWVudCkpO1xuXG4gICAgTW9kZXJuaXpyLl92ZXJzaW9uICAgICAgPSB2ZXJzaW9uO1xuXG4gICAgTW9kZXJuaXpyLl9wcmVmaXhlcyAgICAgPSBwcmVmaXhlcztcbiAgICBNb2Rlcm5penIuX2RvbVByZWZpeGVzICA9IGRvbVByZWZpeGVzO1xuICAgIE1vZGVybml6ci5fY3Nzb21QcmVmaXhlcyAgPSBjc3NvbVByZWZpeGVzO1xuXG5cblxuICAgIE1vZGVybml6ci50ZXN0UHJvcCAgICAgID0gZnVuY3Rpb24ocHJvcCl7XG4gICAgICAgIHJldHVybiB0ZXN0UHJvcHMoW3Byb3BdKTtcbiAgICB9O1xuXG4gICAgTW9kZXJuaXpyLnRlc3RBbGxQcm9wcyAgPSB0ZXN0UHJvcHNBbGw7XG5cblxuICAgIE1vZGVybml6ci50ZXN0U3R5bGVzICAgID0gaW5qZWN0RWxlbWVudFdpdGhTdHlsZXM7XG4gICAgTW9kZXJuaXpyLnByZWZpeGVkICAgICAgPSBmdW5jdGlvbihwcm9wLCBvYmosIGVsZW0pe1xuICAgICAgaWYoIW9iaikge1xuICAgICAgICByZXR1cm4gdGVzdFByb3BzQWxsKHByb3AsICdwZngnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGVzdFByb3BzQWxsKHByb3AsIG9iaiwgZWxlbSk7XG4gICAgICB9XG4gICAgfTtcblxuXG4gICAgZG9jRWxlbWVudC5jbGFzc05hbWUgPSBkb2NFbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKC8oXnxcXHMpbm8tanMoXFxzfCQpLywgJyQxJDInKSArXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5hYmxlQ2xhc3NlcyA/ICcganMgJyArIGNsYXNzZXMuam9pbignICcpIDogJycpO1xuXG4gICAgcmV0dXJuIE1vZGVybml6cjtcblxufSkodGhpcywgdGhpcy5kb2N1bWVudCk7XG4vKnllcG5vcGUxLjUuNHxXVEZQTCovXG4oZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuXCJbb2JqZWN0IEZ1bmN0aW9uXVwiPT1vLmNhbGwoYSl9ZnVuY3Rpb24gZShhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYX1mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGcoYSl7cmV0dXJuIWF8fFwibG9hZGVkXCI9PWF8fFwiY29tcGxldGVcIj09YXx8XCJ1bmluaXRpYWxpemVkXCI9PWF9ZnVuY3Rpb24gaCgpe3ZhciBhPXAuc2hpZnQoKTtxPTEsYT9hLnQ/bShmdW5jdGlvbigpeyhcImNcIj09YS50P0IuaW5qZWN0Q3NzOkIuaW5qZWN0SnMpKGEucywwLGEuYSxhLngsYS5lLDEpfSwwKTooYSgpLGgoKSk6cT0wfWZ1bmN0aW9uIGkoYSxjLGQsZSxmLGksail7ZnVuY3Rpb24gayhiKXtpZighbyYmZyhsLnJlYWR5U3RhdGUpJiYodS5yPW89MSwhcSYmaCgpLGwub25sb2FkPWwub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsYikpe1wiaW1nXCIhPWEmJm0oZnVuY3Rpb24oKXt0LnJlbW92ZUNoaWxkKGwpfSw1MCk7Zm9yKHZhciBkIGluIHlbY10peVtjXS5oYXNPd25Qcm9wZXJ0eShkKSYmeVtjXVtkXS5vbmxvYWQoKX19dmFyIGo9anx8Qi5lcnJvclRpbWVvdXQsbD1iLmNyZWF0ZUVsZW1lbnQoYSksbz0wLHI9MCx1PXt0OmQsczpjLGU6ZixhOmkseDpqfTsxPT09eVtjXSYmKHI9MSx5W2NdPVtdKSxcIm9iamVjdFwiPT1hP2wuZGF0YT1jOihsLnNyYz1jLGwudHlwZT1hKSxsLndpZHRoPWwuaGVpZ2h0PVwiMFwiLGwub25lcnJvcj1sLm9ubG9hZD1sLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2suY2FsbCh0aGlzLHIpfSxwLnNwbGljZShlLDAsdSksXCJpbWdcIiE9YSYmKHJ8fDI9PT15W2NdPyh0Lmluc2VydEJlZm9yZShsLHM/bnVsbDpuKSxtKGssaikpOnlbY10ucHVzaChsKSl9ZnVuY3Rpb24gaihhLGIsYyxkLGYpe3JldHVybiBxPTAsYj1ifHxcImpcIixlKGEpP2koXCJjXCI9PWI/djp1LGEsYix0aGlzLmkrKyxjLGQsZik6KHAuc3BsaWNlKHRoaXMuaSsrLDAsYSksMT09cC5sZW5ndGgmJmgoKSksdGhpc31mdW5jdGlvbiBrKCl7dmFyIGE9QjtyZXR1cm4gYS5sb2FkZXI9e2xvYWQ6aixpOjB9LGF9dmFyIGw9Yi5kb2N1bWVudEVsZW1lbnQsbT1hLnNldFRpbWVvdXQsbj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpWzBdLG89e30udG9TdHJpbmcscD1bXSxxPTAscj1cIk1vekFwcGVhcmFuY2VcImluIGwuc3R5bGUscz1yJiYhIWIuY3JlYXRlUmFuZ2UoKS5jb21wYXJlTm9kZSx0PXM/bDpuLnBhcmVudE5vZGUsbD1hLm9wZXJhJiZcIltvYmplY3QgT3BlcmFdXCI9PW8uY2FsbChhLm9wZXJhKSxsPSEhYi5hdHRhY2hFdmVudCYmIWwsdT1yP1wib2JqZWN0XCI6bD9cInNjcmlwdFwiOlwiaW1nXCIsdj1sP1wic2NyaXB0XCI6dSx3PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09by5jYWxsKGEpfSx4PVtdLHk9e30sej17dGltZW91dDpmdW5jdGlvbihhLGIpe3JldHVybiBiLmxlbmd0aCYmKGEudGltZW91dD1iWzBdKSxhfX0sQSxCO0I9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgYT1hLnNwbGl0KFwiIVwiKSxiPXgubGVuZ3RoLGM9YS5wb3AoKSxkPWEubGVuZ3RoLGM9e3VybDpjLG9yaWdVcmw6YyxwcmVmaXhlczphfSxlLGYsZztmb3IoZj0wO2Y8ZDtmKyspZz1hW2ZdLnNwbGl0KFwiPVwiKSwoZT16W2cuc2hpZnQoKV0pJiYoYz1lKGMsZykpO2ZvcihmPTA7ZjxiO2YrKyljPXhbZl0oYyk7cmV0dXJuIGN9ZnVuY3Rpb24gZyhhLGUsZixnLGgpe3ZhciBpPWIoYSksaj1pLmF1dG9DYWxsYmFjaztpLnVybC5zcGxpdChcIi5cIikucG9wKCkuc3BsaXQoXCI/XCIpLnNoaWZ0KCksaS5ieXBhc3N8fChlJiYoZT1kKGUpP2U6ZVthXXx8ZVtnXXx8ZVthLnNwbGl0KFwiL1wiKS5wb3AoKS5zcGxpdChcIj9cIilbMF1dKSxpLmluc3RlYWQ/aS5pbnN0ZWFkKGEsZSxmLGcsaCk6KHlbaS51cmxdP2kubm9leGVjPSEwOnlbaS51cmxdPTEsZi5sb2FkKGkudXJsLGkuZm9yY2VDU1N8fCFpLmZvcmNlSlMmJlwiY3NzXCI9PWkudXJsLnNwbGl0KFwiLlwiKS5wb3AoKS5zcGxpdChcIj9cIikuc2hpZnQoKT9cImNcIjpjLGkubm9leGVjLGkuYXR0cnMsaS50aW1lb3V0KSwoZChlKXx8ZChqKSkmJmYubG9hZChmdW5jdGlvbigpe2soKSxlJiZlKGkub3JpZ1VybCxoLGcpLGomJmooaS5vcmlnVXJsLGgsZykseVtpLnVybF09Mn0pKSl9ZnVuY3Rpb24gaChhLGIpe2Z1bmN0aW9uIGMoYSxjKXtpZihhKXtpZihlKGEpKWN8fChqPWZ1bmN0aW9uKCl7dmFyIGE9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2suYXBwbHkodGhpcyxhKSxsKCl9KSxnKGEsaixiLDAsaCk7ZWxzZSBpZihPYmplY3QoYSk9PT1hKWZvcihuIGluIG09ZnVuY3Rpb24oKXt2YXIgYj0wLGM7Zm9yKGMgaW4gYSlhLmhhc093blByb3BlcnR5KGMpJiZiKys7cmV0dXJuIGJ9KCksYSlhLmhhc093blByb3BlcnR5KG4pJiYoIWMmJiEtLW0mJihkKGopP2o9ZnVuY3Rpb24oKXt2YXIgYT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7ay5hcHBseSh0aGlzLGEpLGwoKX06altuXT1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7YSYmYS5hcHBseSh0aGlzLGIpLGwoKX19KGtbbl0pKSxnKGFbbl0saixiLG4saCkpfWVsc2UhYyYmbCgpfXZhciBoPSEhYS50ZXN0LGk9YS5sb2FkfHxhLmJvdGgsaj1hLmNhbGxiYWNrfHxmLGs9aixsPWEuY29tcGxldGV8fGYsbSxuO2MoaD9hLnllcDphLm5vcGUsISFpKSxpJiZjKGkpfXZhciBpLGosbD10aGlzLnllcG5vcGUubG9hZGVyO2lmKGUoYSkpZyhhLDAsbCwwKTtlbHNlIGlmKHcoYSkpZm9yKGk9MDtpPGEubGVuZ3RoO2krKylqPWFbaV0sZShqKT9nKGosMCxsLDApOncoaik/QihqKTpPYmplY3Qoaik9PT1qJiZoKGosbCk7ZWxzZSBPYmplY3QoYSk9PT1hJiZoKGEsbCl9LEIuYWRkUHJlZml4PWZ1bmN0aW9uKGEsYil7elthXT1ifSxCLmFkZEZpbHRlcj1mdW5jdGlvbihhKXt4LnB1c2goYSl9LEIuZXJyb3JUaW1lb3V0PTFlNCxudWxsPT1iLnJlYWR5U3RhdGUmJmIuYWRkRXZlbnRMaXN0ZW5lciYmKGIucmVhZHlTdGF0ZT1cImxvYWRpbmdcIixiLmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsQT1mdW5jdGlvbigpe2IucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIixBLDApLGIucmVhZHlTdGF0ZT1cImNvbXBsZXRlXCJ9LDApKSxhLnllcG5vcGU9aygpLGEueWVwbm9wZS5leGVjdXRlU3RhY2s9aCxhLnllcG5vcGUuaW5qZWN0SnM9ZnVuY3Rpb24oYSxjLGQsZSxpLGope3ZhciBrPWIuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSxsLG8sZT1lfHxCLmVycm9yVGltZW91dDtrLnNyYz1hO2ZvcihvIGluIGQpay5zZXRBdHRyaWJ1dGUobyxkW29dKTtjPWo/aDpjfHxmLGsub25yZWFkeXN0YXRlY2hhbmdlPWsub25sb2FkPWZ1bmN0aW9uKCl7IWwmJmcoay5yZWFkeVN0YXRlKSYmKGw9MSxjKCksay5vbmxvYWQ9ay5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCl9LG0oZnVuY3Rpb24oKXtsfHwobD0xLGMoMSkpfSxlKSxpP2sub25sb2FkKCk6bi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShrLG4pfSxhLnllcG5vcGUuaW5qZWN0Q3NzPWZ1bmN0aW9uKGEsYyxkLGUsZyxpKXt2YXIgZT1iLmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLGosYz1pP2g6Y3x8ZjtlLmhyZWY9YSxlLnJlbD1cInN0eWxlc2hlZXRcIixlLnR5cGU9XCJ0ZXh0L2Nzc1wiO2ZvcihqIGluIGQpZS5zZXRBdHRyaWJ1dGUoaixkW2pdKTtnfHwobi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLG4pLG0oYywwKSl9fSkodGhpcyxkb2N1bWVudCk7XG5Nb2Rlcm5penIubG9hZD1mdW5jdGlvbigpe3llcG5vcGUuYXBwbHkod2luZG93LFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKTt9O1xuOyIsIi8qKlxuICoganF1ZXJ5LmRsbWVudS5qcyB2MS4wLjFcbiAqIGh0dHA6Ly93d3cuY29kcm9wcy5jb21cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICogXG4gKiBDb3B5cmlnaHQgMjAxMywgQ29kcm9wc1xuICogaHR0cDovL3d3dy5jb2Ryb3BzLmNvbVxuICovXG4oZnVuY3Rpb24oJCl7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdC8vIGdsb2JhbFxuXHR2YXIgTW9kZXJuaXpyID0gd2luZG93Lk1vZGVybml6ciwgJGJvZHkgPSAkKCAnYm9keScgKTtcblxuXHQkLkRMTWVudSA9IGZ1bmN0aW9uKCBvcHRpb25zLCBlbGVtZW50ICkge1xuXHRcdHRoaXMuJGVsID0gJCggZWxlbWVudCApO1xuXHRcdHRoaXMuX2luaXQoIG9wdGlvbnMgKTtcblx0fTtcblxuXHQvLyB0aGUgb3B0aW9uc1xuXHQkLkRMTWVudS5kZWZhdWx0cyA9IHtcblx0XHQvLyBjbGFzc2VzIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHNcblx0XHRhbmltYXRpb25DbGFzc2VzIDogeyBjbGFzc2luIDogJ2RsLWFuaW1hdGUtaW4tMScsIGNsYXNzb3V0IDogJ2RsLWFuaW1hdGUtb3V0LTEnIH0sXG5cdFx0Ly8gY2FsbGJhY2s6IGNsaWNrIGEgbGluayB0aGF0IGhhcyBhIHN1YiBtZW51XG5cdFx0Ly8gZWwgaXMgdGhlIGxpbmsgZWxlbWVudCAobGkpOyBuYW1lIGlzIHRoZSBsZXZlbCBuYW1lXG5cdFx0b25MZXZlbENsaWNrIDogZnVuY3Rpb24oIGVsLCBuYW1lICkgeyByZXR1cm4gZmFsc2U7IH0sXG5cdFx0Ly8gY2FsbGJhY2s6IGNsaWNrIGEgbGluayB0aGF0IGRvZXMgbm90IGhhdmUgYSBzdWIgbWVudVxuXHRcdC8vIGVsIGlzIHRoZSBsaW5rIGVsZW1lbnQgKGxpKTsgZXYgaXMgdGhlIGV2ZW50IG9ialxuXHRcdG9uTGlua0NsaWNrIDogZnVuY3Rpb24oIGVsLCBldiApIHsgcmV0dXJuIGZhbHNlOyB9XG5cdH07XG5cblx0JC5ETE1lbnUucHJvdG90eXBlID0ge1xuXHRcdF9pbml0IDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHRcdC8vIG9wdGlvbnNcblx0XHRcdHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKCB0cnVlLCB7fSwgJC5ETE1lbnUuZGVmYXVsdHMsIG9wdGlvbnMgKTtcblx0XHRcdC8vIGNhY2hlIHNvbWUgZWxlbWVudHMgYW5kIGluaXRpYWxpemUgc29tZSB2YXJpYWJsZXNcblx0XHRcdHRoaXMuX2NvbmZpZygpO1xuXHRcdFx0XG5cdFx0XHR2YXIgYW5pbUVuZEV2ZW50TmFtZXMgPSB7XG5cdFx0XHRcdFx0J1dlYmtpdEFuaW1hdGlvbicgOiAnd2Via2l0QW5pbWF0aW9uRW5kJyxcblx0XHRcdFx0XHQnT0FuaW1hdGlvbicgOiAnb0FuaW1hdGlvbkVuZCcsXG5cdFx0XHRcdFx0J21zQW5pbWF0aW9uJyA6ICdNU0FuaW1hdGlvbkVuZCcsXG5cdFx0XHRcdFx0J2FuaW1hdGlvbicgOiAnYW5pbWF0aW9uZW5kJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0cmFuc0VuZEV2ZW50TmFtZXMgPSB7XG5cdFx0XHRcdFx0J1dlYmtpdFRyYW5zaXRpb24nIDogJ3dlYmtpdFRyYW5zaXRpb25FbmQnLFxuXHRcdFx0XHRcdCdNb3pUcmFuc2l0aW9uJyA6ICd0cmFuc2l0aW9uZW5kJyxcblx0XHRcdFx0XHQnT1RyYW5zaXRpb24nIDogJ29UcmFuc2l0aW9uRW5kJyxcblx0XHRcdFx0XHQnbXNUcmFuc2l0aW9uJyA6ICdNU1RyYW5zaXRpb25FbmQnLFxuXHRcdFx0XHRcdCd0cmFuc2l0aW9uJyA6ICd0cmFuc2l0aW9uZW5kJ1xuXHRcdFx0XHR9O1xuXHRcdFx0Ly8gYW5pbWF0aW9uIGVuZCBldmVudCBuYW1lXG5cdFx0XHR0aGlzLmFuaW1FbmRFdmVudE5hbWUgPSBhbmltRW5kRXZlbnROYW1lc1sgTW9kZXJuaXpyLnByZWZpeGVkKCAnYW5pbWF0aW9uJyApIF0gKyAnLmRsbWVudSc7XG5cdFx0XHQvLyB0cmFuc2l0aW9uIGVuZCBldmVudCBuYW1lXG5cdFx0XHR0aGlzLnRyYW5zRW5kRXZlbnROYW1lID0gdHJhbnNFbmRFdmVudE5hbWVzWyBNb2Rlcm5penIucHJlZml4ZWQoICd0cmFuc2l0aW9uJyApIF0gKyAnLmRsbWVudScsXG5cdFx0XHQvLyBzdXBwb3J0IGZvciBjc3MgYW5pbWF0aW9ucyBhbmQgY3NzIHRyYW5zaXRpb25zXG5cdFx0XHR0aGlzLnN1cHBvcnRBbmltYXRpb25zID0gTW9kZXJuaXpyLmNzc2FuaW1hdGlvbnMsXG5cdFx0XHR0aGlzLnN1cHBvcnRUcmFuc2l0aW9ucyA9IE1vZGVybml6ci5jc3N0cmFuc2l0aW9ucztcblxuXG4gICAgICAvKipcbiAgICAgICAqIERMb29tIFBhdGNoIGZvciBBbmRyb2lkIE1vYmlsZSBCcm93c2VyIDwgNFxuICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL2NvZHJvcHMvUmVzcG9uc2l2ZU11bHRpTGV2ZWxNZW51L2lzc3Vlcy8xMlxuICAgICAgICogXG4gICAgICAgKiBUaGUgcGF0Y2ggZGlzYWJsZWQgYW5pbWF0aW9ucyBmb3IgYW55IGFuZHJvaWQgYnJvd3NlciwgdmVyc2lvbiA8IDQuXG4gICAgICAgKiBXZSB3ZXJlIHN0aWxsIGhhdmluZyB0cm91YmxlIHdpdGggdmVyc2lvbiA0LjQsIHNvIEkgZGlzYWJsZWQgXG4gICAgICAgKiBhbmltYXRpb25zIGZvciBhbGwgc3RvY2sgYW5kcm9pZCBidXNpbmVzcyBhbmQgYWRkZWQgc29tZSBleHRyYSBsb2dpY1xuICAgICAgICogc28gQW5kcm9pZCBDaHJvbWUvRkYgd291bGQgc3RpbGwgdXNlIGFuaW1hdGlvbnMuXG4gICAgICAgKi9cbiAgICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgICBpZiggdWEuaW5kZXhPZihcIkFuZHJvaWRcIikgPiAtMSAmJiB1YS5pbmRleE9mKFwiQ2hyb21lXCIpID09PSAtMSAmJiB1YS5pbmRleE9mKFwiRmlyZWZveFwiKSA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5zdXBwb3J0QW5pbWF0aW9ucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1cHBvcnRUcmFuc2l0aW9ucyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgLyogRW5kIERMb29tIFBhdGNoICovXG5cblxuXHRcdFx0dGhpcy5faW5pdEV2ZW50cygpO1xuXHRcdH0sXG5cdFx0X2NvbmZpZyA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5vcGVuID0gZmFsc2U7XG5cdFx0XHR0aGlzLiR0cmlnZ2VyID0gdGhpcy4kZWwuY2hpbGRyZW4oICcuZGwtdHJpZ2dlcicgKTtcblx0XHRcdHRoaXMuJG1lbnUgPSB0aGlzLiRlbC5jaGlsZHJlbiggJ3VsLmRsLW1lbnUnICk7XG5cdFx0XHR0aGlzLiRtZW51aXRlbXMgPSB0aGlzLiRtZW51LmZpbmQoICdsaTpub3QoLmRsLWJhY2spJyApO1xuXHRcdFx0dGhpcy4kZWwuZmluZCggJ3VsLmRsLXN1Ym1lbnUnICkucHJlcGVuZCggJzxsaSBjbGFzcz1cImRsLWJhY2tcIj48YSBocmVmPVwiI1wiPmJhY2s8L2E+PC9saT4nICk7XG5cdFx0XHR0aGlzLiRiYWNrID0gdGhpcy4kbWVudS5maW5kKCAnbGkuZGwtYmFjaycgKTtcblx0XHR9LFxuXHRcdF9pbml0RXZlbnRzIDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0dGhpcy4kdHJpZ2dlci5vbiggJ2NsaWNrLmRsbWVudScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcblx0XHRcdFx0aWYoIHNlbGYub3BlbiApIHtcblx0XHRcdFx0XHRzZWxmLl9jbG9zZU1lbnUoKTtcblx0XHRcdFx0fSBcblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0c2VsZi5fb3Blbk1lbnUoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdH0gKTtcblxuXHRcdFx0dGhpcy4kbWVudWl0ZW1zLm9uKCAnY2xpY2suZGxtZW51JywgZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRcblx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHRcdFx0dmFyICRpdGVtID0gJCh0aGlzKSxcblx0XHRcdFx0XHQkc3VibWVudSA9ICRpdGVtLmNoaWxkcmVuKCAndWwuZGwtc3VibWVudScgKTtcblxuXHRcdFx0XHRpZiggJHN1Ym1lbnUubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0XHRcdHZhciAkZmx5aW4gPSAkc3VibWVudS5jbG9uZSgpLmNzcyggJ29wYWNpdHknLCAwICkuaW5zZXJ0QWZ0ZXIoIHNlbGYuJG1lbnUgKSxcblx0XHRcdFx0XHRcdG9uQW5pbWF0aW9uRW5kRm4gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0c2VsZi4kbWVudS5vZmYoIHNlbGYuYW5pbUVuZEV2ZW50TmFtZSApLnJlbW92ZUNsYXNzKCBzZWxmLm9wdGlvbnMuYW5pbWF0aW9uQ2xhc3Nlcy5jbGFzc291dCApLmFkZENsYXNzKCAnZGwtc3VidmlldycgKTtcblx0XHRcdFx0XHRcdFx0JGl0ZW0uYWRkQ2xhc3MoICdkbC1zdWJ2aWV3b3BlbicgKS5wYXJlbnRzKCAnLmRsLXN1YnZpZXdvcGVuOmZpcnN0JyApLnJlbW92ZUNsYXNzKCAnZGwtc3Vidmlld29wZW4nICkuYWRkQ2xhc3MoICdkbC1zdWJ2aWV3JyApO1xuXHRcdFx0XHRcdFx0XHQkZmx5aW4ucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHQkZmx5aW4uYWRkQ2xhc3MoIHNlbGYub3B0aW9ucy5hbmltYXRpb25DbGFzc2VzLmNsYXNzaW4gKTtcblx0XHRcdFx0XHRcdHNlbGYuJG1lbnUuYWRkQ2xhc3MoIHNlbGYub3B0aW9ucy5hbmltYXRpb25DbGFzc2VzLmNsYXNzb3V0ICk7XG5cdFx0XHRcdFx0XHRpZiggc2VsZi5zdXBwb3J0QW5pbWF0aW9ucyApIHtcblx0XHRcdFx0XHRcdFx0c2VsZi4kbWVudS5vbiggc2VsZi5hbmltRW5kRXZlbnROYW1lLCBvbkFuaW1hdGlvbkVuZEZuICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0b25BbmltYXRpb25FbmRGbi5jYWxsKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHNlbGYub3B0aW9ucy5vbkxldmVsQ2xpY2soICRpdGVtLCAkaXRlbS5jaGlsZHJlbiggJ2E6Zmlyc3QnICkudGV4dCgpICk7XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0c2VsZi5vcHRpb25zLm9uTGlua0NsaWNrKCAkaXRlbSwgZXZlbnQgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9ICk7XG5cblx0XHRcdHRoaXMuJGJhY2sub24oICdjbGljay5kbG1lbnUnLCBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdFxuXHRcdFx0XHR2YXIgJHRoaXMgPSAkKCB0aGlzICksXG5cdFx0XHRcdFx0JHN1Ym1lbnUgPSAkdGhpcy5wYXJlbnRzKCAndWwuZGwtc3VibWVudTpmaXJzdCcgKSxcblx0XHRcdFx0XHQkaXRlbSA9ICRzdWJtZW51LnBhcmVudCgpLFxuXG5cdFx0XHRcdFx0JGZseWluID0gJHN1Ym1lbnUuY2xvbmUoKS5pbnNlcnRBZnRlciggc2VsZi4kbWVudSApO1xuXG5cdFx0XHRcdHZhciBvbkFuaW1hdGlvbkVuZEZuID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0c2VsZi4kbWVudS5vZmYoIHNlbGYuYW5pbUVuZEV2ZW50TmFtZSApLnJlbW92ZUNsYXNzKCBzZWxmLm9wdGlvbnMuYW5pbWF0aW9uQ2xhc3Nlcy5jbGFzc2luICk7XG5cdFx0XHRcdFx0JGZseWluLnJlbW92ZSgpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdCRmbHlpbi5hZGRDbGFzcyggc2VsZi5vcHRpb25zLmFuaW1hdGlvbkNsYXNzZXMuY2xhc3NvdXQgKTtcblx0XHRcdFx0XHRzZWxmLiRtZW51LmFkZENsYXNzKCBzZWxmLm9wdGlvbnMuYW5pbWF0aW9uQ2xhc3Nlcy5jbGFzc2luICk7XG5cdFx0XHRcdFx0aWYoIHNlbGYuc3VwcG9ydEFuaW1hdGlvbnMgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLiRtZW51Lm9uKCBzZWxmLmFuaW1FbmRFdmVudE5hbWUsIG9uQW5pbWF0aW9uRW5kRm4gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRvbkFuaW1hdGlvbkVuZEZuLmNhbGwoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQkaXRlbS5yZW1vdmVDbGFzcyggJ2RsLXN1YnZpZXdvcGVuJyApO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHZhciAkc3VidmlldyA9ICR0aGlzLnBhcmVudHMoICcuZGwtc3VidmlldzpmaXJzdCcgKTtcblx0XHRcdFx0XHRpZiggJHN1YnZpZXcuaXMoICdsaScgKSApIHtcblx0XHRcdFx0XHRcdCRzdWJ2aWV3LmFkZENsYXNzKCAnZGwtc3Vidmlld29wZW4nICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCRzdWJ2aWV3LnJlbW92ZUNsYXNzKCAnZGwtc3VidmlldycgKTtcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0fSApO1xuXHRcdFx0XG5cdFx0fSxcblx0XHRjbG9zZU1lbnUgOiBmdW5jdGlvbigpIHtcblx0XHRcdGlmKCB0aGlzLm9wZW4gKSB7XG5cdFx0XHRcdHRoaXMuX2Nsb3NlTWVudSgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0X2Nsb3NlTWVudSA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLFxuXHRcdFx0XHRvblRyYW5zaXRpb25FbmRGbiA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHNlbGYuJG1lbnUub2ZmKCBzZWxmLnRyYW5zRW5kRXZlbnROYW1lICk7XG5cdFx0XHRcdFx0c2VsZi5fcmVzZXRNZW51KCk7XG5cdFx0XHRcdH07XG5cdFx0XHRcblx0XHRcdHRoaXMuJG1lbnUucmVtb3ZlQ2xhc3MoICdkbC1tZW51b3BlbicgKTtcblx0XHRcdHRoaXMuJG1lbnUuYWRkQ2xhc3MoICdkbC1tZW51LXRvZ2dsZScgKTtcblx0XHRcdHRoaXMuJHRyaWdnZXIucmVtb3ZlQ2xhc3MoICdkbC1hY3RpdmUnICk7XG5cdFx0XHRcblx0XHRcdGlmKCB0aGlzLnN1cHBvcnRUcmFuc2l0aW9ucyApIHtcblx0XHRcdFx0dGhpcy4kbWVudS5vbiggdGhpcy50cmFuc0VuZEV2ZW50TmFtZSwgb25UcmFuc2l0aW9uRW5kRm4gKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRvblRyYW5zaXRpb25FbmRGbi5jYWxsKCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMub3BlbiA9IGZhbHNlO1xuXHRcdH0sXG5cdFx0b3Blbk1lbnUgOiBmdW5jdGlvbigpIHtcblx0XHRcdGlmKCAhdGhpcy5vcGVuICkge1xuXHRcdFx0XHR0aGlzLl9vcGVuTWVudSgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0X29wZW5NZW51IDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0XHQvLyBjbGlja2luZyBzb21ld2hlcmUgZWxzZSBtYWtlcyB0aGUgbWVudSBjbG9zZVxuXHRcdFx0JGJvZHkub2ZmKCAnY2xpY2snICkub24oICdjbGljay5kbG1lbnUnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5fY2xvc2VNZW51KCkgO1xuXHRcdFx0fSApO1xuXHRcdFx0dGhpcy4kbWVudS5hZGRDbGFzcyggJ2RsLW1lbnVvcGVuIGRsLW1lbnUtdG9nZ2xlJyApLm9uKCB0aGlzLnRyYW5zRW5kRXZlbnROYW1lLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0JCggdGhpcyApLnJlbW92ZUNsYXNzKCAnZGwtbWVudS10b2dnbGUnICk7XG5cdFx0XHR9ICk7XG5cdFx0XHR0aGlzLiR0cmlnZ2VyLmFkZENsYXNzKCAnZGwtYWN0aXZlJyApO1xuXHRcdFx0dGhpcy5vcGVuID0gdHJ1ZTtcblx0XHR9LFxuXHRcdC8vIHJlc2V0cyB0aGUgbWVudSB0byBpdHMgb3JpZ2luYWwgc3RhdGUgKGZpcnN0IGxldmVsIG9mIG9wdGlvbnMpXG5cdFx0X3Jlc2V0TWVudSA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy4kbWVudS5yZW1vdmVDbGFzcyggJ2RsLXN1YnZpZXcnICk7XG5cdFx0XHR0aGlzLiRtZW51aXRlbXMucmVtb3ZlQ2xhc3MoICdkbC1zdWJ2aWV3IGRsLXN1YnZpZXdvcGVuJyApO1xuXHRcdH1cblx0fTtcblxuXHR2YXIgbG9nRXJyb3IgPSBmdW5jdGlvbiggbWVzc2FnZSApIHtcblx0XHRpZiAoIHdpbmRvdy5jb25zb2xlICkge1xuXHRcdFx0d2luZG93LmNvbnNvbGUuZXJyb3IoIG1lc3NhZ2UgKTtcblx0XHR9XG5cdH07XG5cblx0JC5mbi5kbG1lbnUgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHRpZiAoIHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJyApIHtcblx0XHRcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMSApO1xuXHRcdFx0dGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgaW5zdGFuY2UgPSAkLmRhdGEoIHRoaXMsICdkbG1lbnUnICk7XG5cdFx0XHRcdGlmICggIWluc3RhbmNlICkge1xuXHRcdFx0XHRcdGxvZ0Vycm9yKCBcImNhbm5vdCBjYWxsIG1ldGhvZHMgb24gZGxtZW51IHByaW9yIHRvIGluaXRpYWxpemF0aW9uOyBcIiArXG5cdFx0XHRcdFx0XCJhdHRlbXB0ZWQgdG8gY2FsbCBtZXRob2QgJ1wiICsgb3B0aW9ucyArIFwiJ1wiICk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggISQuaXNGdW5jdGlvbiggaW5zdGFuY2Vbb3B0aW9uc10gKSB8fCBvcHRpb25zLmNoYXJBdCgwKSA9PT0gXCJfXCIgKSB7XG5cdFx0XHRcdFx0bG9nRXJyb3IoIFwibm8gc3VjaCBtZXRob2QgJ1wiICsgb3B0aW9ucyArIFwiJyBmb3IgZGxtZW51IGluc3RhbmNlXCIgKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5zdGFuY2VbIG9wdGlvbnMgXS5hcHBseSggaW5zdGFuY2UsIGFyZ3MgKTtcblx0XHRcdH0pO1xuXHRcdH0gXG5cdFx0ZWxzZSB7XG5cdFx0XHR0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHRcblx0XHRcdFx0dmFyIGluc3RhbmNlID0gJC5kYXRhKCB0aGlzLCAnZGxtZW51JyApO1xuXHRcdFx0XHRpZiAoIGluc3RhbmNlICkge1xuXHRcdFx0XHRcdGluc3RhbmNlLl9pbml0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0aW5zdGFuY2UgPSAkLmRhdGEoIHRoaXMsICdkbG1lbnUnLCBuZXcgJC5ETE1lbnUoIG9wdGlvbnMsIHRoaXMgKSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cbn0pKGpRdWVyeSk7IiwiLyoqXG4gKiBAZmlsZVxuICogZGV2aWNlSW5mbyBsb2dzIHRoZSBzaXplIG9mIHRoZSB3aW5kb3cgYW5kIG90aGVyIGRldmljZSB0aGluZ3MuIFdvby5cbiAqL1xuXG4oZnVuY3Rpb24oJCkge1xuICBcbiAgLy8gRG8gbm90IHJlbW92ZSAtIEdldCB0aGUgcmVhbCBzaXplIG9mIHRoZSB3aW5kb3dcbiAgZnVuY3Rpb24gdmlld3BvcnQoKSB7IFxuICAgICAgdmFyIGUgPSB3aW5kb3csIGEgPSAnaW5uZXInO1xuICAgICAgaWYgKCEoJ2lubmVyV2lkdGgnIGluIHdpbmRvdyApKSB7XG4gICAgICAgICAgYSA9ICdjbGllbnQnO1xuICAgICAgICAgIGUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHdpZHRoIDogZVsgYSsnV2lkdGgnIF0gLCBoZWlnaHQgOiBlWyBhKydIZWlnaHQnIF0gfTtcbiAgfVxuIFxuICAvLyBMaXN0IGZyb20gYmlnZ2VzdCB0byBzbWFsbGVzdCwgcGx6XG4gIHZhciBkZWZhdWx0QlBzID0gW1xuICB7IG5hbWU6IFwieC1sYXJnZVwiLCAgICAgIGN1dE9mZjogMTQwMCAgfSxcbiAgeyBuYW1lOiBcImxhcmdlXCIsICAgICAgICBjdXRPZmY6IDEyNTAgIH0sXG4gIHsgbmFtZTogXCJpbnRlci1sYXJnZVwiLCAgY3V0T2ZmOiA5ODAgICB9LFxuICB7IG5hbWU6IFwibWVkaXVtXCIsICAgICAgIGN1dE9mZjogODAwICAgfSxcbiAgeyBuYW1lOiBcImludGVyLW1lZGl1bVwiLCBjdXRPZmY6IDc2OCAgIH0sXG4gIHsgbmFtZTogXCJzbWFsbFwiLCAgICAgICAgY3V0T2ZmOiA2NDAgICB9LFxuICB7IG5hbWU6IFwiaW50ZXItc21hbGxcIiwgIGN1dE9mZjogNDgwICAgfSxcbiAgeyBuYW1lOiBcIngtc21hbGxcIiwgICAgICBjdXRPZmY6IDMyMCAgIH0sXG4gIHsgbmFtZTogXCJicC1udWxsXCIsICAgICAgY3V0T2ZmOiAwICAgICB9LFxuICBdO1xuXG4gIGRldmljZUluZm8gPSB7XG4gICAgc2l6ZTogJycsXG4gICAgd2lkdGg6ICcnLFxuICAgIGhlaWdodDogJycsXG4gICAgYnJlYWtQb2ludHM6IFtdLFxuICAgIFxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHByb3BlcnRpZXMgbGlzdGVkIGFib3ZlLiBSdW4gb24gZG9tUmVhZHkgJiByZXNpemUuXG4gICAgICogUnVucyBhdXRvbWF0aWNhbGx5IGFmdGVyIHNldEJyZWFrUG9pbnRzKClcbiAgICAgKi9cbiAgICBjYWxjdWxhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgJHdpbmRvdyA9IHZpZXdwb3J0KCk7XG4gICAgICB0aGlzLndpZHRoID0gdmlld3BvcnQoKS53aWR0aDtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gdmlld3BvcnQoKS5oZWlnaHQ7XG4gICAgICBcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5icmVha1BvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy53aWR0aCA+PSB0aGlzLmJyZWFrUG9pbnRzW2ldLmN1dE9mZikge1xuICAgICAgICAgIHRoaXMuc2l6ZSA9IHRoaXMuYnJlYWtQb2ludHNbaV0ubmFtZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvL0F0IHRoaXMgcG9pbnQgc29tZXRoaW5nIHNob3VsZCBoYXZlIGJyb2tlbiB0aGUgbG9vcFxuICAgICAgICBpZiAoaSA9PT0gdGhpcy5icmVha1BvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coXCJkZXZpY2VJbmZvLmNhbGN1bGF0ZSAtIFRoZXJlJ3Mgc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIGJyZWFrUG9pbnRzIHByb3BlcnR5LlwiKTtcbiAgICAgICAgICB0aGlzLnNpemUgPSBcIkVSUk9SXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vU2V0IHNjcmVlbiBvcmllbnRhdGlvblxuICAgICAgaWYgKHRoaXMud2lkdGggPiB0aGlzLmhlaWdodCkge1xuICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gJ2xhbmRzY2FwZSc7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9ICdwb3J0cmFpdCc7XG4gICAgICB9XG4gICAgfSwgLy9DbG9zZSBjYWxjdWxhdGVcbiAgICBcbiAgICAvKipcbiAgICAgKiBEZWZpbmUgdGhlIGJyZWFrcG9pbnRzIHVzZWQgaW4gdGhpcy5jYWxjdWxhdGUoKVxuICAgICAqIEBwYXJhbSB7YXJyYXl9IG5ld0JwcyAtIEFuIGFycmF5IG9mIG9iamVjdHM6IFt7bmFtZTogJSUlLCBjdXRPZmY6ICUlJSB9LCAuLi5dXG4gICAgICovXG4gICAgc2V0QnJlYWtQb2ludHM6IGZ1bmN0aW9uKG5ld0Jwcykge1xuICAgICAgaWYgKCEkLmlzQXJyYXkobmV3QnBzKSB8fCBuZXdCcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJkZXZpY2VJbmZvLnNldEJyZWFrUG9pbnRzIGV4cGVjdHMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBsaWtlOlxcbiB7IG5hbWU6IFxcXCJibGFoXFxcIiwgYnJlYWs6ICMjIyB9XFxuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmJyZWFrUG9pbnRzID0gbmV3QnBzO1xuICAgICAgLy9DYWxjdWxhdGUgYWdhaW4gYmVjYXVzZSB0aGUgZGV2aWNlIG1heSBjaGFuZ2UgYWZ0ZXIgY2hhbmdpbmcgYnJlYWtQb2ludHMuXG4gICAgICB0aGlzLmNhbGN1bGF0ZSgpO1xuICAgIH0sIC8vQ2xvc2Ugc2V0QnJlYWtQb2ludHNcbiAgICBcbiAgICAvKipcbiAgICAgKiBMaXN0cyBhbGwgYnJlYWtQb2ludHMgaW4gYW4gb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9IExpa2U6IHt4LWxhcmdlOiBvdmVyIDkwMDAsIGxhcmdlOiBibGFoLCBldGMgfVxuICAgICAqL1xuICAgIGxpc3RCcmVha1BvaW50czogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYnBMaXN0ID0ge307XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYnJlYWtQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHRoaXNCcCA9IHRoaXMuYnJlYWtQb2ludHNbaV07XG4gICAgICAgIGJwTGlzdFt0aGlzQnAubmFtZV0gPSB0aGlzQnAuY3V0T2ZmO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJwTGlzdDtcbiAgICB9LCAvL0Nsb3NlIGxpc3RCcmVha1BvaW50c1xuICAgIFxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHNtYWxsZXN0IHNjcmVlbiB3aWR0aCBmb3IgYSBzaXplLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBicE5hbWUgXG4gICAgICogQHJldHVybnMge2ludHxudWxsfSBUaGUgbWluaW11bSBwb2ludCBmb3IgdGhpcyBzaXplIG9yIG51bGwgaWYgbm90LWZvdW5kL2Vycm9yLlxuICAgICAqL1xuICAgIGdldE1pblBvaW50OiBmdW5jdGlvbihicE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgYnBOYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHdpbmRvdy5jb25zb2xlLndhcm4oXCJBcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYnJlYWtQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMuYnJlYWtQb2ludHNbaV0ubmFtZSA9PT0gYnBOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYnJlYWtQb2ludHNbaV0uY3V0T2ZmO1xuICAgICAgICB9IC8vZW5kIGlmIG5hbWVcbiAgICAgIH0gLy9lbmQgZm9yIGJyZWFrcG9pbnRzXG4gICAgICB3aW5kb3cuY29uc29sZS5sb2coXCJObyBicmVha3BvaW50cyBtYXRjaGVkIFxcXCJcIiArIGJwTmFtZSArIFwiXFxcIi4gVXNlIGxpc3RCcmVha1BvaW50cygpIGZvciB2YWxpZCBlbnRyaWVzLlwiKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sIC8vZW5kIGdldE1pblBvaW50KClcbiAgICBcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsYXJnZXN0IHNjcmVlbiB3aWR0aCBmb3IgYSBzaXplLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBicE5hbWUgVGhlIGJyZWFrcG9pbnQgbmFtZVxuICAgICAqIEByZXR1cm5zIHtpbnR8bnVsbH0gVGhlIG1heGltdW0gcG9pbnQgZm9yIHRoaXMgc2l6ZSwgb3IgLTEgaWYgbm8gbWF4LCBvciBudWxsIGlmIG5vdC1mb3VuZC9lcnJvci5cbiAgICAgKi9cbiAgICBnZXRNYXhQb2ludDogZnVuY3Rpb24oYnBOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIGJwTmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB3aW5kb3cuY29uc29sZS53YXJuKFwiQXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZ1wiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJyZWFrUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLmJyZWFrUG9pbnRzW2ldLm5hbWUgPT09IGJwTmFtZSkge1xuICAgICAgICAgIGlmIChpID09PSAwKSB7IC8vMCBpcyB0aGUgbGFyZ2VzdCBzaXplXG4gICAgICAgICAgICByZXR1cm4gLTE7IC8vTm8gbWF4aW11bVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJyZWFrUG9pbnRzW2ktMV0uY3V0T2ZmIC0gMTtcbiAgICAgICAgICB9IC8vIGVuZCBpZiBpPT09MFxuICAgICAgICB9IC8vZW5kIGlmIG5hbWUgPT09IGJwTmFtZVxuICAgICAgfSAvL2VuZCBmb3IgYnJlYWtQb2ludHNcbiAgICAgIHdpbmRvdy5jb25zb2xlLmxvZyhcIk5vIGJyZWFrcG9pbnRzIG1hdGNoZWQgXFxcIlwiICsgYnBOYW1lICsgXCJcXFwiLiBVc2UgbGlzdEJyZWFrUG9pbnRzKCkgZm9yIHZhbGlkIGVudHJpZXMuXCIpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSwgLy9lbmQgZ2V0TWF4UG9pbnQoKVxuICAgIFxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHJhbmdlIGZvciBhIHNpemUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGJwTmFtZSBUaGUgYnJlYWtwb2ludCBuYW1lXG4gICAgICogQHJldHVybnMge3VuZGVmaW5lZHxvYmplY3R9IE9iamVjdCB3aXRoIGtleXMgJ21pbicgYW5kICdtYXgnXG4gICAgICovXG4gICAgZ2V0UmFuZ2U6IGZ1bmN0aW9uKGJwTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiBicE5hbWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgd2luZG93LmNvbnNvbGUud2FybihcIkFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmdcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciByYW5nZSA9IHtcbiAgICAgICAgbWluOiB0aGlzLmdldE1pblBvaW50KGJwTmFtZSlcbiAgICAgIH07XG4gICAgICBpZiAocmFuZ2UubWluID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmFuZ2UubWF4ID0gdGhpcy5nZXRNYXhQb2ludChicE5hbWUpO1xuICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH0gLy9DbG9zZSBnZXRSYW5nZSgpXG4gICAgXG4gICAgXG4gIH07IC8vQ2xvc2UgZGV2aWNlSW5mb1xuICBcbiAgLy8gR28hXG4gIGRldmljZUluZm8uc2V0QnJlYWtQb2ludHMoZGVmYXVsdEJQcyk7XG4gIFxuICAvL1Jlc2l6ZSBFdmVudHNcbiAgdmFyIHJlc2l6ZVRpbWVyO1xuICAkKHdpbmRvdykub24oXCJyZXNpemVcIiwgZnVuY3Rpb24oKSB7XG4gICAgY2xlYXJUaW1lb3V0KHJlc2l6ZVRpbWVyKTtcbiAgICByZXNpemVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBkZXZpY2VJbmZvLmNhbGN1bGF0ZSgpO1xuICAgIH0sIDEwMCk7XG4gIH0pOyAvL2VuZCByZXNpemVcbiAgXG4gICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkge1xuICAgIGRldmljZUluZm8uY2FsY3VsYXRlKCk7XG4gIH0pOyAvL2VuZCBkb21SZWFkeVxuICBcbiAgfSkoalF1ZXJ5KTsiLCIvKipcbiAqIEBmaWxlXG4gKiBDb250YWlucyB0aGUgbG9naWMgZm9yIGluaXRpYWxpemluZyB0aGUgbW9iaWxlIG1lbnUsIHVzaW5nIHRoZSBkbE1lbnVcbiAqIGxpYnJhcnkuXG4gKiBBbHNvIGNvbnRhaW5zIGxvZ2ljIGZvciBjbG9zaW5nIG1lbnUgaWYgc29tZW9uZSBoYXMgdG91Y2hlZC9jbGlja2VkIG91dHNpZGVcbiAqIG9mIGl0LlxuICovXG5cbihmdW5jdGlvbigkKSB7XG5cbiAgRHJ1cGFsLkRMb29tID0gRHJ1cGFsLkRsb29tIHx8IHt9O1xuXG4gIERydXBhbC5ETG9vbS5NTSA9IHtcbiAgICBtZW51OiBudWxsLCAvL1RoZSBtZW51IG9iamVjdFxuICAgIHRpbWVyOiBudWxsLCAvL1RpbWVyIGZvciB1c2UgaW4gdG91Y2hBY3RpdmVcbiAgICBhY3RpdmF0ZWQ6IGZhbHNlLCAvL1dhcyB0aGUgbWVudSBqdXN0IGNsaWNrZWQ/XG5cbiAgICAvL1NldHMgYWN0aXZhdGVkIHRvIHRydWUgZm9yIGEgYnJpZWYgdGltZVxuICAgIHRvdWNoQWN0aXZlOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmFjdGl2YXRlZCA9IGZhbHNlO1xuICAgICAgfS5iaW5kKHRoaXMpLCAyNTApO1xuICAgIH1cbiAgfTtcblxuICAvL0J1aWxkaW5nIHRoZSBtZW51IHRoYXQgd2lsbCBiZWNvbWUgdGhlIG1vYmlsZSBtZW51XG4gIGZ1bmN0aW9uIGJ1aWxkRGxNZW51KHRhcmdldE1lbnUpIHtcbiAgICB2YXIgJHRhcmdldE1lbnUgPSAkKHRhcmdldE1lbnUpLmZpcnN0KCksXG4gICAgICBzdWJMaXN0cyA9ICR0YXJnZXRNZW51LmZpbmQoXCJsaTpoYXModWwpXCIpO1xuXG4gICAgLy9BZGQgbGFuZGluZyBwYWdlIGxpbmtzIHRvIGVhY2ggc3VibWVudVxuICAgIHN1Ykxpc3RzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpLFxuICAgICAgICBjbG9uZSA9ICR0aGlzLmNsb25lKClcbiAgICAgICAgICAuYWRkQ2xhc3MoXCJwYXJlbnQtbGFuZGluZ1wiKVxuICAgICAgICAgIC5jaGlsZHJlbihcInVsXCIpXG4gICAgICAgICAgLnJlbW92ZSgpXG4gICAgICAgICAgLmVuZCgpO1xuXG4gICAgICAkdGhpcy5jaGlsZHJlbihcInVsXCIpXG4gICAgICAgIC5wcmVwZW5kKGNsb25lKTtcbiAgICB9KTtcblxuICAgIGFwcGVuZEdsb2JhbE1lbnUoJHRhcmdldE1lbnUpO1xuXG4gICAgcmV0dXJuICR0YXJnZXRNZW51O1xuICB9IC8vY2xvc2UgYnVpbGREbE1lbnVcblxuXG4gIC8vQWRkcyB0aGUgZ2xvYmFsIG1lbnUgdG8gdGhlIG1vYmlsZSBtZW51XG4gIGZ1bmN0aW9uIGFwcGVuZEdsb2JhbE1lbnUodGFyZ2V0TWVudSkge1xuICAgICQoXCIjYmxvY2stbWVudS1tZW51LWdsb2JhbC1uYXZpZ2F0aW9uIGxpLm1lbnVfX2l0ZW1cIikuZWFjaCggZnVuY3Rpb24oKSB7XG4gICAgICB0YXJnZXRNZW51LmFwcGVuZChcbiAgICAgICAgJCh0aGlzKS5jbG9uZSgpLmFkZENsYXNzKCdzZWNvbmRhcnktbmF2LWl0ZW0nKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vUnVubmluZyB0aGUgZGxNZW51IHNjcmlwdFxuICBmdW5jdGlvbiBpbml0RGxNZW51KHRhcmdldE1lbnUpIHtcbiAgICB0YXJnZXRNZW51XG4gICAgICAucmVtb3ZlQXR0cihcImlkXCIpXG4gICAgICAucmVtb3ZlQXR0cihcImNsYXNzXCIpXG4gICAgICAuYWRkQ2xhc3MoXCJkbC1tZW51XCIpXG4gICAgICAuYXBwZW5kVG8oXCIucmVnaW9uLW5hdmlnYXRpb25cIilcbiAgICAgIC53cmFwKCc8ZGl2IGlkPVwiZGwtbWVudVwiIGNsYXNzPVwiZGwtbWVudXdyYXBwZXJcIiAvPicpXG4gICAgICAuZmluZCgndWwnKVxuICAgICAgLmFkZENsYXNzKCdkbC1zdWJtZW51JylcbiAgICAgIC5yZW1vdmVBdHRyKFwic3R5bGVcIilcbiAgICAgIC5lbmQoKVxuICAgICAgLmNsb3Nlc3QoXCIjZGwtbWVudVwiKVxuICAgICAgLnByZXBlbmQoJzxidXR0b24gY2xhc3M9XCJkbC10cmlnZ2VyXCI+TWVudTwvYnV0dG9uPicpXG4gICAgICAuZGxtZW51KHtcbiAgICAgICAgYW5pbWF0aW9uQ2xhc3NlMXMgOiB7IGNsYXNzaW4gOiAnZGwtYW5pbWF0ZS1pbi0yJywgY2xhc3NvdXQgOiAnZGwtYW5pbWF0ZS1vdXQtMicgfVxuICAgICAgfSk7XG5cbiAgICBEcnVwYWwuRExvb20uTU0ubWVudSA9ICQoJyNkbC1tZW51Jyk7XG4gIH0gLy9jbG9zZSBpbml0RGxNZW51XG5cblxuICAvL0FkZHMgdGhlIGV2ZW50cyB0aGF0IGNsb3NlcyB0aGUgbWVudSB3aGVuIHVzZXIgY2xpY2tzL3RvdWNoZXMgb3V0c2lkZVxuICBmdW5jdGlvbiBhZGRUb3VjaEV2ZW50cygpIHtcbiAgICB2YXIgdG91Y2hBY3RpdmUgPSBEcnVwYWwuRExvb20uTU0udG91Y2hBY3RpdmUuYmluZChEcnVwYWwuRExvb20uTU0pO1xuXG4gICAgLy9Vc2UgdGhlIHRvdWNoQWN0aXZlIG1ldGhvZCB0byBzZXQgTU0uYWN0aXZhdGVkIHRvIHRlbXBvcmFyaWx5IGJlIHRydWVcbiAgICAkKCcjZGwtbWVudScpLm9uKCdtb3VzZWRvd24gdG91Y2hzdGFydCcsICdidXR0b24sIGEnLCB0b3VjaEFjdGl2ZSk7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIHdpbmRvdyBhbnl3aGVyZSwgdGhpcyB3aWxsIGNoZWNrIGlmIHRoZVxuICAgICAqIG1vYmlsZU1lbnUgaGFzIGJlZW4gY2xpY2tlZC4gT3RoZXJ3aXNlIGl0IGFzc3VtZXMgdGhlIGNsaWNrXG4gICAgICogd2FzIG91dHNpZGUgdGhlIG1vYmlsZU1lbnUsIGFuZCBjbG9zZXMgaXQuXG4gICAgICovXG4gICAgJCh3aW5kb3cpLm9uKCdtb3VzZWRvd24gdG91Y2hzdGFydCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmICghRHJ1cGFsLkRMb29tLk1NLmFjdGl2YXRlZCkge1xuICAgICAgICBEcnVwYWwuRExvb20uTU0ubWVudS5kbG1lbnUoXCJjbG9zZU1lbnVcIik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIC8vSW5pdGlhbGl6ZSBvbiBkb21SZWFkeVxuICAkKGRvY3VtZW50KS5vbihcInJlYWR5XCIsIGZ1bmN0aW9uKCkge1xuICAgIC8vQWRkaW5nIHRoZSBtb2JpbGUgbWVudVxuICAgIHZhciBtb2JpbGVNZW51ID0gYnVpbGREbE1lbnUoXCIjYmxvY2stc3lzdGVtLW1haW4tbWVudSB1bC5tZW51XCIpO1xuICAgICQoXCIjYmxvY2stc3lzdGVtLW1haW4tbWVudVwiKS5yZW1vdmUoKTtcbiAgICBpbml0RGxNZW51KG1vYmlsZU1lbnUpO1xuICAgIGFkZFRvdWNoRXZlbnRzKCk7XG5cbiAgICAvLyBSZW1vdmUgbGluayBocmVmIEZpbmQgYSBzZW5zb3JcbiAgICAkKFwidWwjc3VwZXJmaXNoLTEgbGkjbWVudS0yMTY3LTEgYS5maW5kLXNlbnNvci1tZW51XCIpLnJlbW92ZUF0dHIoXCJocmVmXCIpLmNzcyhcImN1cnNvclwiLFwiZGVmYXVsdFwiKTtcbiAgICAkKFwidWwuZGwtc3VibWVudSBhLmZpbmQtc2Vuc29yLW1lbnVcIikuY2xvc2VzdCgnbGkucGFyZW50LWxhbmRpbmcnKS5yZW1vdmUoKTtcblxuXG4gIH0pOyAvL2Nsb3NlIGRvbVJlYWR5XG5cbn0pKGpRdWVyeSk7IiwiLyoqXG4gKiBlcXVhbGl6ZS5qc1xuICogQXV0aG9yICYgY29weXJpZ2h0IChjKSAyMDEyOiBUaW0gU3ZlbnNlblxuICogRHVhbCBNSVQgJiBHUEwgbGljZW5zZVxuICpcbiAqIFBhZ2U6IGh0dHA6Ly90c3ZlbnNlbi5naXRodWIuY29tL2VxdWFsaXplLmpzXG4gKiBSZXBvOiBodHRwczovL2dpdGh1Yi5jb20vdHN2ZW5zZW4vZXF1YWxpemUuanMvXG4gKlxuICogVGhlIGpRdWVyeSBwbHVnaW4gZm9yIGVxdWFsaXppbmcgdGhlIGhlaWdodCBvciB3aWR0aCBvZiBlbGVtZW50cy5cbiAqXG4gKiBFcXVhbGl6ZSB3aWxsIGFjY2VwdCBhbnkgb2YgdGhlIGpRdWVyeSBEaW1lbnNpb24gbWV0aG9kczpcbiAqICAgaGVpZ2h0LCBvdXRlckhlaWdodCwgaW5uZXJIZWlnaHQsXG4gKiAgIHdpZHRoLCBvdXRlcldpZHRoLCBpbm5lcldpZHRoLlxuICpcbiAqIEVYQU1QTEVcbiAqICQoJy5wYXJlbnQnKS5lcXVhbGl6ZSgpOyAvLyBkZWZhdWx0cyB0byAnaGVpZ2h0J1xuICogJCgnLnBhcmVudCcpLmVxdWFsaXplKCd3aWR0aCcpOyAvLyBlcXVhbGl6ZSB0aGUgd2lkdGhzXG4gKlxuICogQURWQU5DRUQgRVhBTVBMRVNcbiAqIEdldCB0aGUgbWluaW11bSBtYXggZGltZW5zaW9uIGJ5IHJlbW92aW5nIHRoZSBleGlzdGluZyBoZWlnaHQvd2lkdGhcbiAqICQoJy5wYXJlbnQnKS5lcXVhbGl6ZSh7cmVzZXQ6IHRydWV9KTsgLy8gZXF1YWxpemUgaGVpZ2h0IGJ5IGRlZmF1bHQsIHJlbW92ZSBleGlzdGluZyBoZWlnaHQsIHRoZW4gZGV0ZXJtaW4gbWF4XG4gKiAkKCcucGFyZW50JykuZXF1YWxpemUoe2VxdWFsaXplOiAnd2lkdGgnLCByZXNldDogdHJ1ZX0pOyAvLyBlcXVhbGl6ZSB3aWR0aCwgcmVtb3ZlIGV4aXN0aW5nIHdpZHRoLCB0aGVuIGRldGVybWluIG1heFxuICpcbiAqIEVxdWFsaXplIGludGVybmFsIGNoaWxkIGVsZW1lbnRzXG4gKiBGcm9tIEBsYXJzYm8gOiBodHRwOi8vanNmaWRkbGUubmV0LzRRVE5QLzMvXG4gKiAkKCcucGFyZW50JykuZXF1YWxpemUoe2NoaWxkcmVuOiAncCd9KTsgLy8gZXF1YWxpemUgaGVpZ2h0IG9mIHBhcmFncmFwaHMgd2l0aGluIC5wYXJlbnRcbiAqL1xuOyhmdW5jdGlvbigkKSB7XG5cbiAgJC5mbi5lcXVhbGl6ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICB2YXIgJGNvbnRhaW5lcnMgPSB0aGlzLCAvLyB0aGlzIGlzIHRoZSBqUXVlcnkgb2JqZWN0XG4gICAgICAgIGNoaWxkcmVuICAgID0gZmFsc2UsXG4gICAgICAgIHJlc2V0ICAgICAgID0gZmFsc2UsXG4gICAgICAgIGVxdWFsaXplLFxuICAgICAgICB0eXBlO1xuXG4gICAgLy8gd2hlbiBvcHRpb25zIGFyZSBhbiBvYmplY3RcbiAgICBpZiAoJC5pc1BsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICBlcXVhbGl6ZSA9IG9wdGlvbnMuZXF1YWxpemUgfHwgJ2hlaWdodCc7XG4gICAgICBjaGlsZHJlbiA9IG9wdGlvbnMuY2hpbGRyZW4gfHwgZmFsc2U7XG4gICAgICByZXNldCAgICA9IG9wdGlvbnMucmVzZXQgfHwgZmFsc2U7XG4gICAgfSBlbHNlIHsgLy8gb3RoZXJ3aXNlLCBhIHN0cmluZyB3YXMgcGFzc2VkIGluIG9yIGRlZmF1bHQgdG8gaGVpZ2h0XG4gICAgICBlcXVhbGl6ZSA9IG9wdGlvbnMgfHwgJ2hlaWdodCc7XG4gICAgfVxuXG4gICAgaWYgKCEkLmlzRnVuY3Rpb24oJC5mbltlcXVhbGl6ZV0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgLy8gZGV0ZXJtaW5lIGlmIHRoZSBoZWlnaHQgb3Igd2lkdGggaXMgYmVpbmcgZXF1YWxpemVkXG4gICAgdHlwZSA9IChlcXVhbGl6ZS5pbmRleE9mKCdlaWdodCcpID4gMCkgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICByZXR1cm4gJGNvbnRhaW5lcnMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAvLyB3aGVuIGNoaWxkcmVuIGV4aXN0LCBlcXVhbGl6ZSB0aGUgcGFzc2VkIGluIGNoaWxkIGVsZW1lbnRzLCBvdGhlcndpc2UgZXF1YWxpemUgdGhlIGNoaWxkcmVuXG4gICAgICB2YXIgJGNoaWxkcmVuID0gKGNoaWxkcmVuKSA/ICQodGhpcykuZmluZChjaGlsZHJlbikgOiAkKHRoaXMpLmNoaWxkcmVuKCksXG4gICAgICAgICAgbWF4ID0gMDsgLy8gcmVzZXQgZm9yIGVhY2ggY29udGFpbmVyXG5cbiAgICAgICRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJGVsZW1lbnQgPSAkKHRoaXMpLFxuICAgICAgICAgICAgdmFsdWU7XG4gICAgICAgIGlmIChyZXNldCkgeyAkZWxlbWVudC5jc3ModHlwZSwgJycpOyB9IC8vIHJlbW92ZSBleGlzdGluZyBoZWlnaHQvd2lkdGggZGltZW5zaW9uXG4gICAgICAgIHZhbHVlID0gJGVsZW1lbnRbZXF1YWxpemVdKCk7ICAgICAgICAgIC8vIGNhbGwgaGVpZ2h0KCksIG91dGVySGVpZ2h0KCksIGV0Yy5cbiAgICAgICAgaWYgKHZhbHVlID4gbWF4KSB7IG1heCA9IHZhbHVlOyB9ICAgICAgLy8gdXBkYXRlIG1heFxuICAgICAgfSk7XG5cbiAgICAgICRjaGlsZHJlbi5jc3ModHlwZSwgbWF4ICsncHgnKTsgLy8gYWRkIENTUyB0byBjaGlsZHJlblxuICAgIH0pO1xuICB9O1xuXG59KGpRdWVyeSkpO1xuIiwiLypcbiAgICAgXyBfICAgICAgXyAgICAgICBfXG4gX19ffCAoXykgX19ffCB8IF9fICAoXylfX19cbi8gX198IHwgfC8gX198IHwvIC8gIHwgLyBfX3xcblxcX18gXFwgfCB8IChfX3wgICA8IF8gfCBcXF9fIFxcXG58X19fL198X3xcXF9fX3xffFxcXyhfKS8gfF9fXy9cbiAgICAgICAgICAgICAgICAgICB8X18vXG5cbiBWZXJzaW9uOiAxLjMuN1xuICBBdXRob3I6IEtlbiBXaGVlbGVyXG4gV2Vic2l0ZTogaHR0cDovL2tlbndoZWVsZXIuZ2l0aHViLmlvXG4gICAgRG9jczogaHR0cDovL2tlbndoZWVsZXIuZ2l0aHViLmlvL3NsaWNrXG4gICAgUmVwbzogaHR0cDovL2dpdGh1Yi5jb20va2Vud2hlZWxlci9zbGlja1xuICBJc3N1ZXM6IGh0dHA6Ly9naXRodWIuY29tL2tlbndoZWVsZXIvc2xpY2svaXNzdWVzXG5cbiAqL1xuXG4vKiBnbG9iYWwgd2luZG93LCBkb2N1bWVudCwgZGVmaW5lLCBqUXVlcnksIHNldEludGVydmFsLCBjbGVhckludGVydmFsICovXG5cbihmdW5jdGlvbihmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZhY3RvcnkoalF1ZXJ5KTtcbiAgICB9XG5cbn0oZnVuY3Rpb24oJCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICB2YXIgU2xpY2sgPSB3aW5kb3cuU2xpY2sgfHwge307XG5cbiAgICBTbGljayA9IChmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgaW5zdGFuY2VVaWQgPSAwO1xuXG4gICAgICAgIGZ1bmN0aW9uIFNsaWNrKGVsZW1lbnQsIHNldHRpbmdzKSB7XG5cbiAgICAgICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgICAgICByZXNwb25zaXZlU2V0dGluZ3MsIGJyZWFrcG9pbnQ7XG5cbiAgICAgICAgICAgIF8uZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhcHBlbmRBcnJvd3M6ICQoZWxlbWVudCksXG4gICAgICAgICAgICAgICAgYXJyb3dzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGFzTmF2Rm9yOiBudWxsLFxuICAgICAgICAgICAgICAgIHByZXZBcnJvdzogJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtcm9sZT1cIm5vbmVcIiBjbGFzcz1cInNsaWNrLXByZXZcIj5QcmV2aW91czwvYnV0dG9uPicsXG4gICAgICAgICAgICAgICAgbmV4dEFycm93OiAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1yb2xlPVwibm9uZVwiIGNsYXNzPVwic2xpY2stbmV4dFwiPk5leHQ8L2J1dHRvbj4nLFxuICAgICAgICAgICAgICAgIGF1dG9wbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhdXRvcGxheVNwZWVkOiAzMDAwLFxuICAgICAgICAgICAgICAgIGNlbnRlck1vZGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNlbnRlclBhZGRpbmc6ICc1MHB4JyxcbiAgICAgICAgICAgICAgICBjc3NFYXNlOiAnZWFzZScsXG4gICAgICAgICAgICAgICAgY3VzdG9tUGFnaW5nOiBmdW5jdGlvbihzbGlkZXIsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLXJvbGU9XCJub25lXCI+JyArIChpICsgMSkgKyAnPC9idXR0b24+JztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRvdHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRvdHNDbGFzczogJ3NsaWNrLWRvdHMnLFxuICAgICAgICAgICAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlYXNpbmc6ICdsaW5lYXInLFxuICAgICAgICAgICAgICAgIGZhZGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZvY3VzT25TZWxlY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGluZmluaXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhenlMb2FkOiAnb25kZW1hbmQnLFxuICAgICAgICAgICAgICAgIG9uQmVmb3JlQ2hhbmdlOiBudWxsLFxuICAgICAgICAgICAgICAgIG9uQWZ0ZXJDaGFuZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgb25Jbml0OiBudWxsLFxuICAgICAgICAgICAgICAgIG9uUmVJbml0OiBudWxsLFxuICAgICAgICAgICAgICAgIHBhdXNlT25Ib3ZlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXVzZU9uRG90c0hvdmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXNwb25zaXZlOiBudWxsLFxuICAgICAgICAgICAgICAgIHJ0bDogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2xpZGU6ICdkaXYnLFxuICAgICAgICAgICAgICAgIHNsaWRlc1RvU2hvdzogMSxcbiAgICAgICAgICAgICAgICBzbGlkZXNUb1Njcm9sbDogMSxcbiAgICAgICAgICAgICAgICBzcGVlZDogMzAwLFxuICAgICAgICAgICAgICAgIHN3aXBlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvdWNoTW92ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0b3VjaFRocmVzaG9sZDogNSxcbiAgICAgICAgICAgICAgICB1c2VDU1M6IHRydWUsXG4gICAgICAgICAgICAgICAgdmVydGljYWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHdhaXRGb3JBbmltYXRlOiB0cnVlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBfLmluaXRpYWxzID0ge1xuICAgICAgICAgICAgICAgIGFuaW1hdGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgZHJhZ2dpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGF1dG9QbGF5VGltZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgY3VycmVudFNsaWRlOiAwLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRMZWZ0OiBudWxsLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogMSxcbiAgICAgICAgICAgICAgICAkZG90czogbnVsbCxcbiAgICAgICAgICAgICAgICBsaXN0V2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgbGlzdEhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICBsb2FkSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgJG5leHRBcnJvdzogbnVsbCxcbiAgICAgICAgICAgICAgICAkcHJldkFycm93OiBudWxsLFxuICAgICAgICAgICAgICAgIHNsaWRlQ291bnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgc2xpZGVXaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICAkc2xpZGVUcmFjazogbnVsbCxcbiAgICAgICAgICAgICAgICAkc2xpZGVzOiBudWxsLFxuICAgICAgICAgICAgICAgIHNsaWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNsaWRlT2Zmc2V0OiAwLFxuICAgICAgICAgICAgICAgIHN3aXBlTGVmdDogbnVsbCxcbiAgICAgICAgICAgICAgICAkbGlzdDogbnVsbCxcbiAgICAgICAgICAgICAgICB0b3VjaE9iamVjdDoge30sXG4gICAgICAgICAgICAgICAgdHJhbnNmb3Jtc0VuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAkLmV4dGVuZChfLCBfLmluaXRpYWxzKTtcblxuICAgICAgICAgICAgXy5hY3RpdmVCcmVha3BvaW50ID0gbnVsbDtcbiAgICAgICAgICAgIF8uYW5pbVR5cGUgPSBudWxsO1xuICAgICAgICAgICAgXy5hbmltUHJvcCA9IG51bGw7XG4gICAgICAgICAgICBfLmJyZWFrcG9pbnRzID0gW107XG4gICAgICAgICAgICBfLmJyZWFrcG9pbnRTZXR0aW5ncyA9IFtdO1xuICAgICAgICAgICAgXy5jc3NUcmFuc2l0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgXy5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIF8ucG9zaXRpb25Qcm9wID0gbnVsbDtcbiAgICAgICAgICAgIF8uJHNsaWRlciA9ICQoZWxlbWVudCk7XG4gICAgICAgICAgICBfLiRzbGlkZXNDYWNoZSA9IG51bGw7XG4gICAgICAgICAgICBfLnRyYW5zZm9ybVR5cGUgPSBudWxsO1xuICAgICAgICAgICAgXy50cmFuc2l0aW9uVHlwZSA9IG51bGw7XG4gICAgICAgICAgICBfLndpbmRvd1dpZHRoID0gMDtcbiAgICAgICAgICAgIF8ud2luZG93VGltZXIgPSBudWxsO1xuXG4gICAgICAgICAgICBfLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgXy5kZWZhdWx0cywgc2V0dGluZ3MpO1xuXG4gICAgICAgICAgICBfLm9yaWdpbmFsU2V0dGluZ3MgPSBfLm9wdGlvbnM7XG4gICAgICAgICAgICByZXNwb25zaXZlU2V0dGluZ3MgPSBfLm9wdGlvbnMucmVzcG9uc2l2ZSB8fCBudWxsO1xuXG4gICAgICAgICAgICBpZiAocmVzcG9uc2l2ZVNldHRpbmdzICYmIHJlc3BvbnNpdmVTZXR0aW5ncy5sZW5ndGggPiAtMSkge1xuICAgICAgICAgICAgICAgIGZvciAoYnJlYWtwb2ludCBpbiByZXNwb25zaXZlU2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNpdmVTZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShicmVha3BvaW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgXy5icmVha3BvaW50cy5wdXNoKHJlc3BvbnNpdmVTZXR0aW5nc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50XS5icmVha3BvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF8uYnJlYWtwb2ludFNldHRpbmdzW3Jlc3BvbnNpdmVTZXR0aW5nc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50XS5icmVha3BvaW50XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2l2ZVNldHRpbmdzW2JyZWFrcG9pbnRdLnNldHRpbmdzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF8uYnJlYWtwb2ludHMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiIC0gYTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgXy5hdXRvUGxheSA9ICQucHJveHkoXy5hdXRvUGxheSwgXyk7XG4gICAgICAgICAgICBfLmF1dG9QbGF5Q2xlYXIgPSAkLnByb3h5KF8uYXV0b1BsYXlDbGVhciwgXyk7XG4gICAgICAgICAgICBfLmNoYW5nZVNsaWRlID0gJC5wcm94eShfLmNoYW5nZVNsaWRlLCBfKTtcbiAgICAgICAgICAgIF8uc2VsZWN0SGFuZGxlciA9ICQucHJveHkoXy5zZWxlY3RIYW5kbGVyLCBfKTtcbiAgICAgICAgICAgIF8uc2V0UG9zaXRpb24gPSAkLnByb3h5KF8uc2V0UG9zaXRpb24sIF8pO1xuICAgICAgICAgICAgXy5zd2lwZUhhbmRsZXIgPSAkLnByb3h5KF8uc3dpcGVIYW5kbGVyLCBfKTtcbiAgICAgICAgICAgIF8uZHJhZ0hhbmRsZXIgPSAkLnByb3h5KF8uZHJhZ0hhbmRsZXIsIF8pO1xuICAgICAgICAgICAgXy5rZXlIYW5kbGVyID0gJC5wcm94eShfLmtleUhhbmRsZXIsIF8pO1xuICAgICAgICAgICAgXy5hdXRvUGxheUl0ZXJhdG9yID0gJC5wcm94eShfLmF1dG9QbGF5SXRlcmF0b3IsIF8pO1xuXG4gICAgICAgICAgICBfLmluc3RhbmNlVWlkID0gaW5zdGFuY2VVaWQrKztcblxuICAgICAgICAgICAgLy8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3NcbiAgICAgICAgICAgIC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uIChtdXN0IHN0YXJ0IHdpdGggPClcbiAgICAgICAgICAgIC8vIEV4dHJhY3RlZCBmcm9tIGpRdWVyeSB2MS4xMSBzb3VyY2VcbiAgICAgICAgICAgIF8uaHRtbEV4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSopJC87XG5cbiAgICAgICAgICAgIF8uaW5pdCgpO1xuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU2xpY2s7XG5cbiAgICB9KCkpO1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmFkZFNsaWRlID0gZnVuY3Rpb24obWFya3VwLCBpbmRleCwgYWRkQmVmb3JlKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmICh0eXBlb2YoaW5kZXgpID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGFkZEJlZm9yZSA9IGluZGV4O1xuICAgICAgICAgICAgaW5kZXggPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGluZGV4IDwgMCB8fCAoaW5kZXggPj0gXy5zbGlkZUNvdW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgXy51bmxvYWQoKTtcblxuICAgICAgICBpZiAodHlwZW9mKGluZGV4KSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBfLiRzbGlkZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgJChtYXJrdXApLmFwcGVuZFRvKF8uJHNsaWRlVHJhY2spO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhZGRCZWZvcmUpIHtcbiAgICAgICAgICAgICAgICAkKG1hcmt1cCkuaW5zZXJ0QmVmb3JlKF8uJHNsaWRlcy5lcShpbmRleCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKG1hcmt1cCkuaW5zZXJ0QWZ0ZXIoXy4kc2xpZGVzLmVxKGluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYWRkQmVmb3JlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgJChtYXJrdXApLnByZXBlbmRUbyhfLiRzbGlkZVRyYWNrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJChtYXJrdXApLmFwcGVuZFRvKF8uJHNsaWRlVHJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgXy4kc2xpZGVzID0gXy4kc2xpZGVUcmFjay5jaGlsZHJlbih0aGlzLm9wdGlvbnMuc2xpZGUpO1xuXG4gICAgICAgIF8uJHNsaWRlVHJhY2suY2hpbGRyZW4odGhpcy5vcHRpb25zLnNsaWRlKS5kZXRhY2goKTtcblxuICAgICAgICBfLiRzbGlkZVRyYWNrLmFwcGVuZChfLiRzbGlkZXMpO1xuXG4gICAgICAgIF8uJHNsaWRlcy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgICAgICAkKGVsZW1lbnQpLmF0dHIoXCJpbmRleFwiLGluZGV4KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgXy4kc2xpZGVzQ2FjaGUgPSBfLiRzbGlkZXM7XG5cbiAgICAgICAgXy5yZWluaXQoKTtcblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuYW5pbWF0ZVNsaWRlID0gZnVuY3Rpb24odGFyZ2V0TGVmdCwgY2FsbGJhY2spIHtcblxuICAgICAgICB2YXIgYW5pbVByb3BzID0ge30sIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMucnRsID09PSB0cnVlICYmIF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRhcmdldExlZnQgPSAtdGFyZ2V0TGVmdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy50cmFuc2Zvcm1zRW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmIChfLm9wdGlvbnMudmVydGljYWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5hbmltYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogdGFyZ2V0TGVmdFxuICAgICAgICAgICAgICAgIH0sIF8ub3B0aW9ucy5zcGVlZCwgXy5vcHRpb25zLmVhc2luZywgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmFuaW1hdGUoe1xuICAgICAgICAgICAgICAgICAgICB0b3A6IHRhcmdldExlZnRcbiAgICAgICAgICAgICAgICB9LCBfLm9wdGlvbnMuc3BlZWQsIF8ub3B0aW9ucy5lYXNpbmcsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBpZiAoXy5jc3NUcmFuc2l0aW9ucyA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgICQoe1xuICAgICAgICAgICAgICAgICAgICBhbmltU3RhcnQ6IF8uY3VycmVudExlZnRcbiAgICAgICAgICAgICAgICB9KS5hbmltYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbVN0YXJ0OiB0YXJnZXRMZWZ0XG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogXy5vcHRpb25zLnNwZWVkLFxuICAgICAgICAgICAgICAgICAgICBlYXNpbmc6IF8ub3B0aW9ucy5lYXNpbmcsXG4gICAgICAgICAgICAgICAgICAgIHN0ZXA6IGZ1bmN0aW9uKG5vdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltUHJvcHNbXy5hbmltVHlwZV0gPSAndHJhbnNsYXRlKCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3cgKyAncHgsIDBweCknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKGFuaW1Qcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1Qcm9wc1tfLmFuaW1UeXBlXSA9ICd0cmFuc2xhdGUoMHB4LCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3cgKyAncHgpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmNzcyhhbmltUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIF8uYXBwbHlUcmFuc2l0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBhbmltUHJvcHNbXy5hbmltVHlwZV0gPSAndHJhbnNsYXRlM2QoJyArIHRhcmdldExlZnQgKyAncHgsIDBweCwgMHB4KSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbVByb3BzW18uYW5pbVR5cGVdID0gJ3RyYW5zbGF0ZTNkKDBweCwnICsgdGFyZ2V0TGVmdCArICdweCwgMHB4KSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKGFuaW1Qcm9wcyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgXy5kaXNhYmxlVHJhbnNpdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIF8ub3B0aW9ucy5zcGVlZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5hcHBseVRyYW5zaXRpb24gPSBmdW5jdGlvbihzbGlkZSkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgIHRyYW5zaXRpb24gPSB7fTtcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmZhZGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0cmFuc2l0aW9uW18udHJhbnNpdGlvblR5cGVdID0gXy50cmFuc2Zvcm1UeXBlICsgJyAnICsgXy5vcHRpb25zLnNwZWVkICsgJ21zICcgKyBfLm9wdGlvbnMuY3NzRWFzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyYW5zaXRpb25bXy50cmFuc2l0aW9uVHlwZV0gPSAnb3BhY2l0eSAnICsgXy5vcHRpb25zLnNwZWVkICsgJ21zICcgKyBfLm9wdGlvbnMuY3NzRWFzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZmFkZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKHRyYW5zaXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgXy4kc2xpZGVzLmVxKHNsaWRlKS5jc3ModHJhbnNpdGlvbik7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuYXV0b1BsYXkgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKF8uYXV0b1BsYXlUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChfLmF1dG9QbGF5VGltZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgJiYgXy5wYXVzZWQgIT09IHRydWUpIHtcbiAgICAgICAgICAgIF8uYXV0b1BsYXlUaW1lciA9IHNldEludGVydmFsKF8uYXV0b1BsYXlJdGVyYXRvcixcbiAgICAgICAgICAgICAgICBfLm9wdGlvbnMuYXV0b3BsYXlTcGVlZCk7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuYXV0b1BsYXlDbGVhciA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBpZiAoXy5hdXRvUGxheVRpbWVyKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKF8uYXV0b1BsYXlUaW1lcik7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuYXV0b1BsYXlJdGVyYXRvciA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcbiAgICAgICAgdmFyIGFzTmF2Rm9yID0gXy5vcHRpb25zLmFzTmF2Rm9yICE9IG51bGwgPyAkKF8ub3B0aW9ucy5hc05hdkZvcikuZ2V0U2xpY2soKSA6IG51bGw7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgaWYgKF8uZGlyZWN0aW9uID09PSAxKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoKF8uY3VycmVudFNsaWRlICsgMSkgPT09IF8uc2xpZGVDb3VudCAtXG4gICAgICAgICAgICAgICAgICAgIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgXy5kaXJlY3Rpb24gPSAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIF8uc2xpZGVIYW5kbGVyKF8uY3VycmVudFNsaWRlICsgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsKTtcbiAgICAgICAgICAgICAgICBpZihhc05hdkZvciAhPSBudWxsKSBhc05hdkZvci5zbGlkZUhhbmRsZXIoYXNOYXZGb3IuY3VycmVudFNsaWRlICsgYXNOYXZGb3Iub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoKF8uY3VycmVudFNsaWRlIC0gMSA9PT0gMCkpIHtcblxuICAgICAgICAgICAgICAgICAgICBfLmRpcmVjdGlvbiA9IDE7XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBfLnNsaWRlSGFuZGxlcihfLmN1cnJlbnRTbGlkZSAtIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCk7XG4gICAgICAgICAgICAgICAgaWYoYXNOYXZGb3IgIT0gbnVsbCkgYXNOYXZGb3Iuc2xpZGVIYW5kbGVyKGFzTmF2Rm9yLmN1cnJlbnRTbGlkZSAtIGFzTmF2Rm9yLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwpO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgXy5zbGlkZUhhbmRsZXIoXy5jdXJyZW50U2xpZGUgKyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwpO1xuICAgICAgICAgICAgaWYoYXNOYXZGb3IgIT0gbnVsbCkgYXNOYXZGb3Iuc2xpZGVIYW5kbGVyKGFzTmF2Rm9yLmN1cnJlbnRTbGlkZSArIGFzTmF2Rm9yLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwpO1xuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuYnVpbGRBcnJvd3MgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5hcnJvd3MgPT09IHRydWUgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuXG4gICAgICAgICAgICBfLiRwcmV2QXJyb3cgPSAkKF8ub3B0aW9ucy5wcmV2QXJyb3cpO1xuICAgICAgICAgICAgXy4kbmV4dEFycm93ID0gJChfLm9wdGlvbnMubmV4dEFycm93KTtcblxuICAgICAgICAgICAgaWYgKF8uaHRtbEV4cHIudGVzdChfLm9wdGlvbnMucHJldkFycm93KSkge1xuICAgICAgICAgICAgICAgIF8uJHByZXZBcnJvdy5hcHBlbmRUbyhfLm9wdGlvbnMuYXBwZW5kQXJyb3dzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF8uaHRtbEV4cHIudGVzdChfLm9wdGlvbnMubmV4dEFycm93KSkge1xuICAgICAgICAgICAgICAgIF8uJG5leHRBcnJvdy5hcHBlbmRUbyhfLm9wdGlvbnMuYXBwZW5kQXJyb3dzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIF8uJHByZXZBcnJvdy5hZGRDbGFzcygnc2xpY2stZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmJ1aWxkRG90cyA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgIGksIGRvdFN0cmluZztcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmRvdHMgPT09IHRydWUgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuXG4gICAgICAgICAgICBkb3RTdHJpbmcgPSAnPHVsIGNsYXNzPVwiJyArIF8ub3B0aW9ucy5kb3RzQ2xhc3MgKyAnXCI+JztcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBfLmdldERvdENvdW50KCk7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGRvdFN0cmluZyArPSAnPGxpPicgKyBfLm9wdGlvbnMuY3VzdG9tUGFnaW5nLmNhbGwodGhpcywgXywgaSkgKyAnPC9saT4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb3RTdHJpbmcgKz0gJzwvdWw+JztcblxuICAgICAgICAgICAgXy4kZG90cyA9ICQoZG90U3RyaW5nKS5hcHBlbmRUbyhcbiAgICAgICAgICAgICAgICBfLiRzbGlkZXIpO1xuXG4gICAgICAgICAgICBfLiRkb3RzLmZpbmQoJ2xpJykuZmlyc3QoKS5hZGRDbGFzcyhcbiAgICAgICAgICAgICAgICAnc2xpY2stYWN0aXZlJyk7XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5idWlsZE91dCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBfLiRzbGlkZXMgPSBfLiRzbGlkZXIuY2hpbGRyZW4oXy5vcHRpb25zLnNsaWRlICtcbiAgICAgICAgICAgICc6bm90KC5zbGljay1jbG9uZWQpJykuYWRkQ2xhc3MoXG4gICAgICAgICAgICAnc2xpY2stc2xpZGUnKTtcbiAgICAgICAgXy5zbGlkZUNvdW50ID0gXy4kc2xpZGVzLmxlbmd0aDtcblxuICAgICAgICBfLiRzbGlkZXMuZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkge1xuICAgICAgICAgICAgJChlbGVtZW50KS5hdHRyKFwiaW5kZXhcIixpbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF8uJHNsaWRlc0NhY2hlID0gXy4kc2xpZGVzO1xuXG4gICAgICAgIF8uJHNsaWRlci5hZGRDbGFzcygnc2xpY2stc2xpZGVyJyk7XG5cbiAgICAgICAgXy4kc2xpZGVUcmFjayA9IChfLnNsaWRlQ291bnQgPT09IDApID9cbiAgICAgICAgICAgICQoJzxkaXYgY2xhc3M9XCJzbGljay10cmFja1wiLz4nKS5hcHBlbmRUbyhfLiRzbGlkZXIpIDpcbiAgICAgICAgICAgIF8uJHNsaWRlcy53cmFwQWxsKCc8ZGl2IGNsYXNzPVwic2xpY2stdHJhY2tcIi8+JykucGFyZW50KCk7XG5cbiAgICAgICAgXy4kbGlzdCA9IF8uJHNsaWRlVHJhY2sud3JhcChcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2xpY2stbGlzdFwiLz4nKS5wYXJlbnQoKTtcbiAgICAgICAgXy4kc2xpZGVUcmFjay5jc3MoJ29wYWNpdHknLCAwKTtcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCA9IDE7XG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAlIDIgPT09IDApIHtcbiAgICAgICAgICAgICAgICBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICQoJ2ltZ1tkYXRhLWxhenldJywgXy4kc2xpZGVyKS5ub3QoJ1tzcmNdJykuYWRkQ2xhc3MoJ3NsaWNrLWxvYWRpbmcnKTtcblxuICAgICAgICBfLnNldHVwSW5maW5pdGUoKTtcblxuICAgICAgICBfLmJ1aWxkQXJyb3dzKCk7XG5cbiAgICAgICAgXy5idWlsZERvdHMoKTtcblxuICAgICAgICBfLnVwZGF0ZURvdHMoKTtcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmFjY2Vzc2liaWxpdHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIF8uJGxpc3QucHJvcCgndGFiSW5kZXgnLCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF8uc2V0U2xpZGVDbGFzc2VzKHR5cGVvZiB0aGlzLmN1cnJlbnRTbGlkZSA9PT0gJ251bWJlcicgPyB0aGlzLmN1cnJlbnRTbGlkZSA6IDApO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZHJhZ2dhYmxlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBfLiRsaXN0LmFkZENsYXNzKCdkcmFnZ2FibGUnKTtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5jaGVja1Jlc3BvbnNpdmUgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXMsXG4gICAgICAgICAgICBicmVha3BvaW50LCB0YXJnZXRCcmVha3BvaW50O1xuXG4gICAgICAgIGlmIChfLm9yaWdpbmFsU2V0dGluZ3MucmVzcG9uc2l2ZSAmJiBfLm9yaWdpbmFsU2V0dGluZ3NcbiAgICAgICAgICAgIC5yZXNwb25zaXZlLmxlbmd0aCA+IC0xICYmIF8ub3JpZ2luYWxTZXR0aW5ncy5yZXNwb25zaXZlICE9PSBudWxsKSB7XG5cbiAgICAgICAgICAgIHRhcmdldEJyZWFrcG9pbnQgPSBudWxsO1xuXG4gICAgICAgICAgICBmb3IgKGJyZWFrcG9pbnQgaW4gXy5icmVha3BvaW50cykge1xuICAgICAgICAgICAgICAgIGlmIChfLmJyZWFrcG9pbnRzLmhhc093blByb3BlcnR5KGJyZWFrcG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkKHdpbmRvdykud2lkdGgoKSA8IF8uYnJlYWtwb2ludHNbXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnJlYWtwb2ludCA9IF8uYnJlYWtwb2ludHNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRCcmVha3BvaW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKF8uYWN0aXZlQnJlYWtwb2ludCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0QnJlYWtwb2ludCAhPT0gXy5hY3RpdmVCcmVha3BvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfLmFjdGl2ZUJyZWFrcG9pbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEJyZWFrcG9pbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBfLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgXy5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uYnJlYWtwb2ludFNldHRpbmdzW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCcmVha3BvaW50XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBfLnJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF8uYWN0aXZlQnJlYWtwb2ludCA9IHRhcmdldEJyZWFrcG9pbnQ7XG4gICAgICAgICAgICAgICAgICAgIF8ub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBfLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBfLmJyZWFrcG9pbnRTZXR0aW5nc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCcmVha3BvaW50XSk7XG4gICAgICAgICAgICAgICAgICAgIF8ucmVmcmVzaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKF8uYWN0aXZlQnJlYWtwb2ludCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBfLmFjdGl2ZUJyZWFrcG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBfLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgXy5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgXy5vcmlnaW5hbFNldHRpbmdzKTtcbiAgICAgICAgICAgICAgICAgICAgXy5yZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuY2hhbmdlU2xpZGUgPSBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgICR0YXJnZXQgPSAkKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIHZhciBhc05hdkZvciA9IF8ub3B0aW9ucy5hc05hdkZvciAhPSBudWxsID8gJChfLm9wdGlvbnMuYXNOYXZGb3IpLmdldFNsaWNrKCkgOiBudWxsO1xuXG4gICAgICAgIC8vIElmIHRhcmdldCBpcyBhIGxpbmssIHByZXZlbnQgZGVmYXVsdCBhY3Rpb24uXG4gICAgICAgICR0YXJnZXQuaXMoJ2EnKSAmJiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuZGF0YS5tZXNzYWdlKSB7XG5cbiAgICAgICAgICAgIGNhc2UgJ3ByZXZpb3VzJzpcbiAgICAgICAgICAgICAgICBpZiAoXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuICAgICAgICAgICAgICAgICAgXy5zbGlkZUhhbmRsZXIoXy5jdXJyZW50U2xpZGUgLSBfLm9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgLnNsaWRlc1RvU2Nyb2xsKTtcbiAgICAgICAgICAgICAgICBpZihhc05hdkZvciAhPSBudWxsKSBhc05hdkZvci5zbGlkZUhhbmRsZXIoYXNOYXZGb3IuY3VycmVudFNsaWRlIC0gYXNOYXZGb3Iub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgICAgICAgICBpZiAoXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuICAgICAgICAgICAgICAgICAgXy5zbGlkZUhhbmRsZXIoXy5jdXJyZW50U2xpZGUgKyBfLm9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgLnNsaWRlc1RvU2Nyb2xsKTtcbiAgICAgICAgICAgICAgICBpZihhc05hdkZvciAhPSBudWxsKSAgYXNOYXZGb3Iuc2xpZGVIYW5kbGVyKGFzTmF2Rm9yLmN1cnJlbnRTbGlkZSArIGFzTmF2Rm9yLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnaW5kZXgnOlxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9ICQoZXZlbnQudGFyZ2V0KS5wYXJlbnQoKS5pbmRleCgpICogXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsO1xuICAgICAgICAgICAgICAgIF8uc2xpZGVIYW5kbGVyKGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZihhc05hdkZvciAhPSBudWxsKSAgYXNOYXZGb3Iuc2xpZGVIYW5kbGVyKGluZGV4KTsgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG5cbiAgICAgICAgXy5hdXRvUGxheUNsZWFyKCk7XG5cbiAgICAgICAgXy50b3VjaE9iamVjdCA9IHt9O1xuXG4gICAgICAgICQoJy5zbGljay1jbG9uZWQnLCBfLiRzbGlkZXIpLnJlbW92ZSgpO1xuICAgICAgICBpZiAoXy4kZG90cykge1xuICAgICAgICAgICAgXy4kZG90cy5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy4kcHJldkFycm93KSB7XG4gICAgICAgICAgICBfLiRwcmV2QXJyb3cucmVtb3ZlKCk7XG4gICAgICAgICAgICBfLiRuZXh0QXJyb3cucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uJHNsaWRlcy5wYXJlbnQoKS5oYXNDbGFzcygnc2xpY2stdHJhY2snKSkge1xuICAgICAgICAgICAgXy4kc2xpZGVzLnVud3JhcCgpLnVud3JhcCgpO1xuICAgICAgICB9XG4gICAgICAgIF8uJHNsaWRlcy5yZW1vdmVDbGFzcyhcbiAgICAgICAgICAgICdzbGljay1zbGlkZSBzbGljay1hY3RpdmUgc2xpY2stdmlzaWJsZScpLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG4gICAgICAgIF8uJHNsaWRlci5yZW1vdmVDbGFzcygnc2xpY2stc2xpZGVyJyk7XG4gICAgICAgIF8uJHNsaWRlci5yZW1vdmVDbGFzcygnc2xpY2staW5pdGlhbGl6ZWQnKTtcblxuICAgICAgICBfLiRsaXN0Lm9mZignLnNsaWNrJyk7XG4gICAgICAgICQod2luZG93KS5vZmYoJy5zbGljay0nICsgXy5pbnN0YW5jZVVpZCk7XG4gICAgICAgICQoZG9jdW1lbnQpLm9mZignLnNsaWNrLScgKyBfLmluc3RhbmNlVWlkKTtcbiAgICAgICAgXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5kaXNhYmxlVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKHNsaWRlKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgdHJhbnNpdGlvbiA9IHt9O1xuXG4gICAgICAgIHRyYW5zaXRpb25bXy50cmFuc2l0aW9uVHlwZV0gPSBcIlwiO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZmFkZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKHRyYW5zaXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgXy4kc2xpZGVzLmVxKHNsaWRlKS5jc3ModHJhbnNpdGlvbik7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuZmFkZVNsaWRlID0gZnVuY3Rpb24oc2xpZGVJbmRleCwgY2FsbGJhY2spIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKF8uY3NzVHJhbnNpdGlvbnMgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgIF8uJHNsaWRlcy5lcShzbGlkZUluZGV4KS5jc3Moe1xuICAgICAgICAgICAgICAgIHpJbmRleDogMTAwMFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIF8uJHNsaWRlcy5lcShzbGlkZUluZGV4KS5hbmltYXRlKHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxXG4gICAgICAgICAgICB9LCBfLm9wdGlvbnMuc3BlZWQsIF8ub3B0aW9ucy5lYXNpbmcsIGNhbGxiYWNrKTtcblxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBfLmFwcGx5VHJhbnNpdGlvbihzbGlkZUluZGV4KTtcblxuICAgICAgICAgICAgXy4kc2xpZGVzLmVxKHNsaWRlSW5kZXgpLmNzcyh7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDBcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIF8uZGlzYWJsZVRyYW5zaXRpb24oc2xpZGVJbmRleCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCgpO1xuICAgICAgICAgICAgICAgIH0sIF8ub3B0aW9ucy5zcGVlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5maWx0ZXJTbGlkZXMgPSBmdW5jdGlvbihmaWx0ZXIpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKGZpbHRlciAhPT0gbnVsbCkge1xuXG4gICAgICAgICAgICBfLnVubG9hZCgpO1xuXG4gICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKHRoaXMub3B0aW9ucy5zbGlkZSkuZGV0YWNoKCk7XG5cbiAgICAgICAgICAgIF8uJHNsaWRlc0NhY2hlLmZpbHRlcihmaWx0ZXIpLmFwcGVuZFRvKF8uJHNsaWRlVHJhY2spO1xuXG4gICAgICAgICAgICBfLnJlaW5pdCgpO1xuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuZ2V0Q3VycmVudCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICByZXR1cm4gXy5jdXJyZW50U2xpZGU7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmdldERvdENvdW50ID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgYnJlYWtlciA9IDAsXG4gICAgICAgICAgICBkb3RDb3VudGVyID0gMCxcbiAgICAgICAgICAgIGRvdENvdW50ID0gMCxcbiAgICAgICAgICAgIGRvdExpbWl0O1xuXG4gICAgICAgIGRvdExpbWl0ID0gXy5vcHRpb25zLmluZmluaXRlID09PSB0cnVlID8gXy5zbGlkZUNvdW50ICsgXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAtIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCA6IF8uc2xpZGVDb3VudDtcblxuICAgICAgICB3aGlsZSAoYnJlYWtlciA8IGRvdExpbWl0KSB7XG4gICAgICAgICAgICBkb3RDb3VudCsrO1xuICAgICAgICAgICAgZG90Q291bnRlciArPSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGw7XG4gICAgICAgICAgICBicmVha2VyID0gZG90Q291bnRlciArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZG90Q291bnQ7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmdldExlZnQgPSBmdW5jdGlvbihzbGlkZUluZGV4KSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgdGFyZ2V0TGVmdCxcbiAgICAgICAgICAgIHZlcnRpY2FsSGVpZ2h0LFxuICAgICAgICAgICAgdmVydGljYWxPZmZzZXQgPSAwO1xuXG4gICAgICAgIF8uc2xpZGVPZmZzZXQgPSAwO1xuICAgICAgICB2ZXJ0aWNhbEhlaWdodCA9IF8uJHNsaWRlcy5maXJzdCgpLm91dGVySGVpZ2h0KCk7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ID0gKF8uc2xpZGVXaWR0aCAqIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpICogLTE7XG4gICAgICAgICAgICAgICAgdmVydGljYWxPZmZzZXQgPSAodmVydGljYWxIZWlnaHQgKiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSAqIC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uc2xpZGVDb3VudCAlIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChzbGlkZUluZGV4ICsgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsID4gXy5zbGlkZUNvdW50ICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICAgICAgICAgICAgXy5zbGlkZU9mZnNldCA9ICgoXy5zbGlkZUNvdW50ICUgXy5vcHRpb25zLnNsaWRlc1RvU2hvdykgKiBfLnNsaWRlV2lkdGgpICogLTE7XG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gKChfLnNsaWRlQ291bnQgJSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSAqIHZlcnRpY2FsSGVpZ2h0KSAqIC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChfLnNsaWRlQ291bnQgJSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNsaWRlSW5kZXggKyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgPiBfLnNsaWRlQ291bnQgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuICAgICAgICAgICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ID0gKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKiBfLnNsaWRlV2lkdGgpIC0gKChfLnNsaWRlQ291bnQgJSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSAqIF8uc2xpZGVXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gKChfLnNsaWRlQ291bnQgJSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSAqIHZlcnRpY2FsSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUgJiYgXy5vcHRpb25zLmluZmluaXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ICs9IF8uc2xpZGVXaWR0aCAqIE1hdGguZmxvb3IoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAvIDIpIC0gXy5zbGlkZVdpZHRoO1xuICAgICAgICB9IGVsc2UgaWYgKF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ICs9IF8uc2xpZGVXaWR0aCAqIE1hdGguZmxvb3IoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAvIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRhcmdldExlZnQgPSAoKHNsaWRlSW5kZXggKiBfLnNsaWRlV2lkdGgpICogLTEpICsgXy5zbGlkZU9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldExlZnQgPSAoKHNsaWRlSW5kZXggKiB2ZXJ0aWNhbEhlaWdodCkgKiAtMSkgKyB2ZXJ0aWNhbE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXRMZWZ0O1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmICghJChfLiRzbGlkZXIpLmhhc0NsYXNzKCdzbGljay1pbml0aWFsaXplZCcpKSB7XG5cbiAgICAgICAgICAgICQoXy4kc2xpZGVyKS5hZGRDbGFzcygnc2xpY2staW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgICAgIF8uYnVpbGRPdXQoKTtcbiAgICAgICAgICAgIF8uc2V0UHJvcHMoKTtcbiAgICAgICAgICAgIF8uc3RhcnRMb2FkKCk7XG4gICAgICAgICAgICBfLmxvYWRTbGlkZXIoKTtcbiAgICAgICAgICAgIF8uaW5pdGlhbGl6ZUV2ZW50cygpO1xuICAgICAgICAgICAgXy5jaGVja1Jlc3BvbnNpdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfLm9wdGlvbnMub25Jbml0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBfLm9wdGlvbnMub25Jbml0LmNhbGwodGhpcywgXyk7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuaW5pdEFycm93RXZlbnRzID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuYXJyb3dzID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICAgIF8uJHByZXZBcnJvdy5vbignY2xpY2suc2xpY2snLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ3ByZXZpb3VzJ1xuICAgICAgICAgICAgfSwgXy5jaGFuZ2VTbGlkZSk7XG4gICAgICAgICAgICBfLiRuZXh0QXJyb3cub24oJ2NsaWNrLnNsaWNrJywge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICduZXh0J1xuICAgICAgICAgICAgfSwgXy5jaGFuZ2VTbGlkZSk7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuaW5pdERvdEV2ZW50cyA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmRvdHMgPT09IHRydWUgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuICAgICAgICAgICAgJCgnbGknLCBfLiRkb3RzKS5vbignY2xpY2suc2xpY2snLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2luZGV4J1xuICAgICAgICAgICAgfSwgXy5jaGFuZ2VTbGlkZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXy5vcHRpb25zLmRvdHMgPT09IHRydWUgJiYgXy5vcHRpb25zLnBhdXNlT25Eb3RzSG92ZXIgPT09IHRydWUgJiYgXy5vcHRpb25zLmF1dG9wbGF5ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAkKCdsaScsIF8uJGRvdHMpXG4gICAgICAgICAgICAgICAgLm9uKCdtb3VzZWVudGVyLnNsaWNrJywgXy5hdXRvUGxheUNsZWFyKVxuICAgICAgICAgICAgICAgIC5vbignbW91c2VsZWF2ZS5zbGljaycsIF8uYXV0b1BsYXkpO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmluaXRpYWxpemVFdmVudHMgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG5cbiAgICAgICAgXy5pbml0QXJyb3dFdmVudHMoKTtcblxuICAgICAgICBfLmluaXREb3RFdmVudHMoKTtcblxuICAgICAgICBfLiRsaXN0Lm9uKCd0b3VjaHN0YXJ0LnNsaWNrIG1vdXNlZG93bi5zbGljaycsIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ3N0YXJ0J1xuICAgICAgICB9LCBfLnN3aXBlSGFuZGxlcik7XG4gICAgICAgIF8uJGxpc3Qub24oJ3RvdWNobW92ZS5zbGljayBtb3VzZW1vdmUuc2xpY2snLCB7XG4gICAgICAgICAgICBhY3Rpb246ICdtb3ZlJ1xuICAgICAgICB9LCBfLnN3aXBlSGFuZGxlcik7XG4gICAgICAgIF8uJGxpc3Qub24oJ3RvdWNoZW5kLnNsaWNrIG1vdXNldXAuc2xpY2snLCB7XG4gICAgICAgICAgICBhY3Rpb246ICdlbmQnXG4gICAgICAgIH0sIF8uc3dpcGVIYW5kbGVyKTtcbiAgICAgICAgXy4kbGlzdC5vbigndG91Y2hjYW5jZWwuc2xpY2sgbW91c2VsZWF2ZS5zbGljaycsIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ2VuZCdcbiAgICAgICAgfSwgXy5zd2lwZUhhbmRsZXIpO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMucGF1c2VPbkhvdmVyID09PSB0cnVlICYmIF8ub3B0aW9ucy5hdXRvcGxheSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgXy4kbGlzdC5vbignbW91c2VlbnRlci5zbGljaycsIF8uYXV0b1BsYXlDbGVhcik7XG4gICAgICAgICAgICBfLiRsaXN0Lm9uKCdtb3VzZWxlYXZlLnNsaWNrJywgXy5hdXRvUGxheSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihfLm9wdGlvbnMuYWNjZXNzaWJpbGl0eSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgXy4kbGlzdC5vbigna2V5ZG93bi5zbGljaycsIF8ua2V5SGFuZGxlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZihfLm9wdGlvbnMuZm9jdXNPblNlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgJChfLm9wdGlvbnMuc2xpZGUsIF8uJHNsaWRlVHJhY2spLm9uKCdjbGljay5zbGljaycsIF8uc2VsZWN0SGFuZGxlcik7XG4gICAgICAgIH1cblxuICAgICAgICAkKHdpbmRvdykub24oJ29yaWVudGF0aW9uY2hhbmdlLnNsaWNrLnNsaWNrLScgKyBfLmluc3RhbmNlVWlkLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIF8uY2hlY2tSZXNwb25zaXZlKCk7XG4gICAgICAgICAgICBfLnNldFBvc2l0aW9uKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQod2luZG93KS5vbigncmVzaXplLnNsaWNrLnNsaWNrLScgKyBfLmluc3RhbmNlVWlkLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICgkKHdpbmRvdykud2lkdGgoKSAhPT0gXy53aW5kb3dXaWR0aCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChfLndpbmRvd0RlbGF5KTtcbiAgICAgICAgICAgICAgICBfLndpbmRvd0RlbGF5ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIF8ud2luZG93V2lkdGggPSAkKHdpbmRvdykud2lkdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgXy5jaGVja1Jlc3BvbnNpdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgXy5zZXRQb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgIH0sIDUwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJCh3aW5kb3cpLm9uKCdsb2FkLnNsaWNrLnNsaWNrLScgKyBfLmluc3RhbmNlVWlkLCBfLnNldFBvc2l0aW9uKTtcbiAgICAgICAgJChkb2N1bWVudCkub24oJ3JlYWR5LnNsaWNrLnNsaWNrLScgKyBfLmluc3RhbmNlVWlkLCBfLnNldFBvc2l0aW9uKTtcblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuaW5pdFVJID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuYXJyb3dzID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcblxuICAgICAgICAgICAgXy4kcHJldkFycm93LnNob3coKTtcbiAgICAgICAgICAgIF8uJG5leHRBcnJvdy5zaG93KCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZG90cyA9PT0gdHJ1ZSAmJiBfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XG5cbiAgICAgICAgICAgIF8uJGRvdHMuc2hvdygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXy5vcHRpb25zLmF1dG9wbGF5ID09PSB0cnVlKSB7XG5cbiAgICAgICAgICAgIF8uYXV0b1BsYXkoKTtcblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmtleUhhbmRsZXIgPSBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMzcpIHtcbiAgICAgICAgICAgIF8uY2hhbmdlU2xpZGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ3ByZXZpb3VzJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IDM5KSB7XG4gICAgICAgICAgICBfLmNoYW5nZVNsaWRlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICduZXh0J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmxhenlMb2FkID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgbG9hZFJhbmdlLCBjbG9uZVJhbmdlLCByYW5nZVN0YXJ0LCByYW5nZUVuZDtcblxuICAgICAgICBmdW5jdGlvbiBsb2FkSW1hZ2VzKGltYWdlc1Njb3BlKSB7XG4gICAgICAgICAgICAkKCdpbWdbZGF0YS1sYXp5XScsIGltYWdlc1Njb3BlKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9ICQodGhpcyksXG4gICAgICAgICAgICAgICAgICAgIGltYWdlU291cmNlID0gJCh0aGlzKS5hdHRyKCdkYXRhLWxhenknKSArIFwiP1wiICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICAgICAgICAgICAgICBpbWFnZVxuICAgICAgICAgICAgICAgICAgLmxvYWQoZnVuY3Rpb24oKSB7IGltYWdlLmFuaW1hdGUoeyBvcGFjaXR5OiAxIH0sIDIwMCk7IH0pXG4gICAgICAgICAgICAgICAgICAuY3NzKHsgb3BhY2l0eTogMCB9KVxuICAgICAgICAgICAgICAgICAgLmF0dHIoJ3NyYycsIGltYWdlU291cmNlKVxuICAgICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtbGF6eScpXG4gICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NsaWNrLWxvYWRpbmcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2VTdGFydCA9IF8uY3VycmVudFNsaWRlICsgKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cvMiArIDEpO1xuICAgICAgICAgICAgICAgIHJhbmdlRW5kID0gcmFuZ2VTdGFydCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKyAyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByYW5nZVN0YXJ0ID0gTWF0aC5tYXgoMCwgXy5jdXJyZW50U2xpZGUgLSAoXy5vcHRpb25zLnNsaWRlc1RvU2hvdy8yICsgMSkpO1xuICAgICAgICAgICAgICAgIHJhbmdlRW5kID0gMiArIChfLm9wdGlvbnMuc2xpZGVzVG9TaG93LzIgKyAxKSArIF8uY3VycmVudFNsaWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmFuZ2VTdGFydCA9IF8ub3B0aW9ucy5pbmZpbml0ZSA/IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKyBfLmN1cnJlbnRTbGlkZSA6IF8uY3VycmVudFNsaWRlO1xuICAgICAgICAgICAgcmFuZ2VFbmQgPSByYW5nZVN0YXJ0ICsgXy5vcHRpb25zLnNsaWRlc1RvU2hvdztcbiAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuZmFkZSA9PT0gdHJ1ZSApIHtcbiAgICAgICAgICAgICAgICBpZihyYW5nZVN0YXJ0ID4gMCkgcmFuZ2VTdGFydC0tO1xuICAgICAgICAgICAgICAgIGlmKHJhbmdlRW5kIDw9IF8uc2xpZGVDb3VudCkgcmFuZ2VFbmQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvYWRSYW5nZSA9IF8uJHNsaWRlci5maW5kKCcuc2xpY2stc2xpZGUnKS5zbGljZShyYW5nZVN0YXJ0LCByYW5nZUVuZCk7XG4gICAgICAgIGxvYWRJbWFnZXMobG9hZFJhbmdlKTtcblxuICAgICAgICAgIGlmIChfLnNsaWRlQ291bnQgPT0gMSl7XG4gICAgICAgICAgICAgIGNsb25lUmFuZ2UgPSBfLiRzbGlkZXIuZmluZCgnLnNsaWNrLXNsaWRlJylcbiAgICAgICAgICAgICAgbG9hZEltYWdlcyhjbG9uZVJhbmdlKVxuICAgICAgICAgIH1lbHNlXG4gICAgICAgIGlmIChfLmN1cnJlbnRTbGlkZSA+PSBfLnNsaWRlQ291bnQgLSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XG4gICAgICAgICAgICBjbG9uZVJhbmdlID0gXy4kc2xpZGVyLmZpbmQoJy5zbGljay1jbG9uZWQnKS5zbGljZSgwLCBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KTtcbiAgICAgICAgICAgIGxvYWRJbWFnZXMoY2xvbmVSYW5nZSlcbiAgICAgICAgfSBlbHNlIGlmIChfLmN1cnJlbnRTbGlkZSA9PT0gMCkge1xuICAgICAgICAgICAgY2xvbmVSYW5nZSA9IF8uJHNsaWRlci5maW5kKCcuc2xpY2stY2xvbmVkJykuc2xpY2UoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAqIC0xKTtcbiAgICAgICAgICAgIGxvYWRJbWFnZXMoY2xvbmVSYW5nZSk7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUubG9hZFNsaWRlciA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBfLnNldFBvc2l0aW9uKCk7XG5cbiAgICAgICAgXy4kc2xpZGVUcmFjay5jc3Moe1xuICAgICAgICAgICAgb3BhY2l0eTogMVxuICAgICAgICB9KTtcblxuICAgICAgICBfLiRzbGlkZXIucmVtb3ZlQ2xhc3MoJ3NsaWNrLWxvYWRpbmcnKTtcblxuICAgICAgICBfLmluaXRVSSgpO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMubGF6eUxvYWQgPT09ICdwcm9ncmVzc2l2ZScpIHtcbiAgICAgICAgICAgIF8ucHJvZ3Jlc3NpdmVMYXp5TG9hZCgpO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnBvc3RTbGlkZSA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMub25BZnRlckNoYW5nZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgXy5vcHRpb25zLm9uQWZ0ZXJDaGFuZ2UuY2FsbCh0aGlzLCBfLCBpbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICBfLmFuaW1hdGluZyA9IGZhbHNlO1xuXG4gICAgICAgIF8uc2V0UG9zaXRpb24oKTtcblxuICAgICAgICBfLnN3aXBlTGVmdCA9IG51bGw7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5hdXRvcGxheSA9PT0gdHJ1ZSAmJiBfLnBhdXNlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIF8uYXV0b1BsYXkoKTtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5wcm9ncmVzc2l2ZUxhenlMb2FkID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgaW1nQ291bnQsIHRhcmdldEltYWdlO1xuXG4gICAgICAgIGltZ0NvdW50ID0gJCgnaW1nW2RhdGEtbGF6eV0nKS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGltZ0NvdW50ID4gMCkge1xuICAgICAgICAgICAgdGFyZ2V0SW1hZ2UgPSAkKCdpbWdbZGF0YS1sYXp5XScsIF8uJHNsaWRlcikuZmlyc3QoKTtcbiAgICAgICAgICAgIHRhcmdldEltYWdlLmF0dHIoJ3NyYycsIHRhcmdldEltYWdlLmF0dHIoJ2RhdGEtbGF6eScpKS5yZW1vdmVDbGFzcygnc2xpY2stbG9hZGluZycpLmxvYWQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0SW1hZ2UucmVtb3ZlQXR0cignZGF0YS1sYXp5Jyk7XG4gICAgICAgICAgICAgICAgXy5wcm9ncmVzc2l2ZUxhenlMb2FkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgY3VycmVudFNsaWRlID0gXy5jdXJyZW50U2xpZGU7XG5cbiAgICAgICAgXy5kZXN0cm95KCk7XG5cbiAgICAgICAgJC5leHRlbmQoXywgXy5pbml0aWFscyk7XG5cbiAgICAgICAgXy5jdXJyZW50U2xpZGUgPSBjdXJyZW50U2xpZGU7XG4gICAgICAgIF8uaW5pdCgpO1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5yZWluaXQgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG5cbiAgICAgICAgXy4kc2xpZGVzID0gXy4kc2xpZGVUcmFjay5jaGlsZHJlbihfLm9wdGlvbnMuc2xpZGUpLmFkZENsYXNzKFxuICAgICAgICAgICAgJ3NsaWNrLXNsaWRlJyk7XG5cbiAgICAgICAgXy5zbGlkZUNvdW50ID0gXy4kc2xpZGVzLmxlbmd0aDtcblxuICAgICAgICBpZiAoXy5jdXJyZW50U2xpZGUgPj0gXy5zbGlkZUNvdW50ICYmIF8uY3VycmVudFNsaWRlICE9PSAwKSB7XG4gICAgICAgICAgICBfLmN1cnJlbnRTbGlkZSA9IF8uY3VycmVudFNsaWRlIC0gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsO1xuICAgICAgICB9XG5cbiAgICAgICAgXy5zZXRQcm9wcygpO1xuXG4gICAgICAgIF8uc2V0dXBJbmZpbml0ZSgpO1xuXG4gICAgICAgIF8uYnVpbGRBcnJvd3MoKTtcblxuICAgICAgICBfLnVwZGF0ZUFycm93cygpO1xuXG4gICAgICAgIF8uaW5pdEFycm93RXZlbnRzKCk7XG5cbiAgICAgICAgXy5idWlsZERvdHMoKTtcblxuICAgICAgICBfLnVwZGF0ZURvdHMoKTtcblxuICAgICAgICBfLmluaXREb3RFdmVudHMoKTtcblxuICAgICAgICBpZihfLm9wdGlvbnMuZm9jdXNPblNlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgJChfLm9wdGlvbnMuc2xpZGUsIF8uJHNsaWRlVHJhY2spLm9uKCdjbGljay5zbGljaycsIF8uc2VsZWN0SGFuZGxlcik7XG4gICAgICAgIH1cblxuICAgICAgICBfLnNldFNsaWRlQ2xhc3NlcygwKTtcblxuICAgICAgICBfLnNldFBvc2l0aW9uKCk7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5vblJlSW5pdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgXy5vcHRpb25zLm9uUmVJbml0LmNhbGwodGhpcywgXyk7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUucmVtb3ZlU2xpZGUgPSBmdW5jdGlvbihpbmRleCwgcmVtb3ZlQmVmb3JlKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmICh0eXBlb2YoaW5kZXgpID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJlbW92ZUJlZm9yZSA9IGluZGV4O1xuICAgICAgICAgICAgaW5kZXggPSByZW1vdmVCZWZvcmUgPT09IHRydWUgPyAwIDogXy5zbGlkZUNvdW50IC0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4ID0gcmVtb3ZlQmVmb3JlID09PSB0cnVlID8gLS1pbmRleCA6IGluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8uc2xpZGVDb3VudCA8IDEgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gXy5zbGlkZUNvdW50IC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgXy51bmxvYWQoKTtcblxuICAgICAgICBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKHRoaXMub3B0aW9ucy5zbGlkZSkuZXEoaW5kZXgpLnJlbW92ZSgpO1xuXG4gICAgICAgIF8uJHNsaWRlcyA9IF8uJHNsaWRlVHJhY2suY2hpbGRyZW4odGhpcy5vcHRpb25zLnNsaWRlKTtcblxuICAgICAgICBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKHRoaXMub3B0aW9ucy5zbGlkZSkuZGV0YWNoKCk7XG5cbiAgICAgICAgXy4kc2xpZGVUcmFjay5hcHBlbmQoXy4kc2xpZGVzKTtcblxuICAgICAgICBfLiRzbGlkZXNDYWNoZSA9IF8uJHNsaWRlcztcblxuICAgICAgICBfLnJlaW5pdCgpO1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5zZXRDU1MgPSBmdW5jdGlvbihwb3NpdGlvbikge1xuXG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgIHBvc2l0aW9uUHJvcHMgPSB7fSwgeCwgeTtcblxuICAgICAgICBpZiAoXy5vcHRpb25zLnJ0bCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcG9zaXRpb24gPSAtcG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgeCA9IF8ucG9zaXRpb25Qcm9wID09ICdsZWZ0JyA/IHBvc2l0aW9uICsgJ3B4JyA6ICcwcHgnO1xuICAgICAgICB5ID0gXy5wb3NpdGlvblByb3AgPT0gJ3RvcCcgPyBwb3NpdGlvbiArICdweCcgOiAnMHB4JztcblxuICAgICAgICBwb3NpdGlvblByb3BzW18ucG9zaXRpb25Qcm9wXSA9IHBvc2l0aW9uO1xuXG4gICAgICAgIGlmIChfLnRyYW5zZm9ybXNFbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5jc3MocG9zaXRpb25Qcm9wcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb3NpdGlvblByb3BzID0ge307XG4gICAgICAgICAgICBpZiAoXy5jc3NUcmFuc2l0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvblByb3BzW18uYW5pbVR5cGVdID0gJ3RyYW5zbGF0ZSgnICsgeCArICcsICcgKyB5ICsgJyknO1xuICAgICAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKHBvc2l0aW9uUHJvcHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvblByb3BzW18uYW5pbVR5cGVdID0gJ3RyYW5zbGF0ZTNkKCcgKyB4ICsgJywgJyArIHkgKyAnLCAwcHgpJztcbiAgICAgICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmNzcyhwb3NpdGlvblByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5zZXREaW1lbnNpb25zID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMudmVydGljYWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBfLiRsaXN0LmNzcyh7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICgnMHB4ICcgKyBfLm9wdGlvbnMuY2VudGVyUGFkZGluZylcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF8uJGxpc3QuaGVpZ2h0KF8uJHNsaWRlcy5maXJzdCgpLm91dGVySGVpZ2h0KHRydWUpICogXy5vcHRpb25zLnNsaWRlc1RvU2hvdyk7XG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBfLiRsaXN0LmNzcyh7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IChfLm9wdGlvbnMuY2VudGVyUGFkZGluZyArICcgMHB4JylcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF8ubGlzdFdpZHRoID0gXy4kbGlzdC53aWR0aCgpO1xuICAgICAgICBfLmxpc3RIZWlnaHQgPSBfLiRsaXN0LmhlaWdodCgpO1xuXG5cbiAgICAgICAgaWYoXy5vcHRpb25zLnZlcnRpY2FsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgXy5zbGlkZVdpZHRoID0gTWF0aC5jZWlsKF8ubGlzdFdpZHRoIC8gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyk7XG4gICAgICAgICAgICBfLiRzbGlkZVRyYWNrLndpZHRoKE1hdGguY2VpbCgoXy5zbGlkZVdpZHRoICogXy4kc2xpZGVUcmFjay5jaGlsZHJlbignLnNsaWNrLXNsaWRlJykubGVuZ3RoKSkpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfLnNsaWRlV2lkdGggPSBNYXRoLmNlaWwoXy5saXN0V2lkdGgpO1xuICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5oZWlnaHQoTWF0aC5jZWlsKChfLiRzbGlkZXMuZmlyc3QoKS5vdXRlckhlaWdodCh0cnVlKSAqIF8uJHNsaWRlVHJhY2suY2hpbGRyZW4oJy5zbGljay1zbGlkZScpLmxlbmd0aCkpKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG9mZnNldCA9IF8uJHNsaWRlcy5maXJzdCgpLm91dGVyV2lkdGgodHJ1ZSkgLSBfLiRzbGlkZXMuZmlyc3QoKS53aWR0aCgpO1xuICAgICAgICBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKCcuc2xpY2stc2xpZGUnKS53aWR0aChfLnNsaWRlV2lkdGggLSBvZmZzZXQpO1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5zZXRGYWRlID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgdGFyZ2V0TGVmdDtcblxuICAgICAgICBfLiRzbGlkZXMuZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkge1xuICAgICAgICAgICAgdGFyZ2V0TGVmdCA9IChfLnNsaWRlV2lkdGggKiBpbmRleCkgKiAtMTtcbiAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICBsZWZ0OiB0YXJnZXRMZWZ0LFxuICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICB6SW5kZXg6IDgwMCxcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgXy4kc2xpZGVzLmVxKF8uY3VycmVudFNsaWRlKS5jc3Moe1xuICAgICAgICAgICAgekluZGV4OiA5MDAsXG4gICAgICAgICAgICBvcGFjaXR5OiAxXG4gICAgICAgIH0pO1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBfLnNldERpbWVuc2lvbnMoKTtcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmZhZGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBfLnNldENTUyhfLmdldExlZnQoXy5jdXJyZW50U2xpZGUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF8uc2V0RmFkZSgpO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnNldFByb3BzID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgYm9keVN0eWxlID0gZG9jdW1lbnQuYm9keS5zdHlsZTtcblxuICAgICAgICBfLnBvc2l0aW9uUHJvcCA9IF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gdHJ1ZSA/ICd0b3AnIDogJ2xlZnQnO1xuXG4gICAgICAgIGlmIChfLnBvc2l0aW9uUHJvcCA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgIF8uJHNsaWRlci5hZGRDbGFzcygnc2xpY2stdmVydGljYWwnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF8uJHNsaWRlci5yZW1vdmVDbGFzcygnc2xpY2stdmVydGljYWwnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib2R5U3R5bGUuV2Via2l0VHJhbnNpdGlvbiAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBib2R5U3R5bGUuTW96VHJhbnNpdGlvbiAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBib2R5U3R5bGUubXNUcmFuc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmKF8ub3B0aW9ucy51c2VDU1MgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBfLmNzc1RyYW5zaXRpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib2R5U3R5bGUuT1RyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBfLmFuaW1UeXBlID0gJ09UcmFuc2Zvcm0nO1xuICAgICAgICAgICAgXy50cmFuc2Zvcm1UeXBlID0gXCItby10cmFuc2Zvcm1cIjtcbiAgICAgICAgICAgIF8udHJhbnNpdGlvblR5cGUgPSAnT1RyYW5zaXRpb24nO1xuICAgICAgICAgICAgaWYgKGJvZHlTdHlsZS5wZXJzcGVjdGl2ZVByb3BlcnR5ID09PSB1bmRlZmluZWQgJiYgYm9keVN0eWxlLndlYmtpdFBlcnNwZWN0aXZlID09PSB1bmRlZmluZWQpIF8uYW5pbVR5cGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keVN0eWxlLk1velRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBfLmFuaW1UeXBlID0gJ01velRyYW5zZm9ybSc7XG4gICAgICAgICAgICBfLnRyYW5zZm9ybVR5cGUgPSBcIi1tb3otdHJhbnNmb3JtXCI7XG4gICAgICAgICAgICBfLnRyYW5zaXRpb25UeXBlID0gJ01velRyYW5zaXRpb24nO1xuICAgICAgICAgICAgaWYgKGJvZHlTdHlsZS5wZXJzcGVjdGl2ZVByb3BlcnR5ID09PSB1bmRlZmluZWQgJiYgYm9keVN0eWxlLk1velBlcnNwZWN0aXZlID09PSB1bmRlZmluZWQpIF8uYW5pbVR5cGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keVN0eWxlLndlYmtpdFRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBfLmFuaW1UeXBlID0gJ3dlYmtpdFRyYW5zZm9ybSc7XG4gICAgICAgICAgICBfLnRyYW5zZm9ybVR5cGUgPSBcIi13ZWJraXQtdHJhbnNmb3JtXCI7XG4gICAgICAgICAgICBfLnRyYW5zaXRpb25UeXBlID0gJ3dlYmtpdFRyYW5zaXRpb24nO1xuICAgICAgICAgICAgaWYgKGJvZHlTdHlsZS5wZXJzcGVjdGl2ZVByb3BlcnR5ID09PSB1bmRlZmluZWQgJiYgYm9keVN0eWxlLndlYmtpdFBlcnNwZWN0aXZlID09PSB1bmRlZmluZWQpIF8uYW5pbVR5cGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keVN0eWxlLm1zVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIF8uYW5pbVR5cGUgPSAnbXNUcmFuc2Zvcm0nO1xuICAgICAgICAgICAgXy50cmFuc2Zvcm1UeXBlID0gXCItbXMtdHJhbnNmb3JtXCI7XG4gICAgICAgICAgICBfLnRyYW5zaXRpb25UeXBlID0gJ21zVHJhbnNpdGlvbic7XG4gICAgICAgICAgICBpZiAoYm9keVN0eWxlLm1zVHJhbnNmb3JtID09PSB1bmRlZmluZWQpIF8uYW5pbVR5cGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keVN0eWxlLnRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkICYmIF8uYW5pbVR5cGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBfLmFuaW1UeXBlID0gJ3RyYW5zZm9ybSc7XG4gICAgICAgICAgICBfLnRyYW5zZm9ybVR5cGUgPSBcInRyYW5zZm9ybVwiO1xuICAgICAgICAgICAgXy50cmFuc2l0aW9uVHlwZSA9ICd0cmFuc2l0aW9uJztcbiAgICAgICAgfVxuICAgICAgICBfLnRyYW5zZm9ybXNFbmFibGVkID0gKF8uYW5pbVR5cGUgIT09IG51bGwgJiYgXy5hbmltVHlwZSAhPT0gZmFsc2UpO1xuXG4gICAgfTtcblxuXG4gICAgU2xpY2sucHJvdG90eXBlLnNldFNsaWRlQ2xhc3NlcyA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgY2VudGVyT2Zmc2V0LCBhbGxTbGlkZXMsIGluZGV4T2Zmc2V0LCByZW1haW5kZXI7XG5cbiAgICAgICAgXy4kc2xpZGVyLmZpbmQoJy5zbGljay1zbGlkZScpLnJlbW92ZUNsYXNzKCdzbGljay1hY3RpdmUnKS5yZW1vdmVDbGFzcygnc2xpY2stY2VudGVyJyk7XG4gICAgICAgIGFsbFNsaWRlcyA9IF8uJHNsaWRlci5maW5kKCcuc2xpY2stc2xpZGUnKTtcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcblxuICAgICAgICAgICAgY2VudGVyT2Zmc2V0ID0gTWF0aC5mbG9vcihfLm9wdGlvbnMuc2xpZGVzVG9TaG93IC8gMik7XG5cbiAgICAgICAgICAgIGlmKF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gdHJ1ZSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGNlbnRlck9mZnNldCAmJiBpbmRleCA8PSAoXy5zbGlkZUNvdW50IC0gMSkgLSBjZW50ZXJPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgXy4kc2xpZGVzLnNsaWNlKGluZGV4IC0gY2VudGVyT2Zmc2V0LCBpbmRleCArIGNlbnRlck9mZnNldCArIDEpLmFkZENsYXNzKCdzbGljay1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbmRleE9mZnNldCA9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKyBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgYWxsU2xpZGVzLnNsaWNlKGluZGV4T2Zmc2V0IC0gY2VudGVyT2Zmc2V0ICsgMSwgaW5kZXhPZmZzZXQgKyBjZW50ZXJPZmZzZXQgKyAyKS5hZGRDbGFzcygnc2xpY2stYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbFNsaWRlcy5lcShhbGxTbGlkZXMubGVuZ3RoIC0gMSAtIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpLmFkZENsYXNzKCdzbGljay1jZW50ZXInKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSBfLnNsaWRlQ291bnQgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbFNsaWRlcy5lcShfLm9wdGlvbnMuc2xpZGVzVG9TaG93KS5hZGRDbGFzcygnc2xpY2stY2VudGVyJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF8uJHNsaWRlcy5lcShpbmRleCkuYWRkQ2xhc3MoJ3NsaWNrLWNlbnRlcicpO1xuXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IChfLnNsaWRlQ291bnQgLSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSkge1xuICAgICAgICAgICAgICAgIF8uJHNsaWRlcy5zbGljZShpbmRleCwgaW5kZXggKyBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KS5hZGRDbGFzcygnc2xpY2stYWN0aXZlJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCBhbGxTbGlkZXMubGVuZ3RoIDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKSB7XG4gICAgICAgICAgICAgICAgYWxsU2xpZGVzLmFkZENsYXNzKCdzbGljay1hY3RpdmUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVtYWluZGVyID0gXy5zbGlkZUNvdW50JV8ub3B0aW9ucy5zbGlkZXNUb1Nob3c7XG4gICAgICAgICAgICAgICAgaW5kZXhPZmZzZXQgPSBfLm9wdGlvbnMuaW5maW5pdGUgPT09IHRydWUgPyBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICsgaW5kZXggOiBpbmRleDtcbiAgICAgICAgICAgICAgICBpZihfLm9wdGlvbnMuc2xpZGVzVG9TaG93ID09IF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCAmJiAoXy5zbGlkZUNvdW50IC0gaW5kZXgpIDwgXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuICAgICAgICAgICAgICAgICAgICBhbGxTbGlkZXMuc2xpY2UoaW5kZXhPZmZzZXQtKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3ctcmVtYWluZGVyKSwgaW5kZXhPZmZzZXQgKyByZW1haW5kZXIpLmFkZENsYXNzKCdzbGljay1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhbGxTbGlkZXMuc2xpY2UoaW5kZXhPZmZzZXQsIGluZGV4T2Zmc2V0ICsgXy5vcHRpb25zLnNsaWRlc1RvU2hvdykuYWRkQ2xhc3MoJ3NsaWNrLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5sYXp5TG9hZCA9PT0gJ29uZGVtYW5kJykge1xuICAgICAgICAgICAgXy5sYXp5TG9hZCgpO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnNldHVwSW5maW5pdGUgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXMsXG4gICAgICAgICAgICBpLCBzbGlkZUluZGV4LCBpbmZpbml0ZUNvdW50O1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZmFkZSA9PT0gdHJ1ZSB8fCBfLm9wdGlvbnMudmVydGljYWwgPT09IHRydWUpIHtcbiAgICAgICAgICAgIF8ub3B0aW9ucy5jZW50ZXJNb2RlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSB0cnVlICYmIF8ub3B0aW9ucy5mYWRlID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICBzbGlkZUluZGV4ID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcblxuICAgICAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpbmZpbml0ZUNvdW50ID0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyArIDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW5maW5pdGVDb3VudCA9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yIChpID0gXy5zbGlkZUNvdW50OyBpID4gKF8uc2xpZGVDb3VudCAtXG4gICAgICAgICAgICAgICAgICAgIGluZmluaXRlQ291bnQpOyBpIC09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVJbmRleCA9IGkgLSAxO1xuICAgICAgICAgICAgICAgICAgICAkKF8uJHNsaWRlc1tzbGlkZUluZGV4XSkuY2xvbmUodHJ1ZSkuYXR0cignaWQnLCAnJykucHJlcGVuZFRvKFxuICAgICAgICAgICAgICAgICAgICAgICAgXy4kc2xpZGVUcmFjaykuYWRkQ2xhc3MoJ3NsaWNrLWNsb25lZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5maW5pdGVDb3VudDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICAkKF8uJHNsaWRlc1tzbGlkZUluZGV4XSkuY2xvbmUodHJ1ZSkuYXR0cignaWQnLCAnJykuYXBwZW5kVG8oXG4gICAgICAgICAgICAgICAgICAgICAgICBfLiRzbGlkZVRyYWNrKS5hZGRDbGFzcygnc2xpY2stY2xvbmVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suZmluZCgnLnNsaWNrLWNsb25lZCcpLmZpbmQoJ1tpZF0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2lkJywgJycpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5zZWxlY3RIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG4gICAgICAgIHZhciBhc05hdkZvciA9IF8ub3B0aW9ucy5hc05hdkZvciAhPSBudWxsID8gJChfLm9wdGlvbnMuYXNOYXZGb3IpLmdldFNsaWNrKCkgOiBudWxsO1xuICAgICAgICB2YXIgaW5kZXggPSBwYXJzZUludCgkKGV2ZW50LnRhcmdldCkucGFyZW50KCkuYXR0cihcImluZGV4XCIpKTtcbiAgICAgICAgaWYoIWluZGV4KSBpbmRleCA9IDA7XG5cbiAgICAgICAgaWYoXy5zbGlkZUNvdW50IDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpe1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF8uc2xpZGVIYW5kbGVyKGluZGV4KTtcblxuICAgICAgICBpZihhc05hdkZvciAhPSBudWxsKXtcbiAgICAgICAgICAgIGlmKGFzTmF2Rm9yLnNsaWRlQ291bnQgPD0gYXNOYXZGb3Iub3B0aW9ucy5zbGlkZXNUb1Nob3cpe1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzTmF2Rm9yLnNsaWRlSGFuZGxlcihpbmRleCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnNsaWRlSGFuZGxlciA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cbiAgICAgICAgdmFyIHRhcmdldFNsaWRlLCBhbmltU2xpZGUsIHNsaWRlTGVmdCwgdW5ldmVuT2Zmc2V0LCB0YXJnZXRMZWZ0ID0gbnVsbCxcbiAgICAgICAgICAgIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmIChfLmFuaW1hdGluZyA9PT0gdHJ1ZSAmJiBfLm9wdGlvbnMud2FpdEZvckFuaW1hdGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldFNsaWRlID0gaW5kZXg7XG4gICAgICAgIHRhcmdldExlZnQgPSBfLmdldExlZnQodGFyZ2V0U2xpZGUpO1xuICAgICAgICBzbGlkZUxlZnQgPSBfLmdldExlZnQoXy5jdXJyZW50U2xpZGUpO1xuXG4gICAgICAgIHVuZXZlbk9mZnNldCA9IF8uc2xpZGVDb3VudCAlIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCAhPT0gMCA/IF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCA6IDA7XG5cbiAgICAgICAgXy5jdXJyZW50TGVmdCA9IF8uc3dpcGVMZWZ0ID09PSBudWxsID8gc2xpZGVMZWZ0IDogXy5zd2lwZUxlZnQ7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gZmFsc2UgJiYgXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IGZhbHNlICYmIChpbmRleCA8IDAgfHwgaW5kZXggPiAoXy5zbGlkZUNvdW50IC0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyArIHVuZXZlbk9mZnNldCkpKSB7XG4gICAgICAgICAgICBpZihfLm9wdGlvbnMuZmFkZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRTbGlkZSA9IF8uY3VycmVudFNsaWRlO1xuICAgICAgICAgICAgICAgIF8uYW5pbWF0ZVNsaWRlKHNsaWRlTGVmdCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIF8ucG9zdFNsaWRlKHRhcmdldFNsaWRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChfLm9wdGlvbnMuaW5maW5pdGUgPT09IGZhbHNlICYmIF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlICYmIChpbmRleCA8IDAgfHwgaW5kZXggPiAoXy5zbGlkZUNvdW50IC0gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsKSkpIHtcbiAgICAgICAgICAgIGlmKF8ub3B0aW9ucy5mYWRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFNsaWRlID0gXy5jdXJyZW50U2xpZGU7XG4gICAgICAgICAgICAgICAgXy5hbmltYXRlU2xpZGUoc2xpZGVMZWZ0LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgXy5wb3N0U2xpZGUodGFyZ2V0U2xpZGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5hdXRvcGxheSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChfLmF1dG9QbGF5VGltZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldFNsaWRlIDwgMCkge1xuICAgICAgICAgICAgaWYgKF8uc2xpZGVDb3VudCAlIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGFuaW1TbGlkZSA9IF8uc2xpZGVDb3VudCAtIChfLnNsaWRlQ291bnQgJSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbmltU2xpZGUgPSBfLnNsaWRlQ291bnQgLSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0U2xpZGUgPiAoXy5zbGlkZUNvdW50IC0gMSkpIHtcbiAgICAgICAgICAgIGFuaW1TbGlkZSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmltU2xpZGUgPSB0YXJnZXRTbGlkZTtcbiAgICAgICAgfVxuXG4gICAgICAgIF8uYW5pbWF0aW5nID0gdHJ1ZTtcblxuICAgICAgICBpZiAoXy5vcHRpb25zLm9uQmVmb3JlQ2hhbmdlICE9PSBudWxsICYmIGluZGV4ICE9PSBfLmN1cnJlbnRTbGlkZSkge1xuICAgICAgICAgICAgXy5vcHRpb25zLm9uQmVmb3JlQ2hhbmdlLmNhbGwodGhpcywgXywgXy5jdXJyZW50U2xpZGUsIGFuaW1TbGlkZSk7XG4gICAgICAgIH1cblxuICAgICAgICBfLmN1cnJlbnRTbGlkZSA9IGFuaW1TbGlkZTtcblxuICAgICAgICBfLnNldFNsaWRlQ2xhc3NlcyhfLmN1cnJlbnRTbGlkZSk7XG5cbiAgICAgICAgXy51cGRhdGVEb3RzKCk7XG4gICAgICAgIF8udXBkYXRlQXJyb3dzKCk7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5mYWRlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBfLmZhZGVTbGlkZShhbmltU2xpZGUsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIF8ucG9zdFNsaWRlKGFuaW1TbGlkZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIF8uYW5pbWF0ZVNsaWRlKHRhcmdldExlZnQsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgXy5wb3N0U2xpZGUoYW5pbVNsaWRlKTtcbiAgICAgICAgfSk7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnN0YXJ0TG9hZCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmFycm93cyA9PT0gdHJ1ZSAmJiBfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XG5cbiAgICAgICAgICAgIF8uJHByZXZBcnJvdy5oaWRlKCk7XG4gICAgICAgICAgICBfLiRuZXh0QXJyb3cuaGlkZSgpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXy5vcHRpb25zLmRvdHMgPT09IHRydWUgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuXG4gICAgICAgICAgICBfLiRkb3RzLmhpZGUoKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgXy4kc2xpZGVyLmFkZENsYXNzKCdzbGljay1sb2FkaW5nJyk7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnN3aXBlRGlyZWN0aW9uID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIHhEaXN0LCB5RGlzdCwgciwgc3dpcGVBbmdsZSwgXyA9IHRoaXM7XG5cbiAgICAgICAgeERpc3QgPSBfLnRvdWNoT2JqZWN0LnN0YXJ0WCAtIF8udG91Y2hPYmplY3QuY3VyWDtcbiAgICAgICAgeURpc3QgPSBfLnRvdWNoT2JqZWN0LnN0YXJ0WSAtIF8udG91Y2hPYmplY3QuY3VyWTtcbiAgICAgICAgciA9IE1hdGguYXRhbjIoeURpc3QsIHhEaXN0KTtcblxuICAgICAgICBzd2lwZUFuZ2xlID0gTWF0aC5yb3VuZChyICogMTgwIC8gTWF0aC5QSSk7XG4gICAgICAgIGlmIChzd2lwZUFuZ2xlIDwgMCkge1xuICAgICAgICAgICAgc3dpcGVBbmdsZSA9IDM2MCAtIE1hdGguYWJzKHN3aXBlQW5nbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChzd2lwZUFuZ2xlIDw9IDQ1KSAmJiAoc3dpcGVBbmdsZSA+PSAwKSkge1xuICAgICAgICAgICAgcmV0dXJuICdsZWZ0JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHN3aXBlQW5nbGUgPD0gMzYwKSAmJiAoc3dpcGVBbmdsZSA+PSAzMTUpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoc3dpcGVBbmdsZSA+PSAxMzUpICYmIChzd2lwZUFuZ2xlIDw9IDIyNSkpIHtcbiAgICAgICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICd2ZXJ0aWNhbCc7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnN3aXBlRW5kID0gZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG4gICAgICAgIHZhciBhc05hdkZvciA9IF8ub3B0aW9ucy5hc05hdkZvciAhPSBudWxsID8gJChfLm9wdGlvbnMuYXNOYXZGb3IpLmdldFNsaWNrKCkgOiBudWxsO1xuXG4gICAgICAgIF8uZHJhZ2dpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAoXy50b3VjaE9iamVjdC5jdXJYID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfLnRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoID49IF8udG91Y2hPYmplY3QubWluU3dpcGUpIHtcbiAgICAgICAgICAgICQoZXZlbnQudGFyZ2V0KS5vbignY2xpY2suc2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgJChldmVudC50YXJnZXQpLm9mZignY2xpY2suc2xpY2snKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKF8uc3dpcGVEaXJlY3Rpb24oKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgICAgICAgICBfLnNsaWRlSGFuZGxlcihfLmN1cnJlbnRTbGlkZSArIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGFzTmF2Rm9yICE9IG51bGwpIGFzTmF2Rm9yLnNsaWRlSGFuZGxlcihhc05hdkZvci5jdXJyZW50U2xpZGUgKyBhc05hdkZvci5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsKTtcbiAgICAgICAgICAgICAgICAgICAgXy50b3VjaE9iamVjdCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICAgICAgXy5zbGlkZUhhbmRsZXIoXy5jdXJyZW50U2xpZGUgLSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwpO1xuICAgICAgICAgICAgICAgICAgICBpZihhc05hdkZvciAhPSBudWxsKSBhc05hdkZvci5zbGlkZUhhbmRsZXIoYXNOYXZGb3IuY3VycmVudFNsaWRlIC0gYXNOYXZGb3Iub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCk7XG4gICAgICAgICAgICAgICAgICAgIF8udG91Y2hPYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZihfLnRvdWNoT2JqZWN0LnN0YXJ0WCAhPT0gXy50b3VjaE9iamVjdC5jdXJYKSB7XG4gICAgICAgICAgICAgICAgXy5zbGlkZUhhbmRsZXIoXy5jdXJyZW50U2xpZGUpO1xuICAgICAgICAgICAgICAgIGlmKGFzTmF2Rm9yICE9IG51bGwpIGFzTmF2Rm9yLnNsaWRlSGFuZGxlcihhc05hdkZvci5jdXJyZW50U2xpZGUpO1xuICAgICAgICAgICAgICAgIF8udG91Y2hPYmplY3QgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5zd2lwZUhhbmRsZXIgPSBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBpZiAoKF8ub3B0aW9ucy5zd2lwZSA9PT0gZmFsc2UpIHx8ICgnb250b3VjaGVuZCcgaW4gZG9jdW1lbnQgJiYgXy5vcHRpb25zLnN3aXBlID09PSBmYWxzZSkpIHtcbiAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKChfLm9wdGlvbnMuZHJhZ2dhYmxlID09PSBmYWxzZSkgfHwgKF8ub3B0aW9ucy5kcmFnZ2FibGUgPT09IGZhbHNlICYmICFldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMpKSB7XG4gICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIF8udG91Y2hPYmplY3QuZmluZ2VyQ291bnQgPSBldmVudC5vcmlnaW5hbEV2ZW50ICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlcyAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlcy5sZW5ndGggOiAxO1xuXG4gICAgICAgIF8udG91Y2hPYmplY3QubWluU3dpcGUgPSBfLmxpc3RXaWR0aCAvIF8ub3B0aW9uc1xuICAgICAgICAgICAgLnRvdWNoVGhyZXNob2xkO1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuZGF0YS5hY3Rpb24pIHtcblxuICAgICAgICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICAgICAgICAgIF8uc3dpcGVTdGFydChldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ21vdmUnOlxuICAgICAgICAgICAgICAgIF8uc3dpcGVNb3ZlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICBfLnN3aXBlRW5kKGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnN3aXBlTW92ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgY3VyTGVmdCwgc3dpcGVEaXJlY3Rpb24sIHBvc2l0aW9uT2Zmc2V0LCB0b3VjaGVzO1xuXG4gICAgICAgIHRvdWNoZXMgPSBldmVudC5vcmlnaW5hbEV2ZW50ICE9PSB1bmRlZmluZWQgPyBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgOiBudWxsO1xuXG4gICAgICAgIGN1ckxlZnQgPSBfLmdldExlZnQoXy5jdXJyZW50U2xpZGUpO1xuXG4gICAgICAgIGlmICghXy5kcmFnZ2luZyB8fCB0b3VjaGVzICYmIHRvdWNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBfLnRvdWNoT2JqZWN0LmN1clggPSB0b3VjaGVzICE9PSB1bmRlZmluZWQgPyB0b3VjaGVzWzBdLnBhZ2VYIDogZXZlbnQuY2xpZW50WDtcbiAgICAgICAgXy50b3VjaE9iamVjdC5jdXJZID0gdG91Y2hlcyAhPT0gdW5kZWZpbmVkID8gdG91Y2hlc1swXS5wYWdlWSA6IGV2ZW50LmNsaWVudFk7XG5cbiAgICAgICAgXy50b3VjaE9iamVjdC5zd2lwZUxlbmd0aCA9IE1hdGgucm91bmQoTWF0aC5zcXJ0KFxuICAgICAgICAgICAgTWF0aC5wb3coXy50b3VjaE9iamVjdC5jdXJYIC0gXy50b3VjaE9iamVjdC5zdGFydFgsIDIpKSk7XG5cbiAgICAgICAgc3dpcGVEaXJlY3Rpb24gPSBfLnN3aXBlRGlyZWN0aW9uKCk7XG5cbiAgICAgICAgaWYgKHN3aXBlRGlyZWN0aW9uID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCAhPT0gdW5kZWZpbmVkICYmIF8udG91Y2hPYmplY3Quc3dpcGVMZW5ndGggPiA0KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9zaXRpb25PZmZzZXQgPSBfLnRvdWNoT2JqZWN0LmN1clggPiBfLnRvdWNoT2JqZWN0LnN0YXJ0WCA/IDEgOiAtMTtcblxuICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgXy5zd2lwZUxlZnQgPSBjdXJMZWZ0ICsgXy50b3VjaE9iamVjdC5zd2lwZUxlbmd0aCAqIHBvc2l0aW9uT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgXy5zd2lwZUxlZnQgPSBjdXJMZWZ0ICsgKF8udG91Y2hPYmplY3RcbiAgICAgICAgICAgICAgICAuc3dpcGVMZW5ndGggKiAoXy4kbGlzdC5oZWlnaHQoKSAvIF8ubGlzdFdpZHRoKSkgKiBwb3NpdGlvbk9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZmFkZSA9PT0gdHJ1ZSB8fCBfLm9wdGlvbnMudG91Y2hNb3ZlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8uYW5pbWF0aW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICBfLnN3aXBlTGVmdCA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBfLnNldENTUyhfLnN3aXBlTGVmdCk7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnN3aXBlU3RhcnQgPSBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgIHRvdWNoZXM7XG5cbiAgICAgICAgaWYgKF8udG91Y2hPYmplY3QuZmluZ2VyQ291bnQgIT09IDEgfHwgXy5zbGlkZUNvdW50IDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICAgIF8udG91Y2hPYmplY3QgPSB7fTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRvdWNoZXMgPSBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF07XG4gICAgICAgIH1cblxuICAgICAgICBfLnRvdWNoT2JqZWN0LnN0YXJ0WCA9IF8udG91Y2hPYmplY3QuY3VyWCA9IHRvdWNoZXMgIT09IHVuZGVmaW5lZCA/IHRvdWNoZXMucGFnZVggOiBldmVudC5jbGllbnRYO1xuICAgICAgICBfLnRvdWNoT2JqZWN0LnN0YXJ0WSA9IF8udG91Y2hPYmplY3QuY3VyWSA9IHRvdWNoZXMgIT09IHVuZGVmaW5lZCA/IHRvdWNoZXMucGFnZVkgOiBldmVudC5jbGllbnRZO1xuXG4gICAgICAgIF8uZHJhZ2dpbmcgPSB0cnVlO1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS51bmZpbHRlclNsaWRlcyA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBpZiAoXy4kc2xpZGVzQ2FjaGUgIT09IG51bGwpIHtcblxuICAgICAgICAgICAgXy51bmxvYWQoKTtcblxuICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5jaGlsZHJlbih0aGlzLm9wdGlvbnMuc2xpZGUpLmRldGFjaCgpO1xuXG4gICAgICAgICAgICBfLiRzbGlkZXNDYWNoZS5hcHBlbmRUbyhfLiRzbGlkZVRyYWNrKTtcblxuICAgICAgICAgICAgXy5yZWluaXQoKTtcblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnVubG9hZCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICAkKCcuc2xpY2stY2xvbmVkJywgXy4kc2xpZGVyKS5yZW1vdmUoKTtcbiAgICAgICAgaWYgKF8uJGRvdHMpIHtcbiAgICAgICAgICAgIF8uJGRvdHMucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uJHByZXZBcnJvdykge1xuICAgICAgICAgICAgXy4kcHJldkFycm93LnJlbW92ZSgpO1xuICAgICAgICAgICAgXy4kbmV4dEFycm93LnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIF8uJHNsaWRlcy5yZW1vdmVDbGFzcyhcbiAgICAgICAgICAgICdzbGljay1zbGlkZSBzbGljay1hY3RpdmUgc2xpY2stdmlzaWJsZScpLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnVwZGF0ZUFycm93cyA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmFycm93cyA9PT0gdHJ1ZSAmJiBfLm9wdGlvbnMuaW5maW5pdGUgIT09XG4gICAgICAgICAgICB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICAgIF8uJHByZXZBcnJvdy5yZW1vdmVDbGFzcygnc2xpY2stZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIF8uJG5leHRBcnJvdy5yZW1vdmVDbGFzcygnc2xpY2stZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGlmIChfLmN1cnJlbnRTbGlkZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIF8uJHByZXZBcnJvdy5hZGRDbGFzcygnc2xpY2stZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICBfLiRuZXh0QXJyb3cucmVtb3ZlQ2xhc3MoJ3NsaWNrLWRpc2FibGVkJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF8uY3VycmVudFNsaWRlID49IF8uc2xpZGVDb3VudCAtIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICAgICAgICBfLiRuZXh0QXJyb3cuYWRkQ2xhc3MoJ3NsaWNrLWRpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgXy4kcHJldkFycm93LnJlbW92ZUNsYXNzKCdzbGljay1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnVwZGF0ZURvdHMgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKF8uJGRvdHMgIT09IG51bGwpIHtcblxuICAgICAgICAgICAgXy4kZG90cy5maW5kKCdsaScpLnJlbW92ZUNsYXNzKCdzbGljay1hY3RpdmUnKTtcbiAgICAgICAgICAgIF8uJGRvdHMuZmluZCgnbGknKS5lcShNYXRoLmZsb29yKF8uY3VycmVudFNsaWRlIC8gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsKSkuYWRkQ2xhc3MoJ3NsaWNrLWFjdGl2ZScpO1xuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICAkLmZuLnNsaWNrID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICB2YXIgXyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBfLmVhY2goZnVuY3Rpb24oaW5kZXgsIGVsZW1lbnQpIHtcblxuICAgICAgICAgICAgZWxlbWVudC5zbGljayA9IG5ldyBTbGljayhlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgJC5mbi5zbGlja0FkZCA9IGZ1bmN0aW9uKHNsaWRlLCBzbGlkZUluZGV4LCBhZGRCZWZvcmUpIHtcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuICAgICAgICByZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbGVtZW50KSB7XG5cbiAgICAgICAgICAgIGVsZW1lbnQuc2xpY2suYWRkU2xpZGUoc2xpZGUsIHNsaWRlSW5kZXgsIGFkZEJlZm9yZSk7XG5cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgICQuZm4uc2xpY2tDdXJyZW50U2xpZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuICAgICAgICByZXR1cm4gXy5nZXQoMCkuc2xpY2suZ2V0Q3VycmVudCgpO1xuICAgIH07XG5cbiAgICAkLmZuLnNsaWNrRmlsdGVyID0gZnVuY3Rpb24oZmlsdGVyKSB7XG4gICAgICAgIHZhciBfID0gdGhpcztcbiAgICAgICAgcmV0dXJuIF8uZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkge1xuXG4gICAgICAgICAgICBlbGVtZW50LnNsaWNrLmZpbHRlclNsaWRlcyhmaWx0ZXIpO1xuXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAkLmZuLnNsaWNrR29UbyA9IGZ1bmN0aW9uKHNsaWRlKSB7XG4gICAgICAgIHZhciBfID0gdGhpcztcbiAgICAgICAgcmV0dXJuIF8uZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkge1xuXG4gICAgICAgICAgICB2YXIgYXNOYXZGb3IgPSBlbGVtZW50LnNsaWNrLm9wdGlvbnMuYXNOYXZGb3IgIT0gbnVsbCA/ICQoZWxlbWVudC5zbGljay5vcHRpb25zLmFzTmF2Rm9yKSA6IG51bGw7XG4gICAgICAgICAgICBpZihhc05hdkZvciAhPSBudWxsKSBhc05hdkZvci5zbGlja0dvVG8oc2xpZGUpO1xuICAgICAgICAgICAgZWxlbWVudC5zbGljay5zbGlkZUhhbmRsZXIoc2xpZGUpO1xuXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAkLmZuLnNsaWNrTmV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgXyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBfLmVhY2goZnVuY3Rpb24oaW5kZXgsIGVsZW1lbnQpIHtcblxuICAgICAgICAgICAgZWxlbWVudC5zbGljay5jaGFuZ2VTbGlkZSh7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnbmV4dCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgJC5mbi5zbGlja1BhdXNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBfID0gdGhpcztcbiAgICAgICAgcmV0dXJuIF8uZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkge1xuXG4gICAgICAgICAgICBlbGVtZW50LnNsaWNrLmF1dG9QbGF5Q2xlYXIoKTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2xpY2sucGF1c2VkID0gdHJ1ZTtcblxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgJC5mbi5zbGlja1BsYXkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuICAgICAgICByZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbGVtZW50KSB7XG5cbiAgICAgICAgICAgIGVsZW1lbnQuc2xpY2sucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICBlbGVtZW50LnNsaWNrLmF1dG9QbGF5KCk7XG5cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgICQuZm4uc2xpY2tQcmV2ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBfID0gdGhpcztcbiAgICAgICAgcmV0dXJuIF8uZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkge1xuXG4gICAgICAgICAgICBlbGVtZW50LnNsaWNrLmNoYW5nZVNsaWRlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdwcmV2aW91cydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgJC5mbi5zbGlja1JlbW92ZSA9IGZ1bmN0aW9uKHNsaWRlSW5kZXgsIHJlbW92ZUJlZm9yZSkge1xuICAgICAgICB2YXIgXyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBfLmVhY2goZnVuY3Rpb24oaW5kZXgsIGVsZW1lbnQpIHtcblxuICAgICAgICAgICAgZWxlbWVudC5zbGljay5yZW1vdmVTbGlkZShzbGlkZUluZGV4LCByZW1vdmVCZWZvcmUpO1xuXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAkLmZuLnNsaWNrR2V0T3B0aW9uID0gZnVuY3Rpb24ob3B0aW9uKSB7XG4gICAgICAgIHZhciBfID0gdGhpcztcbiAgICAgICAgcmV0dXJuIF8uZ2V0KDApLnNsaWNrLm9wdGlvbnNbb3B0aW9uXTtcbiAgICB9O1xuXG4gICAgJC5mbi5zbGlja1NldE9wdGlvbiA9IGZ1bmN0aW9uKG9wdGlvbiwgdmFsdWUsIHJlZnJlc2gpIHtcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuICAgICAgICByZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbGVtZW50KSB7XG5cbiAgICAgICAgICAgIGVsZW1lbnQuc2xpY2sub3B0aW9uc1tvcHRpb25dID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChyZWZyZXNoID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zbGljay51bmxvYWQoKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNsaWNrLnJlaW5pdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAkLmZuLnNsaWNrVW5maWx0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuICAgICAgICByZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbGVtZW50KSB7XG5cbiAgICAgICAgICAgIGVsZW1lbnQuc2xpY2sudW5maWx0ZXJTbGlkZXMoKTtcblxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgJC5mbi51bnNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBfID0gdGhpcztcbiAgICAgICAgcmV0dXJuIF8uZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkge1xuXG4gICAgICAgICAgaWYgKGVsZW1lbnQuc2xpY2spIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2xpY2suZGVzdHJveSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgJC5mbi5nZXRTbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcyA9IG51bGw7XG4gICAgICAgIHZhciBfID0gdGhpcztcbiAgICAgICAgXy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgICAgICBzID0gZWxlbWVudC5zbGljaztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfTtcblxufSkpO1xuIiwiLyoqXG4gKiBAZmlsZVxuICogVGhpcyBjcmVhdGVzIHRoZSBjdXN0b20gY2Fyb3VzZWwvc2xpZGVzaG93IHVzZWQgYnkgRGlnaXRhbCBMb29tXG4gKi9cbihmdW5jdGlvbiAoJCkge1xuICBcbiAgLyoqXG4gICogU2V0IFJlc3BvbnNpdmUgU2xpZGVzaG93XG4gICogRm9yIGNvbmZpZ3VyYXRpb24gc2VlIGh0dHA6Ly9rZW53aGVlbGVyLmdpdGh1Yi5pby9zbGljay9cbiAgKi9cbiAgZnVuY3Rpb24gc2V0UmVzcG9uc2l2ZVNsaWRlc2hvdygpIHtcbiAgICB2YXIgJHNsaWRlc2hvdyA9ICQoJ2Rpdi52aWV3LmRsLXNsaWRlc2hvdyA+IGRpdi52aWV3LWNvbnRlbnQnKTtcbiAgICAkc2xpZGVzaG93LmVhY2goZnVuY3Rpb24oKXtcbiAgICAgIHZhciBjb3VudEl0ZW1zID0gJChcImRpdi5maWVsZC1jb250ZW50IGltZ1wiLCB0aGlzKS5sZW5ndGg7XG4gICAgICBpZiAoY291bnRJdGVtcyA+IDEpIHtcbiAgICAgICAgJCh0aGlzKS5zbGljayh7XG4gICAgICBcdCAgZG90czogdHJ1ZSxcbiAgICAgIFx0ICBhdXRvcGxheTogdHJ1ZSxcbiAgICAgIFx0ICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgICAgIGluZmluaXRlOiB0cnVlLFxuICAgICAgICAgIHNwZWVkOiA1MDAsXG4gICAgICAgICAgZmFkZTogdHJ1ZSxcbiAgICAgICAgICBzbGlkZTogJ2Rpdi52aWV3cy1yb3cnLFxuICAgICAgICAgIGNzc0Vhc2U6ICdsaW5lYXInXG4gICAgICBcdH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgKiBTZXQgUmVzcG9uc2l2ZSBDYXJvdXNlbFxuICAqIEZvciBjb25maWd1cmF0aW9uIHNlZSBodHRwOi8va2Vud2hlZWxlci5naXRodWIuaW8vc2xpY2svXG4gICovXG4gIGZ1bmN0aW9uIHNldFJlc3BvbnNpdmVDYXJvdXNlbCgpIHtcbiAgICAkY2Fyb3VzZWwgPSAkKCdkaXYudmlldy5kbC1zbGlkZXItY2Fyb3VzZWwgPiBkaXYudmlldy1jb250ZW50Jyk7XG4gICAgXG4gICAgJGNhcm91c2VsLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICQodGhpcykuc2xpY2soe1xuICAgICAgICBjZW50ZXJNb2RlOiBmYWxzZSxcbiAgICAgICAgYXJyb3c6IHRydWUsXG4gICAgICAgIHNwZWVkOiAxNTAwLFxuICAgICAgICBzbGlkZXNUb1Nob3c6IDMsXG4gICAgICAgIHNsaWRlc1RvU2Nyb2xsOiAzLFxuICAgICAgICBpbmZpbml0ZTogdHJ1ZSxcbiAgICAgICAgdG91Y2hNb3ZlOiB0cnVlLFxuICAgICAgICBhdXRvcGxheTogdHJ1ZSxcbiAgICAgICAgcmVzcG9uc2l2ZTogWyAgICBcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYnJlYWtwb2ludDogOTgwLFxuICAgICAgICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgICAgICAgIHNsaWRlc1RvU2hvdzogMyxcbiAgICAgICAgICAgICAgICBzbGlkZXNUb1Njcm9sbDogM1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBicmVha3BvaW50OiA2NTAsXG4gICAgICAgICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgc2xpZGVzVG9TaG93OiAzLFxuICAgICAgICAgICAgICAgIHNsaWRlc1RvU2Nyb2xsOiAzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJyZWFrcG9pbnQ6IDQ4MCxcbiAgICAgICAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICBzbGlkZXNUb1Nob3c6IDAsXG4gICAgICAgICAgICAgICAgc2xpZGVzVG9TY3JvbGw6IDAsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBcbiAgZnVuY3Rpb24gaW5pdEFsbENhcm91c2VsKCkge1xuICAgIHNldFJlc3BvbnNpdmVTbGlkZXNob3coKTtcbiAgICBzZXRSZXNwb25zaXZlQ2Fyb3VzZWwoKTtcbiAgfVxuXG4gIC8vUHVsbGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgb3V0LCB0byByZWR1Y2UgbmVzdGluZyBtYWRuZXNzXG4gIGZ1bmN0aW9uIGFwcGx5VG9SZXNpemUoKSB7XG4gICAgdmFyIHJlc2l6ZVRpbWVyO1xuICAgICQod2luZG93KS5vbihcInJlc2l6ZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgIGNsZWFyVGltZW91dChyZXNpemVUaW1lcik7XG4gICAgICByZXNpemVUaW1lciA9IHNldFRpbWVvdXQoaW5pdEFsbENhcm91c2VsLCAxMDApO1xuICAgIH0pO1xuICB9XG4gIFxuICAkKGRvY3VtZW50KS5vbigncmVhZHknLCBmdW5jdGlvbigpIHtcbiAgICBpbml0QWxsQ2Fyb3VzZWwoKTtcbiAgfSk7XG59KShqUXVlcnkpO1xuIiwiLyoqXG4gKiBAZmlsZVxuICogVGhlIG1haW4gSlMgZmlsZSBmb3IgdGhlIHRoZW1lXG4gKiBCYXNpY2FsbHksIHRoZSBsdW5jaGJveCBvZiB0aGUgdGhlbWVcbiAqXG4gKiBJbiBvcmRlciBmb3IgdGhpcyBKYXZhU2NyaXB0IHRvIGJlIGxvYWRlZCBvbiBwYWdlcywgc2VlIHRoZSBpbnN0cnVjdGlvbnMgaW5cbiAqIHRoZSBSRUFETUUudHh0IG5leHQgdG8gdGhpcyBmaWxlLlxuICovXG5cbi8vIEphdmFTY3JpcHQgc2hvdWxkIGJlIG1hZGUgY29tcGF0aWJsZSB3aXRoIGxpYnJhcmllcyBvdGhlciB0aGFuIGpRdWVyeSBieVxuLy8gd3JhcHBpbmcgaXQgd2l0aCBhbiBcImFub255bW91cyBjbG9zdXJlXCIuIFNlZTpcbi8vIC0gaHR0cDovL2RydXBhbC5vcmcvbm9kZS8xNDQ2NDIwXG4vLyAtIGh0dHA6Ly93d3cuYWRlcXVhdGVseWdvb2QuY29tLzIwMTAvMy9KYXZhU2NyaXB0LU1vZHVsZS1QYXR0ZXJuLUluLURlcHRoXG4oZnVuY3Rpb24gKCQpIHtcblxuICB2YXIgZXZlbnQgPSAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lL2kpKSA/IFwidG91Y2hzdGFydFwiIDogXCJjbGlja1wiO1xuXG4gIERydXBhbC5ETG9vbSA9IERydXBhbC5ETG9vbSB8fCB7fTtcblxuICBmdW5jdGlvbiBmYWRlSW5PdXRCb3goKXtcbiAgICB2YXIgRmFkZWRCb3ggPSAkKCdib2R5LmZyb250IGRpdi5ub2RlLWdyb3VwLnZpZXctbW9kZS10ZWFzZXJfbGlzdCcpO1xuXG4gICAgaWYgKEZhZGVkQm94Lmxlbmd0aCA+IDAgKSB7XG5cbiAgICAgIEZhZGVkQm94LmVhY2goZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyICRib3ggPSAkKCdkaXYuZmllbGQtbmFtZS1maWVsZC1oaWdoLWxldmVsLW1lc3NhZ2UnLCB0aGlzKSxcbiAgICAgICAgICAkYm94TGluayA9ICQoJ2Rpdi5maWVsZC1uYW1lLWZpZWxkLWltYWdlLWRpdmlzaW9uLXRodW1ibmFpbCBhJywgdGhpcyksXG4gICAgICAgICAgJEhvdmVyWm9uZSA9IFwiXCI7XG5cbiAgICAgICAgaWYoJChcImRpdi5mYWRlLWFyZWFcIiwkYm94KS5sZW5ndGggPT09IDAgKSB7XG4gICAgICAgICAgJGJveC53cmFwSW5uZXIoJzxkaXYgY2xhc3M9XCJmYWRlLWFyZWFcIj48L2Rpdj4nKTtcbiAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdmYWRlLWNvbnRhaW5lcicpO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkYXJlYSA9ICQoJy5mYWRlLWFyZWEnLCRib3gpO1xuICAgICAgICAkYm94LmF0dHIoJ3N0eWxlJywgJycpO1xuICAgICAgICAkYXJlYS5hdHRyKCdzdHlsZScsICcnKTtcbiAgICAgICAgJGFyZWEuaGlkZSgpO1xuXG4gICAgICAgIGlmIChkZXZpY2VJbmZvLndpZHRoID4gZGV2aWNlSW5mby5nZXRNYXhQb2ludChcIm1lZGl1bVwiKSkge1xuICAgICAgICAgICRIb3ZlclpvbmUgPSAkKCdkaXYuZmllbGQtbmFtZS1maWVsZC1pbWFnZS1kaXZpc2lvbi10aHVtYm5haWwnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAkSG92ZXJab25lID0gJCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBCb3hIZWlnaHQgPSAkSG92ZXJab25lLmlubmVySGVpZ2h0KHRydWUpICsgMSxcbiAgICAgICAgICBCb3hXaWR0aCA9ICRIb3ZlclpvbmUuaW5uZXJXaWR0aCh0cnVlKSxcbiAgICAgICAgICBib3hDc3MgPSBbeydoZWlnaHQnIDogQm94SGVpZ2h0LCAnd2lkdGgnIDogQm94V2lkdGgsICdvdmVyZmxvdyc6ICdoaWRkZW4nIH1dLFxuICAgICAgICAgIGFyZWFDc3MgPSBbeyd3aWR0aCc6ICcxMDAlJywgJ2hlaWdodCcgOiBCb3hIZWlnaHQgfV07XG5cbiAgICAgICAgJGJveC5jc3MoYm94Q3NzWzBdKTtcbiAgICAgICAgJGFyZWEuY3NzKGFyZWFDc3NbMF0pO1xuXG4gICAgICAgICRib3gub24oJ21vdXNlZW50ZXIgdG91Y2hzdGFydCcsIGZ1bmN0aW9uKGUpe1xuICAgICAgICAgIC8vJGFyZWEuZmFkZUluKCdmYXN0Jyk7XG4gICAgICAgICAgJGFyZWEuc2hvdygpO1xuICAgICAgICAgICRhcmVhLmNzcygnY3Vyc29yJywgJ3BvaW50ZXInKTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIH0pO1xuXG4gICAgICAgICRib3gub24oJ21vdXNlbGVhdmUgdG91Y2hlbmQnLCBmdW5jdGlvbigpe1xuICAgICAgICAgIC8vJGFyZWEuZmFkZU91dCgnc2xvdycpO1xuICAgICAgICAgICRhcmVhLmhpZGUoKTtcbiAgICAgICAgICAkYXJlYS5jc3MoJ2N1cnNvcicsICdhdXRvJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRib3gub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICRib3hMaW5rWzBdLmNsaWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRNZWdhTWVudSgpIHtcbiAgICB2YXIgJG1lbnUgPSAkKCdsaSNtZW51LTI0MS0xLCBsaSNtZW51LTEwNzktMScpLFxuICAgICAgICBzaXplID0gJChcImRpdiNuYXZpZ2F0aW9uLWNvbnRlbnQgZGl2LnJlZ2lvbi1uYXZpZ2F0aW9uXCIpLndpZHRoKCk7XG5cbiAgICAkbWVudS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAvLyBNZWdhIE1lbnUgLSBMZWZ0IFBvc2l0aW9ubmluZyBmb3IgZnVsbCB3aWR0aCBzdWJtZW51XG4gICAgICAkc3VibWVudSA9ICQoJ2EubWVudXBhcmVudC5zZi1kZXB0aC0xICsgdWwuc2YtbWVnYW1lbnUnLCAkbWVudSk7XG4gICAgICAkc3VibWVudS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgQ3VyZW50T2Zmc2V0ID0gJCh0aGlzKS5vZmZzZXQoKSxcbiAgICAgICAgICBNZW51T2Zmc2V0ID0gJCgnZGl2I2Jsb2NrLXN1cGVyZmlzaC0xJykub2Zmc2V0KCksXG4gICAgICAgICAgcG9zaXRpb24gPSBNZW51T2Zmc2V0LmxlZnQgLSBDdXJlbnRPZmZzZXQubGVmdDtcbiAgICAgICAgJCh0aGlzKS5jc3Moeyd3aWR0aCc6IHNpemUsICdsZWZ0JzogcG9zaXRpb24sICdtYXgtd2lkdGgnOiBzaXplfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKioqIFNldHRpbmdzIGZvciBGdWxsIFdpZHRoIEVsZW1lbnRzICoqKioqL1xuICBmdW5jdGlvbiBzZXRGdWxsV2l0aEVsZW1lbnRzKCkge1xuXG4gICAgaWYgKCQoJ2RpdiNibG9jay12aWV3cy1hcHBsaWNhdGlvbnMtYmxvY2snKS5sZW5ndGggIT09IDApIHsgLy8gSG9tZXBhZ2UgYmxvY2sgYXBwbGljYXRpb25cblxuICAgICAgYXBwbHlSZXNwb25zaXZlRnVsbFdpZHRoKCdkaXYjYmxvY2stdmlld3MtYXBwbGljYXRpb25zLWJsb2NrJyk7XG4gICAgfVxuICAgIGlmICgkKCdkaXYucmVnaW9uLWNvbnRlbnQtY2xvc3VyZScpLmxlbmd0aCAhPT0gMCkgeyAvLyBIb21lcGFnZSBibG9jayBhcHBsaWNhdGlvblxuICAgICAgYXBwbHlSZXNwb25zaXZlRnVsbFdpZHRoKCdkaXYucmVnaW9uLWNvbnRlbnQtY2xvc3VyZScpO1xuICAgIH1cbiAgICBpZiAoJCgnZGl2I2Jsb2NrLXZpZXdzLWV2ZW50cy1ibG9jay0yJykubGVuZ3RoICE9PSAwKSB7IC8vIEhvbWVwYWdlIGJsb2NrIGFwcGxpY2F0aW9uXG4gICAgICBhcHBseVJlc3BvbnNpdmVGdWxsV2lkdGgoJ2RpdiNibG9jay12aWV3cy1ldmVudHMtYmxvY2stMicsIGRldmljZUluZm8uYnJlYWtQb2ludHNbMl0uY3V0T2ZmKTtcbiAgICB9XG5cbiAgfSAvLyBlbmQgc2V0RnVsbFdpdGhFbGVtZW50cyAoKVxuXG4gIC8qKioqIFNldHRpbmdzIGZvciBGdWxsIFdpZHRoIEVsZW1lbnRzIG9ubHkgb24gYSBzcGVjaWZpYyBicmVha3BvaW50ICoqKioqL1xuICBmdW5jdGlvbiBhcHBseVJlc3BvbnNpdmVGdWxsV2lkdGgoZWxtdCxicCkge1xuXG4gICAgdmFyICRib3ggPSAkKGVsbXQpO1xuXG4gICAgdmFyIEJveFdpZHRoID0gcGFyc2VJbnQoZGV2aWNlSW5mby53aWR0aCksXG4gICAgICBzdWJzdG9yeVNpemUgPSBwYXJzZUludCgkYm94LnBhcmVudCgpLmlubmVyV2lkdGgodHJ1ZSkpLFxuICAgICAgQ29udGVudFdpZHRoID0gcGFyc2VJbnQoJGJveC5wYXJlbnQoKS53aWR0aCgpKSxcbiAgICAgIGxlZnRwb3NpdGlvbiA9IC0gKChCb3hXaWR0aCAtIENvbnRlbnRXaWR0aCkgLyAyKSxcbiAgICAgIGJveENzcyA9IHsnd2lkdGgnOiBCb3hXaWR0aCAsJ2xlZnQnOiBsZWZ0cG9zaXRpb24sICAnbWF4LXdpZHRoJzogJ25vbmUnfSxcbiAgICAgIHN1YnN0b3J5Q3NzID0geyd3aWR0aCc6IHN1YnN0b3J5U2l6ZX07XG5cbiAgICBpZihicCA9PT0gdW5kZWZpbmVkIHx8IChicCAhPT0gdW5kZWZpbmVkICYmIGRldmljZUluZm8ud2lkdGggPD0gYnApICkgeyAvLyBkZWZhdWx0IGFsd2F5cyBmdWxsIHdpZHRoXG5cbiAgICAgIGlmICgkKCcuZnVsbC13aWR0aC1ib3gtd3JhcHBlcicsICRib3gpLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgICRib3gud3JhcElubmVyKCBcIjxkaXYgY2xhc3M9J2Z1bGwtd2lkdGgtYm94LXdyYXBwZXInPjwvZGl2PlwiKTtcbiAgICAgIH1cbiAgICAgICQoJy5mdWxsLXdpZHRoLWJveC13cmFwcGVyJywkYm94KS5jc3Moc3Vic3RvcnlDc3MpO1xuICAgICAgJGJveFxuICAgICAgICAuY3NzKGJveENzcylcbiAgICAgICAgLmFkZENsYXNzKCdmdWxsLXdpZHRoLWJveCcpXG4gICAgICAgIC5lbmQoKTtcbiAgICB9XG4gICAgZWxzZSAge1xuICAgICAgJGJveFxuICAgICAgICAuYXR0cignc3R5bGUnLCAnJylcbiAgICAgICAgLnJlbW92ZUNsYXNzKCdmdWxsLXdpZHRoLWJveCcpO1xuICAgICAgJCgnLmZ1bGwtd2lkdGgtYm94LXdyYXBwZXInLCAkYm94KS5hdHRyKCdzdHlsZScsICcnKTtcbiAgICAgIGlmICgkKCcuZnVsbC13aWR0aC1ib3gtd3JhcHBlcicsICRib3gpLmxlbmd0aCA+IDApe1xuICAgICAgICAkKCcuZnVsbC13aWR0aC1ib3gtd3JhcHBlcicsICRib3gpLmNoaWxkcmVuKCkudW53cmFwKCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGVuZCBzZXRGdWxsV2l0aEVsZW1lbnRzICgpXG5cbiAgLyoqXG4gICAqIFNldCB0aGUgeHBhbmRhYmxlIG9uIGRvbXJlYWR5IGFuZCBhbGwgYWpheFxuICAgKi9cbiAgRHJ1cGFsLmJlaGF2aW9ycy5zZXRYcGFuZGFibGUgPSB7XG4gICAgYXR0YWNoOiBmdW5jdGlvbihjb250ZXh0LCBzZXR0aW5ncykge1xuICAgICAgJCgnLnhwYW5kYWJsZScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICQodGhpcylcbiAgICAgICAgICAub2ZmKGV2ZW50KVxuICAgICAgICAgIC5vbihldmVudCwgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgJCh0aGlzKS50b2dnbGVDbGFzcygnb3BlbicpLm5leHQoJy54cGFuZGFibGUtYXJlYScpLnNsaWRlVG9nZ2xlKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCQodGhpcykubmV4dEFsbCgnZGl2LnhwYW5kYWJsZS1hcmVhJykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgJCh0aGlzKVxuICAgICAgICAgICAgLm5leHRVbnRpbCgnLnhwYW5kYWJsZSwgLnhwYW5kYWJsZS1icmVhaycpXG4gICAgICAgICAgICAud3JhcEFsbCgnPGRpdiBjbGFzcz1cInhwYW5kYWJsZS1hcmVhXCI+PC9kaXY+Jyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgJCgnLnhwYW5kYWJsZS1hcmVhJykuaGlkZSgpO1xuICAgIH1cbiAgfTtcblxuICBEcnVwYWwuYmVoYXZpb3JzLmFsdGVyQ2FydERpc3BsYXkgPSB7XG4gICAgYXR0YWNoOiBmdW5jdGlvbihjb250ZXh0LCBzZXR0aW5ncykge1xuICAgICAgJCgnZGl2Lm5vZGUtcHJvZHVjdC1kaXNwbGF5LnZpZXctbW9kZS1mdWxsJykuZWFjaChmdW5jdGlvbigpe1xuXG4gICAgICAgIGlmICgkKCdkaXYuZmllbGQtbmFtZS1maWVsZC1wcm9kdWN0cycsIHRoaXMpLmxlbmd0aCA+IDAgICkge1xuICAgICAgICAgIGlmICgkKCdkaXYuZmllbGQtY29tbWVyY2UtcHJpY2UtcHJlcHJvY2Vzc2VkJywgdGhpcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICgkKCdkaXYjcHJpY2UtcXVhbnRpdHktc3VibWl0JywgdGhpcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICQoJ2Zvcm0uY29tbWVyY2UtYWRkLXRvLWNhcnQgaW5wdXQuZm9ybS1zdWJtaXQnLCB0aGlzKS53cmFwQWxsKCc8ZGl2IGlkPVwicHJpY2UtcXVhbnRpdHktc3VibWl0XCI+Jyk7XG4gICAgICAgICAgICAgICQoJ2Rpdi5mb3JtLWl0ZW0tcXVhbnRpdHknLCB0aGlzKS5wcmVwZW5kVG8oJ2RpdiNwcmljZS1xdWFudGl0eS1zdWJtaXQnKTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB2YXIgJHByaWNlID0gJCgnZGl2LmZpZWxkLWNvbW1lcmNlLXByaWNlJywgdGhpcyksXG4gICAgICAgICAgICAgICAgJHByaWNlQ2xvbmUgPSAkcHJpY2UuY2xvbmUoKTtcblxuICAgICAgICAgICAgJHByaWNlLmNzcyh7J3Bvc2l0aW9uOic6J2Fic29sdXRlJywgbGVmdDonLTk5OTk5cHgnLCAndmlzaWJpbGl0eSc6J2hpZGRlbid9KTtcblxuICAgICAgICAgICAgJHByaWNlQ2xvbmUuYWRkQ2xhc3MoJ2ZpZWxkLWNvbW1lcmNlLXByaWNlLXByZXByb2Nlc3NlZCcpXG4gICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnZmllbGQtY29tbWVyY2UtcHJpY2UnKVxuICAgICAgICAgICAgICAucHJlcGVuZFRvKCdkaXYjcHJpY2UtcXVhbnRpdHktc3VibWl0Jyk7XG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBFcXVhbGl6ZUl0ZW1zKCkge1xuICAgIC8vIEhvbWVwYWdlIERpdmlzaW9uIEJsb2NrIEVxdWFsaXplXG4gICAgJCgnLnZpZXctZGlzcGxheS1pZC1kaXZpc2lvbl9ob21lcGFnZSAudmlldy1jb250ZW50IC5ub2RlOmZpcnN0LWNoaWxkIGltZycpLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgJCgnLnZpZXctZGlzcGxheS1pZC1kaXZpc2lvbl9ob21lcGFnZSAudmlldy1jb250ZW50JykuZXF1YWxpemUoe2NoaWxkcmVuOiAnLm5vZGUnLCByZXNldDogdHJ1ZX0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFJlc3BvbnNpdmVFbGVtZW50KCkge1xuICAgIHNldE1lZ2FNZW51KCk7XG4gICAgc2V0RnVsbFdpdGhFbGVtZW50cygpO1xuICAgIEVxdWFsaXplSXRlbXMoKTtcbiAgICBmYWRlSW5PdXRCb3goKTsgLy8gdG9nZ2xlYm94IG9uIGZyb250cGFnZVxuICB9XG5cbiAgLy9QdWxsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSBvdXQsIHRvIHJlZHVjZSBuZXN0aW5nIG1hZG5lc3NcbiAgZnVuY3Rpb24gYXBwbHlUb1Jlc2l6ZSgpIHtcbiAgICB2YXIgcmVzaXplVGltZXI7XG4gICAgJCh3aW5kb3cpLm9uKFwicmVzaXplXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHJlc2l6ZVRpbWVyKTtcbiAgICAgIHJlc2l6ZVRpbWVyID0gc2V0VGltZW91dChzZXRSZXNwb25zaXZlRWxlbWVudCwgMTAwKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7XG5cbiAgICAvLyBSZW1vdmVkIHNxdWFyZSB0aHVtYm5haWwgaXMgd2lkZXIgaW1hZ2VcbiAgICAkKCcubm9kZS52aWV3LW1vZGUtZnVsbCcpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoJCgnZGl2LmZpZWxkLW5hbWUtZHMtb3JpZ2luYWwtaW1hZ2UnLCB0aGlzKS5sZW5ndGggIT09IDAgJiYgJCgnZGl2LmZpZWxkLW5hbWUtZHMtd2lkZS1pbWFnZScsIHRoaXMpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAkKCdkaXYuZmllbGQtbmFtZS1kcy1vcmlnaW5hbC1pbWFnZScsIHRoaXMpLnJlbW92ZSgpO1xuICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCd3aWRlLWltYWdlLW5vZGUnKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKCQoJ2Rpdi5maWVsZC1uYW1lLWRzLW9yaWdpbmFsLWltYWdlJywgdGhpcykubGVuZ3RoICE9PSAwICYmICQoJ2Rpdi5maWVsZC1uYW1lLWRzLXdpZGUtaW1hZ2UnLCB0aGlzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnY3JvcC10aHVtYi1ub2RlJyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnbm8tdGh1bWItbm9kZScpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyogVGhlbWluZyBTZWxlY3QgTGlzdCovXG4gICAgdmFyIGN1c3RvbVNlbGVjdHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmZvcm0tdHlwZS1zZWxlY3RcIik7XG4gICAgZm9yKHZhciBpPTA7IGk8Y3VzdG9tU2VsZWN0cy5sZW5ndGg7IGkrKyl7XG4gICAgICBpZiAoY3VzdG9tU2VsZWN0c1tpXS5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSl7XG4gICAgICAgIGN1c3RvbVNlbGVjdHNbaV0ucGFyZW50Tm9kZS5jbGFzc05hbWUgKz0gXCIgZm9ybS10eXBlLXNlbGVjdC0tZGlzYWJsZWRcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL0FkZCAnaWxpbmsnIGNsYXNzIHRvIGFsbCBpbWFnZXMgaW4gYW4gYW5jaG9yXG4gICAgJCgnYScpLmZpbHRlcihmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAkKHRoaXMpLmNoaWxkcmVuKCkubGVuZ3RoID09PSAxICYmICQodGhpcykuY2hpbGRyZW4oKVswXS50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdJTUcnO1xuICAgIH0pLmFkZENsYXNzKCdpbGluaycpO1xuXG5cbiAgICAvL1BlcmZvcm0gcmVzaXplIGZ1bmN0aW9uc1xuICAgIGFwcGx5VG9SZXNpemUoKTtcblxuICAgIC8vUmVtb3ZlIHRoZSBmb3VjIGNsYXNzIGZyb20gdGhlIG1lbnUsIHNob3dpbmcgaXQgdG8gdGhlIHdvcmxkXG4gICAgJCgnI3N1cGVyZmlzaC0xJykucmVtb3ZlQ2xhc3MoJ2ZvdWMnKTtcblxuICAgIC8vIEFkZCBtYXgtd2lkdGggdG8gbWVkaWEgZW1iZWRcbiAgICAkKFwiZGl2Lm1lZGlhX2VtYmVkXCIpLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgIGlmKCQoJ2lmcmFtZScsIHRoaXMpLmxlbmd0aCA+IDAgKSB7XG4gICAgICAgIHZhciB3ID0gJCgnaWZyYW1lJywgdGhpcykuYXR0cignd2lkdGgnKTtcbiAgICAgICAgJCh0aGlzKS5jc3MoJ21heC13aWR0aCcsIHcpO1xuICAgICAgfVxuICAgIH0pO1xuICAgICQoXCIudmlkZW9cIikuZWFjaChmdW5jdGlvbigpe1xuICAgICAgaWYoJCgnaWZyYW1lJywgdGhpcykubGVuZ3RoID4gMCApIHtcbiAgICAgICAgdmFyIHcgPSAkKCdpZnJhbWUnLCB0aGlzKS5hdHRyKCd3aWR0aCcpO1xuICAgICAgICB2YXIgaCA9ICQoJ2lmcmFtZScsIHRoaXMpLmF0dHIoJ2hlaWdodCcpO1xuICAgICAgICAkKHRoaXMpLmNzcyh7J3dpZHRoJzogdyAsICdtYXgtd2lkdGgnOiAnMTAwJScsICdtYXgtaGVpZ2h0JzogaH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIENsZWFuIE1hcmtldG8gRm9ybVxuICAgICQoXCJmb3JtLm1rdG9Gb3JtLCBmb3JtLmxwZVJlZ0Zvcm1cIikuZWFjaChmdW5jdGlvbigpe1xuICAgICAgJCh0aGlzKS5jc3MoJ21pbi13aWR0aCcsJzEwMCUnKTtcbiAgICAgICQoJ2Rpdiwgc3BhbiwgbGFiZWwnLHRoaXMpLmF0dHIoJ3N0eWxlJywgJycpO1xuICAgICAgJCgnLm1rdG9PZmZzZXQsIC5ta3RvQ2xlYXIsIC5ta3RvR3V0dGVyICcsIHRoaXMpLnJlbW92ZSgpO1xuICAgIH0pO1xuXG4gICAgc2V0UmVzcG9uc2l2ZUVsZW1lbnQoKTtcblxuICAgIC8vUmVzY3JvbGxzIHRvIHRoZSB0b3AganVzdCBiZWZvcmUgamF2YXNjcmlwdCBmaW5pc2hlc1xuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCkge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICQod2luZG93KS5zY3JvbGxUb3AoMCk7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9XG4gIH0pOy8vQ2xvc2UgZG9tUmVhZHlcblxufSkoalF1ZXJ5KTsiLCIvKipcbiAqIEBmaWxlXG4gKiBUaGlzIGNyZWF0ZXMgdGhlIGN1c3RvbSByZXNwb25zaXZlIHRhYmxlIGZ1bmN0aW9uYWxpdHkgZm9yIERpZ2l0YWwgTG9vbVxuICovXG4oZnVuY3Rpb24gKCQpIHtcblxuICBmdW5jdGlvbiBzZXREeW5hbWljQnJlYWtwb2ludCh0YWJsZUlEKSB7XG5cbiAgICB2YXIgYnJlYWtwb2ludCA9IGRldmljZUluZm8uZ2V0TWF4UG9pbnQoXCJzbWFsbFwiKSwgLy8gRGVmYXVsdCBicmVha3BvaW50XG4gICAgICBjb3VudENvbCA9ICQodGFibGVJRCkuZmluZChcInRib2R5IHRyOmZpcnN0LWNoaWxkIHRkXCIpLmxlbmd0aDtcblxuICAgIGlmIChjb3VudENvbCA+PSAxMCApIHtcbiAgICAgIGJyZWFrcG9pbnQgPSBkZXZpY2VJbmZvLmdldE1heFBvaW50KFwibWVkaXVtXCIpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb3VudENvbCA+PSA3ICYmIGNvdW50Q29sIDwgMTAgKSB7XG4gICAgICBicmVha3BvaW50ID0gZGV2aWNlSW5mby5nZXRNYXhQb2ludChcImludGVyLW1lZGl1bVwiKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY291bnRDb2wgPj0gNCAmJiBjb3VudENvbCA8IDcpIHtcbiAgICAgIGJyZWFrcG9pbnQgPSBkZXZpY2VJbmZvLmdldE1heFBvaW50KFwic21hbGxcIik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvdW50Q29sIDwgNCAmJiBjb3VudENvbCA+IDMpIHtcbiAgICAgIGJyZWFrcG9pbnQgPSBkZXZpY2VJbmZvLmdldE1heFBvaW50KFwiaW50ZXItc21hbGxcIik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYnJlYWtwb2ludCA9IGRldmljZUluZm8uZ2V0TWF4UG9pbnQoXCJ4LXNtYWxsXCIpO1xuICAgIH1cbiAgICByZXR1cm4gYnJlYWtwb2ludDtcbiAgfVxuICAvLyBIaWRlIG9yIFNob3cgU3RpY2t5IFRhYmxlIG9uIFZpZXdzXG4gIGZ1bmN0aW9uIHRvZ2dsZVN0aWNreSh0YWJsZUlELHRlc3RSZXNwb25zaXZlKSB7XG5cbiAgICB2YXIgJHRhYmxlID0gJCh0YWJsZUlEKSxcbiAgICAgIGlzU3RpY2t5ID0gJHRhYmxlLnByZXZBbGwoJ3RhYmxlLnN0aWNreS1oZWFkZXInKSxcbiAgICAgIENvbENvdW50ID0gcGFyc2VJbnQoJChcInRoZWFkIHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZFwiLCB0YWJsZUlEKS5pbmRleCgpICsgMSk7XG5cbiAgICAvLyBEZXRlY3QgU3RpY2t5IFRhYmxlXG4gICAgaWYoaXNTdGlja3kubGVuZ3RoID4gMCkge1xuICAgICAgZm9yKHZhciBpID0gMTsgaSA8PSBDb2xDb3VudDsgaSsrKSB7XG4gICAgICAgIHZhciB0aFdpZHRoID0gJCgndGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bnRoLWNoaWxkKCcgKyBpICsgJyknLCB0YWJsZUlEKS5vdXRlcldpZHRoKHRydWUpO1xuICAgICAgICAkKCd0aDpudGgtY2hpbGQoJyArIGkgKyAnKScsIHRoaXMpLmNzcyh7J3dpZHRoJzogdGhXaWR0aH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGVzdFJlc3BvbnNpdmUpIHtcbiAgICAgICAgaXNTdGlja3kuaGlkZSgpO1xuICAgICAgICAkdGFibGUucmVtb3ZlQ2xhc3MoJ3N0aWNreS10YWJsZSBzdGlja3ktZW5hYmxlZCcpO1xuICAgICAgICAkKCd0aCcsaXNTdGlja3kpLmNzcyh7J2Rpc3BsYXknOidub25lJ30pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGlzU3RpY2t5LnNob3coKTtcbiAgICAgICAgJHRhYmxlLmFkZENsYXNzKCdzdGlja3ktdGFibGUgc3RpY2t5LWVuYWJsZWQnKTtcbiAgICAgICAgJCgndGgnLGlzU3RpY2t5KS5jc3MoeydkaXNwbGF5JzondGFibGUtY2VsbCd9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IFJlc3BvbnNpdmUgVGFibGVzXG4gICAqIEBwYXJhbSB7aW50ZWdlcn0gYnJlYWtwb2ludFxuICAgKi9cbiAgZnVuY3Rpb24gc2V0UmVzcG9uc2l2ZVRhYmxlcygpIHtcblxuICAgIHZhciAkQWxsTGF5b3V0VGFibGUgPSAkKCd0YWJsZS5yZXNwb25zaXZlLXRhYmxlLCB0YWJsZS5sYXlvdXQtdGFibGUtZXZlbiwgdGFibGUubGF5b3V0LXRhYmxlLW9kZCwgdGFibGUuY2xlYXItdGFibGUnKTtcblxuICAgICRBbGxMYXlvdXRUYWJsZS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGJyZWFrcG9pbnQgPSBzZXREeW5hbWljQnJlYWtwb2ludCh0aGlzKSxcbiAgICAgICAgVGVzdFJlc3BvbnNpdmUgPSBkZXRlY3RSZXNwb25zaXZlVGFibGVzKHRoaXMsIGJyZWFrcG9pbnQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGFibGUgcmVzcG9uc2l2ZSB3aXRoIEhlYWRlciBmbG9hdGluZyBsZWZ0XG4gICAgJCgndGFibGUucmVzcG9uc2l2ZS10YWJsZS13aXRoLWhlYWRlcicpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgICRoZWFkZXJUYWJsZSA9ICQodGhpcyksXG4gICAgICAgIGJyZWFrcG9pbnQgPSBzZXREeW5hbWljQnJlYWtwb2ludCh0aGlzKSxcbiAgICAgICAgVGVzdFJlc3BvbnNpdmUgPSBkZXRlY3RSZXNwb25zaXZlVGFibGVzKHRoaXMsIGJyZWFrcG9pbnQpO1xuXG4gICAgICBpZiAoVGVzdFJlc3BvbnNpdmUgPT09IHRydWUpIHtcblxuICAgICAgICBpZigkaGVhZGVyVGFibGUuY2xvc2VzdCgnLnhwYW5kYWJsZS1hcmVhJykubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgdmFyICR0YWJsZUNsb25lID0gJGhlYWRlclRhYmxlLmNsb25lKCksXG4gICAgICAgICAgICAgIG1heFdpZHRoID0gJGhlYWRlclRhYmxlLmNsb3Nlc3QoJy54cGFuZGFibGUtYXJlYScpLm91dGVyV2lkdGgodHJ1ZSk7XG5cbiAgICAgICAgICAkdGFibGVDbG9uZS5hZGRDbGFzcyhcInhwLXRhYmxlLWNsb25lXCIpXG4gICAgICAgICAgICAuY3NzKHsncG9zaXRpb24nOidhYnNvbHV0ZScsIGRpc3BsYXk6J2Jsb2NrJywgJ2xlZnQnOiAnLTk5OTk5cHgnLCAndmlzaWJpbGl0eSc6J2hpZGRlbicsICd3aWR0aCc6IG1heFdpZHRoLCAnbWF4LXdpZHRoJzogbWF4V2lkdGh9KVxuICAgICAgICAgICAgLmVuZCgpO1xuICAgICAgICAgICRoZWFkZXJUYWJsZS5jbG9zZXN0KCcueHBhbmRhYmxlLWFyZWEnKS5wcmV2KCcueHBhbmRhYmxlJykucHJlcGVuZCgkdGFibGVDbG9uZSk7XG5cbiAgICAgICAgICB2YXIgdGFyZ2V0VGFibGUgPSAkdGFibGVDbG9uZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgdGFyZ2V0VGFibGUgPSB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRoZWFkV2lkdGggID0gcGFyc2VJbnQoJCh0YXJnZXRUYWJsZSkuZmluZCgndGhlYWQnKS5vdXRlcldpZHRoKHRydWUpKSwgLy8gVGFibGUgSGVhZGVyIFdpZHRoXG4gICAgICAgICAgICB0YWJsZUhlaWdodCA9IHBhcnNlSW50KCQodGFyZ2V0VGFibGUpLmZpbmQoJ3RoZWFkJykub3V0ZXJIZWlnaHQodHJ1ZSkpLCAvLyBUYWJsZSBIZWlnaHRcbiAgICAgICAgICAgIHRhYmxlV2lkdGggID0gcGFyc2VJbnQoJCh0YXJnZXRUYWJsZSkucGFyZW50KCkud2lkdGgoKSksIC8vIFRhYmxlIFdpZHRoXG4gICAgICAgICAgICByb3dDb3VudCAgICA9IHBhcnNlSW50KCQoJ3Rib2R5IHRyOmxhc3QtY2hpbGQnLHRoaXMpLmluZGV4KCkgKyAxKSwgLy8gQ291bnQgUm93c1xuICAgICAgICAgICAgY29sQ291bnQgICAgPSBwYXJzZUludCgkKFwidGJvZHkgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkXCIsIHRoaXMpLmluZGV4KCkgKyAxKSxcbiAgICAgICAgICAgIHRib2R5V2lkdGggID0gcGFyc2VJbnQodGFibGVXaWR0aCAtIHRoZWFkV2lkdGgpLCAgLy8gVGFibGUgQm9keSBXaWR0aFxuICAgICAgICAgICAgdGFibGVDc3MgICAgPSBbeydoZWlnaHQnOiB0YWJsZUhlaWdodCArICdweCcsICd3aWR0aCc6XHQgdGFibGVXaWR0aCArICdweCcgfV0sIC8vIElubGluZSBDU1MgU3R5bGVzIGZvciBUYWJsZVxuICAgICAgICAgICAgdGJvZHlDc3MgICAgPSBbeyd3aWR0aCc6IHRib2R5V2lkdGggKyAncHgnLCAnbGVmdCc6IHRoZWFkV2lkdGggKyAncHgnIH1dLCAvLyBJbmxpbmUgQ1NTIFN0eWxlcyBmb3IgQm9keSBUYWJsZVxuICAgICAgICAgICAgdGhlYWRDc3MgICAgPSBbeyd3aWR0aCc6IHRoZWFkV2lkdGggKyAncHgnIH1dOyAvLyBJbmxpbmUgQ1NTIFN0eWxlcyBmb3IgSGVhZGVyIFRhYmxlXG5cbiAgICAgICAgLy8gQXBwbHkgSW5saW5lIENzcyBTdHlsZXMgIHRvIGhlYWRlclRhYmxlXG4gICAgICAgICRoZWFkZXJUYWJsZS5jc3ModGFibGVDc3NbMF0pO1xuICAgICAgICAkKCd0Ym9keScsIHRoaXMpLmNzcyh0Ym9keUNzc1swXSk7XG4gICAgICAgICQoJ3RoZWFkJywgdGhpcykuY3NzKHRoZWFkQ3NzWzBdKTtcblxuICAgICAgICAvLyBFcXVhbGl6ZVxuICAgICAgICBmb3IgKHZhciBqID0gMCA7IGogPD0gcm93Q291bnQ7IGorKykge1xuICAgICAgICAgIGZvciAodmFyIGsgPSAwIDsgayA8PSBjb2xDb3VudDsgaysrKSB7XG4gICAgICAgICAgICB2YXIgdGhIZWlnaHQgPSAkKCd0aGVhZCB0ciB0aDpudGgtY2hpbGQoJyArIGsgKyAnKScsIHRhcmdldFRhYmxlKS5oZWlnaHQoKTtcbiAgICAgICAgICAgICQoJ3Rib2R5IHRyOm50aC1jaGlsZCgnK2orJykgdGQ6bnRoLWNoaWxkKCcraysnKScsIHRoaXMpLmNzcygnbWluLWhlaWdodCcsIHRoSGVpZ2h0KTtcbiAgICAgICAgICAgICQoJCgndGJvZHkgdHI6bnRoLWNoaWxkKCcraisnKSB0ZDpudGgtY2hpbGQoJytrKycpJywgdGhpcyksICQoJ3RoZWFkIHRyOmxhc3QtY2hpbGQgdGg6bnRoLWNoaWxkKCcgKyBrICsgJyknLCB0aGlzKSkuZXF1YWxpemUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYoJHRhYmxlQ2xvbmUpIHtcbiAgICAgICAgICAkdGFibGVDbG9uZS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBFbmQgaWYgVGVzdFJlc3BvbnNpdmVcbiAgICB9KTsgLy8gRW5kIHRhYmxlLnJlc3BvbnNpdmUtdGFibGUtd2l0aC1oZWFkZXIgZWFjaCgpXG5cbiAgICAvL1RhYmxlIHVzaW5nIEhlYWRlcnMgYXMgTGFiZWxzXG4gICAgJCgndGFibGUucmVzcG9uc2l2ZS10YWJsZS13aXRoLWxhYmVsJykuZWFjaCggZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciAkbGFiZWxUYWJsZSA9ICQodGhpcyksXG4gICAgICAgICAgYnJlYWtwb2ludCA9IHNldER5bmFtaWNCcmVha3BvaW50KCRsYWJlbFRhYmxlKSxcbiAgICAgICAgICBUZXN0UmVzcG9uc2l2ZSA9IGRldGVjdFJlc3BvbnNpdmVUYWJsZXModGhpcywgYnJlYWtwb2ludCk7XG5cbiAgICAgIC8vIFJlbW92ZSBhbGwgaGVhZGVyLWxhYmVsIChhdm9pZCBkdXBsaWNhdGlvbiBvZiBsYWJlbHMgb24gcmVzaXplKVxuICAgICAgJCgnc3Bhbi5oZWFkZXItbGFiZWwnLHRoaXMpLnJlbW92ZSgpO1xuXG4gICAgICBpZiAoVGVzdFJlc3BvbnNpdmUgPT09IHRydWUpIHtcblxuICAgICAgICB2YXIgY29sVGhDb3VudCA9IHBhcnNlSW50KCQoXCJ0aGVhZCB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGRcIiwgdGhpcykuaW5kZXgoKSArIDEpLFxuICAgICAgICAgIHJvd0NvdW50ID0gcGFyc2VJbnQoJChcInRib2R5IHRyOmxhc3QtY2hpbGRcIiwgdGhpcykuaW5kZXgoKSArIDEpLFxuICAgICAgICAgIGNvbENvdW50ID0gcGFyc2VJbnQoJChcInRib2R5IHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZFwiLCB0aGlzKS5pbmRleCgpICsgMSksXG4gICAgICAgICAgY29sTGFiZWwgPSBbXSxcbiAgICAgICAgICBoZWFkZXJMYWJlbCA9IFwiXCI7XG5cbiAgICAgICAgZm9yICh2YXIgaT0wOyBpIDw9IGNvbFRoQ291bnQ7IGkrKylcdHtcbiAgICAgICAgICAvLyBoZWFkIGNvbHVtbiBsYWJlbCBleHRyYWN0aW9uXG4gICAgICAgICAgY29sTGFiZWwucHVzaCgkKCd0aGVhZCB0cjpsYXN0LWNoaWxkID4gKjpudGgtY2hpbGQoJytpKycpJywgdGhpcykudGV4dCgpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8PSByb3dDb3VudDsgaisrKSB7XG4gICAgICAgICAgZm9yKHZhciBrID0gMDsgayA8PSBjb2xDb3VudDsgaysrKSB7XG4gICAgICAgICAgICBoZWFkZXJMYWJlbCA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoJC50cmltKGNvbExhYmVsW2tdKSAhPSBcIlwiKSB7XG4gICAgICAgICAgICAgIGhlYWRlckxhYmVsID0gJzxzcGFuIGNsYXNzPVwiaGVhZGVyLWxhYmVsXCI+JyArIGNvbExhYmVsW2tdICsgJzogPC9zcGFuPic7XG4gICAgICAgICAgICAgICQoJ3Rib2R5IHRyOm50aC1jaGlsZCgnKyBqICsnKSB0ZDpudGgtY2hpbGQoJysgayArJyknLCB0aGlzKS5wcmVwZW5kKGhlYWRlckxhYmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0vLyBFbmQgaWYgcmVzcG9uc2l2ZXRhYmxlXG4gICAgfSk7IC8vIEVuZCB0YWJsZS5yZXNwb25zaXZlLXRhYmxlLXdpdGgtbGFiZWwgZWFjaCgpICovXG4gIH0gLy8gZW5kIHNldFJlc3BvbnNlVGFibGVzKClcblxuICBmdW5jdGlvbiBkZXRlY3RSZXNwb25zaXZlVGFibGVzKHRhYmxlSUQsIGJyZWFrcG9pbnQpIHtcbiAgICB2YXIgJHRhYmxlID0gJCh0YWJsZUlEKSxcbiAgICAgIHRlc3RSZXNwb25zaXZlID0gZmFsc2U7XG5cbiAgICBpZiAoJHRhYmxlLnBhcmVudCgpLndpZHRoKCkgPD0gYnJlYWtwb2ludCkge1xuICAgICAgdGVzdFJlc3BvbnNpdmUgPSB0cnVlO1xuICAgICAgJHRhYmxlLmFkZENsYXNzKFwicmVzcG9uc2l2ZVwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAkdGFibGUucmVtb3ZlQ2xhc3MoXCJyZXNwb25zaXZlXCIpO1xuICAgIH1cbiAgICBpZigkdGFibGUuY2xvc2VzdCgnI3RhYi1jb250ZW50Jykud2lkdGgoKSA+IGJyZWFrcG9pbnQpIHsgLy8gRml4IGZvciBUZWtzY2FuIHRhYnNcbiAgICAgIHRlc3RSZXNwb25zaXZlID0gZmFsc2U7XG4gICAgICAkdGFibGUucmVtb3ZlQ2xhc3MoXCJyZXNwb25zaXZlXCIpO1xuICAgIH1cblxuICAgIHRvZ2dsZVN0aWNreSh0YWJsZUlELHRlc3RSZXNwb25zaXZlKTtcbiAgICByZXR1cm4gdGVzdFJlc3BvbnNpdmU7XG4gIH1cblxuICAvL1B1bGxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5IG91dCwgdG8gcmVkdWNlIG5lc3RpbmcgbWFkbmVzc1xuICBmdW5jdGlvbiBhcHBseVRvUmVzaXplKCkge1xuICAgIHZhciByZXNpemVUaW1lcjtcbiAgICAkKHdpbmRvdykub24oXCJyZXNpemVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQocmVzaXplVGltZXIpO1xuICAgICAgcmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KHNldFJlc3BvbnNpdmVUYWJsZXMsIDEwMCk7XG4gICAgfSk7XG4gIH1cblxuXG4gIERydXBhbC5iZWhhdmlvcnMucmVzcG9uc2l2ZVRhYmxlcyA9IHtcbiAgICBhdHRhY2g6IGZ1bmN0aW9uKGNvbnRleHQsIHNldHRpbmdzKSB7XG4gICAgICBpZiAoJCgndGFibGUnKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlY3QgdmlkZW8gaWZyYW1lIG9uIGEgdGFibGUgIGFuZCBhc3NpZ25lZCBhIHdpZHRoIHRvIHRoZSBjZWxsXG4gICAgICAkKFwidGFibGUgdGQgZGl2Lm1lZGlhX2VtYmVkXCIpLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgaWYoJCgnaWZyYW1lJywgdGhpcykubGVuZ3RoID4gMCApIHtcbiAgICAgICAgICB2YXIgdyA9ICQoJ2lmcmFtZScsIHRoaXMpLmF0dHIoJ3dpZHRoJyk7XG4gICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCd0ZCcpLmNzcygnd2lkdGgnLCB3KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBBZGQgUmVzcG9uc2libGUgVGFibGUgdG8gdGFibGUgdmlld3Mgd2l0aCBoZWFkZXJcbiAgICAgICQoJ2RpdiNjb250ZW50IHRhYmxlLnZpZXdzLXRhYmxlLCBkaXYucmVnaW9uLWZ1bGwtd2lkdGgtY29udGVudC1ib3R0b20gdGFibGUudmlld3MtdGFibGUgJykuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICBpZiAoJHRoaXMuaGFzQ2xhc3MoXCJyZXNwb25zaXZlVGFibGVzUHJvY2Vzc2VkXCIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCQoXCJ0aGVhZFwiLCB0aGlzKS5sZW5ndGggIT09IDAgKSB7XG4gICAgICAgICAgJHRoaXMuYWRkQ2xhc3MoJ3Jlc3BvbnNpdmUtdGFibGUtd2l0aC1sYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICR0aGlzLmFkZENsYXNzKCdyZXNwb25zaXZlLXRhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKiBBZGRpbmcgY2xhc3MgdG8gZXZlcnkgdGFibGUgY29sdW1uIGJhc2VkIG9uIHJvdyBudW1iZXIgKi9cbiAgICAgICQoJ3RhYmxlJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgaWYgKCR0aGlzLmhhc0NsYXNzKFwicmVzcG9uc2l2ZVRhYmxlc1Byb2Nlc3NlZFwiKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb3VudENvbCA9ICR0aGlzLmZpbmQoXCJ0cjpmaXJzdCB0ZFwiKS5sZW5ndGg7XG4gICAgICAgIGlmIChjb3VudENvbCA9PT0gMCl7XG4gICAgICAgICAgY291bnRDb2wgPSAkdGhpcy5maW5kKFwidHI6Zmlyc3QgdGhcIikubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgICR0aGlzLmFkZENsYXNzKCdjb2wtJytjb3VudENvbCArICcgcmVzcG9uc2l2ZVRhYmxlc1Byb2Nlc3NlZCcpO1xuICAgICAgfSk7XG5cbiAgICAgIHNldFJlc3BvbnNpdmVUYWJsZXMoKTtcbiAgICB9XG4gIH07XG5cbiAgJChkb2N1bWVudCkub24oJ3JlYWR5JywgZnVuY3Rpb24oKSB7XG4gICAgaWYgKCQoJ3RhYmxlJykubGVuZ3RoICE9PSAwKSB7XG4gICAgICBhcHBseVRvUmVzaXplKCk7XG4gICAgfVxuICB9KTtcbn0pKGpRdWVyeSk7IiwiLyoqXG4gKiBAZmlsZVxuICogVGhpcyBjcmVhdGVzIHRoZSBjdXN0b20gcmVzcG9uc2l2ZSB0YWIgZnVuY3Rpb25hbGl0eSBmb3IgRGlnaXRhbCBMb29tXG4gKi9cbihmdW5jdGlvbiAoJCkge1xuXG4gIC8qKlxuICAgKiBAVGFic1xuICAgKiBDb250YWlucyB0YWIgbG9naWMsIGluY2x1ZGluZyByZXNwb25zaXZlIGxvZ2ljXG4gICAqL1xuICB2YXIgVGFicyA9IHtcbiAgICByZXNwb25zaXZlOiBmYWxzZSwgLy9DaGVjayBpZiB0YWJzIG5lZWQgdG8gYmVjb21lIHhwYW5kYWJsZXNcbiAgICByZXNpemVUaW1lcjogdW5kZWZpbmVkLFxuXG4gICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmJpbmRVSWZ1bmN0aW9ucygpO1xuICAgICAgdGhpcy5wYWdlTG9hZENvcnJlY3RUYWIoKTtcbiAgICAgIHRoaXMuc2V0UmVzcG9uc2l2ZVRhYigpO1xuICAgICAgdGhpcy5hcHBseVRvUmVzaXplKCk7XG4gICAgfSxcblxuICAgIGJpbmRVSWZ1bmN0aW9uczogZnVuY3Rpb24oKSB7XG4gICAgICAvLyBEZWxlZ2F0aW9uXG4gICAgICAkKGRvY3VtZW50KVxuICAgICAgICAub24oXCJjbGlja1wiLCBcIi5yZXNwb25zaXZlLXRhYnMgYVtocmVmXj0nIyddOm5vdCgnLmFjdGl2ZScpLCAudGFiLWNvbnRlbnQgYVtocmVmXj0nIyddXCIsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgVGFicy5jaGFuZ2VUYWIodGhpcy5oYXNoKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KVxuICAgICAgICAub24oXCJjbGlja1wiLCBcIi5yZXNwb25zaXZlLXRhYnMgYS5hY3RpdmVcIiwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICBUYWJzLnRvZ2dsZU1vYmlsZU1lbnUoZXZlbnQsIHRoaXMpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgfSxcblxuICAgIGNoYW5nZVRhYjogZnVuY3Rpb24oaGFzaCwgb25sb2FkKSB7XG4gICAgICB2YXIgYW5jaG9yID0gJChcIltocmVmPVwiICsgaGFzaCArIFwiXVwiKSxcbiAgICAgICAgZGl2ID0gJChoYXNoKSxcbiAgICAgICAgb25sb2FkID0gb25sb2FkIHx8IGZhbHNlOyAvL0lzIHRoaXMgb24gcGFnZSBsb2FkP1xuXG4gICAgICBpZiAoZGl2Lmxlbmd0aCA9PT0gMCB8fCBhbmNob3IubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGFjdGl2YXRlIGNvcnJlY3QgYW5jaG9yICh2aXN1YWxseSlcbiAgICAgICAgJCgnYSN0YWItbGluay0wJykuYWRkQ2xhc3MoXCJhY3RpdmVcIikucGFyZW50KCkuc2libGluZ3MoKS5maW5kKFwiYVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcbiAgICAgICAgLy8gYWN0aXZhdGUgY29ycmVjdCBkaXYgKHZpc3VhbGx5KVxuICAgICAgICAkKCdkaXYudGFiLWNvbnRlbnQtMCcpLmFkZENsYXNzKFwiYWN0aXZlXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gYWN0aXZhdGUgY29ycmVjdCBhbmNob3IgKHZpc3VhbGx5KVxuICAgICAgICBhbmNob3IuYWRkQ2xhc3MoXCJhY3RpdmVcIikucGFyZW50KCkuc2libGluZ3MoKS5maW5kKFwiYVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcbiAgICAgICAgLy8gYWN0aXZhdGUgY29ycmVjdCBkaXYgKHZpc3VhbGx5KVxuICAgICAgICBkaXYuYWRkQ2xhc3MoXCJhY3RpdmVcIikuc2libGluZ3MoKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvbmxvYWQpIHtcbiAgICAgICAgdmFyIHRhcmdldCA9IGhhc2guc3Vic3RyKDEpO1xuICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sIFwiXCIsIFwiP3RhYj1cIit0YXJnZXQpO1xuICAgICAgfVxuICAgICAgLy8gQ2xvc2UgbWVudSwgaW4gY2FzZSBtb2JpbGVcbiAgICAgIGFuY2hvci5jbG9zZXN0KFwidWxcIikucmVtb3ZlQ2xhc3MoXCJvcGVuXCIpO1xuICAgIH0sXG5cbiAgICAvLyBJZiB0aGUgcGFnZSBoYXMgYSB0YWIgcGFyYW1ldGVyLCBnbyB0byB0aGF0IHRhYlxuICAgIHBhZ2VMb2FkQ29ycmVjdFRhYjogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZ2V0UCA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc3Vic3RyKDEpLFxuICAgICAgICBwcm9wcyA9IGdldFAuc3BsaXQoXCImXCIpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB0aGlzUHJvcCA9IHByb3BzW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgaWYgKHRoaXNQcm9wWzBdID09PSBcInRhYlwiKSB7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VUYWIoXCIjXCIgKyB0aGlzUHJvcFsxXSwgdHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9Ly9jbG9zZSBpZlxuICAgICAgfS8vY2xvc2UgZm9yXG5cbiAgICAgIC8vT3RoZXJ3aXNlIHdlJ2xsIGp1c3QgdXNlIHRoZSBmaXJzdCB0YWJcbiAgICAgIHZhciBmaXJzdExpbmsgPSAkKFwiI3RhYi1saW5rLTBcIiksXG4gICAgICAgIGZpcnN0VGFiID0gZmlyc3RMaW5rLmF0dHIoXCJocmVmXCIpLnN1YnN0cigxKTtcbiAgICAgIHRoaXMuY2hhbmdlVGFiKGZpcnN0VGFiLCB0cnVlKTtcbiAgICB9LC8vIGNsb3NlIHBhZ2VMb2FkQ29ycmVjdFRhYlxuXG4gICAgdG9nZ2xlTW9iaWxlTWVudTogZnVuY3Rpb24oZXZlbnQsIGVsKSB7XG4gICAgICAkKGVsKS5jbG9zZXN0KFwidWxcIikudG9nZ2xlQ2xhc3MoXCJvcGVuXCIpO1xuICAgIH0sXG5cbiAgICAvL0RldGVjdCBpZiB3ZSBzaG91bGQgdXNlIHRhYnMgb3IgeHBhbmRhYmxlc1xuICAgIGRldGVjdFJlc3BvbnNpdmVUYWI6IGZ1bmN0aW9uKHRhYklELCBicmVha3BvaW50KSB7XG4gICAgICBUYWJzLnJlc3BvbnNpdmUgPVxuICAgICAgICAoJCh0YWJJRCkucGFyZW50KCkud2lkdGgoKSA8PSBicmVha3BvaW50IHx8XG4gICAgICAgIGRldmljZUluZm8ud2lkdGggPD0gYnJlYWtwb2ludCk7XG4gICAgfSxcblxuICAgIC8vQ2hhbmdlcyB0YWJzIGludG8geHBhbmRhYmxlcyBhbmQgdmljZS12ZXJzYSwgZm9yIHJlc3BvbnNpdmUgZGVzaWduXG4gICAgc2V0UmVzcG9uc2l2ZVRhYjogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYnJlYWtwb2ludCA9IGRldmljZUluZm8uZ2V0TWF4UG9pbnQoXCJpbnRlci1zbWFsbFwiKTtcblxuICAgICAgLy8gVGFiIHJlc3BvbnNpdmUgd2l0aCBIZWFkZXIgZmxvYXRpbmcgbGVmdFxuICAgICAgJCgnLnJlc3BvbnNpdmUtdGFicycpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgIFRhYnMuZGV0ZWN0UmVzcG9uc2l2ZVRhYih0aGlzLCBicmVha3BvaW50KTtcblxuICAgICAgICBpZiAoVGFicy5yZXNwb25zaXZlID09PSB0cnVlKSB7XG4gICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcInJlc3BvbnNpdmVcIik7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKFwicmVzcG9uc2l2ZVwiKTtcbiAgICAgICAgfSAvL0VuZCBpZiBUYWJzLnJlc3BvbnNpdmVcbiAgICAgIH0pOyAvLyBFbmQgdGFiLnJlc3BvbnNpdmUtdGFiIGVhY2goKVxuICAgIH0sXG5cbiAgICAvL1J1bnMgcmVzcG9uc2l2ZSBsb2dpYyBvbiByZXNpemVcbiAgICBhcHBseVRvUmVzaXplOiBmdW5jdGlvbigpIHtcbiAgICAgICQod2luZG93KS5vbihcInJlc2l6ZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVzaXplVGltZXIpO1xuICAgICAgICB0aGlzLnJlc2l6ZVRpbWVyID0gc2V0VGltZW91dCh0aGlzLnNldFJlc3BvbnNpdmVUYWIsIDEwMCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIHRoZSBsb2dpYyB0byB0cmFuc2Zvcm0gdGhlIHByb2R1Y3RzIGFuZCBzb2x1dGlvbnMgdmlldyBpbnRvXG4gICAqIHRhYnMuIC9wcm9kdWN0cy1zb2x1dGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIHJld3JpdGVQcm9kdWN0U2VhcmNoSFRNTCh2aWV3KSB7XG4gICAgdmFyIHdyYXBwZXIgPSB2aWV3LmNoaWxkcmVuKFwiLnZpZXctY29udGVudFwiKSxcbiAgICAgIGNvbnRhaW5lciA9ICQoJzxkaXYgaWQ9XCJ0YWItbGFiZWxcIiBjbGFzcz1cInRhYnNcIj48L2Rpdj4nKSxcbiAgICAgIG5hdiA9ICQoJzxuYXYgcm9sZT1cIm5hdmlnYXRpb25cIiBjbGFzcz1cInJlc3BvbnNpdmUtdGFicyB2ZXJ0aWNhbC10YWJzXCI+PC9uYXY+JykuYXBwZW5kVG8oY29udGFpbmVyKSxcbiAgICAgIHVsID0gJCgnPHVsIGNsYXNzPVwiY29udGVudC13cmFwcGVyXCI+PC91bD4nKS5hcHBlbmRUbyhuYXYpLFxuICAgICAgY291bnRlciA9IDA7XG5cbiAgICBpZiAodmlldy5sZW5ndGggPT09IDAgfHwgdmlldy5oYXNDbGFzcyhcInRhYi1wcm9jZXNzZWRcIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3cmFwcGVyLmNoaWxkcmVuKFwiLml0ZW0tbGlzdFwiKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyICR0aGlzID0gJCh0aGlzKSxcbiAgICAgICAgaGVhZGVyID0gJHRoaXMuY2hpbGRyZW4oXCJoM1wiKSxcbiAgICAgICAgbGFiZWwgPSBoZWFkZXIudGV4dCgpIHx8IFwiTm8gVHlwZVwiLFxuICAgICAgICBocmVmID0gXCJ0YWItXCIgKyBsYWJlbC5zcGxpdChcIiBcIikuam9pbihcIi1cIiksXG4gICAgICAgIGxpID0gJCgnPGxpPjxhIGlkPVwidGFiLWxpbmstJyArIGNvdW50ZXIgKyAnXCIgaHJlZj1cIiMnICsgaHJlZiArICdcIj4nICsgbGFiZWwgKyAnPC9hPjwvbGk+Jyk7XG5cbiAgICAgIGlmIChjb250ZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgJHRoaXMuYXR0cihcImlkXCIsIGhyZWYpO1xuICAgICAgJHRoaXMuYWRkQ2xhc3MoXCJ0YWItY29udGVudCB2ZXJ0aWNhbC10YWJzLWNvbnRlbnQgdGFiLWNvbnRlbnQtXCIgKyBjb3VudGVyKTtcbiAgICAgICR0aGlzLmNoaWxkcmVuKFwidWxcIikud3JhcCgnPGRpdiBjbGFzcz1cImNvbnRlbnQtd3JhcHBlclwiPjwvZGl2PicpO1xuICAgICAgaGVhZGVyLnJlbW92ZSgpO1xuICAgICAgJCgnPGgyIGNsYXNzPVwidGFiLW5hbWVcIj4nICsgbGFiZWwgKyAnPC9oMj4nKS5wcmVwZW5kVG8odGhpcylcbiAgICAgIHVsLmFwcGVuZChsaSk7XG4gICAgICBjb3VudGVyKys7XG4gICAgfSk7XG5cbiAgICB3cmFwcGVyLmJlZm9yZShjb250YWluZXIpO1xuICAgIHZpZXcuYWRkQ2xhc3MoXCJ0YWItcHJvY2Vzc2VkXCIpO1xuICB9XG5cblxuICAvL1N3YXBzIGV4cGFuZGFibGVzIGZvciB0YWJzIGFuZCB2aWNlIHZlcnNhXG4gIGZ1bmN0aW9uIHNldFJlc3BvbnNpdmVYcGFuZGFibGUoYnJlYWtwb2ludCkge1xuICAgIERydXBhbC5ETG9vbS5UYWJYcGFuZGFibGUgPSAoZGV2aWNlSW5mby53aWR0aCA8PSBicmVha3BvaW50KTtcblxuICAgIHZhciAkaXRlbXMgPSAkKFwiZGl2LnRhYi1jb250ZW50LnZlcnRpY2FsLXRhYnMtY29udGVudFwiKTtcblxuICAgICRpdGVtcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkYmxvY2tUaXRsZSA9ICQoJ2gyLnRhYi1uYW1lJyx0aGlzKSxcbiAgICAgICAgJGNvbnRlbnQgPSAkKCdkaXYuY29udGVudC13cmFwcGVyJyx0aGlzKTtcblxuICAgICAgaWYgKERydXBhbC5ETG9vbS5UYWJYcGFuZGFibGUpIHtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygncmVzcG9uc2l2ZScpO1xuICAgICAgICAkYmxvY2tUaXRsZS5hZGRDbGFzcyhcInhwYW5kYWJsZVwiKTtcbiAgICAgICAgJGNvbnRlbnQuYWRkQ2xhc3MoXCJ4cGFuZGFibGUtYXJlYVwiKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdyZXNwb25zaXZlJyk7XG4gICAgICAgICRibG9ja1RpdGxlLnJlbW92ZUNsYXNzKFwieHBhbmRhYmxlXCIpO1xuICAgICAgICAkY29udGVudC5yZW1vdmVDbGFzcyhcInhwYW5kYWJsZS1hcmVhXCIpO1xuICAgICAgICAkY29udGVudC5hdHRyKCdzdHlsZScsICcnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoRHJ1cGFsLkRMb29tLlRhYlhwYW5kYWJsZSkge1xuICAgICAgRHJ1cGFsLmJlaGF2aW9ycy5zZXRYcGFuZGFibGUuYXR0YWNoKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgIH1cbiAgfVxuXG4gIHZhciByZXNpemVUaW1lcjtcbiAgJCh3aW5kb3cpLm9uKFwicmVzaXplXCIsIGZ1bmN0aW9uKCkge1xuICAgIGNsZWFyVGltZW91dChyZXNpemVUaW1lcik7XG4gICAgcmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgc2V0UmVzcG9uc2l2ZVhwYW5kYWJsZShkZXZpY2VJbmZvLmJyZWFrUG9pbnRzWzVdLmN1dE9mZik7XG4gICAgfSwgMTAwKTtcbiAgfSk7XG5cbiAgXG4gIERydXBhbC5iZWhhdmlvcnMuc2V0VGFicyA9IHtcbiAgICBhdHRhY2g6IGZ1bmN0aW9uKGNvbnRleHQsIHNldHRpbmdzKSB7XG4gICAgICB2YXIgdmlldyA9ICQoXCIudmlldy1zb2xyLXNlYXJjaGVzLnZpZXctZGlzcGxheS1pZC1wcm9kdWN0c19zZWFyY2hcIik7XG4gICAgICBpZiAodmlldy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJld3JpdGVQcm9kdWN0U2VhcmNoSFRNTCh2aWV3KTtcbiAgICAgIH1cbiAgICAgIGlmICgkKCcucmVzcG9uc2l2ZS10YWJzJykubGVuZ3RoID4gMCApIHtcbiAgICAgICAgVGFicy5pbml0KCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG59KShqUXVlcnkpOyIsIi8qKlxuICogQGZpbGVcbiAqIENyZWF0ZXMgYSBtZXRyaWMgdG8gaW1wZXJpYWwgY29udmVydGVyIGh0bWxlY3RcbiAqL1xuXG4oZnVuY3Rpb24oJCkge1xuXG4gIC8vVGhlIGlkIG9mIHRoZSByYWRpb3MgdG8gc3dhcCBiZXR3ZWVuIHVuaXQgdHlwZXNcbiAgdmFyIGlucHV0SWQgPSBcIiN1bml0Q29udmVydGVyXCIsXG4gICAgaW5wdXQgPSBmYWxzZTsgLy9UbyBzdG9yZSB0aGUgYWN0dWFsIGlucHV0IG5vZGVcblxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbnB1dCBmb3IgYWxsIHRoZXNlIGZ1bmN0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gc2V0SW5wdXQoKSB7XG4gICAgaWYgKGlucHV0ID09PSBmYWxzZSkge1xuICAgICAgaW5wdXQgPSAkKGlucHV0SWQpO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQubGVuZ3RoO1xuICB9XG5cblxuICAvKipcbiAgICogVGhlIGNvbnZlcnNpb24gaW5mb3JtYXRpb24gZm9yIGRpZmZlcmVudCB0eXBlcyBvZiBtZWFzdXJlbWVudHNcbiAgICpcbiAgICogQG1vZGlmaWVyIEEgbnVtZXJpYyBtb2RpZmllciB0byBtb3ZlIGJldHdlZW4gdGhlIHR3byB0eXBlc1xuICAgKiBAdURlY2kgVVM6IEhvdyBtYW55IGRlY2ltYWwgcGxhY2VzIHRvIHJvdW5kIHRvXG4gICAqIEB1TmFtZSBVUzogVGhlIHN1ZmZpeCB0byBhdHRhY2ggdG8gdGhlIG51bWJlclxuICAgKiBAdG9VOiBGdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGEgbWV0cmljIG51bWJlciB0byB0aGUgdXMgZXF1aXZhbGVudFxuICAgKiBAbURlY2kgTWV0cmljOiBIb3cgbWFueSBkZWNpbWFsIHBsYWNlcyB0byByb3VuZCB0b1xuICAgKiBAbU5hbWUgTWV0cmljOiBUaGUgc3VmZml4IHRvIGF0dGFjaCB0byB0aGUgbnVtYmVyXG4gICAqIEB0b006IEZ1bmN0aW9uIHRoYXQgY29udmVydHMgYSB1cyBudW1iZXIgdG8gbWV0cmljIGVxdWl2YWxlbnRcbiAgICovXG4gIHZhciBjb252ZXJzaW9ucyA9IHtcbiAgICBsZW5ndGg6IHtcbiAgICAgIG1vZGlmaWVyOiAwLjAzOTM3MDA3ODc0MDE1NzQ4LFxuICAgICAgdURlY2k6IDIsXG4gICAgICB1TmFtZTogXCIgaW5cIixcbiAgICAgIHRvVTogZnVuY3Rpb24obnVtKSB7XG4gICAgICAgIHJldHVybiBudW0gKiB0aGlzLm1vZGlmaWVyO1xuICAgICAgfSxcbiAgICAgIG1EZWNpOiAxLFxuICAgICAgbU5hbWU6IFwiIG1tXCIsXG4gICAgICB0b006IGZ1bmN0aW9uKG51bSkge1xuICAgICAgICByZXR1cm4gbnVtIC8gdGhpcy5tb2RpZmllcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHByZXNzdXJlOiB7XG4gICAgICBtb2RpZmllcjogMC4xNDUwMzc3Mzc3MzAyMDkyMyxcbiAgICAgIHVEZWNpOiAwLFxuICAgICAgdU5hbWU6IFwiIHBzaVwiLFxuICAgICAgdG9VOiBmdW5jdGlvbihudW0pIHtcbiAgICAgICAgcmV0dXJuIG51bSAqIHRoaXMubW9kaWZpZXI7XG4gICAgICB9LFxuICAgICAgbURlY2k6IDAsXG4gICAgICBtTmFtZTogXCIga1BhXCIsXG4gICAgICB0b006IGZ1bmN0aW9uKG51bSkge1xuICAgICAgICByZXR1cm4gbnVtIC8gdGhpcy5tb2RpZmllcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZvcmNlOiB7XG4gICAgICBtb2RpZmllcjogMC4yMjQ4MDg5NDM4NzA5NjE4LFxuICAgICAgdURlY2k6IDAsXG4gICAgICB1TmFtZTogXCIgbGJzXCIsXG4gICAgICB0b1U6IGZ1bmN0aW9uKG51bSkge1xuICAgICAgICByZXR1cm4gbnVtICogdGhpcy5tb2RpZmllcjtcbiAgICAgIH0sXG4gICAgICBtRGVjaSAgOiAwLFxuICAgICAgbU5hbWU6IFwiIE5cIixcbiAgICAgIHRvTTogZnVuY3Rpb24obnVtKSB7XG4gICAgICAgIHJldHVybiBudW0gLyB0aGlzLm1vZGlmaWVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdGVtcGVyYXR1cmU6IHtcbiAgICAgIHVEZWNpOiAwLFxuICAgICAgdU5hbWU6IFwiICZkZWc7RlwiLFxuICAgICAgdG9VOiBmdW5jdGlvbihudW0pIHtcbiAgICAgICAgcmV0dXJuIChudW0gKiAoOS81KSkgKyAzMjtcbiAgICAgIH0sXG4gICAgICBtRGVjaSAgOiAwLFxuICAgICAgbU5hbWU6IFwiICZkZWc7Q1wiLFxuICAgICAgdG9NOiBmdW5jdGlvbihudW0pIHtcbiAgICAgICAgcmV0dXJuIChudW0gLSAzMikgKiAoNS85KTtcbiAgICAgIH1cblxuICAgIH0sXG4gICAgdm9sdW1lOiB7XG4gICAgICBtb2RpZmllcjogMC4xNTUwMDAzMTAwMDA2MixcbiAgICAgIHVEZWNpOiAxLFxuICAgICAgdU5hbWU6IFwiIGluPHN1cD4yPC9zdXA+XCIsXG4gICAgICB0b1U6IGZ1bmN0aW9uKG51bSkge1xuICAgICAgICByZXR1cm4gbnVtIC8gdGhpcy5tb2RpZmllcjtcbiAgICAgIH0sXG4gICAgICBtRGVjaTogMSxcbiAgICAgIG1OYW1lOiBcIiBjbTxzdXA+Mjwvc3VwPlwiLFxuICAgICAgdG9NOiBmdW5jdGlvbihudW0pIHtcbiAgICAgICAgcmV0dXJuIG51bSAqIHRoaXMubW9kaWZpZXI7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG5cblxuICAvKipcbiAgICogQWxsIHRoZSBmaWVsZHMgYW5kIHRoZWlyIGluZm9cbiAgICpcbiAgICogQHNlbGVjdG9yIEtpbmRhIG9idmlvdXNcbiAgICogQGNvbnZlcnNpb24gVGhlIHR5cGUgdG8gbWF0Y2ggdG8gdGhlIGNvbnZlcnNpb24gb2JqZWN0XG4gICAqIEBvcHRpb25zIEFuIG9iamVjdCB0aGF0IGNhbiBvdmVyd3JpdGUgY29udmVyc2lvbiBzZXR0aW5nc1xuICAgKi9cbiAgdmFyIGZpZWxkcyA9IFtcbiAgICAvL1NwZWNpZmljYXRpb25zIHRhYnNcbiAgICB7XG4gICAgICBzZWxlY3RvcjogXCIuZmllbGQtbmFtZS1maWVsZC1zZW5zb3ItbGVuZ3RoIC5maWVsZC1pdGVtXCIsXG4gICAgICBjb252ZXJzaW9uOiBcImxlbmd0aFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBzZWxlY3RvcjogXCIuZmllbGQtbmFtZS1maWVsZC1zZW5zaW5nLXNpemUgLmZpZWxkLWl0ZW1cIixcbiAgICAgIGNvbnZlcnNpb246IFwibGVuZ3RoXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIHNlbGVjdG9yOiBcIi5maWVsZC1uYW1lLWZpZWxkLW1heC1mb3JjZSAuZmllbGQtaXRlbVwiLFxuICAgICAgY29udmVyc2lvbjogXCJmb3JjZVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBzZWxlY3RvcjogXCIuZmllbGQtbmFtZS1maWVsZC10ZW1wZXJhdHVyZS1yYW5nZS1sb3cgLmZpZWxkLWl0ZW1cIixcbiAgICAgIGNvbnZlcnNpb246IFwidGVtcGVyYXR1cmVcIlxuICAgIH0sXG4gICAge1xuICAgICAgc2VsZWN0b3I6IFwiLmZpZWxkLW5hbWUtZmllbGQtdGVtcGVyYXR1cmUtcmFuZ2UtaGlnaCAuZmllbGQtaXRlbVwiLFxuICAgICAgY29udmVyc2lvbjogXCJ0ZW1wZXJhdHVyZVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBzZWxlY3RvcjogXCIuZmllbGQtbmFtZS1maWVsZC1tYXgtcHJlc3N1cmUgLmZpZWxkLWl0ZW1cIixcbiAgICAgIGNvbnZlcnNpb246IFwicHJlc3N1cmVcIlxuICAgIH0sXG4gICAge1xuICAgICAgc2VsZWN0b3I6IFwiLmZpZWxkLW5hbWUtZmllbGQtdGhpY2tuZXNzIC5maWVsZC1pdGVtXCIsXG4gICAgICBjb252ZXJzaW9uOiBcImxlbmd0aFwiLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBtRGVjaTogMyxcbiAgICAgICAgdURlY2k6IDNcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHNlbGVjdG9yOiBcIi5maWVsZC1uYW1lLWZpZWxkLXBpdGNoIC5maWVsZC1pdGVtXCIsXG4gICAgICBjb252ZXJzaW9uOiBcImxlbmd0aFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBzZWxlY3RvcjogXCIuZmllbGQtbmFtZS1maWVsZC1vdmVyYWxsLWxlbmd0aCAuZmllbGQtaXRlbVwiLFxuICAgICAgY29udmVyc2lvbjogXCJsZW5ndGhcIlxuICAgIH0sXG4gICAge1xuICAgICAgc2VsZWN0b3I6IFwiLmZpZWxkLW5hbWUtZmllbGQtb3ZlcmFsbC13aWR0aCAuZmllbGQtaXRlbVwiLFxuICAgICAgY29udmVyc2lvbjogXCJsZW5ndGhcIlxuICAgIH0sXG4gICAge1xuICAgICAgc2VsZWN0b3I6IFwiLmZpZWxkLW5hbWUtZmllbGQtdGFiLWxlbmd0aCAuZmllbGQtaXRlbVwiLFxuICAgICAgY29udmVyc2lvbjogXCJsZW5ndGhcIlxuICAgIH0sXG4gICAge1xuICAgICAgc2VsZWN0b3I6IFwiLmZpZWxkLW5hbWUtZmllbGQtbWF0cml4LWhlaWdodCAuZmllbGQtaXRlbVwiLFxuICAgICAgY29udmVyc2lvbjogXCJsZW5ndGhcIlxuICAgIH0sXG4gICAge1xuICAgICAgc2VsZWN0b3I6IFwiLmZpZWxkLW5hbWUtZmllbGQtbWF0cml4LXdpZHRoIC5maWVsZC1pdGVtXCIsXG4gICAgICBjb252ZXJzaW9uOiBcImxlbmd0aFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBzZWxlY3RvcjogXCIuZmllbGQtbmFtZS1maWVsZC1zZW5zZWwtZGVuc2l0eSAuZmllbGQtaXRlbVwiLFxuICAgICAgY29udmVyc2lvbjogXCJ2b2x1bWVcIlxuICAgIH0sXG4gICAge1xuICAgICAgc2VsZWN0b3I6IFwiLmZpZWxkLW5hbWUtZmllbGQtcm93LXdpZHRoIC5maWVsZC1pdGVtXCIsXG4gICAgICBjb252ZXJzaW9uOiBcImxlbmd0aFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBzZWxlY3RvcjogXCIuZmllbGQtbmFtZS1maWVsZC1yb3ctc3BhY2luZyAuZmllbGQtaXRlbVwiLFxuICAgICAgY29udmVyc2lvbjogXCJsZW5ndGhcIixcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgdURlY2k6IDNcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHNlbGVjdG9yOiBcIi5maWVsZC1uYW1lLWZpZWxkLWNvbHVtbi13aWR0aCAuZmllbGQtaXRlbVwiLFxuICAgICAgY29udmVyc2lvbjogXCJsZW5ndGhcIlxuICAgIH0sXG4gICAge1xuICAgICAgc2VsZWN0b3I6IFwiLmZpZWxkLW5hbWUtZmllbGQtY29sdW1uLXNwYWNpbmcgLmZpZWxkLWl0ZW1cIixcbiAgICAgIGNvbnZlcnNpb246IFwibGVuZ3RoXCIsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIHVEZWNpOiAzXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBzZWxlY3RvcjogXCIuZmllbGQtbmFtZS1maWVsZC1vdXRlci1tYXRyaXgtZGlhbWV0ZXIgLmZpZWxkLWl0ZW1cIixcbiAgICAgIGNvbnZlcnNpb246IFwibGVuZ3RoXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIHNlbGVjdG9yOiBcIi5maWVsZC1uYW1lLWZpZWxkLWlubmVyLW1hdHJpeC1kaWFtZXRlciAuZmllbGQtaXRlbVwiLFxuICAgICAgY29udmVyc2lvbjogXCJsZW5ndGhcIlxuICAgIH0sXG4gICAge1xuICAgICAgc2VsZWN0b3I6IFwiLmZpZWxkLW5hbWUtZmllbGQtc3Bva2Utd2lkdGggLmZpZWxkLWl0ZW1cIixcbiAgICAgIGNvbnZlcnNpb246IFwibGVuZ3RoXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIHNlbGVjdG9yOiBcIi5maWVsZC1uYW1lLWZpZWxkLXJpbmctd2lkdGggLmZpZWxkLWl0ZW1cIixcbiAgICAgIGNvbnZlcnNpb246IFwibGVuZ3RoXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIHNlbGVjdG9yOiBcIi5maWVsZC1uYW1lLWZpZWxkLXJpbmctc3BhY2luZyAuZmllbGQtaXRlbVwiLFxuICAgICAgY29udmVyc2lvbjogXCJsZW5ndGhcIlxuICAgIH0sXG4gICAgLy9Gb3JjZSBzZW5zb3JzIHRhYmxlc1xuICAgIHtcbiAgICAgIHNlbGVjdG9yOiBcIi52aWV3cy1maWVsZC1maWVsZC1zZW5zb3ItbGVuZ3RoIGxpXCIsXG4gICAgICBjb252ZXJzaW9uOiBcImxlbmd0aFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBzZWxlY3RvcjogXCJ0ZC52aWV3cy1maWVsZC1maWVsZC1zZW5zaW5nLXNpemVcIixcbiAgICAgIGNvbnZlcnNpb246IFwibGVuZ3RoXCIsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIHVEZWNpOiAzLFxuICAgICAgICBtRGVjaTogMlxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgc2VsZWN0b3I6IFwiLnZpZXdzLWZpZWxkLWZpZWxkLW1heC1mb3JjZSBsaVwiLFxuICAgICAgY29udmVyc2lvbjogXCJmb3JjZVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBzZWxlY3RvcjogXCJ0ZC52aWV3cy1maWVsZC1maWVsZC10ZW1wZXJhdHVyZS1yYW5nZS1sb3dcIixcbiAgICAgIGNvbnZlcnNpb246IFwidGVtcGVyYXR1cmVcIlxuICAgIH0sXG4gICAge1xuICAgICAgc2VsZWN0b3I6IFwidGQudmlld3MtZmllbGQtZmllbGQtdGVtcGVyYXR1cmUtcmFuZ2UtaGlnaFwiLFxuICAgICAgY29udmVyc2lvbjogXCJ0ZW1wZXJhdHVyZVwiXG4gICAgfVxuICBdOyAvL2Nsb3NlIGZpZWxkc1xuXG5cbiAgLy9Gb3JjZSBTZW5zb3IgU3RvcmUgRmllbGRzXG4gIHZhciBzdG9yZUZpZWxkcyA9IFtcbiAgICB7XG4gICAgICBzZWxlY3RvcjogJ1tuYW1lPVwiYXR0cmlidXRlc1tmaWVsZF9zdG9yZV9tYXhfc2Vuc29yX2xlbmd0aF1cIl0gb3B0aW9uJyxcbiAgICAgIGNvbnZlcnNpb246IFwibGVuZ3RoXCIsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICB1RGVjaTogMSxcbiAgICAgICAgdU5hbWU6ICdcIidcbiAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBzZWxlY3RvcjogJ1tuYW1lPVwiYXR0cmlidXRlc1tmaWVsZF9zdG9yZV9tYXhfZm9yY2VdXCJdIG9wdGlvbicsXG4gICAgICBjb252ZXJzaW9uOiBcImZvcmNlXCJcbiAgICB9XG4gIF07XG5cblxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBkaXNwbGF5IG51bWJlcnMgYmV0d2VlbiBtZXRyaWMgYW5kIHVzXG4gICAqIEBwYXJhbSB1bml0IC0gbGVuZ3RoLCAgcHJlc3N1cmUsIHRlbXBlcmF0dXJlLCB2b2x1bWUsIGZvcmNlXG4gICAqIEBwYXJhbSBkaXNwbGF5IC0gdXMgb3IgbWV0cmljXG4gICAqL1xuICAkLmZuLnVuaXRDb252ZXJ0ZXIgPSBmdW5jdGlvbihjb252ZXJzaW9uLCBvcHRpb25zLCBkaXNwbGF5KSB7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICogU2V0dGluZ3MgYW5kIHByb3BlcnRpZXNcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICAgIHZhciBlbGVtZW50ID0gdGhpcywgLy9Gb3Igd2hlbiB3ZSBnbyBvdXQgb2Ygc2NvcGVcbiAgICAgIHByb2Nlc3NlZENsYXNzID0gXCJ1bml0Q29udmVydGVkXCIsXG4gICAgICBzZXR0aW5ncyA9IHtcbiAgICAgICAgY29udmVyc2lvbjogY29udmVyc2lvbiwgLy9NdXN0IGJlIGluIGNvbnZlcnNpb25zIG9iaiBhYm92ZVxuICAgICAgICBkaXNwbGF5OiBcIlwiLCAvL21ldHJpYyBvciB1c1xuICAgICAgICBpbml0aWFsRGlzcGxheTogZGlzcGxheSB8fCBcInVzXCIsIC8vV2hhdCBpcyB0aGUgaW5pdGlhbCB0eXBlXG4gICAgICAgIHVWYWx1ZTogMCwgLy9Ib2xkcyB0aGUgdXMgbnVtYmVyXG4gICAgICAgIG1WYWx1ZTogMCAvL0hvbGRzIHRoZSBtZXRyaWMgbnVtYmVyXG4gICAgICB9O1xuXG4gICAgLy9JZiBubyBjb252ZXJzaW9uLCBjYW4ndCBkbyBhbnl0aGluZyAuIC4gLlxuICAgIGlmIChjb252ZXJzaW9uc1tzZXR0aW5ncy5jb252ZXJzaW9uXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZSA9IHNldHRpbmdzLmNvbnZlcnNpb24gKyBcIiBpcyBub3QgYSB2YWxpZCBjb252ZXJzaW9uIHR5cGUuXCI7XG4gICAgICB3aW5kb3cuY29uc29sZS53YXJuKGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyAuIC4gLiBvdGhlcndpc2UgYWRkIHRoZSBjb252ZXJzaW9uIHNldHRpbmdzIHRvIG91ciBnZW5lcmFsIHNldHRpbmdzXG4gICAgJC5leHRlbmQoc2V0dGluZ3MsIGNvbnZlcnNpb25zW3NldHRpbmdzLmNvbnZlcnNpb25dLCBvcHRpb25zKTtcblxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqIENoZWNrc1xuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gICAgLy9JZiBubyBpbnB1dCwgd2UgY2FuJ3QgZG8gYW55dGhpbmdcbiAgICBpZiAoc2V0SW5wdXQoKSA9PT0gMCkge1xuICAgICAgd2luZG93LmNvbnNvbGUud2FybihcInVuaXRDb252ZXJ0ZXI6IENvdWxkIG5vdCBmaW5kIGlucHV0LlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy9JZiBubyBodG1sLCB3ZSBjYW4ndCBkbyBhbnl0aGluZ1xuICAgIGlmIChlbGVtZW50Lmh0bWwoKSA9PT0gXCJcIiB8fCB0aGlzLmh0bWwoKSA9PT0gbnVsbCkge1xuICAgICAgd2luZG93LmNvbnNvbGUud2FybihcInVuaXRDb252ZXJ0ZXI6IEVsZW1lbnQgaGFzIG5vIGh0bWwuXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5oYXNDbGFzcyhwcm9jZXNzZWRDbGFzcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKiBNZXRob2RzXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICAvL1NldHMgdGhlIGh0bWwgb2YgdGhlIGZpZWxkIHRvIHRoZSBVUyBtZWFzdXJlbWVudFxuICAgIGZ1bmN0aW9uIHNldFVTKCkge1xuICAgICAgaWYgKHNldHRpbmdzLmRpc3BsYXkgIT09IFwidXNcIikge1xuICAgICAgICBlbGVtZW50Lmh0bWwoc2V0dGluZ3MudVZhbHVlICsgc2V0dGluZ3MudU5hbWUpO1xuICAgICAgICBzZXR0aW5ncy5kaXNwbGF5ID0gXCJ1c1wiO1xuICAgICAgfVxuICAgIH1cbiAgICAvL1NldHMgdGhlIGh0bWwgb2YgdGhlIGZpZWxkIHRvIHRoZSBtZXRyaWMgbWVhc3VyZW1lbnRcbiAgICBmdW5jdGlvbiBzZXRNZXRyaWMoKSB7XG4gICAgICBpZiAoc2V0dGluZ3MuZGlzcGxheSAhPT0gXCJtZXRyaWNcIikge1xuICAgICAgICBlbGVtZW50Lmh0bWwoc2V0dGluZ3MubVZhbHVlICsgc2V0dGluZ3MubU5hbWUpO1xuICAgICAgICBzZXR0aW5ncy5kaXNwbGF5ID0gXCJtZXRyaWNcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgLy9TZXRzIHRoZSBkaXNwbGF5LCBiYXNlZCBvbiB0aGUgcmFkaW8gdmFsdWVcbiAgICBmdW5jdGlvbiBzZXREaXNwbGF5KCkge1xuICAgICAgc3dpdGNoKGdldFJhZGlvVmFsdWUoKSkge1xuICAgICAgICBjYXNlIFwidXNcIjpcbiAgICAgICAgICBzZXRVUygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibWV0cmljXCI6XG4gICAgICAgICAgc2V0TWV0cmljKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdmFyIGUgPSBcInVuaXRDb252ZXJ0ZXI6IENvdWxkIG5vdCB1bmRlcnN0YW5kIHJhZGlvIHNlbGVjdGlvblwiO1xuICAgICAgICAgIHdpbmRvdy5jb25zb2xlLndhcm4oZSk7XG4gICAgICB9XG4gICAgICBlbGVtZW50LmFkZENsYXNzKHByb2Nlc3NlZENsYXNzKTtcbiAgICB9XG4gICAgLy9HZXRzIHRoZSBjdXJyZW50IHZhbHVlIGZyb20gdGhlIHJhZGlvc1xuICAgIGZ1bmN0aW9uIGdldFJhZGlvVmFsdWUoKSB7XG4gICAgICB2YXIgY2hlY2tlZCA9IGlucHV0LmZpbmQoXCJpbnB1dDpjaGVja2VkXCIpO1xuICAgICAgaWYgKGNoZWNrZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrZWQuYXR0cihcImlkXCIpID09PSBcIm1ldHJpY1JhZGlvXCIpIHtcbiAgICAgICAgcmV0dXJuIFwibWV0cmljXCI7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwidXNcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgLy9TdHJpcHMgbm9uLW51bWVyaWMgY2hhcmFjdGVycyBmcm9tIHN0cmluZ1xuICAgIGZ1bmN0aW9uIHN0cmlwTm9uTnVtZXJpYyhzdHIpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3RyICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHdpbmRvdy5jb25zb2xlLndhcm4oXCJzdHJpbmdOb25OdW1lcmljOiBcIiArIHN0ciArIFwiIGlzIG5vdCBhIHN0cmluZy5cIik7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1teXFxkLi1dL2csICcnKTtcbiAgICB9XG4gICAgLy9Jbml0aWFsIGxvZ2ljXG4gICAgZnVuY3Rpb24gX2luaXQoKSB7XG4gICAgICAvL0dldCB0aGUgaW5pdGlhbCBudW1iZXJzIGZyb20gdGhlIGh0bWxcbiAgICAgIHZhciBpbml0aWFsVmFsdWUgPSBwYXJzZUZsb2F0KHN0cmlwTm9uTnVtZXJpYyhlbGVtZW50Lmh0bWwoKSkpO1xuXG4gICAgICBpZiAoc2V0dGluZ3MuaW5pdGlhbERpc3BsYXkgPT09IFwidXNcIikge1xuICAgICAgICBzZXR0aW5ncy51VmFsdWUgPSBpbml0aWFsVmFsdWUudG9GaXhlZChzZXR0aW5ncy51RGVjaSk7XG4gICAgICAgIHNldHRpbmdzLm1WYWx1ZSA9IHNldHRpbmdzLnRvTShzZXR0aW5ncy51VmFsdWUpLnRvRml4ZWQoc2V0dGluZ3MubURlY2kpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHNldHRpbmdzLm1WYWx1ZSA9IGluaXRpYWxWYWx1ZS50b0ZpeGVkKHNldHRpbmdzLm1EZWNpKTtcbiAgICAgICAgc2V0dGluZ3MudVZhbHVlID0gc2V0dGluZ3MudG9VKHNldHRpbmdzLm1WYWx1ZSkudG9GaXhlZChzZXR0aW5ncy51RGVjaSk7XG4gICAgICB9XG4gICAgICBzZXREaXNwbGF5KCk7XG4gICAgICBpbnB1dC5vbihcImNoYW5nZVwiLCBzZXREaXNwbGF5KTtcbiAgICB9XG5cblxuICAgIC8vUnVuIGNvbnN0cnVjdG9yXG4gICAgX2luaXQoKTtcbiAgfTsgLy9jbG9zZSB1bml0Q29udmVydGVyXG5cblxuICAvKipcbiAgICogUnVucyB0aHJvdWdoIGEgZmllbGQgYXJyYXkgYW5kIGFwcGxpZXMgdGhlIGNvbnZlcnRlclxuICAgKi9cbiAgZnVuY3Rpb24gYXBwbHlDb252ZXJ0ZXIoZmllbGRBcnJheSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGRBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyICRmaWVsZCA9ICQoZmllbGRBcnJheVtpXS5zZWxlY3RvciksXG4gICAgICAgIGNvbnZlcnNpb24gPSBmaWVsZEFycmF5W2ldLmNvbnZlcnNpb24sXG4gICAgICAgIG9wdGlvbnMgPSBmaWVsZEFycmF5W2ldLm9wdGlvbnMgfHwge307XG5cbiAgICAgIGlmICgkZmllbGQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICRmaWVsZC5sZW5ndGg7IGorKykge1xuICAgICAgICAkKCRmaWVsZFtqXSkudW5pdENvbnZlcnRlcihjb252ZXJzaW9uLCBvcHRpb25zKTtcbiAgICAgIH0gLy9jbG9zZSBmb3IgJGZpZWxkLmxlbmd0aFxuICAgIH0gLy9jbG9zZSBmaWVsZHMubGVuZ3RoXG4gIH1cblxuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgZm9ybSBmcm9tIHRoZSBzcGVjaWZpY2F0aW9ucyB0YWIgdG8gdGhlIGNvbW1lcmNlIGZvcm0sXG4gICAqL1xuICBmdW5jdGlvbiBjb252ZXJ0ZXJJbnRvQ29tbWVyY2VGb3JtKGlucHV0KSB7XG4gICAgdmFyIGNvbW1lcmNlRm9ybSA9ICQoXCIuY29tbWVyY2UtYWRkLXRvLWNhcnRcIik7XG4gICAgaWYgKGNvbW1lcmNlRm9ybS5sZW5ndGggIT09IDAgJiYgaW5wdXQubGVuZ3RoICE9PSAwKSB7XG4gICAgICBpbnB1dC5pbnNlcnRCZWZvcmUoY29tbWVyY2VGb3JtKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vRmlyZSB3aGVuIGRvbVJlYWR5IVxuICAkKGRvY3VtZW50KS5vbihcInJlYWR5XCIsIGZ1bmN0aW9uKCkge1xuICAgIGlmIChzZXRJbnB1dCgpICE9PSAwKSB7XG4gICAgICBjb252ZXJ0ZXJJbnRvQ29tbWVyY2VGb3JtKGlucHV0KTtcbiAgICAgIGFwcGx5Q29udmVydGVyKGZpZWxkcyk7XG4gICAgfVxuICB9KTsgLy9jbG9zZSBkb21SZWFkeVxuXG4gIC8vU3RvcmUgZmllbGRzIGdldCByZWZyZXNoZWQgd2l0aCBBSkFYLCBzbyB3ZSBuZWVkIGEgYmVoYXZpb3JcbiAgRHJ1cGFsLmJlaGF2aW9ycy5zdG9yZUZpZWxkQ29udmVydGVyID0ge1xuICAgIGF0dGFjaDogZnVuY3Rpb24oY29udGV4dCwgc2V0dGluZ3MpIHtcbiAgICAgIGlmIChzZXRJbnB1dCgpICE9PSAwKSB7XG4gICAgICAgIGFwcGx5Q29udmVydGVyKHN0b3JlRmllbGRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pKGpRdWVyeSk7IiwiLyoqXHJcbiAqIEBmaWxlXHJcbiAqIFNjcmlwdCBnaXZlbiB0byB1cyBieSBUZWtzY2FuIHRvIGluY2x1ZGUgaW4gc2l0ZS5cclxuICogSXQgaGFzIHRvIGRvIHRoZSB1dG1fKiBmaWVsZHMgaW4gTWFya2V0b1xyXG4gKi9cclxuKGZ1bmN0aW9uKCQpIHtcclxuICBmdW5jdGlvbiBnZXRVVE1WYXJzKCkge1xyXG4gICAgdmFyIHZhcnMgPSBbXSxcclxuICAgICAgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxyXG4gICAgICBoYXNoZXMgPSBocmVmLnNsaWNlKGhyZWYuaW5kZXhPZignPycpICsgMSkuc3BsaXQoJyYnKTtcclxuXHJcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgaGFzaGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChoYXNoZXNbaV0uaW5kZXhPZigndXRtXycpID09IDAgKSB7XHJcbiAgICAgICAgdmFycy5wdXNoKGhhc2hlc1tpXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YXJzO1xyXG4gIH1cclxuXHJcbiAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBTYXZlIGFueSB1dG1fKiBwYXJhbWV0ZXJzIHdlIGZpbmRcclxuICAgIC8vIFNvIHdlIGNhbiBhdHRyaWJ1dGUgdG8gdGhlIG9yaWdpbmFsIGNhbXBhaWduXHJcbiAgICB2YXIgdXRtcyA9IGdldFVUTVZhcnMoKTtcclxuICAgIGlmICggdXRtcy5sZW5ndGggPiAwICkgIHtcclxuICAgICAgdmFyIGNvb2tpZWRhdGEgPSBcIkxNdXRtPVwiK2VuY29kZVVSSUNvbXBvbmVudCh1dG1zLmpvaW4oXCImXCIpKStcIjsgcGF0aD0vOyBkb21haW49LnRla3NjYW4uY29tXCI7XHJcbiAgICAgIGRvY3VtZW50LmNvb2tpZT1jb29raWVkYXRhO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59KShqUXVlcnkpO1xyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9